{"version":3,"sources":["components/theme/vertical-divider/VerticalDivider.tsx","components/general/footer/Footer.tsx","hooks/useKeyboardListener.tsx","constants/LocalStorageKeys.ts","services/LocalStorageService.ts","stores/AffiliateStore.ts","stores/CampaignSettingStore.ts","config/AppSettings/ProdSettings.ts","config/AppSettings/SettingsFactory.ts","exceptions/AlgoSupervisionExceptions.ts","models/ApiErrorSchema.ts","services/BaseService.ts","services/operation/CampaignService.ts","stores/CampaignStore.ts","services/operation/CompanyService.ts","stores/CompanyStore.ts","stores/CompanySettingStore.ts","stores/GroupStore.ts","stores/IndeedStore.ts","services/notifications/NotificationService.ts","stores/NotificationStore.ts","components/publisher-selection/mock-data/vendors-list.ts","models/publisher-selection/PublisherSelectionDialog.ts","stores/PublisherSelectionStore.ts","models/BreadCrumb.ts","constants/RoutePaths.ts","models/RouteModel.ts","routes/pages/AccessDeniedPage.tsx","hooks/useOnInit.tsx","hooks/useOnInitAsync.tsx","hooks/useSetCurrentRoute.tsx","hooks/usePageInitialization.tsx","services/campaign-setting/CampaignSettingAuditService.ts","models/campaign-track-system/CampaignSettingsStatus.ts","components/campaign-track-system/CampaignSettingAuditTable.actions.tsx","utils/DateHelpers.ts","components/general/supervision-table/Table.dto.ts","components/campaign-track-system/CampaignSettingsAudit.dto.ts","components/general/supervision-table/ActionsColumn.tsx","components/general/supervision-table/SearchColumn.tsx","components/general/supervision-table/ColumnsBuilder.ts","components/general/supervision-table/RightClickDropdown.tsx","components/general/supervision-table/TableFooter.tsx","components/general/supervision-table/SupervisionTable.tsx","components/campaign-track-system/CampaignSettingAuditTable.tsx","services/campaign-setting/CampaignSettingTypeService.ts","routes/pages/campaign-track-system/helpers/CampaignSettingContextInitializers.ts","routes/pages/supervision/breadcrumbs/supervision.breadcrumbs.tsx","routes/pages/campaign-track-system/helpers/CampaignSetting.breadcrumbs.tsx","services/users/UserService.ts","components/general/loader/Loader.tsx","components/general/inputs/SelectUserInput.tsx","components/campaign-track-system/UploadCsvFile.tsx","routes/pages/campaign-track-system/CampaignTrackAuditPage.tsx","components/campaign-track-system/AuditCampaignForm.tsx","routes/pages/campaign-track-system/CampaignTrackEditAuditPage.tsx","models/users/EActionTypes.ts","services/actions/UserActionService.ts","components/actions/UserActionsTable.actions.tsx","components/actions/ELevelTypes.ts","components/actions/UserActionsTable.dto.ts","components/actions/UserActionsTable.tsx","components/general/inputs/SupervisionAutoComplete.tsx","services/actions/ActionTypeService.ts","routes/pages/actions/UserActionsTablePage.tsx","models/indeed-manager/IndeedCampaignBudgetType.ts","models/indeed-manager/IndeedCampaignObjectiveType.ts","models/indeed-manager/IndeedCreateCampaignEventPayload.ts","models/indeed-manager/IndeedEndDateType.ts","services/indeed/IndeedService.ts","models/indeed-manager/IndeedBudgetFirstMonthBehavior.ts","components/indeed-manager/CampaignBudgetInputs.tsx","models/indeed-manager/IndeedCampaignStatus.ts","components/indeed-manager/CampaignDetailsInputs.tsx","services/operation/JobService.ts","utils/NumbersHelper.ts","components/indeed-manager/IndeedJobsToCampaignTransfer.tsx","components/indeed-manager/IndeedAddCampaignForm.tsx","routes/pages/indeed-manager/helpers/IndeedContextInitializers.ts","routes/pages/indeed-manager/helpers/IndeedManager.breadcrumbs.tsx","routes/pages/indeed-manager/IndeedAddCampaignPage.tsx","models/indeed-manager/IndeedAttachJobsToCampaignEventPayload.ts","components/indeed-manager/IndeedAttachJobsForm.tsx","routes/pages/indeed-manager/IndeedAttachJobsToCampaignPage.tsx","models/operation/GetJobsByIdApiDto.ts","components/indeed-manager/IndeedJobsTable.dto.ts","components/indeed-manager/IndeedJobsTable.tsx","routes/pages/indeed-manager/IndeedCampaignJobsPage.tsx","constants/IAM.ts","components/indeed-manager/IndeedCampaignsTable.actions.tsx","components/indeed-manager/IndeedCampaignsTable.dto.ts","components/indeed-manager/IndeedCampaignsTable.tsx","services/indeed/IndeedStrategyManagementService.ts","components/indeed-manager/strategy/IndeedStrategyCard.tsx","models/indeed-manager/strategy/IndeedCampaignObjectiveType.ts","components/indeed-manager/strategy/IndeedStrategyForm.tsx","components/indeed-manager/strategy/IndeedStrategyManagement.tsx","hooks/useOnPoller.tsx","components/attributes-management/Styles.ts","models/indeed-manager/SubAccountStatusId.ts","components/indeed-manager/IndeedSubAccountStatus.tsx","routes/pages/indeed-manager/IndeedCampaignPage.tsx","models/indeed-manager/IndeedUpdateCampaignBudgetEventPayload.ts","models/indeed-manager/IndeedUpdateCampaignEventPayload.ts","components/indeed-manager/IndeedEditCampaignForm.tsx","routes/pages/indeed-manager/IndeedEditCampaignPage.tsx","services/linkedin/LinkedInStrategyManagementService.ts","models/linkedin-manager/strategy/LinkedInBudgetLevel.ts","components/linkedin-manager/strategy/LinkedInStrategyForm.tsx","components/linkedin-manager/strategy/LinkedInStrategyCard.tsx","components/linkedin-manager/strategy/LinkedInStrategyManagement.tsx","routes/pages/linkedin-manager/helpers/LinkedInManager.breadcrumbs.tsx","components/linkedin-manager/LinkedInChildApplication.tsx","services/linkedin/LinkedInService.ts","routes/pages/linkedin-manager/helpers/LinkedInContextInitializers.ts","routes/pages/linkedin-manager/LinkedInPage.tsx","services/AuthService.ts","routes/pages/Login/SupervisionTitle.tsx","routes/pages/Login/LoginPage.tsx","utils/EmailUtils.ts","constants/CookieConstants.ts","routes/pages/LogoutPage.tsx","routes/pages/NotFoundPage.tsx","components/publisher-selection/entity-page/EntityPage.tsx","components/publisher-selection/entity-page-autocomplete/EntityPageAutoComplete.tsx","components/publisher-selection/vendor-drawer-list/VendorDrawerList.styles.tsx","components/publisher-selection/vendor-drawer-list/VendorDrawerList.tsx","components/publisher-selection/vendor-drawer-autocomplete/VendorDrawerAutocomplete.tsx","components/publisher-selection/vendor-drawer/VendorDrawer.tsx","components/publisher-selection/mock-data/campaigns-list.ts","components/publisher-selection/mock-data/jobs-list.ts","components/publisher-selection/publisher-selection-dialog/PublisherSelectionDialog.tsx","routes/pages/publisher-selection/ChooseCutOffPage.tsx","components/general/shortcuts/ShortcutsData.ts","components/general/shortcuts/ShortCutItem.tsx","routes/pages/ShortCutsManualPage.tsx","assets/styles/theme.ts","components/supervision/campaigns/CampaignSelectInput.tsx","components/supervision/campaigns/CampaignsTable.actions.ts","components/supervision/campaigns/CampaignTable.dto.ts","components/supervision/campaigns/CampaignsTable.tsx","components/supervision/campaigns/CampaignsTableIconActions.tsx","routes/pages/supervision/CampaignsPage.tsx","routes/pages/campaign-track-system/CampaignTrackAddAuditPage.tsx","models/groups/BudgetType.ts","models/groups/GroupStatus.ts","components/groups/GroupTable.dto.ts","services/groups/GroupsService.ts","components/groups/GroupTable.actions.tsx","components/groups/GroupsTable.tsx","routes/pages/groups/helpers/GroupsBreadCrumbs.tsx","services/groups/GroupJobsService.ts","routes/pages/groups/helpers/GroupsContextInitializers .ts","routes/pages/groups/GroupsPage.tsx","components/jobs/JobTransfer.tsx","components/groups/GroupAddForm.tsx","routes/pages/groups/GroupsAddPage.tsx","components/groups/GroupJobsTable.dto.tsx","components/groups/GroupsJobsTable.tsx","routes/pages/groups/GroupJobsPage.tsx","components/groups/GroupsEditForm.tsx","routes/pages/groups/GroupsEditPage.tsx","components/groups/GroupsAttachJobsForm.tsx","routes/pages/groups/GroupsAttachJobsPage.tsx","models/vendor-management/ClassificationType.ts","components/vendor-management/SearchColumn.tsx","models/vendor-management/settings/ELevelTypes.ts","components/vendor-management/VendorManagement.tsx","utils/StringHelper.ts","components/vendor-management/VendorSelectInput.tsx","services/vendor-management/AffiliateVendorService.ts","services/vendor-management/CampaignVendorService.ts","services/vendor-management/CompanyVendorService.ts","services/vendor-management/GroupVendorService.ts","routes/pages/vendor-management/helpers/VendorManagmentContextInitializers.ts","routes/pages/vendor-management/helpers/ClassificationTypeValidation.ts","components/vendor-management/VendorManagmentMode.tsx","routes/pages/vendor-management/helpers/VendorManagmentBreadCrumbs.tsx","models/manual-actions/ManualActionRequestSource.ts","routes/pages/vendor-management/CampaignVendorPage.tsx","components/vendor-management/ControlPanael.tsx","components/vendor-management/Commands.tsx","routes/pages/vendor-management/helpers/VendorManagmentStateContextInitializers.ts","routes/pages/vendor-management/helpers/ReportPage.tsx","routes/pages/vendor-management/GroupVendorPage.tsx","components/supervision/companies/CompaniesTable.actions.ts","components/supervision/companies/CompanyTable.dto.ts","components/supervision/companies/CompaniesTable.tsx","routes/pages/supervision/CompaniesPage.tsx","routes/pages/vendor-management/CompanyVendorPage.tsx","services/company-settings/CompanySettingAuditService.ts","models/company-track-system/CompanySettingsStatus.ts","components/company-track-system/CompanySettingAuditTable.actions.tsx","components/company-track-system/CompanySettingsAudit.dto.ts","components/company-track-system/CompanySettingAuditTable.tsx","services/company-settings/CompanySettingTypeService.ts","routes/pages/company-track-system/helpers/CompanySettingContextInitializers.ts","routes/pages/company-track-system/helpers/CompanySetting.breadcrumbs.tsx","components/company-track-system/UploadCsvFile.tsx","routes/pages/company-track-system/CompanyTrackAuditPage.tsx","services/affiliates/AffiliateService.ts","hooks/usePageInitializationAffiliate.tsx","routes/pages/vendor-management/AffiliateVendorPage.tsx","components/company-track-system/AuditCompanyForm.tsx","routes/pages/company-track-system/CompanyTrackEditAuditPage.tsx","routes/pages/company-track-system/CompanyTrackAddAuditPage.tsx","components/supervision/affiliates/AffiliatesTable.action.ts","components/supervision/affiliates/AffiliateTable.dto.ts","components/supervision/affiliates/AffiliatesTable.tsx","routes/pages/supervision/AffiliatesPage.tsx","components/explainability/JobState.dto.ts","components/explainability/JobVendorState.dto.ts","models/explainability/JobSerachingType.ts","components/explainability/ExplainabilityTable.tsx","components/supervision/companies/CompanySelectInput.tsx","services/explainability/JobsStateService.ts","components/explainability/JobSelectInput.tsx","components/explainability/VendorSelect.tsx","services/explainability/ExplainabilityService.ts","services/explainability/JobVendorStateService.ts","components/explainability/SearchJobState.tsx","routes/pages/explainability/ExplainabilityMainPage.tsx","models/company-attributes/attributes-types/EAppGoalMode.ts","models/company-attributes/attributes-types/EPacingMode.ts","components/attributes-management/Caps.tsx","components/attributes-management/AlgoModes.tsx","services/attributes-management/CompanyAttributesService.ts","services/attributes-management/CompanyPreference.ts","models/company-attributes/attributes-types/EPerMode.ts","routes/pages/attributes-management/heplers/AttributesManagmentContextInitializers.ts","models/company-attributes/CompanyAttributesAggregation.ts","routes/pages/attributes-management/heplers/AttributesManagmentBreadCrumbs.tsx","components/attributes-management/Comments.tsx","components/attributes-management/AttributeLimit.tsx","components/attributes-management/AttributePriorityLimit.tsx","components/attributes-management/CampaignRules.tsx","routes/pages/attributes-management/CompanyAttributesPage.tsx","routes/routes.tsx","services/RouteManager.ts","stores/UIStore.ts","stores/UserStore.ts","stores/VendorManagementStore.ts","stores/ExplainabilityStore.ts","stores/AttributesManagementStore.ts","stores/LinkedInStore.ts","stores/RootStore.ts","stores/RootStoreContext.tsx","utils/Guid.ts","components/general/app-bread-crumbs/AppBreadCrumbs.tsx","components/general/page-header/PageHeader.styles.tsx","components/general/page-header/PageHeader.tsx","components/general/popup/SupervisionPopUp.tsx","components/theme/PandoLogicLogo.tsx","assets/images/pandologic-logo.png","assets/images/pandologic-logo-mini.png","assets/images/plogic_Logo_W.png","components/general/side-menu/components/NotificationsList/NotificationsList.tsx","components/general/side-menu/components/UserInformation/UserInformation.tsx","components/general/side-menu/SideMenu.styles.tsx","components/general/side-menu/SideMenuData.ts","components/general/side-menu/SideMenu.tsx","hoc/PrivateRoute.tsx","routes/index.tsx","utils/SeedUserData.ts","App.tsx","components/general/ErrorHandlerComponent.tsx","config/MuiTheme.ts","reportWebVitals.ts","index.tsx"],"names":["VerticalDivider","props","height","mx","_jsx","Box","children","className","style","Footer","_jsxs","py","px","display","justifyContent","alignItems","component","Date","getFullYear","href","target","useKeyboardListener","id","pattern","callBack","useEffectDependencyMutator","setUseEffectDependencyMutator","useState","useEffect","functionReference","keyboardListenerHandler","callback","_ref","event","window","push","key","baseArray","subArray","join","toLowerCase","isSubArrayEqualArray","isSubArrayContainedInArray","startsWith","addEventListener","removeEventListener","LocalStorageKeys","SetItemString","value","localStorage","setItem","SetItemObject","JSON","stringify","GetItemString","item","getItem","GetItemObject","parse","AffiliateStore","_class","constructor","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","makeObservable","this","selectedAffiliate","LocalStorageService","SearchedAffiliates","undefined","SelectedAffiliate","affiliatesIds","_this$allAffiliates","affiliates","allAffiliates","filter","affiliate","includes","affiliateId","_applyDecoratedDescriptor","prototype","observable","configurable","enumerable","writable","initializer","action","Object","getOwnPropertyDescriptor","CampaignSettingStore","_descriptor4","_descriptor5","campaignSettingTypes","CampaignSettingTypes","campaignSettingTypeValueOptions","CampaignSettingTypeValueOptions","CampaignSettingsAudits","CampaignSettingsAuditsResponse","campaignSettingAudit","SelectedCampaignSettingAudit","updateOperationState","ProdSettings","serverUrl","notificationServerUrl","vendorManagementUrl","explainabilityServiceUrl","attributesManagementServiceUrl","settings","AlgoSupervisionException","Error","message","super","PageNotFoundexception","FetchError","IsApiErrorSchema","errorMessage","apiError","errorCode","retryable","UnauthorizedError","BaseService","controllerPath","ConstructRequestHeaders","requestHeaders","Cookies","get","concat","relativeUrl","response","axios","buildUrl","headers","withCredentials","IsSuccessfulResponse","data","CreateUnsuccessfulFetchError","error","CreateError","payload","isArrayBufferResponseType","arguments","length","options","post","patch","put","delete","status","console","statusText","campaignService","async","campaignId","Get","GetManyByIdsRequest","Post","paginationOptions","CampaignStore","campaigns","SearchedCampaigns","ids","GetManyByIdsAsync","campaign","SelectedCampaign","companyService","companyId","CompanyStore","selectedCompany","SearchedCompanies","SelectedCompany","companies","company","CompanySettingStore","companySettingTypes","CompanySettingTypes","companySettingTypeValueOptions","CompanySettingTypeValueOptions","CompanySettingsAudits","CompanySettingsAuditsResponse","companySettingAudit","SelectedCompanySettingAudit","GroupStore","Groups","GroupsResponse","GroupJobs","GroupJobsResponse","SelectedGroup","GroupBudgetBalance","campaignBudget","campaignBalance","IndeedStore","indeedCampaign","SelectedIndeedCampaign","plIndeedData","PLCampaignData","Company","state","IsDataLoading","indeedSubAccount","notificationId","updateNotificationRequest","seenAt","toISOString","Put","NotificationStore","notifications","NotificationService","GetAll","Notifications","vendorsData","vendors","PublisherSelectionDialog","Conflicts","IsOn","Reset","Vendor","actionType","Set","vendor","conflicts","PublisherSelectionStore","_descriptor6","_descriptor7","SetMockActiveEntityType","entityType","MockActiveEntityType","AddEntityToDrillDownList","entity","MockEntityDrillDownList","SetVendorsForEntity","VendorsForEntity","HandleVendorAction","vendorIndex","findIndex","x","vendorId","isCutOff","operationTypeId","map","index","SetSelectedPublisherActionType","SelectedPublisherActionType","SetSelectedVendor","SelectedVendor","SetSelectedEntity","SelectedEntity","RemoveSelectedEntity","BreadCrumb","breadCrumbText","path","clickHandler","RoutesPaths","Supervision","prefix","CompaniesPrefix","Companies","Campaigns","Affiliates","LinkedInRoutes","StrategyRoute","BuildStrategyRoute","replace","toString","IndeedRoutes","CampaignRoute","BuildCampaignRoute","AddCampaign","BuildAddCampaign","CampaignJobsRoute","BuildCampaignJobsRoute","indeedCampaignId","AttachJobsToIndeedCampaign","BuildAttachJobsToIndeedCampaign","EditIndeedCampaign","BuildEditIndeedCampaign","CompanyTrackSystemRoutes","CompanySettingsRoute","BuildCompanyRoute","EditCompanySettingAudit","BuildEditCompanySettingAudit","auditId","AddCompanySettingAudit","BuildAddCompanySettingAudit","CampaignTrackSystemRoutes","CampaignSettingsRoute","EditCampaignSettingAudit","BuildEditCampaignSettingAudit","AddCampaignSettingAudit","BuildAddCampaignSettingAudit","GroupsRoutes","GroupRoute","BuildGroupRoute","AddGroup","BuildAddGroup","GroupJobsRoute","BuildGroupJobsRoute","groupId","EditGroup","BuildEditGroup","AttachJobsToGroup","BuildAttachJobsToGroup","VendorManagementRoutes","AffiliateVendorRoute","BuildAffiliateVendorManagementRoute","CompanyVendorRoute","BuildCompanyVendorManagementRoute","CampaignVendorRoute","BuildCampaignVendorManagementRoute","GroupVendorRoute","BuildGroupVendorManagementRoute","AttributesManagementRoutes","CompanyAttributesRoute","BuildCompanyAttributesRouteManagementRoute","Explainability","JobExplainabilityRoute","PublisherSelection","ChooseCutOff","Analytics","Actions","Table","Settings","ShortCutsManual","Root","Index","NotFound","AccessDenied","Login","Logout","RouteModel","routePath","renderComponent","mainTitle","breadCrumbsPrefix","isAutoRouteSetup","uuidv4","AccessDeniedPage","generateLocks","lock","document","createElement","position","Math","round","random","y","generatePosition","innerHTML","top","left","classList","body","appendChild","setTimeout","opacity","add","parentElement","removeChild","setInterval","htmlDom","querySelector","margin","padding","overflow","useOnInit","useOnInitAsync","dependencyArray","useSetCurrentRoute","currentLocation","useLocation","uiStore","useContext","RootStoreContext","SetCurrentRoute","pathname","usePageInitialization","initializeConfig","campaignMatch","useParams","companyMatch","history","useHistory","companyStore","campaignStore","pageTitle","SetPageTitle","pageBreadCrumbs","AddBreadCrumbs","onCallback","onInitAsync","SetIsWebsiteLoading","GetCompanyById","Number","SetSelectedCompany","onCompanyContextCallBack","err","GetById","SetSelectedCampaign","campaignSettingAuditService","auditUpdateModel","campaignSettingsAuditCreateModel","Delete","file","userId","fromData","FormData","append","getActionsRequest","queryString","optionTypeId","from","to","url","CampaignSettingsStatus","Text","Typography","CampaignSettingActionsBuilder","campaignSettingStore","text","_campaignSettingStore","SetSelectedCampaignSettingAudit","find","Icon","FiEdit","isDisplayed","popupBody","strong","campaignName","SetPopUp","title","okClickHandler","DeleteCampaignSettingsAudit","auditIndex","Removed","success","okButtonText","RiDeleteBin7Line","dateFormat","dateTimeFormat","minDate","moment","utc","FormatDate","date","format","TableDto","_id","CampaignSettingsAuditDto","type","caseNumber","userName","comment","campaignSettingsAudit","creationDate","BuildActionsColumn","columnOptions","rowActionSettings","render","record","actions","ml","cursor","onClick","Tooltip","placement","SearchColumn","dataIndex","_dataIndex","_searchInput","handleSearch","selectedKeys","confirm","searchText","searchColumn","handleReset","clearFilters","CreateColumn","filterDropdown","setSelectedKeys","Input","ref","node","placeholder","onChange","e","onPressEnter","marginBottom","Space","Button","icon","SearchOutlined","size","width","filterIcon","filtered","color","onFilter","recordKeyValue","onFilterDropdownVisibleChange","visible","select","Highlighter","highlightStyle","backgroundColor","searchWords","autoEscape","textToHighlight","BuildColumnsFromSchema","categoricalColumns","Reflect","ownKeys","dataType","ParseDataType","reduce","prev","cur","toUpperCase","match","some","c","column","_value$match","IsANumberWithPrefixOrPostfix","isValid","IsADateTime","defaultDropdownCoordinates","observer","rightClickData","dropDownMenu","_Fragment","dropdownMenu","Menu","clickCoordinates","yPosition","xPosition","clickedRowData","Item","Dropdown","arrow","overlay","FillRestOfCellsEmpty","tableColumns","_","i","Summary","Cell","dataSource","pageData","fixed","Row","SupervisionTable","tableRowSelection","expandableDataSource","expandableActionSettings","isExpendable","isChild","isShowSizeChanger","expandableDataSources","Array","expandedRowKeys","setExpandedRowKeys","setRightClickData","selectionType","setSelectionType","BuildColumns","showActionsOnLastColumn","showActionsOnRightClick","RightClickDropdown","rowSelection","onRow","rowIndex","onContextMenu","preventDefault","clientX","clientY","rowClassName","columns","tableColumn","PopulateColumnActions","extractNumber","_value$toString$match","_value$toString","sorter","a","b","categoricalColumnOptions","filters","possibleValues","hasOwnProperty","filteredValue","defaultFilteredValue","extractDateValueSinceUnixEpoch","unix","expandable","expandedRowRender","rowExpandable","pagination","showSizeChanger","extra","summary","TableFooter","campaignAudits","Empty","marginTop","description","MapFromCampaignSettingsAudit","campaignSettingTypeService","campaignSettingTypeId","CampaignSettingContextInitializers","_auditData","GetFilteredCampaignSettingsAudits","SetCampaignSettingsAudits","_settingTypesData","GetCampaignSettingTypes","SetCampaignSettingTypes","SupervisionBreadcrumbs","affiliateName","companyName","CampaignSettingBreadCrumbs","CampaignSetting","CampaignSettingAudit","CampaignName","campaignSettingAuditId","userService","email","Loader","createStyles","transform","Spin","tip","defaultValue","onClear","users","setUsers","usersFiltered","setUsersFiltered","isLoading","setIsLoading","_users","displayValue","user","name","AutoComplete","onSelect","selectedUser","onSearch","allowClear","UploadCsvFile","uploadDisabled","setUploadDisabled","userStore","infoFile","setInfoFile","gutter","sx","Upload","onRemove","customRequest","info","accept","Col","disabled","UploadOutlined","shape","UploadFile","User","then","isError","onError","onSuccess","marginLeft","filterSettings","setFilterSettings","userInputValue","setUserInputValue","typeValue","setTypeValue","onCampaignContextCallBack","campaignID","typeOptions","settingType","SelectUserInput","selectedType","DatePicker","RangePicker","initialDateValue","audits","AuditTable","Link","BiPlusCircle","marginRight","layout","labelCol","span","layoutType","layoutValueOptionlabel","campaignAuditId","setSelectedType","valueOptionTypes","setValueOptionTypes","selectedValueOption","setSelectedValueOption","setCaseNumber","setComment","campaignSettingTypeTextValue","setCampaignSettingTypeTextValue","setDate","now","setTypeOptions","setUpdateState","cleanUpState","_campaignSettingStore2","selectedAudit","typeRes","Form","Group","Title","level","label","rules","required","valueOptions","GetSettingTypeValueOptionsPerType","filterOption","inputValue","option","_value","indexOf","valueOption","_value2","dateInput","dateString","TimePicker","time","timeString","TextArea","rows","wrapperCol","offset","auditCreateModel","Active","CampaignSettingAuditService","UpdateCampaignSettingsAudit","CreateCampaignSettingsAudit","CampaignTrackEditAuditPage","SetupdateOperationState","AuditCampaignForm","EActionTypes","userActionService","createRequest","actionTypeIds","UserActionsTableBuilder","AiOutlineFileText","_userAction$data","userAction","userActionDto","hideCancelButton","ELevelTypes","UserActionsTableDto","entityId","entityLevel","userActionType","timeStamp","userActions","SupervisionAutoComplete","optionsToAutoCompleteMapFunction","onSelectHandle","initialValue","placeHolder","setSearchText","filteredOptions","setFilteredOptions","selectedOption","actionTypeService","setUserActions","actionTypes","setActionTypes","GetActionsFiltered","acionType","initialActionTypeValue","UserActionsTable","IndeedCampaignBudgetType","IndeedCampaignObjectiveType","INDEED_CAMPAIGN_OBJECTIVE_DEFAULT_VALUE","BALANCE","IndeedCreateCampaignEventPayload","jobsList","startDate","pandoCampaignId","pandoCompanyId","objective","jobsSourceName","budgetFirstMonthBehavior","fixedEndDate","targetEndDate","budgetOnetimeLimit","budgetMonthlyLimit","IndeedEndDateType","indeedService","pandoLogicCampaignId","createCampaignEventPayload","apiResponse","updateCampaignEventPayload","Patch","updateCampaignBudgetEventPayload","attachJobsToCampaignEventPayload","IndeedBudgetFirstMonthBehavior","Option","Select","CampaignBudgetInputs","isStartDateEditable","budgetLimitTypeInitialValue","budgetLimitType","setBudgetLimitType","disableDateBeforeToday","current","endOf","selectedCampaignType","Fixed","Target","tooltip","disabledDate","val","onOk","OneTime","validator","ruleObject","Promise","reject","resolve","StartNowProratedAmount","StartNowFullAmount","StartNextMonthFullAmount","IndeedCampaignStatus","CampaignDetailsInputs","isStatusEditable","isCampaignObjectiveTypeEditable","campaignObjectiveTypeDefaultValue","campaignObjectiveType","setCampaignObjectiveType","isCampaignTargetInputDisabled","MAXIMUM","Paused","Deleted","TARGET_APPLICATIONS","TARGET_COST_PER_APPLICATION","jobService","paginationParams","limit","getJobsByIdApiDto","getCountRequest","isNumber","isNaN","plCampaignId","onJobsLoad","hasOptionsLoaded","setHasOptionsLoaded","jobOptions","setJobOptions","selectedJobIds","setSelectedJobIds","indeedStore","jobsCount","GetCountAsync","tasks","GetJobsByCampaignIdPagination","_jobs","all","GetIndeedCampaignById","indeedJobs","jobsInIndeedCampaignAndPandoCampaign","_indeedCampaign$indee","indeedJob","jobId","job","getJobLocation","jobLocation","cityName","stateShortName","Transfer","showSearch","searchByJobId","RegExp","test","isJobIdsInput","jobIds","searchByJobIdsMultiple","split","trim","_getJobLocation$toLow","_option$extJobTitleTe","_option$extJobTitleTe2","extJobTitleText","searchByJobTitleTextOrLocation","targetKeys","jobIdsRightSide","direction","searchValue","validateMessages","types","number","range","IndeedAddCampaignForm","campaignJobsIds","setCampaignJobsIds","onFinish","CreateCampaign","formState","campaignStatus","campaignObjective","indeedCampaignSourceInfo","sourceName","deriveEndDate","budgetType","endDate","deriveBudgetLimit","budgetLimitSettings","budgetLimitValue","Monthly","initialValues","IndeedJobsToCampaignTransfer","htmlType","currentType","formBudgetLimitSettings","wantedBudgetLimitSettings","IndeedContextInitializers","pLCampaignId","SetIsDataLoading","_indeedData","GetIndeedCampaignsByPLCampaignId","SetPLCampaignData","GetCompanyByCampaignId","SetCompany","SetSelectedIndeedCampaign","GetIndeedSubAccountByCompanyId","SetIndeedSubAccount","IndeedBreadcrumbs","indeedCampaignName","CampaignJobs","EditCampaign","_indeedStore$PLCampai","_indeedStore$PLCampai2","_indeedStore$PLCampai3","_indeedStore$PLCampai4","IndeedAttachJobsToCampaignEventPayload","detachFromOtherCampaigns","AttachmentType","radioAttachmentType","setRadioAttachmentType","unique","attachJobsEventPayload","AttachJobsToCampaign","CopyToClipboard","onCopy","IndeedAttachJobsToCampaignPage","_indeedStore$Selected","_indeedStore$Selected2","_indeedStore$Selected3","IndeedAttachJobsForm","GetJobsByIdApiDto","IndeedJobTableDto","jobTitle","location","postDate","posCreationDate","jobs","jobsWithPLDataEnriched","setJobsWithPLDataEnriched","getJobsByIdRequest","plJobs","GetJobsByIds","MapFromJob","IndeedJobsViewContainer","IndeedJobsTable","UserIds","IndeedCampaignActionsBuilder","indeedCampaigns","RiSuitcaseLine","BiTransfer","updateCampaignBudgetPayload","Algo","budget","UpdateCampaignBudget","Create","actionTypeId","IndeedAlgoControlRequest","AiOutlineRobot","IndeedCampaignTableDto","_indeedCampaign$campa","_indeedCampaign$campa2","_indeedCampaign$campa3","campaignObjectiveTarget","displayObjective","_campaignStore$Select","MapFromIndeedCampaign","indeedStrategyManagementService","createIndeedCampaignObjectiveStrategyRequest","mapObjectiveTypeToReadableText","objectiveType","IndeedStrategyCard","indeedCampaignObjectiveStrategy","onDelete","Card","bordered","DeleteStrategy","border","fontSize","percentOfCampaignStrategies","targetStrategyOptionMinValue","targetStrategyOptionMaxValue","IndeedStrategyForm","onFormSubmitSuccesfully","form","useForm","loading","setLoading","newlyCreatedStrategy","CreateStrategy","InputNumber","min","step","compact","Panel","Collapse","IndeedStrategyManagement","campaignObjectiveStrategies","setCampaignObjectiveStrategies","campaignStrategies","GetStrategiesByPlCampaign","mb","defaultActiveKey","header","mt","campaignObjectiveStrategy","objectiveId","useOnPoller","pollIntervalInSeconds","pollFunction","interval","clearInterval","StyledInputNumberWrapper","styled","_templateObject","_taggedTemplateLiteral","StyledTextAreaWrapper","_templateObject2","StyledTitle","div","_templateObject3","StyledHeader","_templateObject4","StyledInputGroupWrapper","_templateObject5","StyledColumnGroupWrapper","_templateObject6","StyledColumnGroupToTopWrapper","_templateObject7","StyledInputLabel","_templateObject8","StyledToggleWrapper","_templateObject9","StyledContainer","_templateObject10","StyledCheckbox","Checkbox","_templateObject11","StyledSubSection","_templateObject12","StyledGroupWrapper","_templateObject13","StyledModeWrapper","_templateObject14","SubAccountStatusId","showSubAccountName","log","statusId","getAlertMessageAndType","my","Alert","showIcon","hidden","indeedSubAccountName","plDataHash","useRef","_companyStore$Selecte","hash","plData","indeedSubAccountIsDisconnectedOrRevoked","_indeedStore$indeedSu","_indeedStore$indeedSu2","Idle","IndeedSubAccountStatus","IndeedCampaignsTable","IndeedUpdateCampaignBudgetEventPayload","IndeedUpdateCampaignEventPayload","IndeedEditCampaignForm","endDateType","campaignBudgetType","changedBudgetSettings","newFormState","oldFormState","isSame","GetChangedBudgetSettings","changedCampaignSettings","changedCampaignAttributes","changedCampaignObjective","GetChangedCampaignObjective","GetChangedCampaignSettings","IsEmptyObject","hasErrorOccured","_changedBudgetSetting","newBudgetLimits","initialFormState","budgetOneTimeLimit","GetNewBudgetLimits","endDates","GetEndDates","updateBudgetRequest","updateCampaignRequest","UpdateCampaign","object","keys","linkedinStrategyManagementService","createLinkedInBudgetStrategyRequest","LinkedInBudgetLevel","LinkedInStrategyForm","budgetLevel","setBudgetLevel","percentOfStrategies","LOW","MEDIUM","HIGH","VERY_HIGH","mapBudgetLevelToReadableText","LinkedInStrategyCard","linkedinBudgetStrategy","LinkedInStrategyManagement","BudgetStrategies","setBudgetStrategies","companyStrategies","GetStrategiesByCompanyId","BudgetStrategy","BudgetStrategyId","LinkedInBreadcrumbs","linkedinChildApplication","linkedinService","LinkedInContextInitializers","linkedinStore","linkedInChildApplication","GetLinkedInChildApplicationByCompanyId","SetLinkedInChildApplication","_companyStore$Selecte2","_companyStore$Selecte3","LinkedInChildApplication","authService","loginRequest","SupervisionTitle","LoginPage","setEmail","password","setPassword","method","String","ValidateEmail","CookieConstants","LogoutPage","remove","UserIdentityCookie","Redirect","NotFoundPage","externalColumn","alert","variant","GetChildEntityName","entityName","actionColumn","HandleVendorButtonClick","HandleChildEntityButtonClick","entityData","EntityPageAutoComplete","Autocomplete","freeSolo","multiple","fullWidth","clearOnEscape","entityNameList","HandleInputChange","renderInput","params","TextField","InputProps","useStyles","makeStyles","theme","activeVendor","borderBottom","inActiveVendor","avatarBackground","vendorImg","objectFit","ButtonGroupComponent","HandleButtonActionClick","IsSelected","styledProps","ButtonGroup","publisherSelectionStore","classes","DialogBox","List","dense","ListItem","ListItemAvatar","Avatar","src","imageUrl","alt","vendorName","ListItemText","primary","ListItemSecondaryAction","vendorData","vendorsList","_publisherSelectionSt","_publisherSelectionSt2","_publisherSelectionSt3","vendorsFiltered","setVendorsFiltered","Drawer","anchor","open","isOpen","onClose","VendorDrawerAutocomplete","vendorList","VendorDrawerList","filteredVendor","campaignsMock","jobsMock","jobTitleText","handleClose","Dialog","DialogTitle","DialogContent","DialogContentText","conflict","DialogActions","HandleConfirm","GetEntities","entityRecordHierarchy","setEntityRecordHierarchy","entityDataFiltered","setEntityDataFiltered","isVendorDrawerOpen","setIsVendorDrawerOpen","_entityRecordHierarchy","entities","rootContainerBreadCrumb","RemoveBreadCrumbsUntil","entityLevelName","entityRecord","selectValue","EntityPage","breadCrumb","VendorDrawer","HandleDrawerClose","userShortcuts","Keys","Action","ShortCutItem","p","shortcut","ShortCutsManualContainer","flexDirection","fontWeight","CampaignSelectInput","setOptions","campaignsPartial","GetAllPartial","BuildOptionValue","spacingUnit","wrap","mode","selectedOptionValues","campaignIds","ParseCampaignId","SetSearchedCampaigns","campaignPartial","CampaignsTableActionsBuilder","CampaignId","SiIndeed","MdGroupWork","CampaignTableDto","_campaign$forceEndDat","CreationDate","EndDate","Status","forceEndDate","DetermineStatus","setCampaigns","CampaignsTableIconActions","SiMicrosoftexcel","SiAdobeacrobatreader","CampaignsContainer","CampaignsTable","CampaignTrackAddAuditPage","BudgetType","GroupStatus","GroupTableDto","groupName","groupResponse","isActive","groupBudget","amount","GroupService","groupCreateRequest","updateGroupRequest","updateGroupBudgetRequest","groupService","GroupsActionBuilder","groupStore","groupTableDto","_groupStore$GroupsRes","SetSelectedGroup","DeleteAsync","_groupStore$GroupsRes2","_groupStore$GroupsRes3","IoMdCut","groups","MapFromGroup","GroupsBreadCrumbs","GroupName","AttachJobs","groupJobsService","groupJobRequest","GroupsContextInitializers","groupsStore","_groupData","GroupsService","GetAllAsync","SetGroups","_groupJobsData","GroupJobsService","GetAllByGroupIdAsync","SetGroupJobs","group","GetGroupById","_groupBudgetBalance","GetGroupBudgetBalance","SetGroupBudgetBalance","_groupStore$SelectedC","_groupStore$SelectedC2","_groupStore$SelectedC3","GroupsTable","attachedJobs","IsJobAttachedToGroup","groupJobResponse","FiInfo","groupJob","_option$job$extJobTit","_option$job$extJobTit2","Paragraph","ellipsis","GroupAddForm","groupBudgetBalance","_userStore$User","CreateAsync","Capped","dependencies","getFieldValue","JobTransfer","_groupStore$SelectedC4","GroupJobsTableDto","groupJobId","modificationDate","groupJobs","MapFromGroupJob","_groupStore$SelectedG","_groupStore$SelectedG2","_groupStore$SelectedG3","_groupStore$SelectedG4","GroupsJobsTable","groupsService","GroupsEditForm","_group$groupBudget","_group$groupBudget2","changedGroupSettings","changedGroupAttributes","GetChangedGroupSettings","changedGroupBudget","changedGroupBudgetAttributes","GetChangedGroupBudget","UpdateGroup","UpdateGroupBudget","GroupsAttachJobsForm","AttachedDetachedAsync","GroupsAttachJobsPage","ClassificationType","setVendors","vendorManagementStore","SelectedClassificationType","commentIsEdit","seCommentIsEdit","selectedRowKeys","SearchedVendors","selectedRowIndex","classificationType","None","onSelectAll","selected","selectedRows","forEach","selectedVendor","ClassificationTypeIsOptional","AddToEffectedRows","getCheckboxProps","Badge","dot","isOperativeCutoff","Tag","inheritedLevel","Default","SELECTION_COLUMN","updateVendors","part","InclusionEnforcementIsOptional","inclusionEnforcement","checked","_record$inclusionEnfo","FormatDateIfValid","isAfter","DecompositionString","isEditAble","onBlur","float","EditOutlined","onCell","Excluded","Exclusive","pageSize","entityVendors","filterValue","setFilterValue","selectedValues","setSelectedValues","maxHeight","overflowY","handleBlur","vendorIds","ParseVendorId","SetSearchedVendors","affiliateVendorService","vendorsWithDecision","manualActionRequestSource","entityStateAttributeRequest","entityDistributionSettings","campaignVendorService","companyVendorService","groupVendorService","VendorManagmentContextInitializers","_vendorsAffiliateData","SetVendors","_vendorsCompanyData","_vendorsCampaignData","_vendorsGroupData","ClassificationTypeValidation","Vendors","SetClassificationType","setClassificationType","onValid","EntitySettings","fromClassificationTypeToMode","actionIsValid","newSettings","validAction","validActionReponse","CheckModeCompatiableToTableValues","vendorsInBlackList","buildMessageWithVendorIds","vendorsInWhiteList","vendorIdsMessage","fromModeToClassificationType","Segmented","seletedclassificationType","VendorManagmentBreadCrumbs","AffiliatVendor","CompanyVendor","CampaignVendor","GroupVendor","ManualActionRequestSource","_vendorManagementStor","_vendorManagementStor2","_vendorManagementStor3","isWhitelist","manualVendors","operativeVendors","operativeVendor","manualVendor","sortedVendors","VendorSelectInput","VendorManagmentMode","VendorManagement","SetVendorsToApply","rowsEffected","SelectedVendorsToApply","reportResult","sourceRequest","vendorManagementService","SetCampaignsVendors","borderRadius","isInheritable","setIsInheritable","BoolToMode","ModeToBool","isInheritableBoolValue","SetEntityStateIsInheritable","Commands","onApply","onReset","handleApplyClick","handleResetClick","cancelClickHandler","cancelButtonText","VendorManagmentStateContextInitializers","_groupSettingsData","GetGroupSettingsAsync","SetEntityState","_companySettingsData","GetCompanySettingsAsync","_affiliateStateData","GetAffiliateSettingsAsync","ReportPage","resetEntitiesCollections","handleCopy","reportText","generateReportText","navigator","clipboard","writeText","catch","eLevelTypes","popupBodyApply","renderItem","mark","Divider","orientation","CopyOutlined","_uiStore$PopUp$select","_uiStore$PopUp","selectedValue","PopUp","CampaignTeam","_uiStore$PopUp$select2","_uiStore$PopUp2","closable","hideSelectButton","setGroupVendors","SetGroupVendors","PanelControl","ChangeSettingsIsValidValidationAsync","SetCompanyDistributionSettings","ResetGroupVendors","CompaniesTableActionsBuilder","CgData","FiLayers","SiLinkedin","CompanyTableDto","CompanyTableDtoExpand","setSelectedRowKeys","setCompanies","_companyStore$Searche","SortCompanies","campaignsFlat","flatMap","sort","hideSelectAll","renderCell","originNode","setTitle","GetCompaniesWithActiveCampaigns","SetCompanies","CompaniesTable","updateAndSort","IndeedIsIncludedInTheList","foundVendors","v","companyVendorsService","entityDistributionSettingsResponse","GetEffectedEntitesChangeModeAsync","SetCompanysVendors","ResetCompanyVendors","companySettingAuditService","CompanySettingsStatus","CompanySettingActionsBuilder","companySettingStore","_companySettingStore$","SetSelectedCompanySettingAudit","DeleteCompanySettingsAudit","CompanySettingsAuditDto","companySettingsAudit","companyAudits","MapFromCompanySettingsAudit","companySettingTypeService","companySettingTypeId","CompanySettingContextInitializers","GetFilteredCompanySettingsAudits","SetCompanySettingsAudits","GetCompanySettingTypes","SetCompanySettingTypes","CompanySettingBreadCrumbs","CompanySetting","CompanySettingAudit","CompanyName","companySettingAuditId","affiliateService","usePageInitializationAffiliate","affiliateStore","SetSelectedAffiliate","onAffiliateContextCallBack","SetAffiliateDistributionSettings","SetAffiliatesVendors","companyAuditId","companySettingTypeTextValue","setCompanySettingTypeTextValue","_companySettingStore$2","CompanySettingAuditService","UpdateCompanySettingsAudit","CreateCompanySettingsAudit","CompanyTrackEditAuditPage","AuditCompanyForm","CompanyTrackAddAuditPage","AffiliatesTableActionsBuilder","AffiliateTableDto","_affiliateStore$Selec","setAffiliates","_affiliateStore$allAf","SortAffiliates","companiesFlat","_affiliateStore$Selec2","_affiliateStore$Selec3","aff","GetAffiliates","SetAllAffiliates","AffiliatesTable","JobStateDto","jobState","job_id","is_distributed","reason_name","user_name","last_modified","JobVendorStateDto","jobVendorState","vendor_id","vendor_name","is_cut_off","JobSerachingType","explainabilityStore","setJobs","jobDtos","SelectedJobSerachingType","JobVendorState","JobsState","CompanySelectInput","_props$defaulatValueC","_props$defaulatValueC2","defaulatValueCompanies","jobsStateService","account_id","jobs_lst","ParsejobId","JobId","JobSelectInput","getAciveJobByAccount","maxTagCount","jobsIds","SetSearchedJobsIds","setdefaultValue","vendoIds","vendorsPartial","explainabilityService","jobVendorStateService","vendors_id_lst","setLoding","SearchedJobs","vendors_ids","jobsStateVendorByJobIds","getJobVendorStateByJobsIds","jobsStateVendorByAccountId","getJobVendorStateByCompanyId","jobsStateByAccountId","getJobStateByJobsIds","getJobStateByCompanyId","ExplainabilityMainPage","AllVendors","getAllVendors","ParseCompanyId","SetSearchedCompany","JobState","VendorSelect","SearchJobState","ExplainabilityTable","EAppGoalMode","EPacingMode","Caps","attributesManagementStore","CompanyAttributesAggregation","allVendorsCap","indeedCap","craiglistBudget","cap","onChangeAttribute","onIsOriginalsOnlyAllVendors","isOriginalsOnly","onIsOriginalsOnly","AlgoModes","CompanyProfile","pacingMode","reachAppGoalMode","manualDistribution","agencyMode","holdback","expressWay","autoPilot","avoidSoftLaunchJobsCarouselCAP","Radio","Accelerated","isHoldback","pacingModeType","Paced","onIsHoldback","appGoalMode","Stop","NoStop","Minimal","Switch","stopDistribution","onChangeManualDistribution","isStopDistribution","onIsAutoPilot","isAutoPilot","businessUnit","onIsAvoidSoft","isAvoidSoftLaunchJobsCarouselCAP","onIsExpressWay","isExpressWay","companyAttributesService","companyAttributes","companyPreferenceService","companyPreferenceDto","EPerMode","AttributesManagmentContextInitializers","initializedAttributesData","attributes","_attributes$autoPilot","_attributes$expressWa","_attributes$holdback","_attributes$agencyMod","_attributes$reachAppG","_attributes$pacingMod","_attributes$manualDis","_attributes$indeedCap","_attributes$craiglist","_attributes$budgetLim","_attributes$applicant","_attributes$allVendor","_attributes$avoidSoft","_attributes$budgetLim2","_attributes$applicant2","isEdited","budgetLimitPerJob","PerCycle","requestSource","applicantLimitPerJob","budgetLimitPerPriorityJob","isPriorityLimit","applicantLimitPerPriorityJob","initializeAttributesIfNeeded","getAllAsync","SetAttributes","_customerRequestData","getCustomerRequestsAsync","SetCustomerRequest","_companyPreferenceData","getCompanyPreference","SetCompanyPreference","_companyProfile","getCompanyProfile","SetCompanyProfile","AttributesManagmentBreadCrumbs","CompanyAttributes","Comments","CompanyPreference","setStrategyText","strategy","autoSize","minRows","maxRows","setGenralText","limiAttrubute","customerRequestLimit","customerRequestPriorityLimit","limitType","defaultValueForExpressWay","PerCampaign","PerCompany","readOnly","priorityLimitAttrubute","IsPpriorityChecked","onIsPpriority","CampaignRules","CustomerCampaignAttributesAggregation","AttributeLimit","AttributePriorityLimit","StyledComponent","CompanyAttributesPage","displayLabel","fetchData","_userStore$User2","companysAttributesToUpdate","getEditedAttributes","setCompanysAttributes","companyPreference","setCompanyPreference","resetIsEdited","emptyHandlerToShowCursorArrow","rootRoute","loginRoute","logoutRoute","accessDeniedRoute","publisherSelectionPageRoute","ChooseCutOffContainer","shortcutManualsRoute","supervisionBaseBreadCrumb","campaignsBreadCrumb","companiesBreadCrumb","affiliatesBreadCrumb","supervisionCampaignsRoute","supervisionCompaniesRoute","CompaniesContainer","supervisionAffiliatesRoute","AffiliatesContainer","indeedRoutes","campaignRoute","IndeedCampaignPage","addCampaignRoute","IndeedAddCampaignContainer","campaignJobsRoute","attachJobsToIndeedCampaign","editCampaign","IndeedEditCampaignPage","linkedinRoutes","managementRoute","LinkedInPage","audit","CompanyTrackAuditPage","edit","CampaignTrackAuditPage","actionsBreadCrumb","actionsRoutes","actionsTable","UserActionsTablePage","groupsRoutes","GroupsPage","GroupsAddPage","GroupJobsPage","editGroup","GroupsEditPage","attachJobs","vendorManagementRoutes","companyVendorManagement","CompanyVendorPage","affiliateVendorManagement","AffiliateVendorPage","campaignVendorManagement","CampaignVendorPage","groupVendorManagement","GroupVendorPage","explainabilityRoute","companyAttributesManagement","routes","values","RouteManager","GetCurrentRoute","pathName","ConvertNumbersOrGuidInRouteToColons","ConvertPathParametersToColons","Page","UIStore","_routeManager","_len","_key","BreadCrumbs","PopLatestBreadcrumb","pop","slice","currentRoute","CurrentRoute","IsWebsiteLoading","popUp","ClearPopUp","UserStore","VendorManagementStore","entitySettings","selectedVendorsToApply","vendorsIds","ExplainabilityStore","SearchedCompanyExplainability","AttributesManagementStore","attribute","customerRequest","companyProfile","editedAttributes","baseAttribute","LinkedInStore","RootStore","notificationStore","createContext","RootStoreProvider","Provider","Guid","CreateBreadcrumbStyles","doesBreadcrumbContainPathOrAction","isLastBreadcrumbInUi","styles","blue","Breadcrumb","pageHeader","transition","pageHeaderOn","pageHeaderOff","isPageHeaderActive","setIsPageHeaderActive","NewGuid","Paper","elevation","GetHeaderClassName","pt","AppBreadCrumbs","_uiStore$PopUp5","_uiStore$PopUp6","_uiStore$PopUp7","_uiStore$PopUp8","_uiStore$PopUp$hideSe","_uiStore$PopUp9","_uiStore$PopUp10","_uiStore$PopUp$cancel","_uiStore$PopUp11","_uiStore$PopUp$okButt","_uiStore$PopUp12","_uiStore$PopUp13","formRef","React","createRef","validationHandler","popUpOkClickHandler","_formRef$current","resetFields","_formRef$current2","Modal","onCancel","okText","cancelText","footer","onRequired","_uiStore$PopUp3","_uiStore$PopUp4","flex","ClientRequest","getLogoSrc","logoType","PandoLogicLogo","collapsed","Popover","onVisibleChange","notificationsToUpdateAsSeen","seen","notification","Update","omit","content","itemLayout","orderBy","background","Meta","sentFrom","createdAt","trigger","count","IoMdNotificationsOutline","UserOutlined","Sider","logo","spacing","LinkRoute","link","getSideMenuData","sections","sectionTitle","sectionIcon","GiMoneyStack","itemKey","sectionOptions","optionTitle","route","SiSmartthings","GoLinkExternal","FiSettings","_sections$find","accountsSection","section","_sections$find2","affiliatesSection","Layout","SubMenu","GetLinkFromRoute","substring","setCollapsed","sideNavigationData","setSideNavigationData","sideMenuDataUpdated","renderMenuItem","menuItem","child","rel","collapsible","onCollapse","defaultOpenKeys","sideMenuSection","sideMenuSectionOption","NotificationsList","UserInformation","routeProps","Route","RouteWrapper","RouterComponent","PrivateRoute","exact","SeedUserData","userIdentityJwt","decodedJwt","jwt","decode","user_id","roleId","role_id","SetUser","Content","routeService","fontFamily","minHeight","SideMenu","PageHeader","SupervisionPopUp","ErrorHandlerComponent","ErrorBoundary","FallbackComponent","resetErrorBoundary","MuiLightTheme","createTheme","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","StrictMode","ThemeProvider","CssBaseline","Router","App","getElementById"],"mappings":"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","file":"static/js/main.eae4fbd2.chunk.js","sourcesContent":["import \"./VerticalDivider.scss\";\r\nimport { Box } from \"@material-ui/core\";\r\n\r\ninterface Props {\r\n height?: string;\r\n mx?: number;\r\n}\r\n\r\nconst VerticalDivider = (props: Props) => {\r\n const { height, mx } = props;\r\n const createStyles = () => {\r\n if (!height) return {};\r\n return {\r\n height: height,\r\n };\r\n };\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default VerticalDivider;\r\n","import \"./Footer.scss\";\r\n\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport VerticalDivider from \"../../theme/vertical-divider/VerticalDivider\";\r\n\r\ninterface Props {}\r\n\r\nconst Footer = (props: Props) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default Footer;\r\n","import { MutableRefObject, useRef, useState } from \"react\";\r\nimport { useEffect, useContext } from \"react\";\r\n\r\n// Extending window\r\ndeclare global {\r\n interface Window {\r\n [key: string]: any;\r\n }\r\n}\r\n\r\nconst isSubArrayEqualArray = (\r\n baseArray: string[],\r\n subArray: string[]\r\n): boolean => {\r\n return baseArray.join(\"\").toLowerCase() == subArray.join(\"\").toLowerCase();\r\n};\r\n\r\nconst isSubArrayContainedInArray = (\r\n baseArray: string[],\r\n subArray: string[]\r\n): boolean => {\r\n return baseArray\r\n .join(\"\")\r\n .toLowerCase()\r\n .startsWith(subArray.join(\"\").toLowerCase());\r\n};\r\n\r\nconst keyboardListenerHandler =\r\n (\r\n id: string,\r\n pattern: string[],\r\n callback: () => void,\r\n [useEffectDependencyMutator, setUseEffectDependencyMutator]: [\r\n number,\r\n (number: number) => void\r\n ]\r\n ) =>\r\n (event: KeyboardEvent): void => {\r\n if (!window[id]) {\r\n window[id] = [];\r\n }\r\n window[id].push(event.key);\r\n\r\n if (isSubArrayEqualArray(pattern, window[id])) {\r\n callback();\r\n window[id] = [];\r\n\r\n setUseEffectDependencyMutator(useEffectDependencyMutator + 1);\r\n return;\r\n }\r\n\r\n // check if valid pattern\r\n if (isSubArrayContainedInArray(pattern, window[id]) === false) {\r\n window[id] = [];\r\n return;\r\n }\r\n };\r\n\r\n/**\r\n * @param id Need to be a special id to register the event listener. You can pass uuidv4()\r\n * @param pattern The pattern you want to register to be listened for. For example [\"alt\", \"1\"] will listen for alt + 1\r\n * @param callBack Call back to be executed when the pattern is clicked\r\n */\r\nconst useKeyboardListener = (\r\n id: string,\r\n pattern: string[],\r\n callBack: () => void\r\n) => {\r\n const [useEffectDependencyMutator, setUseEffectDependencyMutator] =\r\n useState(0);\r\n\r\n useEffect(() => {\r\n const functionReference = keyboardListenerHandler(\r\n id,\r\n pattern,\r\n callBack,\r\n [useEffectDependencyMutator, setUseEffectDependencyMutator]\r\n );\r\n window.addEventListener(\"keydown\", functionReference);\r\n\r\n return function cleanUp() {\r\n delete window[id];\r\n window.removeEventListener(\"keydown\", functionReference);\r\n };\r\n }, [useEffectDependencyMutator]);\r\n};\r\n\r\nexport default useKeyboardListener;\r\n","\r\nexport enum LocalStorageKeys {\r\n SearchedCompanyExplainability = \"searched_company_explainability\",\r\n SearchedCompanies = \"searched_companies\",\r\n SearchedCampaigns = \"searched_campaigns\",\r\n SearchedVendors = \"searched_vendors\",\r\n SearchedAffiliates= \"searched_Affiliates\"\r\n}","\r\nexport class LocalStorageService {\r\n SetItemString(key: string, value: string) {\r\n window.localStorage.setItem(key, value);\r\n }\r\n\r\n SetItemObject(key: string, value: object) {\r\n window.localStorage.setItem(key, JSON.stringify(value));\r\n }\r\n\r\n GetItemString(key: string): string | undefined {\r\n const item = window.localStorage.getItem(key);\r\n if (item == null) {\r\n return undefined;\r\n }\r\n return item;\r\n }\r\n\r\n GetItemObject(key: string): T | undefined {\r\n const item = window.localStorage.getItem(key);\r\n if (item == null) {\r\n return undefined;\r\n }\r\n return JSON.parse(item);\r\n }\r\n}\r\n\r\nexport default new LocalStorageService();","import { action, makeObservable, observable } from \"mobx\";\r\nimport { LocalStorageKeys } from \"../constants/LocalStorageKeys\";\r\nimport { Affiliate } from \"../models/operation/Affiliate\";\r\nimport LocalStorageService from \"../services/LocalStorageService\";\r\n\r\n\r\nexport class AffiliateStore {\r\n\r\n /**\r\n * Props\r\n */\r\n\r\n\r\n @observable\r\n public SearchedAffiliates: Affiliate[] = [];\r\n\r\n @observable\r\n public allAffiliates: Affiliate[] = [];\r\n\r\n\r\n\r\n /**\r\n * The Affiliate that is selected in the supervision campaigns page to further do operations on\r\n */\r\n @observable\r\n public SelectedAffiliate: Affiliate | undefined;\r\n\r\n\r\n /**\r\n * Ctor\r\n */\r\n constructor() {\r\n makeObservable(this);\r\n\r\n const selectedAffiliate = LocalStorageService.GetItemObject(LocalStorageKeys.SearchedAffiliates)\r\n if (selectedAffiliate != undefined) {\r\n this.SelectedAffiliate = selectedAffiliate;\r\n }\r\n }\r\n\r\n @action\r\n public async SetSearchedAffiliates(affiliatesIds: number[]) {\r\n const affiliates = this.allAffiliates?.filter(affiliate => affiliatesIds.includes(affiliate.affiliateId))\r\n this.SearchedAffiliates = affiliates;\r\n //LocalStorageService.SetItemObject(LocalStorageKeys.SearchedAffiliates, affiliates);\r\n }\r\n\r\n @action\r\n public async SetAllAffiliates(affiliates: Affiliate[]) {\r\n this.allAffiliates = affiliates;/*.sort((a, b) =>\r\n (a.affiliateId === this.SelectedAffiliate?.affiliateId ? -1 :\r\n b.affiliateId == this.SelectedAffiliate?.affiliateId ? 1 : 0) || a.affiliateId - b.affiliateId\r\n );*/\r\n }\r\n\r\n @action\r\n public async SetSelectedAffiliate(affiliate: Affiliate) {\r\n this.SelectedAffiliate = affiliate;\r\n LocalStorageService.SetItemObject(LocalStorageKeys.SearchedAffiliates, affiliate);\r\n }\r\n\r\n}","import { action, makeObservable, observable } from \"mobx\";\r\nimport { CampaignSettingsAuditResponse } from \"../models/campaign-track-system/CampaignSettingsAuditResponse\";\r\nimport { CampaignSettingTypeResponse } from \"../models/campaign-track-system/CampaignSettingTypeResponse\";\r\nimport { CampaignSettingTypeValueOption } from \"../models/campaign-track-system/CampaignSettingTypeValueOption\";\r\n\r\n\r\n\r\nexport class CampaignSettingStore\r\n{\r\n\r\n@observable\r\npublic CampaignSettingTypes : CampaignSettingTypeResponse[] = [];\r\n\r\n@observable\r\npublic CampaignSettingTypeValueOptions : CampaignSettingTypeValueOption[] = [];\r\n\r\n@observable\r\npublic CampaignSettingsAuditsResponse : CampaignSettingsAuditResponse[] = []; \r\n\r\n@observable\r\npublic SelectedCampaignSettingAudit? : CampaignSettingsAuditResponse; \r\n\r\n@observable\r\npublic updateOperationState?: boolean ;\r\n/**\r\n * ctor\r\n */\r\nconstructor() {\r\n makeObservable(this); \r\n}\r\n\r\n\r\n@action\r\npublic async SetCampaignSettingTypes(campaignSettingTypes : CampaignSettingTypeResponse[])\r\n{\r\n this.CampaignSettingTypes = campaignSettingTypes;\r\n}\r\n\r\n@action\r\npublic async SetCampaignSettingTypeValueOptions(campaignSettingTypeValueOptions : CampaignSettingTypeValueOption[])\r\n{\r\n this.CampaignSettingTypeValueOptions = campaignSettingTypeValueOptions;\r\n}\r\n\r\n@action\r\npublic async SetCampaignSettingsAudits(CampaignSettingsAudits : CampaignSettingsAuditResponse[])\r\n{\r\n this.CampaignSettingsAuditsResponse = CampaignSettingsAudits;\r\n}\r\n\r\n\r\n@action\r\npublic async SetSelectedCampaignSettingAudit(campaignSettingAudit?: CampaignSettingsAuditResponse) {\r\n this.SelectedCampaignSettingAudit = campaignSettingAudit;\r\n}\r\n\r\n\r\n@action\r\npublic async SetupdateOperationState(updateOperationState: boolean) {\r\n this.updateOperationState = updateOperationState;\r\n}\r\n\r\n\r\n}","import { ISettings } from \"./ISettings\";\r\n\r\nexport class ProdSettings implements ISettings {\r\n serverUrl = \"https://supervision-api.pandoiq.com\";\r\n notificationServerUrl = \"https://notification.algoteam.net\";\r\n vendorManagementUrl = \"https://txph2o7gk8.execute-api.us-east-1.amazonaws.com/prod\";\r\n explainabilityServiceUrl = \"https://qd451wgiqd.execute-api.us-east-1.amazonaws.com/prod\"\r\n attributesManagementServiceUrl = \"https://api-attributes.algoteam.net\";\r\n}\r\n","\r\nimport { DockerSettings } from \"./DockerSettings\";\r\nimport { ISettings } from \"./ISettings\";\r\nimport { LocalSettings } from \"./LocalSettings\";\r\nimport { ProdSettings } from \"./ProdSettings\";\r\nimport { StageSettings } from \"./StageSettings\";\r\n\r\nconst environment = process.env.REACT_APP_ENV as string\r\nlet settings: ISettings | undefined;\r\n\r\nswitch (environment) {\r\n case \"prod\":\r\n settings = new ProdSettings();\r\n break;\r\n\r\n case \"stage\":\r\n settings = new StageSettings();\r\n break;\r\n\r\n case \"docker\":\r\n settings = new DockerSettings();\r\n break;\r\n\r\n case \"local\":\r\n default:\r\n settings = new LocalSettings();\r\n break;\r\n\r\n}\r\n\r\nexport default settings as ISettings;","/* eslint-disable @typescript-eslint/no-useless-constructor */\r\nimport { ApiErrorSchema, IsApiErrorSchema } from \"../models/ApiErrorSchema\";\r\n\r\n/**\r\n * Base exception for project. All exceptions should inherit from that exception\r\n */\r\nexport abstract class AlgoSupervisionException extends Error {\r\n constructor(message?: string | undefined) {\r\n super(message);\r\n }\r\n}\r\n\r\nexport class PageNotFoundexception extends AlgoSupervisionException {\r\n}\r\n\r\nexport class FetchError extends AlgoSupervisionException {\r\n apiError: ApiErrorSchema;\r\n\r\n constructor(message?: string | undefined | ApiErrorSchema) {\r\n \r\n if (IsApiErrorSchema(message)) {\r\n super(message.errorMessage);\r\n this.apiError = message;\r\n return;\r\n }\r\n\r\n super(message);\r\n this.apiError = {\r\n errorMessage: message ?? \"Error occured\",\r\n errorCode: 500,\r\n retryable: false\r\n }\r\n }\r\n}\r\n\r\nexport class UnauthorizedError extends AlgoSupervisionException {\r\n\r\n}","export interface ApiErrorSchema {\r\n errorCode: number;\r\n errorMessage: string;\r\n retryable: boolean;\r\n}\r\n\r\nexport const IsApiErrorSchema = (message: unknown): message is ApiErrorSchema => {\r\n return (message as ApiErrorSchema) != undefined;\r\n}","import axios, { AxiosError, AxiosResponse } from \"axios\";\r\nimport Cookies from \"js-cookie\";\r\n\r\nimport settings from \"../config/AppSettings/SettingsFactory\";\r\nimport {\r\n FetchError,\r\n UnauthorizedError\r\n} from \"../exceptions/AlgoSupervisionExceptions\";\r\nimport { ApiErrorSchema } from \"../models/ApiErrorSchema\";\r\n\r\nexport abstract class BaseService {\r\n protected serverUrl: string;\r\n protected controllerPath: string;\r\n\r\n constructor(controllerPath: string, serverUrl?: string) {\r\n this.serverUrl = serverUrl ?? settings.serverUrl;\r\n this.controllerPath = controllerPath;\r\n }\r\n\r\n protected async Get(relativeUrl: string): Promise {\r\n try {\r\n const response: AxiosResponse = await axios.get(this.buildUrl(relativeUrl), {\r\n headers: this.ConstructRequestHeaders(),\r\n withCredentials: true\r\n });\r\n if (this.IsSuccessfulResponse(response)) {\r\n return response.data;\r\n }\r\n\r\n throw this.CreateUnsuccessfulFetchError(response);\r\n }\r\n catch (error: any) {\r\n throw this.CreateError(error);\r\n }\r\n\r\n }\r\n\r\n protected async Post(relativeUrl: string, payload: object, isArrayBufferResponseType: boolean = false): Promise {\r\n const headers = {\r\n 'Content-Type': 'application/json',\r\n };\r\n\r\n let options: any = {}\r\n options['headers'] = { ...this.ConstructRequestHeaders(), ...headers }\r\n if (isArrayBufferResponseType) {\r\n options['responseType'] = 'arraybuffer'\r\n }\r\n options['withCredentials'] = true;\r\n\r\n try {\r\n const response: AxiosResponse = await axios.post(this.buildUrl(relativeUrl), payload, {\r\n ...options,\r\n });\r\n if (this.IsSuccessfulResponse(response)) {\r\n return response.data;\r\n }\r\n\r\n throw this.CreateUnsuccessfulFetchError(response);\r\n }\r\n catch (error: any) {\r\n throw this.CreateError(error);\r\n }\r\n\r\n }\r\n\r\n protected async Patch(relativeUrl: string, payload: object): Promise {\r\n try {\r\n const response: AxiosResponse = await axios.patch(this.buildUrl(relativeUrl), payload, {\r\n headers: this.ConstructRequestHeaders(),\r\n withCredentials: true\r\n });\r\n if (this.IsSuccessfulResponse(response)) {\r\n return response.data;\r\n }\r\n\r\n throw this.CreateUnsuccessfulFetchError(response);\r\n }\r\n catch (error) {\r\n throw this.CreateError(error);\r\n }\r\n\r\n }\r\n\r\n protected async Put(relativeUrl: string, payload: object): Promise {\r\n try {\r\n const response: AxiosResponse = await axios.put(this.buildUrl(relativeUrl), payload, {\r\n headers: this.ConstructRequestHeaders(),\r\n withCredentials: true\r\n });\r\n if (this.IsSuccessfulResponse(response)) {\r\n return response.data;\r\n }\r\n\r\n throw this.CreateUnsuccessfulFetchError(response);\r\n }\r\n catch (error) {\r\n throw this.CreateError(error);\r\n }\r\n\r\n }\r\n\r\n protected async Delete(relativeUrl: string): Promise {\r\n try {\r\n const response: AxiosResponse = await axios.delete(this.buildUrl(relativeUrl), {\r\n headers: this.ConstructRequestHeaders(),\r\n withCredentials: true\r\n });\r\n if (this.IsSuccessfulResponse(response)) {\r\n return response.data;\r\n }\r\n\r\n throw this.CreateUnsuccessfulFetchError(response);\r\n }\r\n\r\n catch (error) {\r\n throw this.CreateError(error);\r\n }\r\n }\r\n\r\n private buildUrl(relativeUrl: string): string {\r\n return `${this.serverUrl}/api/${this.controllerPath}${relativeUrl}`;\r\n }\r\n\r\n private IsSuccessfulResponse(response: AxiosResponse): boolean {\r\n if (response.status >= 200 && response.status <= 226) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private CreateUnsuccessfulFetchError(response: AxiosResponse) {\r\n console.error(`FETCH ERROR: response=${response}`);\r\n return new FetchError(response.data as ApiErrorSchema);\r\n }\r\n\r\n private CreateError(error: any) {\r\n if (error instanceof FetchError) {\r\n throw error;\r\n }\r\n\r\n if (!error.response) {\r\n throw new Error(error);\r\n }\r\n\r\n if (error.response.status === 401) {\r\n return new UnauthorizedError(error.response.statusText);\r\n }\r\n return new FetchError(error.response.data);\r\n }\r\n\r\n private ConstructRequestHeaders = () => {\r\n let requestHeaders: any = {};\r\n\r\n const userIdentityJwt = Cookies.get(\"User.Identity\");\r\n if (userIdentityJwt) {\r\n requestHeaders[\"Authorization\"] = `Bearer ${Cookies.get(\"User.Identity\")}`;\r\n }\r\n\r\n return requestHeaders;\r\n }\r\n}","\r\nimport { Campaign } from \"../../models/operation/Campaign\";\r\nimport { CampaignPartial } from \"../../models/operation/CampaignPartial\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\nexport class CampaignService extends BaseService {\r\n\r\n async GetById(campaignId: number): Promise {\r\n const campaign = await this.Get(`/${campaignId}`);\r\n return campaign;\r\n }\r\n\r\n /**\r\n * Retrieves all campaigns with partial schema\r\n */\r\n async GetAllPartial(): Promise {\r\n const campaignPartial = await this.Get(\"/partial\");\r\n return campaignPartial;\r\n }\r\n\r\n async GetManyByIdsAsync(\r\n GetManyByIdsRequest: { ids: number[] }\r\n ): Promise {\r\n const campaigns = await this.Post(\"/get-multiple-by-ids\", GetManyByIdsRequest);\r\n return campaigns;\r\n }\r\n\r\n async GetByPagination(\r\n paginationOptions: {\r\n skip: number,\r\n take: number\r\n }\r\n ): Promise {\r\n throw new Error(\"Not Implemented\");\r\n }\r\n\r\n}\r\n\r\n\r\nconst campaignService = new CampaignService(\"Campaigns\");\r\nexport default campaignService;","import { action, makeObservable, observable, toJS } from \"mobx\";\r\n\r\nimport { LocalStorageKeys } from \"../constants/LocalStorageKeys\";\r\nimport { Campaign } from \"../models/operation/Campaign\";\r\nimport LocalStorageService from \"../services/LocalStorageService\";\r\nimport campaignService from \"../services/operation/CampaignService\";\r\n\r\nexport class CampaignStore {\r\n /**\r\n * Props\r\n */\r\n\r\n @observable\r\n public SearchedCampaigns: Campaign[] = [];\r\n\r\n /**\r\n * The campaign that is selected in the supervision campaigns page to further do operations on\r\n */\r\n @observable\r\n public SelectedCampaign: Campaign | undefined;\r\n\r\n /**\r\n * Ctor\r\n */\r\n constructor() {\r\n makeObservable(this);\r\n\r\n const campaigns = LocalStorageService.GetItemObject(\r\n LocalStorageKeys.SearchedCampaigns\r\n );\r\n if (campaigns != undefined) {\r\n this.SearchedCampaigns = campaigns;\r\n }\r\n }\r\n\r\n @action\r\n public async SetSearchedCampaigns(ids: number[]) {\r\n const campaigns = await campaignService.GetManyByIdsAsync({ ids });\r\n this.SearchedCampaigns = campaigns;\r\n\r\n LocalStorageService.SetItemObject(\r\n LocalStorageKeys.SearchedCampaigns,\r\n campaigns\r\n );\r\n }\r\n\r\n @action\r\n public async SetSelectedCampaign(campaign: Campaign) {\r\n this.SelectedCampaign = campaign;\r\n }\r\n}\r\n","import { Campaign } from \"../../models/operation/Campaign\";\r\nimport { Company } from \"../../models/operation/Company\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\nexport class CompanyService extends BaseService {\r\n \r\n async GetCompanyById(companyId: number): Promise {\r\n const company = await this.Get(`/${companyId}`);\r\n return company;\r\n }\r\n\r\n async GetCompanyByCampaignId(campaignId: number): Promise {\r\n const company = await this.Get(`/by-campaign/${campaignId}`);\r\n return company;\r\n }\r\n\r\n /**\r\n * Retrieves all companies with at least one active campaigns\r\n */\r\n async GetCompaniesWithActiveCampaigns(): Promise {\r\n const companies = await this.Get(\"/all\");\r\n return companies;\r\n }\r\n\r\n async GetManyByIdsAsync(GetManyByIdsRequest: {\r\n ids: number[];\r\n }): Promise {\r\n const companies = await this.Post(\r\n \"/get-multiple-by-ids\",\r\n GetManyByIdsRequest\r\n );\r\n return companies;\r\n }\r\n}\r\n\r\nconst companyService = new CompanyService(\"Companies\");\r\nexport default companyService;\r\n","\r\nimport { action, makeObservable, observable, toJS } from \"mobx\";\r\n\r\nimport { LocalStorageKeys } from \"../constants/LocalStorageKeys\";\r\nimport { Company } from \"../models/operation/Company\";\r\nimport LocalStorageService from \"../services/LocalStorageService\";\r\nimport companyService from \"../services/operation/CompanyService\";\r\n\r\nexport class CompanyStore {\r\n \r\n /**\r\n * Props\r\n */\r\n @observable\r\n public SearchedCompanies: Company[] = [];\r\n\r\n /**\r\n * The Company that is selected in the supervision companies page to further do operations on\r\n */\r\n @observable\r\n public SelectedCompany: Company | undefined;\r\n\r\n /**\r\n * Ctor\r\n */\r\n constructor() {\r\n makeObservable(this);\r\n\r\n const selectedCompany = LocalStorageService.GetItemObject(LocalStorageKeys.SearchedCompanies)\r\n if (selectedCompany != undefined) {\r\n this.SelectedCompany = selectedCompany;\r\n }\r\n }\r\n\r\n @action\r\n public async SetSearchedCompanies(ids: number[]) {\r\n const companies = await companyService.GetManyByIdsAsync({ ids });\r\n this.SearchedCompanies = companies;\r\n // LocalStorageService.SetItemObject(LocalStorageKeys.SearchedCompanies, companies);\r\n }\r\n\r\n @action\r\n public async SetCompanies(companies: Company[]) {\r\n //const companies = await companyService.GetManyByIdsAsync({ ids });\r\n this.SearchedCompanies = companies;\r\n \r\n }\r\n\r\n @action\r\n public async SetSelectedCompany(company: Company) {\r\n this.SelectedCompany = company;\r\n LocalStorageService.SetItemObject(LocalStorageKeys.SearchedCompanies, company);\r\n }\r\n}","import { action, makeObservable, observable } from \"mobx\";\r\nimport { CompanySettingsAuditResponse } from \"../models/company-track-system/CompanySettingsAuditResponse\";\r\nimport { CompanySettingTypeResponse } from \"../models/company-track-system/CompanySettingTypeResponse\";\r\nimport { CompanySettingTypeValueOption } from \"../models/company-track-system/CompanySettingTypeValueOption\";\r\n\r\nexport class CompanySettingStore {\r\n @observable\r\n public CompanySettingTypes: CompanySettingTypeResponse[] = [];\r\n\r\n @observable\r\n public CompanySettingTypeValueOptions: CompanySettingTypeValueOption[] = [];\r\n\r\n @observable\r\n public CompanySettingsAuditsResponse: CompanySettingsAuditResponse[] = [];\r\n\r\n @observable\r\n public SelectedCompanySettingAudit?: CompanySettingsAuditResponse;\r\n\r\n @observable\r\n public updateOperationState?: boolean;\r\n /**\r\n * ctor\r\n */\r\n constructor() {\r\n makeObservable(this);\r\n }\r\n\r\n @action\r\n public async SetCompanySettingTypes(\r\n companySettingTypes: CompanySettingTypeResponse[]\r\n ) {\r\n this.CompanySettingTypes = companySettingTypes;\r\n }\r\n\r\n @action\r\n public async SetCompanySettingTypeValueOptions(\r\n companySettingTypeValueOptions: CompanySettingTypeValueOption[]\r\n ) {\r\n this.CompanySettingTypeValueOptions = companySettingTypeValueOptions;\r\n }\r\n\r\n @action\r\n public async SetCompanySettingsAudits(\r\n CompanySettingsAudits: CompanySettingsAuditResponse[]\r\n ) {\r\n this.CompanySettingsAuditsResponse = CompanySettingsAudits;\r\n }\r\n\r\n @action\r\n public async SetSelectedCompanySettingAudit(\r\n companySettingAudit?: CompanySettingsAuditResponse\r\n ) {\r\n this.SelectedCompanySettingAudit = companySettingAudit;\r\n }\r\n\r\n @action\r\n public async SetupdateOperationState(updateOperationState: boolean) {\r\n this.updateOperationState = updateOperationState;\r\n }\r\n}\r\n","import { action, makeObservable, observable } from \"mobx\";\r\nimport { GroupBudgetBalance } from \"../models/groups/GroupBudgetBalance\";\r\nimport { GroupJobResponse } from \"../models/groups/GroupJobResponse\";\r\nimport { GroupResponse } from \"../models/groups/GroupResponse\";\r\nimport { Campaign } from \"../models/operation/Campaign\";\r\n\r\nexport class GroupStore {\r\n\r\n\r\n @observable\r\n public GroupsResponse: GroupResponse[] = [];\r\n\r\n @observable\r\n public GroupJobsResponse: GroupJobResponse[] = [];\r\n\r\n @observable\r\n public SelectedGroup?: GroupResponse;\r\n\r\n @observable\r\n public SelectedCampaign?: Campaign;\r\n\r\n @observable\r\n public GroupBudgetBalance: GroupBudgetBalance = {\r\n campaignBudget: 0,\r\n campaignBalance: 0\r\n };\r\n /**\r\n * ctor\r\n */\r\n constructor() {\r\n makeObservable(this);\r\n }\r\n\r\n @action\r\n public async SetGroups(Groups: GroupResponse[]) {\r\n this.GroupsResponse = Groups;\r\n }\r\n\r\n @action\r\n public async SetGroupJobs(GroupJobs: GroupJobResponse[]) {\r\n this.GroupJobsResponse = GroupJobs;\r\n }\r\n\r\n @action\r\n public async SetSelectedGroup(SelectedGroup?: GroupResponse)\r\n {\r\n this.SelectedGroup = SelectedGroup;\r\n }\r\n\r\n @action\r\n public async SetGroupBudgetBalance(GroupBudgetBalance: GroupBudgetBalance)\r\n {\r\n this.GroupBudgetBalance = GroupBudgetBalance;\r\n }\r\n\r\n @action\r\n public async SetSelectedCampaign(campaign: Campaign)\r\n {\r\n this.SelectedCampaign = campaign;\r\n }\r\n}","import { action, makeObservable, observable, toJS } from \"mobx\";\r\n\r\nimport { LocalStorageKeys } from \"../constants/LocalStorageKeys\";\r\nimport { IndeedCampaign } from \"../models/indeed-manager/IndeedCampaign\";\r\nimport { PLIndeedData } from \"../models/indeed-manager/PLIndeedData\";\r\nimport { Campaign } from \"../models/operation/Campaign\";\r\nimport { Company } from \"../models/operation/Company\";\r\nimport LocalStorageService from \"../services/LocalStorageService\";\r\nimport campaignService from \"../services/operation/CampaignService\";\r\nimport { IndeedSubAccount } from \"../models/indeed-manager/IndeedSubAccount\";\r\n\r\nexport class IndeedStore {\r\n /**\r\n * Indeed data for selected PandoLogic campaign\r\n */\r\n @observable\r\n public PLCampaignData?: PLIndeedData;\r\n\r\n /**\r\n * The selected indeed campaign\r\n */\r\n @observable\r\n public SelectedIndeedCampaign?: IndeedCampaign;\r\n\r\n /**\r\n * The indeed sub account\r\n */\r\n @observable\r\n indeedSubAccount? : IndeedSubAccount;\r\n /**\r\n * The selected company\r\n */\r\n @observable\r\n public Company!: Company;\r\n\r\n /**\r\n * The selected indeed campaign\r\n */\r\n @observable\r\n public IsDataLoading: boolean = false;\r\n\r\n /**\r\n * Ctor\r\n */\r\n constructor() {\r\n makeObservable(this);\r\n }\r\n\r\n @action\r\n public async SetSelectedIndeedCampaign(indeedCampaign?: IndeedCampaign) {\r\n this.SelectedIndeedCampaign = indeedCampaign;\r\n }\r\n\r\n @action\r\n public async SetPLCampaignData(plIndeedData?: PLIndeedData) {\r\n this.PLCampaignData = plIndeedData;\r\n }\r\n\r\n @action\r\n public async SetCompany(company: Company) {\r\n this.Company = company;\r\n }\r\n\r\n @action\r\n public async SetIsDataLoading(state: boolean) {\r\n this.IsDataLoading = state;\r\n }\r\n\r\n \r\n @action\r\n public async SetIndeedSubAccount(indeedSubAccount: IndeedSubAccount) {\r\n this.indeedSubAccount = indeedSubAccount;\r\n }\r\n}\r\n","import settings from \"../../config/AppSettings/SettingsFactory\";\r\nimport { Notification } from \"../../models/notifications/Notification\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\nclass NotificationService extends BaseService {\r\n\r\n /**\r\n * Gets all notifications for the user. Uses the JWT to determine the User ID\r\n */\r\n public async GetAll(): Promise {\r\n const notifications = await this.Get(`/`);\r\n return notifications;\r\n }\r\n\r\n \r\n public async Update(notificationId: string, updateNotificationRequest: Omit) {\r\n updateNotificationRequest.seenAt = new Date().toISOString();\r\n const updatedNotification = await this.Put(`/${notificationId}`, updateNotificationRequest);\r\n return updatedNotification;\r\n }\r\n}\r\n\r\n\r\nexport default new NotificationService(\"notifications\", settings.notificationServerUrl);","\r\nimport { action, makeObservable, observable, toJS } from \"mobx\";\r\n\r\nimport { Notification } from \"../models/notifications/Notification\";\r\nimport NotificationService from \"../services/notifications/NotificationService\";\r\n\r\nexport class NotificationStore {\r\n\r\n @observable\r\n public Notifications?: Notification[];\r\n\r\n constructor() {\r\n makeObservable(this);\r\n }\r\n\r\n\r\n @action\r\n public async SetNotificationStateForUser() {\r\n const notifications = await NotificationService.GetAll();\r\n this.Notifications = notifications;\r\n }\r\n}","export type vendorMockType = {\r\n isCutOff: boolean;\r\n vendorId: number;\r\n vendorName: string;\r\n imageUrl: string;\r\n operationTypeId: 1 | 2 | 3 | undefined;\r\n};\r\n\r\nexport type vendorMockSchemaType = {\r\n vendors: vendorMockType[];\r\n}\r\n\r\nexport const vendorsData: vendorMockSchemaType = {\r\n vendors: [\r\n {\r\n \"isCutOff\": true,\r\n \"vendorId\": 1,\r\n \"vendorName\": \"Jobble\",\r\n \"imageUrl\": \"data:image/png;base64,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\",\r\n \"operationTypeId\": 1\r\n\r\n },\r\n {\r\n \"isCutOff\": true,\r\n \"vendorId\": 2,\r\n \"vendorName\": \"Glassdoor\",\r\n \"imageUrl\": \"https://www.glassdoor.com/about-us//app/uploads/sites/2/2018/06/Group-7.png\",\r\n \"operationTypeId\": 1\r\n },\r\n {\r\n \"isCutOff\": true,\r\n \"vendorId\": 3,\r\n \"vendorName\": \"Oodle\",\r\n \"imageUrl\": \"https://res.cloudinary.com/crunchbase-production/image/upload/c_lpad,h_256,w_256,f_auto,q_auto:eco,dpr_1/v1397180536/5ba72eeab7ed23ac1faa61da0066bc84.png\",\r\n \"operationTypeId\": 1\r\n },\r\n {\r\n \"isCutOff\": false,\r\n \"vendorId\": 4,\r\n \"vendorName\": \"Yahoo\",\r\n \"imageUrl\": \"https://i.pinimg.com/originals/a1/cf/67/a1cf6782e1d737865bdeca4fec7fc5fd.png\",\r\n \"operationTypeId\": undefined\r\n },\r\n {\r\n \"isCutOff\": false,\r\n \"vendorId\": 5,\r\n \"vendorName\": \"Jobalot\",\r\n \"imageUrl\": \"https://cdn.shopify.com/s/files/1/0579/0603/6936/files/Logo_transparant_cf3b5c8a-8f27-4c74-8128-dcbd745ba3cc.png?v=1626088177\",\r\n \"operationTypeId\": undefined\r\n },\r\n {\r\n \"isCutOff\": false,\r\n \"vendorId\": 7,\r\n \"vendorName\": \"Nexxt\",\r\n \"imageUrl\": \"https://comparecamp.com/media/uploads/2019/05/Nexxt-logo.png\",\r\n \"operationTypeId\": undefined\r\n },\r\n {\r\n \"isCutOff\": false,\r\n \"vendorId\": 8,\r\n \"vendorName\": \"Indeed\",\r\n \"imageUrl\": \"data:image/png;base64,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\",\r\n \"operationTypeId\": undefined\r\n },\r\n {\r\n \"isCutOff\": false,\r\n \"vendorId\": 9,\r\n \"vendorName\": \"CareerJet\",\r\n \"imageUrl\": \"data:image/png;base64,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\",\r\n \"operationTypeId\": undefined\r\n },\r\n {\r\n \"isCutOff\": false,\r\n \"vendorId\": 10,\r\n \"vendorName\": \"College Recruiter\",\r\n \"imageUrl\": \"https://www.freeiconspng.com/uploads/no-image-icon-11.PNG\",\r\n \"operationTypeId\": undefined\r\n },\r\n {\r\n \"isCutOff\": false,\r\n \"vendorId\": 11,\r\n \"vendorName\": \"JobsOnline\",\r\n \"imageUrl\": \"https://www.freeiconspng.com/uploads/no-image-icon-11.PNG\",\r\n \"operationTypeId\": undefined\r\n }\r\n ]\r\n}","import { action, makeObservable, observable } from \"mobx\";\r\nimport { vendorMockType } from \"../../components/publisher-selection/mock-data/vendors-list\";\r\nimport { Nullable } from \"../../types/types\";\r\nimport { PublisherSelectionActionType } from \"../../types/publisher-selection/PublisherSelectionTypes\";\r\n\r\n\r\nexport class PublisherSelectionDialog {\r\n\r\n /**\r\n * Ctor\r\n */\r\n\r\n @observable\r\n public Vendor: Nullable;\r\n\r\n @observable\r\n public actionType: Nullable;\r\n\r\n @observable\r\n public Conflicts: string[];\r\n\r\n @observable\r\n public IsOn: boolean;\r\n\r\n constructor(\r\n ) {\r\n makeObservable(this);\r\n this.Conflicts = [];\r\n this.IsOn = false;\r\n }\r\n\r\n @action\r\n public Reset(): void {\r\n this.Vendor = undefined;\r\n this.actionType = undefined;\r\n this.Conflicts = [];\r\n this.IsOn = false;\r\n }\r\n\r\n @action\r\n public Set(vendor: vendorMockType, actionType: PublisherSelectionActionType, conflicts: string[]): void {\r\n this.Vendor = vendor;\r\n this.actionType = actionType;\r\n this.Conflicts = conflicts;\r\n this.IsOn = true;\r\n }\r\n\r\n}","import { action, makeObservable, observable, toJS } from \"mobx\";\r\n\r\nimport {\r\n vendorMockType,\r\n vendorsData\r\n} from \"../components/publisher-selection/mock-data/vendors-list\";\r\nimport { EntityRecordDetailed } from \"../models/EntityRecord\";\r\nimport { PublisherSelectionDialog } from \"../models/publisher-selection/PublisherSelectionDialog\";\r\nimport {\r\n EntityTypeOption,\r\n PublisherSelectionActionType\r\n} from \"../types/publisher-selection/PublisherSelectionTypes\";\r\nimport { Nullable } from \"../types/types\";\r\n\r\nexport class PublisherSelectionStore {\r\n\r\n /**\r\n * Fields\r\n */\r\n\r\n\r\n /**\r\n * Ctor\r\n */\r\n constructor() {\r\n makeObservable(this);\r\n }\r\n\r\n /**\r\n * Props\r\n */\r\n @observable\r\n public MockActiveEntityType: EntityTypeOption = \"campaigns\";\r\n\r\n @observable\r\n public MockEntityDrillDownList: string[] = []; //TODO: Refactor to class type instead of string\r\n\r\n @observable\r\n public DialogBox: PublisherSelectionDialog = new PublisherSelectionDialog();\r\n\r\n @observable\r\n public VendorsForEntity: Nullable;\r\n\r\n\r\n // Refactor the below 3 properties to a class\r\n @observable\r\n public SelectedPublisherActionType: Nullable;\r\n\r\n @observable\r\n public SelectedEntity: Nullable;\r\n\r\n @observable\r\n public SelectedVendor: Nullable;\r\n\r\n\r\n\r\n /**\r\n * Methods\r\n */\r\n @action\r\n public SetMockActiveEntityType(entityType: EntityTypeOption): void {\r\n this.MockActiveEntityType = entityType;\r\n }\r\n\r\n @action\r\n public AddEntityToDrillDownList(entity: string): void {\r\n this.MockEntityDrillDownList.push(entity);\r\n }\r\n\r\n @action\r\n public SetVendorsForEntity(): vendorMockType[] {\r\n if (!this.VendorsForEntity) {\r\n this.VendorsForEntity = vendorsData.vendors;\r\n }\r\n\r\n return this.VendorsForEntity;\r\n }\r\n\r\n @action\r\n public HandleVendorAction(actionType: PublisherSelectionActionType, vendor: vendorMockType): void {\r\n if (!this.VendorsForEntity) throw new Error(\"VendorsForEntity is empty\")\r\n\r\n const vendorIndex = this.VendorsForEntity.findIndex(x => x.vendorId == vendor.vendorId);\r\n if (actionType == \"Exclude\") {\r\n this.VendorsForEntity[vendorIndex].isCutOff = true;\r\n this.VendorsForEntity[vendorIndex].operationTypeId =1;\r\n }\r\n if (actionType == \"Include\") {\r\n this.VendorsForEntity[vendorIndex].isCutOff = false;\r\n this.VendorsForEntity[vendorIndex].operationTypeId = 2;\r\n }\r\n\r\n if (actionType == \"Exclusive\") {\r\n this.VendorsForEntity = this.VendorsForEntity.map((vendor, index) => {\r\n if (index == vendorIndex || vendor.operationTypeId == 3) {\r\n return {\r\n ...vendor,\r\n isCutOff: false,\r\n operationTypeId: 3\r\n }\r\n }\r\n\r\n return {\r\n ...vendor,\r\n isCutOff: true,\r\n operationTypeId: undefined\r\n }\r\n })\r\n }\r\n }\r\n\r\n\r\n // Refactor the below to a class\r\n @action\r\n public SetSelectedPublisherActionType(actionType: PublisherSelectionActionType): void {\r\n this.SelectedPublisherActionType = actionType;\r\n }\r\n\r\n @action\r\n public SetSelectedVendor(vendor: vendorMockType): void {\r\n this.SelectedVendor = vendor;\r\n }\r\n\r\n @action\r\n public SetSelectedEntity(entity: EntityRecordDetailed): void {\r\n this.SelectedEntity = entity;\r\n }\r\n\r\n @action\r\n public RemoveSelectedEntity(): void {\r\n this.SelectedEntity = undefined;\r\n }\r\n\r\n\r\n}","\r\n// export type breadCrumbActionType = \"link\" | \"state_effect\" | \"none\";\r\n\r\nexport class BreadCrumb {\r\n /**\r\n * ctor\r\n */\r\n constructor(\r\n public breadCrumbText: string,\r\n public path: string | null, // The path to redirect to on click\r\n public clickHandler: (() => void) | null, // Causes state side effect\r\n ) { }\r\n}","class Root {\r\n private prefix = \"/\";\r\n\r\n public Index = `${this.prefix}`;\r\n public NotFound = `/not-found`;\r\n public AccessDenied = `/access-denied`;\r\n public Login = `/login`;\r\n public Logout = `/logout`;\r\n}\r\n\r\nclass PublisherSelection {\r\n private prefix = \"/publisherSelection\";\r\n\r\n public ChooseCutOff = `${this.prefix}/cutoff`;\r\n public Analytics = `${this.prefix}/analytics`;\r\n}\r\n\r\nclass Explainability {\r\n private prefix = \"/explainability\";\r\n\r\n public JobExplainabilityRoute = `${this.prefix}/table`\r\n\r\n}\r\n\r\nclass Actions {\r\n private prefix = \"/actions\";\r\n\r\n public Table = `${this.prefix}/table`;\r\n}\r\n\r\nclass Supervision {\r\n private prefix = \"/\";\r\n public CompaniesPrefix = \"/companies\"; //Didn't use prefix in purpose. Campaigns is the root route\r\n public Companies = \"/\"; //Didn't use prefix in purpose. Campaigns is the root route\r\n public Campaigns = \"/campaigns\";\r\n public Affiliates = \"/Affiliates\"\r\n\r\n public LinkedInRoutes = {\r\n StrategyRoute: `${this.CompaniesPrefix}/:companyId/linkedin`,\r\n BuildStrategyRoute: (companyId: number) =>\r\n `${this.LinkedInRoutes.StrategyRoute}`.replace(\r\n \":companyId\",\r\n companyId.toString()\r\n ),\r\n };\r\n \r\n public IndeedRoutes = {\r\n CampaignRoute: `${this.Campaigns}/:campaignId/indeed`,\r\n BuildCampaignRoute: (campaignId: number) =>\r\n `${this.IndeedRoutes.CampaignRoute}`.replace(\r\n \":campaignId\",\r\n campaignId.toString()\r\n ),\r\n AddCampaign: `${this.Campaigns}/:campaignId/indeed/add-campaign`,\r\n BuildAddCampaign: (campaignId: number) =>\r\n `${this.IndeedRoutes.AddCampaign.replace(\r\n \":campaignId\",\r\n campaignId.toString()\r\n )}`,\r\n CampaignJobsRoute: `${this.Campaigns}/:campaignId/indeed/:indeedCampaignId/jobs`,\r\n BuildCampaignJobsRoute: (campaignId: number, indeedCampaignId: string) =>\r\n `${this.IndeedRoutes.CampaignJobsRoute}`\r\n .replace(\":campaignId\", campaignId.toString())\r\n .replace(\":indeedCampaignId\", indeedCampaignId),\r\n AttachJobsToIndeedCampaign: `${this.Campaigns}/:campaignId/indeed/:indeedCampaignId/attach-jobs`,\r\n BuildAttachJobsToIndeedCampaign: (\r\n campaignId: number,\r\n indeedCampaignId: string\r\n ) =>\r\n `${this.IndeedRoutes.AttachJobsToIndeedCampaign}`\r\n .replace(\":campaignId\", campaignId.toString())\r\n .replace(\":indeedCampaignId\", indeedCampaignId),\r\n EditIndeedCampaign: `${this.Campaigns}/:campaignId/indeed/:indeedCampaignId/edit`,\r\n BuildEditIndeedCampaign: (campaignId: number, indeedCampaignId: string) =>\r\n `${this.IndeedRoutes.EditIndeedCampaign}`\r\n .replace(\":campaignId\", campaignId.toString())\r\n .replace(\":indeedCampaignId\", indeedCampaignId),\r\n };\r\n\r\n public CompanyTrackSystemRoutes = {\r\n CompanySettingsRoute: `${this.CompaniesPrefix}/:companyId/company-settings`,\r\n BuildCompanyRoute: (companyId: number) =>\r\n `${this.CompanyTrackSystemRoutes.CompanySettingsRoute}`.replace(\r\n \":companyId\",\r\n companyId.toString()\r\n ),\r\n\r\n EditCompanySettingAudit: `${this.CompaniesPrefix}/:companyId/company-settings/:auditId/edit`,\r\n BuildEditCompanySettingAudit: (companyId: number, auditId: string) =>\r\n `${this.CompanyTrackSystemRoutes.EditCompanySettingAudit}`\r\n .replace(\":companyId\", companyId.toString())\r\n .replace(\":auditId\", auditId),\r\n\r\n AddCompanySettingAudit: `${this.CompaniesPrefix}/:companyId/company-settings/add`,\r\n BuildAddCompanySettingAudit: (companyId: number) =>\r\n `${this.CompanyTrackSystemRoutes.AddCompanySettingAudit.replace(\r\n \":companyId\",\r\n companyId.toString()\r\n )}`,\r\n };\r\n\r\n public CampaignTrackSystemRoutes = {\r\n CampaignSettingsRoute: `${this.Campaigns}/:campaignId/campaign-settings`,\r\n BuildCampaignRoute: (campaignId: number) =>\r\n `${this.CampaignTrackSystemRoutes.CampaignSettingsRoute}`.replace(\r\n \":campaignId\",\r\n campaignId.toString()\r\n ),\r\n\r\n EditCampaignSettingAudit: `${this.Campaigns}/:campaignId/campaign-settings/:auditId/edit`,\r\n BuildEditCampaignSettingAudit: (campaignId: number, auditId: string) =>\r\n `${this.CampaignTrackSystemRoutes.EditCampaignSettingAudit}`\r\n .replace(\":campaignId\", campaignId.toString())\r\n .replace(\":auditId\", auditId),\r\n\r\n AddCampaignSettingAudit: `${this.Campaigns}/:campaignId/campaign-settings/add`,\r\n BuildAddCampaignSettingAudit: (campaignId: number) =>\r\n `${this.CampaignTrackSystemRoutes.AddCampaignSettingAudit.replace(\r\n \":campaignId\",\r\n campaignId.toString()\r\n )}`,\r\n };\r\n\r\n public GroupsRoutes = {\r\n GroupRoute: `${this.Campaigns}/:campaignId/groups`,\r\n BuildGroupRoute: (campaignId: number) =>\r\n `${this.GroupsRoutes.GroupRoute}`.replace(\r\n \":campaignId\",\r\n campaignId.toString()\r\n ),\r\n\r\n AddGroup: `${this.Campaigns}/:campaignId/groups/add`,\r\n BuildAddGroup: (campaignId: number) =>\r\n `${this.GroupsRoutes.AddGroup}`.replace(\r\n \":campaignId\",\r\n campaignId.toString()\r\n ),\r\n\r\n GroupJobsRoute: `${this.Campaigns}/:campaignId/groups/:groupId/jobs`,\r\n BuildGroupJobsRoute: (campaignId: number, groupId: number) =>\r\n `${this.GroupsRoutes.GroupJobsRoute}`\r\n .replace(\":campaignId\", campaignId.toString())\r\n .replace(\":groupId\", groupId.toString()),\r\n\r\n EditGroup: `${this.Campaigns}/:campaignId/groups/:groupId/edit`,\r\n BuildEditGroup: (campaignId: number, groupId: number) =>\r\n `${this.GroupsRoutes.EditGroup}`\r\n .replace(\":campaignId\", campaignId.toString())\r\n .replace(\":groupId\", groupId.toString()),\r\n\r\n AttachJobsToGroup: `${this.Campaigns}/:campaignId/groups/:groupId/attach-jobs`,\r\n BuildAttachJobsToGroup: (campaignId: number, groupId: number) =>\r\n `${this.GroupsRoutes.AttachJobsToGroup}`\r\n .replace(\":campaignId\", campaignId.toString())\r\n .replace(\":groupId\", groupId.toString()),\r\n };\r\n\r\n\r\n public VendorManagementRoutes = {\r\n\r\n AffiliateVendorRoute: `${this.Affiliates}/:affiliateId/vendor-management`,\r\n BuildAffiliateVendorManagementRoute: (affiliateId: number) =>\r\n `${this.VendorManagementRoutes.AffiliateVendorRoute}`\r\n .replace(\":affiliateId\", affiliateId.toString()\r\n ),\r\n\r\n CompanyVendorRoute: `${this.CompaniesPrefix}/:companyId/vendor-management`,\r\n BuildCompanyVendorManagementRoute: (companyId: number) =>\r\n `${this.VendorManagementRoutes.CompanyVendorRoute}`\r\n .replace(\":companyId\", companyId.toString()\r\n ),\r\n\r\n CampaignVendorRoute: `${this.Campaigns}/:campaignId/vendor-management`,\r\n BuildCampaignVendorManagementRoute: (campaignId: number) =>\r\n `${this.VendorManagementRoutes.CampaignVendorRoute}`\r\n .replace(\":campaignId\", campaignId.toString()\r\n ),\r\n\r\n GroupVendorRoute: `${this.Campaigns}/:campaignId/groups/:groupId/vendor-management`,\r\n BuildGroupVendorManagementRoute: (campaignId: number, groupId: number) =>\r\n `${this.VendorManagementRoutes.GroupVendorRoute}`\r\n .replace(\":campaignId\", campaignId.toString())\r\n .replace(\":groupId\", groupId.toString()\r\n ),\r\n }\r\n\r\n public AttributesManagementRoutes = {\r\n\r\n CompanyAttributesRoute: `${this.CompaniesPrefix}/:companyId/attributes-management`,\r\n BuildCompanyAttributesRouteManagementRoute: (companyId: number) =>\r\n `${this.AttributesManagementRoutes.CompanyAttributesRoute}`\r\n .replace(\":companyId\", companyId.toString()\r\n ),\r\n }\r\n \r\n}\r\n\r\nclass Settings {\r\n private prefix = \"/settings\";\r\n\r\n public ShortCutsManual = `${this.prefix}/short-cuts-manual`;\r\n}\r\n\r\nexport class RoutesPaths {\r\n public static Supervision = new Supervision();\r\n public static Explainability = new Explainability();\r\n\r\n public static PublisherSelection = new PublisherSelection();\r\n // public static IndeedManager = new IndeedManagerRoutes();\r\n public static Actions = new Actions();\r\n public static Settings = new Settings();\r\n public static Root = new Root();\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { BreadCrumb } from './BreadCrumb';\r\nimport React, { ReactNode } from 'react';\r\nimport { ReactElement } from 'react';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nexport class RouteModel {\r\n public id: string;\r\n\r\n // Make properties observable\r\n public routePath: string;\r\n public renderComponent: React.ReactElement;\r\n public mainTitle: string;\r\n public breadCrumbsPrefix: BreadCrumb[];\r\n public isAutoRouteSetup: boolean;\r\n\r\n constructor(\r\n routePath: string,\r\n renderComponent: React.ReactElement,\r\n mainTitle: string,\r\n breadCrumbsPrefix: BreadCrumb[],\r\n isAutoRouteSetup: boolean = true\r\n ) {\r\n this.id = uuidv4();\r\n this.routePath = routePath;\r\n this.renderComponent = renderComponent;\r\n this.mainTitle = mainTitle;\r\n this.breadCrumbsPrefix = breadCrumbsPrefix;\r\n this.isAutoRouteSetup = isAutoRouteSetup;\r\n\r\n // Make the class observable\r\n makeObservable(this, {\r\n routePath: observable,\r\n renderComponent: observable,\r\n mainTitle: observable,\r\n breadCrumbsPrefix: observable,\r\n isAutoRouteSetup: observable,\r\n });\r\n }\r\n}","import \"./AccessDeniedPage.scss\";\r\n\r\nimport React, { useEffect } from \"react\";\r\n\r\ninterface Props {}\r\n\r\nconst AccessDeniedPage = (props: Props) => {\r\n const interval = 500;\r\n\r\n function generateLocks() {\r\n const lock: any = document.createElement(\"div\"),\r\n position = generatePosition();\r\n\r\n lock.innerHTML = '
';\r\n lock.style.top = position[0];\r\n lock.style.left = position[1];\r\n lock.classList = \"lock\"; // generated';\r\n document.body.appendChild(lock);\r\n setTimeout(() => {\r\n lock.style.opacity = \"1\";\r\n lock.classList.add(\"generated\");\r\n }, 100);\r\n setTimeout(() => {\r\n lock.parentElement.removeChild(lock);\r\n }, 2000);\r\n }\r\n function generatePosition() {\r\n const x = Math.round(Math.random() * 100 - 10) + \"%\";\r\n const y = Math.round(Math.random() * 100) + \"%\";\r\n return [x, y];\r\n }\r\n\r\n setInterval(generateLocks, interval);\r\n generateLocks();\r\n\r\n useEffect(() => {\r\n const htmlDom = document.querySelector(\"html\");\r\n htmlDom!.style!.margin = \"0\";\r\n htmlDom!.style!.padding = \"0\";\r\n htmlDom!.style!.height = \"100%\";\r\n htmlDom!.style!.overflow = \"hidden\";\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n

\r\n 4\r\n
\r\n
\r\n
\r\n
\r\n 3\r\n

\r\n

Access denied

\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default AccessDeniedPage;\r\n","import React, { useEffect } from \"react\";\r\n\r\nconst useOnInit = (callback: () => void) => {\r\n useEffect(() => {\r\n callback();\r\n }, [])\r\n}\r\n\r\n\r\nexport default useOnInit;\r\n","import React, { useEffect } from \"react\";\r\n\r\nconst useOnInitAsync = (callback: () => Promise, dependencyArray: any[] = []) => {\r\n useEffect(() => {\r\n (async () => {\r\n await callback();\r\n })();\r\n }, dependencyArray);\r\n};\r\n\r\nexport default useOnInitAsync;\r\n","import React, { useContext, useEffect } from \"react\";\r\nimport { useLocation } from \"react-router-dom\";\r\n\r\nimport { RootStoreContext } from \"../stores/RootStoreContext\";\r\n\r\ninterface Props {}\r\n\r\nconst useSetCurrentRoute = () => {\r\n const currentLocation = useLocation();\r\n const { uiStore } = useContext(RootStoreContext);\r\n\r\n useEffect(() => {\r\n uiStore.SetCurrentRoute(currentLocation.pathname);\r\n }, []);\r\n};\r\n\r\nexport default useSetCurrentRoute;\r\n","import { message } from \"antd\";\r\nimport { throws } from \"assert\";\r\nimport React, { useContext, useEffect } from \"react\";\r\nimport { useHistory } from \"react-router\";\r\nimport { useParams } from \"react-router-dom\";\r\n\r\nimport { RoutesPaths } from \"../constants/RoutePaths\";\r\nimport { BreadCrumb } from \"../models/BreadCrumb\";\r\nimport { Campaign } from \"../models/operation/Campaign\";\r\nimport { Company } from \"../models/operation/Company\";\r\nimport campaignService from \"../services/operation/CampaignService\";\r\nimport companyService from \"../services/operation/CompanyService\";\r\nimport { RootStoreContext } from \"../stores/RootStoreContext\";\r\nimport { UIStore } from \"../stores/UIStore\";\r\nimport useOnInit from \"./useOnInit\";\r\nimport useOnInitAsync from \"./useOnInitAsync\";\r\nimport useSetCurrentRoute from \"./useSetCurrentRoute\";\r\n\r\n/**\r\n * NOTE: Use that hook on every page component\r\n * Initializes page configuration\r\n */\r\nconst usePageInitialization = (initializeConfig: {\r\n pageTitle?: string;\r\n pageBreadCrumbs?: BreadCrumb[];\r\n onInitAsync?: () => Promise;\r\n onCallback?: (uiStore: UIStore) => void;\r\n onCampaignContextCallBack?: (campaign: Campaign, uiStore: UIStore) => void;\r\n onCompanyContextCallBack?: (company: Company, uiStore: UIStore) => void;\r\n}) => {\r\n const campaignMatch = useParams<{ campaignId?: string }>();\r\n const companyMatch = useParams<{ companyId?: string }>();\r\n const history = useHistory();\r\n\r\n const { uiStore, companyStore, campaignStore } = useContext(RootStoreContext);\r\n\r\n useSetCurrentRoute();\r\n\r\n useOnInit(() => {\r\n if (initializeConfig.pageTitle) {\r\n uiStore.SetPageTitle(initializeConfig.pageTitle);\r\n }\r\n if (initializeConfig.pageBreadCrumbs) {\r\n uiStore.AddBreadCrumbs(...initializeConfig.pageBreadCrumbs);\r\n }\r\n\r\n if (initializeConfig.onCallback) {\r\n initializeConfig.onCallback(uiStore);\r\n }\r\n });\r\n\r\n useOnInitAsync(async () => {\r\n if (initializeConfig.onInitAsync) {\r\n await initializeConfig.onInitAsync();\r\n }\r\n\r\n if (companyMatch.companyId) {\r\n uiStore.SetIsWebsiteLoading(true);\r\n try {\r\n const company = await companyService.GetCompanyById(\r\n Number(companyMatch.companyId)\r\n );\r\n companyStore.SetSelectedCompany(company);\r\n\r\n if (initializeConfig.onCompanyContextCallBack) {\r\n initializeConfig.onCompanyContextCallBack(company, uiStore);\r\n }\r\n } catch (err) {\r\n history.push(RoutesPaths.Supervision.Companies);\r\n message.error(\r\n `Account with ID: ${companyMatch.companyId} doesn't exist. Returned to home page`\r\n );\r\n } finally {\r\n uiStore.SetIsWebsiteLoading(false);\r\n }\r\n }\r\n\r\n if (campaignMatch.campaignId) {\r\n uiStore.SetIsWebsiteLoading(true);\r\n try {\r\n\r\n const campaign = await campaignService.GetById(\r\n Number(campaignMatch.campaignId)\r\n );\r\n campaignStore.SetSelectedCampaign(campaign);\r\n\r\n const company = await companyService.GetCompanyById(\r\n Number(campaign.companyId)\r\n );\r\n companyStore.SetSelectedCompany(company);\r\n\r\n if (initializeConfig.onCompanyContextCallBack) {\r\n initializeConfig.onCompanyContextCallBack(company, uiStore);\r\n }\r\n } catch (err) {\r\n history.push(RoutesPaths.Supervision.Companies);\r\n message.error(\r\n `Campaign with ID: ${campaignMatch.campaignId} doesn't exist. Returned to home page`\r\n );\r\n } finally {\r\n uiStore.SetIsWebsiteLoading(false);\r\n }\r\n }\r\n });\r\n};\r\n\r\nexport default usePageInitialization;\r\n","import { APIResponse } from \"../../models/APIResponse\";\r\nimport { CampaignSettingsAuditCreateModel } from \"../../models/campaign-track-system/CampaignSettingsAuditCreateModel\";\r\nimport { CampaignSettingsAuditResponse } from \"../../models/campaign-track-system/CampaignSettingsAuditResponse\";\r\nimport { PaginationParams } from \"../../models/pagination/PaginationParams\";\r\nimport { ISODateTime } from \"../../types/types\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\n\r\n\r\nexport class CampaignSettingAuditService extends BaseService {\r\n\r\n\r\n async GetCampaignSettingsAuditByPagination(campaignId: number, paginationOptions: PaginationParams)\r\n {\r\n\r\n const CampaignSettingsAuditData = await this.Post(`/paginate/${campaignId}` , paginationOptions);\r\n return CampaignSettingsAuditData;\r\n }\r\n\r\n\r\n async UpdateCampaignSettingsAudit(auditId: string, auditUpdateModel: CampaignSettingsAuditCreateModel): Promise {\r\n const UpdatedAudit = await this.Put(`/${auditId}`, auditUpdateModel);\r\n return UpdatedAudit;\r\n }\r\n\r\n\r\n async CreateCampaignSettingsAudit(campaignSettingsAuditCreateModel: CampaignSettingsAuditCreateModel): Promise {\r\n\r\n const createdAudit = await this.Post(\"\" , campaignSettingsAuditCreateModel);\r\n return createdAudit;\r\n }\r\n\r\n \r\n async DeleteCampaignSettingsAudit(campaignId: number, auditId: string): Promise {\r\n\r\n const deletedAudit = await this.Delete(`/${campaignId}/${auditId}`);\r\n return deletedAudit;\r\n }\r\n\r\n\r\n async UploadFile(file : any ,userId : string) : Promise>\r\n {\r\n const fromData = new FormData();\r\n fromData.append(\"csvFile\" , file);\r\n fromData.append(\"userId\" , userId);\r\n\r\n const fileUploaded = await this.Post>(`/bulk-upload` , fromData);\r\n\r\n return fileUploaded;\r\n }\r\n\r\n\r\n async GetFilteredCampaignSettingsAudits(getActionsRequest: { userId?: number, from?: ISODateTime, to?: ISODateTime,\r\n optionTypeId?: string , campaignId?: number\r\n }): Promise {\r\n\r\n let queryString = \"\";\r\n \r\n if (getActionsRequest.campaignId) {\r\n queryString += `&campaignId=${getActionsRequest.campaignId}`\r\n }\r\n if (getActionsRequest.optionTypeId) {\r\n queryString += `&optionTypeId=${getActionsRequest.optionTypeId}`\r\n }\r\n if (getActionsRequest.userId) {\r\n queryString += `&userId=${getActionsRequest.userId}`\r\n }\r\n if (getActionsRequest.from) {\r\n queryString += `&from=${getActionsRequest.from}`\r\n }\r\n if (getActionsRequest.to) {\r\n queryString += `&to=${getActionsRequest.to}`\r\n }\r\n\r\n let url = `/?q${queryString}`\r\n return await this.Get(url);\r\n \r\n }\r\n}\r\n\r\n\r\nconst campaignSettingAuditService = new CampaignSettingAuditService(\"CampaignSettingsAudit\");\r\nexport default campaignSettingAuditService;","\r\nexport enum CampaignSettingsStatus {\r\n Active = 1,\r\n Removed = 2\r\n}","import { CampaignSettingStore } from \"../../stores/CampaignSettingStore\";\r\nimport { ActionsBuilder } from \"../general/supervision-table/types\";\r\nimport { History } from \"history\";\r\nimport { FiEdit } from \"react-icons/fi\";\r\nimport { RiDeleteBin7Line } from \"react-icons/ri\";\r\nimport { RoutesPaths } from \"../../constants/RoutePaths\";\r\nimport { CampaignSettingsAuditDto } from \"./CampaignSettingsAudit.dto\";\r\nimport { UIStore } from \"../../stores/UIStore\";\r\nimport campaignSettingAuditService from \"../../services/campaign-setting/CampaignSettingAuditService\";\r\nimport { message, Typography } from \"antd\";\r\nimport { CampaignSettingsStatus } from \"../../models/campaign-track-system/CampaignSettingsStatus\";\r\n\r\nconst { Text } = Typography;\r\n\r\ntype CampaignSettingActionsContext = {\r\n campaignSettingStore: CampaignSettingStore;\r\n uiStore: UIStore;\r\n history: History;\r\n campaignId: number;\r\n};\r\n\r\nexport const CampaignSettingActionsBuilder: ActionsBuilder = ({\r\n history, campaignSettingStore, uiStore, campaignId\r\n}) => [\r\n\r\n {\r\n text: \"Edit Campaign Setting\",\r\n action: (campaignSettingAudit) => {\r\n campaignSettingStore.SetSelectedCampaignSettingAudit(\r\n campaignSettingStore.CampaignSettingsAuditsResponse?.find(\r\n (x) => x.id == campaignSettingAudit.id\r\n )\r\n );\r\n history.push({\r\n pathname:\r\n RoutesPaths.Supervision.CampaignTrackSystemRoutes.BuildEditCampaignSettingAudit(campaignId, campaignSettingAudit.id)\r\n });\r\n },\r\n Icon: FiEdit,\r\n isDisplayed: () => true,\r\n\r\n },\r\n\r\n {\r\n text: \"Delete audit\",\r\n action: (campaignSettingAudit) => {\r\n\r\n const popupBody = (\r\n

\r\n Sure you want to delete audit from campaign: {\" \"}\r\n {campaignSettingAudit.campaignName} with audit ID:{\" \"}\r\n {campaignSettingAudit.id}\r\n

\r\n );\r\n\r\n uiStore.SetPopUp(\r\n {\r\n body: popupBody,\r\n title: \"Stem Control Request\",\r\n okClickHandler: async () => {\r\n await campaignSettingAuditService.DeleteCampaignSettingsAudit(campaignId ,campaignSettingAudit.id);\r\n let auditIndex = campaignSettingStore\r\n .CampaignSettingsAuditsResponse\r\n .findIndex(x => x.id == campaignSettingAudit.id);\r\n campaignSettingStore.CampaignSettingsAuditsResponse[auditIndex].status = CampaignSettingsStatus.Removed\r\n\r\n message.success(\r\n `Audit Campaign Setting ID:${campaignSettingAudit.id} deleted`\r\n );\r\n },\r\n okButtonText: \"Accept\",\r\n }\r\n );\r\n },\r\n Icon: RiDeleteBin7Line,\r\n isDisplayed: () => true,\r\n\r\n }\r\n\r\n ]\r\n\r\n","import moment from \"moment\";\r\n\r\nimport { ISODateTime } from \"../types/types\";\r\n\r\nexport const dateFormat = \"MMM Do YYYY\";\r\nexport const dateTimeFormat = \"MMM Do YYYY, h:mm:ss a\";\r\nexport const minDate = moment.utc(\"0001-01-01\");\r\n \r\n\r\n\r\nexport const FormatDate = (date: ISODateTime) => {\r\n\r\n return moment(date).format(dateFormat);\r\n}\r\n\r\nexport const FormatDateTime = (date: ISODateTime) => {\r\n // const format = \"MM/DD/YYYY, h:mm:ss a\";\r\n return moment(date).format(dateTimeFormat)\r\n}\r\n\r\nexport const FormatDateIfValid = (date: ISODateTime) => {\r\n if (moment(date).isAfter(minDate)) {\r\n return FormatDate(date)\r\n }\r\n else{\r\n return'';\r\n }\r\n }","/**\r\n * Creates a table dto that is displayed in the table\r\n */\r\nexport class TableDto {\r\n public _id?: number;\r\n}","import { CampaignSettingsAuditResponse } from \"../../models/campaign-track-system/CampaignSettingsAuditResponse\";\r\nimport { CampaignSettingsStatus } from \"../../models/campaign-track-system/CampaignSettingsStatus\";\r\nimport { ISODateTime } from \"../../types/types\";\r\nimport { FormatDate } from \"../../utils/DateHelpers\";\r\nimport { TableDto } from \"../general/supervision-table/Table.dto\";\r\n\r\n\r\n\r\nexport class CampaignSettingsAuditDto extends TableDto {\r\n constructor(\r\n public id: string,\r\n public campaignId: number,\r\n public companyId: number,\r\n public date : ISODateTime,\r\n public status: string,\r\n public campaignName: string,\r\n public type : string,\r\n public value: string,\r\n public caseNumber: string,\r\n public userName: string,\r\n public comment: string\r\n\r\n ) {\r\n super();\r\n }\r\n\r\n public static MapFromCampaignSettingsAudit(campaignSettingsAudit: CampaignSettingsAuditResponse) {\r\n return new CampaignSettingsAuditDto(\r\n campaignSettingsAudit.id,\r\n campaignSettingsAudit.campaignId,\r\n campaignSettingsAudit.companyId,\r\n FormatDate(campaignSettingsAudit.creationDate),\r\n campaignSettingsAudit.status ? CampaignSettingsStatus[campaignSettingsAudit.status] : \"N.A\",\r\n campaignSettingsAudit.campaignName,\r\n campaignSettingsAudit.type,\r\n campaignSettingsAudit.value,\r\n campaignSettingsAudit.caseNumber,\r\n campaignSettingsAudit.userName,\r\n campaignSettingsAudit.comment\r\n\r\n )\r\n }\r\n}","import { Tooltip } from \"antd\";\r\nimport React from \"react\";\r\n\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport { RowActionSettings } from \"./types\";\r\n\r\ntype Props = {\r\n rowActionSettings?: RowActionSettings;\r\n};\r\n\r\nconst BuildActionsColumn = (columnOptions: Props) => {\r\n const { rowActionSettings } = columnOptions;\r\n\r\n const actionsColumn: any = {\r\n title: \"Actions\",\r\n render: (text: any, record: T) => (\r\n \r\n {rowActionSettings &&\r\n rowActionSettings.actions.map(\r\n (action) =>\r\n action.isDisplayed(record) && (\r\n action.action(record)}>\r\n \r\n \r\n \r\n \r\n )\r\n )}\r\n \r\n ),\r\n };\r\n\r\n return actionsColumn;\r\n};\r\n\r\nexport default BuildActionsColumn;\r\n","import \"./SupervisionTable.scss\";\r\n\r\nimport { Button, Input, InputRef, Space } from \"antd\";\r\nimport {\r\n FilterConfirmProps,\r\n FilterDropdownProps,\r\n Key\r\n} from \"antd/lib/table/interface\";\r\nimport { makeObservable, observable } from \"mobx\";\r\nimport Highlighter from \"react-highlight-words\";\r\n\r\nimport { SearchOutlined } from \"@ant-design/icons\";\r\n\r\nexport class SearchColumn {\r\n private _dataIndex: string;\r\n private _searchInput: InputRef | null = null;\r\n\r\n constructor(dataIndex: string) {\r\n makeObservable(this);\r\n this._dataIndex = dataIndex;\r\n }\r\n\r\n @observable\r\n public searchText: string = \"\";\r\n\r\n @observable\r\n public searchColumn: string = \"\";\r\n\r\n public handleSearch(\r\n selectedKeys: Key[],\r\n confirm: (param?: FilterConfirmProps | undefined) => void,\r\n dataIndex: string\r\n ) {\r\n confirm(); //triggers OnFilter() function in CreateColumn()\r\n this.searchText = selectedKeys[0] as string;\r\n this.searchColumn = dataIndex;\r\n }\r\n\r\n public handleReset(\r\n clearFilters: (() => void) | undefined,\r\n confirm: (param?: FilterConfirmProps | undefined) => void\r\n ) {\r\n clearFilters!();\r\n this.searchText = \"\";\r\n confirm();\r\n }\r\n\r\n public CreateColumn() {\r\n return {\r\n filterDropdown: ({\r\n setSelectedKeys,\r\n selectedKeys,\r\n confirm,\r\n clearFilters,\r\n }: FilterDropdownProps) => (\r\n
\r\n {\r\n this._searchInput = node;\r\n }}\r\n placeholder={`Search ${this._dataIndex}`}\r\n value={selectedKeys[0]}\r\n onChange={(e) =>\r\n setSelectedKeys(\r\n e.target.value ? [e.target.value] : []\r\n )\r\n }\r\n onPressEnter={() =>\r\n this.handleSearch(\r\n selectedKeys,\r\n confirm,\r\n this._dataIndex\r\n )\r\n }\r\n style={{ marginBottom: 8, display: \"block\" }}\r\n />\r\n \r\n \r\n this.handleSearch(\r\n selectedKeys,\r\n confirm,\r\n this._dataIndex\r\n )\r\n }\r\n icon={}\r\n size=\"small\"\r\n style={{ width: 90 }}>\r\n Search\r\n \r\n \r\n this.handleReset(clearFilters, confirm)\r\n }\r\n size=\"small\"\r\n style={{ width: 90 }}>\r\n Reset\r\n \r\n \r\n
\r\n ),\r\n filterIcon: (filtered: boolean) => (\r\n \r\n ),\r\n onFilter: (value: string, record: T) => {\r\n let recordKeyValue = (record as any)[this._dataIndex];\r\n return recordKeyValue\r\n ? recordKeyValue\r\n .toString()\r\n .toLowerCase()\r\n .includes(value.toLowerCase())\r\n : false;\r\n },\r\n onFilterDropdownVisibleChange: (visible: boolean) => {\r\n if (visible && this._searchInput != null) {\r\n setTimeout(() => this._searchInput!.select(), 100);\r\n }\r\n },\r\n render: (text: any, record: T) => {\r\n if (this.searchColumn == this._dataIndex) {\r\n return (\r\n \r\n );\r\n }\r\n return text;\r\n },\r\n };\r\n }\r\n}\r\n","import moment from \"moment\";\r\n\r\nimport { EnumDefinition } from \"../../../types/types\";\r\nimport { dateFormat, dateTimeFormat } from \"../../../utils/DateHelpers\";\r\nimport BuildActionsColumn from \"./ActionsColumn\";\r\nimport { SearchColumn } from \"./SearchColumn\";\r\nimport {\r\n CategoricalColumns,\r\n RowActionSettings,\r\n TableColumn,\r\n TableColumnDataType\r\n} from \"./types\";\r\n\r\nexport const BuildColumns = (\r\n dataSource: T[],\r\n rowActionSettings?: RowActionSettings,\r\n categoricalColumns?: CategoricalColumns[]\r\n) => {\r\n let tableColumns = BuildColumnsFromSchema(\r\n dataSource[0],\r\n categoricalColumns\r\n );\r\n\r\n // Remove _id column\r\n tableColumns = tableColumns.filter((column) => column.title != \"_id\");\r\n\r\n if (rowActionSettings && rowActionSettings.showActionsOnLastColumn) {\r\n tableColumns = [\r\n ...tableColumns,\r\n BuildActionsColumn({ rowActionSettings }),\r\n ];\r\n }\r\n\r\n return tableColumns;\r\n};\r\n\r\nconst BuildColumnsFromSchema = (\r\n record: T,\r\n categoricalColumns?: CategoricalColumns[]\r\n): TableColumn[] => {\r\n return Reflect.ownKeys(record).map((key) => {\r\n let column: TableColumn = {\r\n dataType: ParseDataType(record, key, categoricalColumns),\r\n dataIndex: key.toString(),\r\n title: [...key.toString()].reduce(\r\n (prev: string, cur: string, index: number) => {\r\n if (index == 0) {\r\n return key.toString()[0].toUpperCase();\r\n } else if (cur.match(/[A-Z]/)) {\r\n return (prev += ` ${cur}`);\r\n }\r\n return prev + cur;\r\n },\r\n \"\"\r\n ),\r\n };\r\n\r\n return column;\r\n });\r\n};\r\n\r\nfunction ParseDataType(\r\n record: T,\r\n key: string | symbol,\r\n categoricalColumns?: CategoricalColumns[]\r\n): TableColumnDataType {\r\n if (categoricalColumns && categoricalColumns.some((c) => c.column == key)) {\r\n return \"categorical\";\r\n }\r\n\r\n const value = (record as any)[key as any];\r\n if (typeof value == \"number\" || IsANumberWithPrefixOrPostfix(value)) {\r\n return \"number\";\r\n }\r\n\r\n if (IsADateTime(value)) {\r\n return \"datetime\";\r\n }\r\n return \"string\";\r\n}\r\n\r\nfunction IsANumberWithPrefixOrPostfix(value: string): boolean {\r\n if (!value) return false;\r\n const match = (value.match(/.\\d+./gi) ?? [\"\"])[0];\r\n return value.length == match.length;\r\n}\r\n\r\nfunction IsADateTime(value: string): boolean {\r\n return (\r\n moment(value, dateFormat).isValid() ||\r\n moment(value, dateTimeFormat).isValid()\r\n );\r\n}\r\n\r\n//https://ant.design/components/table/#Column\r\ntype AntDesignColumnType = any;\r\n\r\nexport const PopulateColumnActions = (\r\n column: TableColumn,\r\n categoricalColumns?: CategoricalColumns[]\r\n): AntDesignColumnType => {\r\n if (column.title == \"Actions\") {\r\n return column;\r\n }\r\n\r\n const searchColumn = new SearchColumn(column.dataIndex);\r\n\r\n // only numbers are sortable or strings that are numbers with prefix or postfix\r\n if (column.dataType == \"number\") {\r\n const extractNumber = (value: string | number): number =>\r\n Number((value.toString()?.match(/\\d+/gi) ?? [0])[0]);\r\n\r\n // we need to add \"sorter\" property to add sorting to our table\r\n return {\r\n ...column,\r\n ...searchColumn.CreateColumn(),\r\n sorter: (a: any, b: any) =>\r\n extractNumber(a[column.dataIndex]) -\r\n extractNumber(b[column.dataIndex]),\r\n };\r\n }\r\n\r\n if (column.dataType == \"categorical\") {\r\n // we need to add \"filters\" and \"onFilter\" property to add categorical filtering\r\n const categoricalColumnOptions = categoricalColumns?.find(\r\n (x) => x.column == column.dataIndex\r\n );\r\n\r\n if (!categoricalColumnOptions) {\r\n return column;\r\n }\r\n\r\n let filters: string[] = [];\r\n if (categoricalColumnOptions.possibleValues.hasOwnProperty(\"length\")) {\r\n // then possibleValue = string list\r\n filters = categoricalColumnOptions.possibleValues as string[];\r\n } else {\r\n for (let key in categoricalColumnOptions.possibleValues as EnumDefinition) {\r\n if (!key.match(/^\\d+$/)) {\r\n filters.push(key);\r\n }\r\n }\r\n }\r\n\r\n return {\r\n ...column,\r\n filters: filters.map((value) => ({\r\n text: value,\r\n value: value,\r\n })),\r\n onFilter: (filteredValue: any, record: T) => {\r\n const recordPropertyValue = (record as any)[column.dataIndex];\r\n return filteredValue == recordPropertyValue;\r\n },\r\n defaultFilteredValue: categoricalColumnOptions.defaultFilteredValue,\r\n };\r\n }\r\n\r\n // sort date timer\r\n if (column.dataType == \"datetime\") {\r\n const extractDateValueSinceUnixEpoch = (value: string): number =>\r\n moment(value, dateTimeFormat).unix();\r\n\r\n // we need to add \"sorter\" property to add sorting to our table\r\n return {\r\n ...column,\r\n ...searchColumn.CreateColumn(),\r\n sorter: (a: any, b: any) =>\r\n extractDateValueSinceUnixEpoch(a[column.dataIndex]) -\r\n extractDateValueSinceUnixEpoch(b[column.dataIndex]),\r\n };\r\n }\r\n\r\n return {\r\n ...column,\r\n ...searchColumn.CreateColumn(),\r\n };\r\n};\r\n","import { Dropdown, Menu } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\n\r\nimport { DOMCoordinates } from \"../../../types/types\";\r\nimport { RightClickData, RowAction } from \"./types\";\r\n\r\nconst defaultDropdownCoordinates: DOMCoordinates = {\r\n xPosition: 230,\r\n yPosition: 240,\r\n};\r\n\r\ninterface Props {\r\n rightClickData: RightClickData | undefined;\r\n dropDownMenu: RowAction[];\r\n}\r\n\r\nconst RightClickDropdown = (props: Props) => {\r\n const { rightClickData,dropDownMenu } = props;\r\n\r\n if (!rightClickData) {\r\n return <>;\r\n }\r\n\r\n const dropdownMenu = (\r\n \r\n {dropDownMenu.map((data, index) => (\r\n data.isDisplayed(rightClickData.clickedRowData)\r\n &&\r\n }\r\n onClick={() => {\r\n data.action(rightClickData.clickedRowData)\r\n }}>\r\n {data.text}\r\n \r\n ))}\r\n \r\n );\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default observer(RightClickDropdown);\r\n","import { Table } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\n\r\nimport { TableColumn } from \"./types\";\r\n\r\ntype Props = {\r\n dataSource: T[];\r\n tableColumns: TableColumn[];\r\n pageData: readonly (T & {\r\n key: number;\r\n })[];\r\n};\r\n\r\nconst FillRestOfCellsEmpty = (tableColumns: TableColumn[]) => {\r\n return (\r\n <>\r\n {/* We need to skip first to indexes because they are taken for the summary text */}\r\n {tableColumns.map((_, i) => {\r\n if (i < 2) {\r\n return;\r\n }\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nconst TableFooter = (props: Props) => {\r\n const { dataSource, tableColumns, pageData } = props;\r\n return (\r\n \r\n \r\n Summary\r\n \r\n Contains: {dataSource.length} rows\r\n \r\n \r\n {FillRestOfCellsEmpty(tableColumns)}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default observer(TableFooter);\r\n","import \"./SupervisionTable.scss\";\r\n\r\nimport { Divider, Radio, Table } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { useState } from \"react\";\r\n\r\nimport { BuildColumns, PopulateColumnActions } from \"./ColumnsBuilder\";\r\nimport RightClickDropdown from \"./RightClickDropdown\";\r\nimport TableFooter from \"./TableFooter\";\r\nimport { CategoricalColumns, RightClickData, RowActionSettings } from \"./types\";\r\nimport { TableRowSelection } from \"antd/lib/table/interface\";\r\nimport { TableDto } from \"./Table.dto\";\r\n\r\ninterface Props {\r\n dataSource: T[];\r\n rowActionSettings?: RowActionSettings;\r\n categoricalColumns?: CategoricalColumns[];\r\n tableRowSelection?: TableRowSelection;\r\n expandableDataSource?: Y[];\r\n isExpendable?: boolean;\r\n isShowSizeChanger?: boolean;\r\n expandableActionSettings?: RowActionSettings;\r\n isChild?: boolean;\r\n}\r\n\r\nconst SupervisionTable = (props: Props) => {\r\n const { dataSource, rowActionSettings, categoricalColumns,\r\n tableRowSelection, expandableDataSource, expandableActionSettings,\r\n isExpendable, isChild ,isShowSizeChanger} = props;\r\n \r\n var expandableDataSources = new Array();\r\n if(expandableDataSource != undefined)\r\n {\r\n expandableDataSources = expandableDataSource;\r\n }\r\n\r\n const [expandedRowKeys, setExpandedRowKeys] = useState([]);\r\n\r\n const [rightClickData, setRightClickData] = useState<\r\n RightClickData | undefined\r\n >();\r\n const [selectionType, setSelectionType] = useState<'checkbox' | 'radio'>('checkbox');\r\n \r\n let tableColumns = BuildColumns(\r\n dataSource,\r\n rowActionSettings,\r\n categoricalColumns\r\n );\r\n\r\n return (\r\n <>\r\n {rowActionSettings && rowActionSettings.showActionsOnRightClick && (\r\n \r\n )}\r\n {\r\n return {\r\n onClick: () => {\r\n setRightClickData(undefined);\r\n },\r\n onContextMenu: (event) => {\r\n event.preventDefault();\r\n setRightClickData({\r\n clickCoordinates: {\r\n xPosition: event.clientX,\r\n yPosition: event.clientY,\r\n },\r\n rowIndex: rowIndex ?? -1, // Should never get to -1\r\n clickedRowData: record,\r\n });\r\n },\r\n };\r\n }}\r\n rowClassName={(record, index) => {\r\n if (index == rightClickData?.rowIndex) {\r\n return \"table-row-right-clicked\";\r\n }\r\n return \"\";\r\n }}\r\n size= {isChild ? \"small\" : \"middle\"}\r\n columns={tableColumns.map((tableColumn) =>\r\n PopulateColumnActions(tableColumn, categoricalColumns)\r\n )}\r\n dataSource={dataSource.map((data, i) => ({ ...data, key: data._id != undefined ? data._id : i }))}\r\n expandable={{\r\n expandedRowRender: (record) => x._id == record.key)}\r\n rowActionSettings={expandableActionSettings}\r\n isChild={true}\r\n />,\r\n rowExpandable: (record) => isExpendable ?? false,\r\n }}\r\n pagination={ isChild ? false : {\r\n \r\n showSizeChanger: isShowSizeChanger,\r\n }}\r\n onChange={(pagination, filters, sorter, extra) => {\r\n // console.log(\"params\", pagination, filters, sorter, extra);\r\n }}\r\n summary={(pageData) => (\r\n \r\n )}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default observer(SupervisionTable);\r\n","import { Empty} from \"antd\";\r\nimport { useContext, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { CampaignSettingsAuditResponse } from \"../../models/campaign-track-system/CampaignSettingsAuditResponse\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport { CampaignSettingActionsBuilder } from \"./CampaignSettingAuditTable.actions\";\r\nimport { CampaignSettingsAuditDto } from \"./CampaignSettingsAudit.dto\";\r\n\r\nimport { observer } from \"mobx-react-lite\";\r\nimport SupervisionTable from \"../general/supervision-table/SupervisionTable\";\r\n\r\ninterface Props {\r\n campaignId: number;\r\n campaignAudits: CampaignSettingsAuditResponse[];\r\n}\r\n\r\n\r\n\r\nconst CampaignSettingAuditTable = (props: Props) => {\r\n\r\n const {campaignAudits , campaignId } = props;\r\n const { campaignSettingStore, uiStore } = useContext(RootStoreContext);\r\n const history = useHistory();\r\n \r\n\r\n if (campaignAudits.length == 0) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n
\r\n\r\n\r\n \r\n
\r\n\r\n )\r\n}\r\n\r\n\r\n\r\nexport default observer(CampaignSettingAuditTable);","import { CampaignSettingTypeResponse } from \"../../models/campaign-track-system/CampaignSettingTypeResponse\";\r\nimport { CampaignSettingTypeValueOption } from \"../../models/campaign-track-system/CampaignSettingTypeValueOption\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\n\r\n\r\nexport class CampaignSettingTypeService extends BaseService \r\n{\r\n\r\n async GetCampaignSettingTypes() {\r\n\r\n const CampaignSettingTypeData = await this.Get(\"\");\r\n return CampaignSettingTypeData;\r\n }\r\n\r\n async GetSettingTypeValueOptionsPerType(campaignSettingTypeId: number) {\r\n\r\n const CampaignSettingTypeData = await this.Get(`/${campaignSettingTypeId}/valueOptions`);\r\n return CampaignSettingTypeData;\r\n }\r\n\r\n\r\n}\r\n\r\nconst campaignSettingTypeService = new CampaignSettingTypeService(\"CampaignSettingTypes\");\r\nexport default campaignSettingTypeService;","import { message } from \"antd\";\r\nimport { RoutesPaths } from \"../../../../constants/RoutePaths\";\r\nimport { PaginationParams } from \"../../../../models/pagination/PaginationParams\";\r\nimport campaignSettingAuditService from \"../../../../services/campaign-setting/CampaignSettingAuditService\";\r\nimport campaignSettingTypeService from \"../../../../services/campaign-setting/CampaignSettingTypeService\";\r\nimport { CampaignSettingStore } from \"../../../../stores/CampaignSettingStore\";\r\n\r\n\r\n\r\n\r\n\r\nexport const CampaignSettingContextInitializers = {\r\n\r\n\r\n InitializeCampaignAuditData: async (campaignId: number, campaignSettingStore: CampaignSettingStore, history: any) => {\r\n try {\r\n\r\n const _auditData = await campaignSettingAuditService.GetFilteredCampaignSettingsAudits({ campaignId });\r\n campaignSettingStore.SetCampaignSettingsAudits(_auditData);\r\n\r\n }\r\n catch (err) {\r\n history.push(RoutesPaths.Supervision.Campaigns);\r\n message.error(\r\n `Campaign with ID: ${campaignId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n InitializeCampaignSettingTypes: async (campaignSettingStore: CampaignSettingStore, history: any) => {\r\n try {\r\n\r\n const _settingTypesData = await campaignSettingTypeService.GetCampaignSettingTypes();\r\n\r\n await campaignSettingStore.SetCampaignSettingTypes(_settingTypesData);\r\n\r\n }\r\n catch (err) {\r\n history.push(RoutesPaths.Supervision.Campaigns);\r\n message.error(\r\n `Failed to find Campaign setting types Returned to home page`\r\n );\r\n }\r\n } ,\r\n\r\n InitializeSelectedCampaignSettingAudit: async (auditId: string, campaignSettingStore: CampaignSettingStore, history: any) => {\r\n\r\n try {\r\n\r\n campaignSettingStore.SetSelectedCampaignSettingAudit(\r\n campaignSettingStore.CampaignSettingsAuditsResponse?.find(\r\n (x) => x.id == auditId\r\n ));\r\n }\r\n catch (err) {\r\n history.push(RoutesPaths.Supervision.Campaigns);\r\n message.error(\r\n `Failed to find Campaign setting types Returned to home page`\r\n );\r\n }\r\n }\r\n\r\n}\r\n","import { RoutesPaths } from \"../../../../constants/RoutePaths\";\r\nimport { BreadCrumb } from \"../../../../models/BreadCrumb\";\r\n\r\nexport const SupervisionBreadcrumbs = {\r\n\r\n Affiliates: (affiliateName: string) => {\r\n return new BreadCrumb(affiliateName, null, null);\r\n },\r\n Campaigns: (campaignName: string) => {\r\n return new BreadCrumb(campaignName, null, null);\r\n },\r\n Companies: (companyName: string) => {\r\n return new BreadCrumb(companyName, null, null);\r\n },\r\n};\r\n","import { RoutesPaths } from \"../../../../constants/RoutePaths\";\r\nimport { BreadCrumb } from \"../../../../models/BreadCrumb\";\r\n\r\n\r\n\r\nexport const CampaignSettingBreadCrumbs =\r\n{\r\n\r\n CampaignSetting: (campaignId: number) => {\r\n return new BreadCrumb(\r\n \"Campaign-Settings\",\r\n RoutesPaths.Supervision.CampaignTrackSystemRoutes.BuildCampaignRoute(campaignId),\r\n null\r\n );\r\n },\r\n CampaignSettingAudit : (CampaignName: string) => {\r\n return new BreadCrumb(CampaignName, null, null);\r\n },\r\n AddCampaignSettingAudit : (campaignId: number) => {\r\n return new BreadCrumb(\r\n \"Add Audit\",\r\n RoutesPaths.Supervision.CampaignTrackSystemRoutes.BuildAddCampaignSettingAudit(campaignId),\r\n null\r\n );\r\n },\r\n EditCampaignSettingAudit: (campaignId: number, campaignSettingAuditId: string) => {\r\n return new BreadCrumb(\r\n \"Edit\",\r\n RoutesPaths.Supervision.CampaignTrackSystemRoutes.BuildEditCampaignSettingAudit(\r\n campaignId,\r\n campaignSettingAuditId\r\n ),\r\n null\r\n );\r\n }\r\n\r\n}\r\n\r\nexport default CampaignSettingBreadCrumbs;","\r\nimport { User } from \"../../models/users/User\";\r\nimport { UserResponse } from \"../../models/users/UserResponse\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\nexport class UserService extends BaseService {\r\n async GetAll(): Promise {\r\n return await this.Get(\"/\");\r\n }\r\n\r\n async GetUserById(userId: number | string): Promise {\r\n return await this.Get(`/${userId}`);\r\n }\r\n\r\n async GetByUserEmail(email: string): Promise {\r\n return await this.Get(`/get-by/email/${email}`);\r\n }\r\n}\r\n\r\nexport const userService = new UserService(\"users\");","import { Spin } from \"antd\";\r\nimport React, { CSSProperties } from \"react\";\r\n\r\ninterface Props {\r\n position: \"center\" | \"pad-top\" | \"normal\";\r\n}\r\n\r\nconst Loader = (props: Props) => {\r\n\r\n const createStyles = (): CSSProperties => {\r\n switch (props.position) {\r\n case \"center\":\r\n return {\r\n left: \"50%\",\r\n top: \"50%\",\r\n transform: \"translate(-50%, -50%)\",\r\n };\r\n case \"pad-top\":\r\n return {\r\n marginTop: \"2rem\",\r\n };\r\n case \"normal\":\r\n return {};\r\n }\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default Loader;\r\n","import { AutoComplete } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { useState } from \"react\";\r\n\r\nimport useOnInitAsync from \"../../../hooks/useOnInitAsync\";\r\nimport { UserResponse } from \"../../../models/users/UserResponse\";\r\nimport { userService } from \"../../../services/users/UserService\";\r\nimport Loader from \"../loader/Loader\";\r\n\r\ntype Props = {\r\n defaultValue?: UserResponse;\r\n onChange?: (user: UserResponse | undefined) => void;\r\n onClear?: () => void;\r\n};\r\n\r\nconst SelectUserInput = (props: Props) => {\r\n const { defaultValue, onChange, onClear } = props;\r\n\r\n const [users, setUsers] = useState([]);\r\n const [usersFiltered, setUsersFiltered] = useState([]);\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n useOnInitAsync(async () => {\r\n const _users = await userService.GetAll();\r\n setUsers(_users);\r\n setUsersFiltered(_users);\r\n\r\n setIsLoading(false);\r\n });\r\n\r\n if (isLoading) {\r\n return ;\r\n }\r\n\r\n const initialValue = () => {\r\n if (!defaultValue) return \"\";\r\n\r\n return displayValue(defaultValue);\r\n };\r\n\r\n const displayValue = (user: UserResponse) => `${user.name} (${user.id})`;\r\n\r\n return (\r\n
\r\n ({\r\n value: displayValue(user),\r\n }))}\r\n style={{ width: 300 }}\r\n defaultValue={initialValue()}\r\n onSelect={(value: string) => {\r\n const match = value.match(/\\d+/gi);\r\n if (match == null) return;\r\n\r\n const userId = Number(match[0]);\r\n const selectedUser = users.find((x) => x.id == userId);\r\n\r\n onChange && onChange(selectedUser);\r\n }}\r\n onSearch={(value) => {\r\n if (value == undefined || value == \"\") {\r\n setUsersFiltered(users);\r\n }\r\n\r\n setUsersFiltered(\r\n users.filter((x) =>\r\n x.name.toLowerCase().includes(value.toLowerCase())\r\n )\r\n );\r\n }}\r\n allowClear\r\n onClear={() => {\r\n onClear && onClear();\r\n }}\r\n placeholder=\"User Name\"\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport default observer(SelectUserInput);\r\n","import { Upload, message, Button, Row, Col } from 'antd';\r\nimport { UploadOutlined } from '@ant-design/icons';\r\nimport campaignSettingAuditService from '../../services/campaign-setting/CampaignSettingAuditService';\r\nimport { useContext, useState } from 'react';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { RootStoreContext } from '../../stores/RootStoreContext';\r\nimport { Box } from '@material-ui/core';\r\nimport \"./UploadCsvFile.scss\";\r\n\r\nconst UploadCsvFile = () => {\r\n\r\n const [uploadDisabled, setUploadDisabled] = useState(true);\r\n const { userStore } = useContext(RootStoreContext);\r\n const [infoFile, setInfoFile] = useState({});\r\n\r\n const onChange = (info: any) => {\r\n\r\n if (info.file.status !== 'uploading') {\r\n // console.log(info.file, info.fileList);\r\n }\r\n if (info.file.status === 'done') {\r\n message.success(`${info.file.name} file uploaded successfully`);\r\n } else if (info.file.status === 'error') {\r\n message.error(`${info.file.error}. ${info.file.name} file upload failed.`);\r\n }\r\n }\r\n\r\n const uploadFile = async () => {\r\n\r\n\r\n await campaignSettingAuditService.UploadFile(infoFile.file, userStore.User!.id.toString())\r\n .then((response) => {\r\n if (response.isError) {\r\n infoFile.onError(response.body);\r\n }\r\n else\r\n infoFile.onSuccess(\"ok\");\r\n\r\n setUploadDisabled(true);\r\n })\r\n\r\n\r\n }\r\n\r\n const chooseFile = (info: any) => {\r\n\r\n setInfoFile(info);\r\n setUploadDisabled(false);\r\n\r\n }\r\n\r\n const onRemove = () => {\r\n\r\n setUploadDisabled(true);\r\n }\r\n\r\n return (\r\n \r\n\r\n \r\n \r\n \r\n }\r\n type=\"primary\"\r\n shape=\"round\"\r\n size=\"large\"\r\n style={{\r\n alignItems: \"center\",\r\n display: 'inline-flex',\r\n width: 177,\r\n }}>\r\n Choose File\r\n \r\n \r\n \r\n \r\n }\r\n type=\"primary\"\r\n shape=\"round\"\r\n size=\"large\"\r\n style={{\r\n display: 'inline-flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n marginLeft: 10\r\n }} >\r\n Upload\r\n \r\n \r\n )\r\n}\r\n\r\n\r\n\r\nexport default observer(UploadCsvFile);","import { useContext, useState } from \"react\";\r\nimport { Link, useHistory, useParams } from \"react-router-dom\";\r\nimport useOnInitAsync from \"../../../hooks/useOnInitAsync\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { CampaignSettingsAuditResponse } from \"../../../models/campaign-track-system/CampaignSettingsAuditResponse\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport AuditTable from \"../../../components/campaign-track-system/CampaignSettingAuditTable\";\r\nimport { CampaignSettingContextInitializers } from \"./helpers/CampaignSettingContextInitializers\";\r\nimport { AutoComplete, Button, DatePicker, Empty, message, Space } from \"antd\";\r\nimport { BiPlusCircle } from \"react-icons/bi\";\r\nimport { RoutesPaths } from \"../../../constants/RoutePaths\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport CampaignSettingBreadCrumbs from \"./helpers/CampaignSetting.breadcrumbs\";\r\nimport { ISODateTime } from \"../../../types/types\";\r\nimport { UserResponse } from \"../../../models/users/UserResponse\";\r\nimport { Moment } from \"moment\";\r\nimport SelectUserInput from \"../../../components/general/inputs/SelectUserInput\";\r\nimport Loader from \"../../../components/general/loader/Loader\";\r\nimport moment from \"moment\";\r\nimport campaignSettingAuditService from \"../../../services/campaign-setting/CampaignSettingAuditService\";\r\nimport UploadCsvFile from \"../../../components/campaign-track-system/UploadCsvFile\";\r\n\r\n\r\ninterface Props { }\r\n\r\ntype FilterSettings = {\r\n userId?: number;\r\n from?: ISODateTime;\r\n to?: ISODateTime;\r\n optionTypeId?: string;\r\n campaignId?: number;\r\n};\r\n\r\nconst CampaignTrackAuditPage = (props: Props) => {\r\n const match = useParams<{ campaignId: string }>();\r\n const { campaignSettingStore } = useContext(RootStoreContext);\r\n const history = useHistory();\r\n\r\n const [filterSettings, setFilterSettings] = useState({ campaignId: Number(match.campaignId) });\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [userInputValue, setUserInputValue] = useState();\r\n\r\n const [typeValue, setTypeValue] = useState();\r\n const campaignSettingTypes = campaignSettingStore.CampaignSettingTypes;\r\n\r\n usePageInitialization({\r\n\r\n onInitAsync: async () => {\r\n await CampaignSettingContextInitializers.InitializeCampaignAuditData(\r\n Number(match.campaignId),\r\n campaignSettingStore,\r\n history\r\n )\r\n\r\n await CampaignSettingContextInitializers.InitializeCampaignSettingTypes(\r\n campaignSettingStore,\r\n history\r\n )\r\n\r\n setIsLoading(false);\r\n },\r\n\r\n onCampaignContextCallBack: (campaign, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `Campaign Audits for: ${campaign.campaignName}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Campaigns(campaign.campaignName),\r\n CampaignSettingBreadCrumbs.CampaignSetting(campaign.campaignID),\r\n );\r\n },\r\n })\r\n\r\n\r\n if (!campaignSettingStore.CampaignSettingsAuditsResponse) {\r\n return ;\r\n }\r\n\r\n\r\n const filterHandler = async () => {\r\n setIsLoading(true);\r\n await campaignSettingAuditService.GetFilteredCampaignSettingsAudits(filterSettings)\r\n .then(\r\n (audits) => {\r\n\r\n campaignSettingStore.SetCampaignSettingsAudits(audits);\r\n }\r\n )\r\n\r\n setIsLoading(false);\r\n message.info(\"Filtered actions\");\r\n };\r\n\r\n const initialDateValue = () => {\r\n let date: [Moment?, Moment?] = [undefined, undefined];\r\n\r\n if (filterSettings.from) {\r\n date[0] = moment(filterSettings.from);\r\n }\r\n if (filterSettings.to) {\r\n date[1] = moment(filterSettings.to);\r\n }\r\n return date;\r\n };\r\n\r\n if (isLoading) {\r\n return ;\r\n }\r\n\r\n const typeOptions = campaignSettingTypes\r\n ?.filter((x) =>\r\n x.settingType\r\n .toLowerCase()\r\n\r\n )\r\n .map((x) => ({ value: x.settingType, id: x.id }));\r\n\r\n\r\n return (\r\n\r\n
\r\n \r\n {\r\n setUserInputValue(user);\r\n setFilterSettings({\r\n ...filterSettings,\r\n userId: user?.id,\r\n });\r\n }}\r\n onClear={() => {\r\n setUserInputValue(undefined);\r\n setFilterSettings({\r\n ...filterSettings,\r\n userId: undefined,\r\n });\r\n }}\r\n />\r\n {\r\n setFilterSettings({\r\n ...filterSettings,\r\n optionTypeId: selectedType?.id,\r\n });\r\n setTypeValue(typeValue);\r\n }}\r\n allowClear\r\n onClear={() => {\r\n setFilterSettings({\r\n ...filterSettings,\r\n optionTypeId: undefined,\r\n });\r\n setTypeValue(\"\");\r\n }}\r\n value={typeValue}\r\n placeholder=\"Setting Type\"\r\n />\r\n\r\n {\r\n const from = date?.[0];\r\n const to = date?.[1];\r\n\r\n setFilterSettings({\r\n ...filterSettings,\r\n from: from?.toISOString() || undefined,\r\n to: to?.toISOString() || undefined,\r\n });\r\n }}\r\n defaultValue={initialDateValue() as any}\r\n />\r\n \r\n \r\n\r\n \r\n\r\n
\r\n \r\n \r\n \r\n Add New Audit\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n )\r\n\r\n};\r\n\r\n\r\nexport default observer(CampaignTrackAuditPage);","import { AutoComplete, Button, Col, DatePicker, Form, Input, message, Row, TimePicker, Typography } from \"antd\";\r\nimport { useContext, useEffect, useState } from \"react\";\r\nimport { CampaignSettingTypeResponse } from \"../../models/campaign-track-system/CampaignSettingTypeResponse\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport campaignSettingTypeService from \"../../services/campaign-setting/CampaignSettingTypeService\"\r\nimport { CampaignSettingTypeValueOption } from \"../../models/campaign-track-system/CampaignSettingTypeValueOption\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { CampaignSettingsAuditCreateModel } from \"../../models/campaign-track-system/CampaignSettingsAuditCreateModel\";\r\nimport { CampaignSettingsStatus } from \"../../models/campaign-track-system/CampaignSettingsStatus\";\r\nimport CampaignSettingAuditService from \"../../services/campaign-setting/CampaignSettingAuditService\";\r\nimport moment from \"moment\";\r\nimport { Box } from \"@material-ui/core\";\r\nimport { FetchError } from \"../../exceptions/AlgoSupervisionExceptions\";\r\nimport { RoutesPaths } from \"../../constants/RoutePaths\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\ninterface Props {\r\n campaignAuditId: string;\r\n campaignId: number;\r\n}\r\n\r\nconst layout = {\r\n labelCol: { span: 4 },\r\n};\r\n\r\nconst layoutType = {\r\n labelCol: { span: 8 },\r\n};\r\n\r\nconst layoutValueOptionlabel = {\r\n labelCol: { span: 6 },\r\n};\r\n\r\nconst AuditCampaignForm = (props: Props) => {\r\n\r\n const { campaignSettingStore, userStore } = useContext(RootStoreContext);\r\n\r\n const { campaignId, campaignAuditId } = props;\r\n\r\n const [selectedType, setSelectedType,] = useState();\r\n const [valueOptionTypes, setValueOptionTypes] = useState();\r\n const [selectedValueOption, setSelectedValueOption] = useState();\r\n const [caseNumber, setCaseNumber] = useState();\r\n const [comment, setComment] = useState();\r\n const [campaignSettingTypeTextValue, setCampaignSettingTypeTextValue,] = useState(\"\");\r\n\r\n const [date, setDate] = useState((moment(Date.now())));\r\n\r\n const history = useHistory();\r\n\r\n const [typeOptions, setTypeOptions] = useState();\r\n\r\n useEffect(() => {\r\n setTypeOptions(campaignSettingStore.CampaignSettingTypes\r\n ?.filter((x) =>\r\n x.settingType\r\n .toLowerCase()\r\n )\r\n .map((x) => ({ value: x.settingType, id: x.id, dataType: x.dataType })))\r\n\r\n },[campaignSettingStore.CampaignSettingTypes])\r\n\r\n useEffect(() => {\r\n\r\n if (campaignSettingStore.updateOperationState) {\r\n setUpdateState();\r\n return;\r\n }\r\n cleanUpState();\r\n }, [campaignSettingStore.updateOperationState]);\r\n\r\n\r\n const setUpdateState = () => {\r\n const selectedAudit = campaignSettingStore.SelectedCampaignSettingAudit;\r\n\r\n const typeRes = campaignSettingStore.CampaignSettingTypes?.find(\r\n (x) => x.settingType == selectedAudit?.type\r\n );\r\n setSelectedType(typeRes);\r\n setCampaignSettingTypeTextValue(typeRes?.settingType);\r\n setSelectedValueOption(selectedAudit?.value);\r\n setCaseNumber(selectedAudit?.caseNumber);\r\n setComment(selectedAudit?.comment);\r\n setDate(moment(selectedAudit?.creationDate));\r\n\r\n };\r\n\r\n const setSelectedTypeOnSelection = async (data: string, selectedType: any) => {\r\n\r\n setCampaignSettingTypeTextValue(data);\r\n\r\n setSelectedType(selectedType);\r\n\r\n const valueOptions = await campaignSettingTypeService.GetSettingTypeValueOptionsPerType(selectedType?.id);\r\n setValueOptionTypes(valueOptions);\r\n\r\n }\r\n\r\n const onSubmit = async (e: React.MouseEvent) => {\r\n\r\n let auditCreateModel: CampaignSettingsAuditCreateModel = {\r\n campaignId: campaignId,\r\n creationDate: date,\r\n campaignSettingTypeId: selectedType?.id,\r\n caseNumber: caseNumber || \"\",\r\n status: CampaignSettingsStatus.Active,\r\n userId: userStore.User!.id,\r\n value: selectedValueOption,\r\n comment: comment\r\n };\r\n\r\n try {\r\n if (campaignSettingStore.updateOperationState) {\r\n\r\n const updatedAudit = await CampaignSettingAuditService.UpdateCampaignSettingsAudit(campaignAuditId, auditCreateModel);\r\n message.success(\"Campaign setting audit created successfully\");\r\n }\r\n\r\n else {\r\n\r\n const createdAudit = await CampaignSettingAuditService.CreateCampaignSettingsAudit(auditCreateModel);\r\n message.success(\"Campaign setting audit updated successfully\");\r\n }\r\n\r\n history.push(\r\n RoutesPaths.Supervision.CampaignTrackSystemRoutes.BuildCampaignRoute(\r\n campaignId\r\n ));\r\n\r\n }\r\n catch (error) {\r\n if (error instanceof FetchError) {\r\n message.error(error.apiError.errorMessage);\r\n }\r\n }\r\n\r\n\r\n cleanUpState();\r\n }\r\n\r\n const cleanUpState = () => {\r\n setCaseNumber(\"\");\r\n setComment(\"\");\r\n setSelectedValueOption(\"\");\r\n setDate(moment(Date.now()));\r\n setSelectedType(undefined);\r\n setCampaignSettingTypeTextValue(\"\");\r\n };\r\n\r\n return (\r\n \r\n\r\n \r\n \r\n \r\n \r\n {campaignSettingStore.updateOperationState ? (\r\n Edit Audit) : (\r\n Create Audit\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n option!.value?.toUpperCase().indexOf(inputValue.toUpperCase()) !== -1\r\n }\r\n\r\n placeholder=\"Choose audit criterion\"\r\n />}\r\n \r\n \r\n \r\n \r\n ({\r\n value: x.valueOption,\r\n }))}\r\n onSelect={(data: string) => {\r\n setSelectedValueOption(data);\r\n }}\r\n onSearch={(data: string) =>\r\n setSelectedValueOption(data)\r\n }\r\n filterOption={(inputValue, option) =>\r\n option!.value?.toUpperCase().indexOf(inputValue.toUpperCase()) !== -1\r\n }\r\n allowClear={true}\r\n placeholder=\"Choose value\"\r\n value={selectedValueOption}\r\n />\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {\r\n setDate(dateInput);\r\n }}\r\n />\r\n {\r\n setDate(time);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n setCaseNumber(e.target.value)\r\n }\r\n value={caseNumber}\r\n placeholder=\"123456\"\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n setComment(e.target.value)}\r\n value={comment}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\n\r\nexport default observer(AuditCampaignForm);\r\n\r\n\r\n","import { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport AuditCampaignForm from \"../../../components/campaign-track-system/AuditCampaignForm\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport CampaignSettingBreadCrumbs from \"./helpers/CampaignSetting.breadcrumbs\";\r\nimport { CampaignSettingContextInitializers } from \"./helpers/CampaignSettingContextInitializers\";\r\n\r\n\r\nconst CampaignTrackEditAuditPage = () => {\r\n\r\n const { campaignSettingStore } = useContext(RootStoreContext);\r\n const match = useParams<{ campaignId: string; auditId: string }>();\r\n const history = useHistory();\r\n\r\n usePageInitialization({\r\n\r\n onInitAsync: async () => {\r\n await CampaignSettingContextInitializers.InitializeCampaignAuditData(\r\n Number(match.campaignId),\r\n campaignSettingStore,\r\n history\r\n );\r\n\r\n await CampaignSettingContextInitializers.InitializeCampaignSettingTypes(\r\n campaignSettingStore,\r\n history\r\n )\r\n\r\n await CampaignSettingContextInitializers.InitializeSelectedCampaignSettingAudit(\r\n match.auditId,\r\n campaignSettingStore,\r\n history).then(async () =>\r\n await campaignSettingStore.SetupdateOperationState(true)\r\n );\r\n },\r\n\r\n onCampaignContextCallBack: (campaign, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `Campaign Audits for: ${campaign.campaignName}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Campaigns(campaign.campaignName),\r\n CampaignSettingBreadCrumbs.CampaignSetting(campaign.campaignID),\r\n CampaignSettingBreadCrumbs.EditCampaignSettingAudit(\r\n campaign.campaignID,\r\n match.auditId\r\n )\r\n );\r\n },\r\n })\r\n\r\n return (\r\n
\r\n \r\n
)\r\n\r\n}\r\n\r\nexport default observer(CampaignTrackEditAuditPage);","export enum EActionTypes {\r\n IndeedCreateCampaign = 1,\r\n IndeedUpdateCampaignDetails = 2,\r\n IndeedUpdateCampaignBudget = 3,\r\n IndeedAttachJobsToCampaign = 4,\r\n IndeedAlgoControlRequest = 5\r\n}","import { Action } from \"../../models/users/Action\";\r\nimport { ActionCreateRequest } from \"../../models/users/ActionCreateRequest\";\r\nimport { ActionResponse } from \"../../models/users/ActionResponse\";\r\nimport { ISODateTime } from \"../../types/types\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\nclass UserActionService extends BaseService {\r\n\r\n\r\n public async GetById(id: number) {\r\n return await this.Get(`/${id}`);\r\n }\r\n\r\n public async Create(createRequest: ActionCreateRequest): Promise {\r\n return await this.Post(\"/\", createRequest);\r\n }\r\n\r\n public async GetActionsFiltered(getActionsRequest: {\r\n userId?: number,\r\n from?: ISODateTime,\r\n to?: ISODateTime,\r\n actionTypeIds?: string\r\n }): Promise {\r\n let queryString = \"\";\r\n if (getActionsRequest.actionTypeIds) {\r\n queryString += `&actionTypeIds=${getActionsRequest.actionTypeIds}`\r\n }\r\n if (getActionsRequest.userId) {\r\n queryString += `&userId=${getActionsRequest.userId}`\r\n }\r\n if (getActionsRequest.from) {\r\n queryString += `&from=${getActionsRequest.from}`\r\n }\r\n if (getActionsRequest.to) {\r\n queryString += `&to=${getActionsRequest.to}`\r\n }\r\n let url = `/?q${queryString}`\r\n return await this.Get(url);\r\n }\r\n}\r\n\r\n\r\nexport const userActionService = new UserActionService(\"userActions\");","import { AiOutlineFileText } from \"react-icons/ai\";\r\n\r\nimport { userActionService } from \"../../services/actions/UserActionService\";\r\nimport { UIStore } from \"../../stores/UIStore\";\r\nimport { ActionsBuilder } from \"../general/supervision-table/types\";\r\nimport { UserActionsTableDto } from \"./UserActionsTable.dto\";\r\n\r\ntype UserActionsTableBuilderContext = {\r\n uiStore: UIStore;\r\n};\r\n\r\nexport const UserActionsTableBuilder: ActionsBuilder<\r\n UserActionsTableDto,\r\n UserActionsTableBuilderContext\r\n> = ({ uiStore }) => [\r\n {\r\n Icon: AiOutlineFileText,\r\n text: \"View Data\",\r\n isDisplayed: () => true,\r\n action: async (userActionDto) => {\r\n const userAction = await userActionService.GetById(\r\n userActionDto._id\r\n );\r\n uiStore.SetPopUp({\r\n body: userAction.data ?? \"\",\r\n title: \"Action data\",\r\n hideCancelButton: true,\r\n });\r\n },\r\n },\r\n];\r\n","export enum ELevelTypes {\r\n Default = 0,\r\n Group = 1,\r\n Campaign = 2,\r\n Company = 3,\r\n Affiliate = 4\r\n}","\r\nimport { Action } from \"../../models/users/Action\";\r\nimport { ActionResponse } from \"../../models/users/ActionResponse\";\r\nimport { FormatDate, FormatDateTime } from \"../../utils/DateHelpers\";\r\nimport { ELevelTypes } from \"./ELevelTypes\";\r\n\r\nexport class UserActionsTableDto {\r\n public _id: number;\r\n public user: string;\r\n public entityId: number;\r\n public entityLevel: string;\r\n public userActionType: string;\r\n public description: string;\r\n public timeStamp: string;\r\n\r\n \r\n constructor(action: ActionResponse) {\r\n this._id = action.id;\r\n this.user = action.userName;\r\n this.entityId = action.entityId;\r\n this.entityLevel = ELevelTypes[action.entityLevel];\r\n this.userActionType = action.actionType.name;\r\n this.description = action.description;\r\n this.timeStamp = FormatDateTime(action.creationDate);\r\n }\r\n}","import { Empty } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext } from \"react\";\r\n\r\nimport { ActionResponse } from \"../../models/users/ActionResponse\";\r\nimport { EActionTypes } from \"../../models/users/EActionTypes\";\r\nimport { RootStore } from \"../../stores/RootStore\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport SupervisionTable from \"../general/supervision-table/SupervisionTable\";\r\nimport { UserActionsTableBuilder } from \"./UserActionsTable.actions\";\r\nimport { UserActionsTableDto } from \"./UserActionsTable.dto\";\r\n\r\ntype Props = {\r\n userActions: ActionResponse[];\r\n};\r\n\r\nconst UserActionsTable = (props: Props) => {\r\n const { userActions } = props;\r\n\r\n const { uiStore } = useContext(RootStoreContext);\r\n\r\n if (userActions.length == 0) {\r\n return ;\r\n }\r\n\r\n return (\r\n new UserActionsTableDto(userAction)\r\n )}\r\n rowActionSettings={{\r\n actions: UserActionsTableBuilder({\r\n uiStore,\r\n }),\r\n showActionsOnLastColumn: true,\r\n showActionsOnRightClick: true,\r\n }}\r\n categoricalColumns={[\r\n {\r\n column: \"userActionType\",\r\n possibleValues: EActionTypes\r\n }\r\n ]}\r\n />\r\n );\r\n};\r\n\r\nexport default observer(UserActionsTable);\r\n","import { AutoComplete } from \"antd\";\r\nimport React, { useEffect, useState } from \"react\";\r\n\r\ntype Props = {\r\n options: T[];\r\n optionsToAutoCompleteMapFunction: (value: T) => { value: string };\r\n onSelectHandle: (value: T) => void;\r\n initialValue?: string;\r\n placeHolder?: string;\r\n};\r\n\r\nconst SupervisionAutoComplete = (props: Props) => {\r\n const {\r\n options,\r\n optionsToAutoCompleteMapFunction,\r\n onSelectHandle,\r\n initialValue,\r\n placeHolder,\r\n } = props;\r\n\r\n const [searchText, setSearchText] = useState(initialValue ?? \"\");\r\n const [filteredOptions, setFilteredOptions] = useState(options);\r\n\r\n useEffect(() => {\r\n if (!initialValue) return;\r\n setFilteredOptions(\r\n options.filter((option) =>\r\n optionsToAutoCompleteMapFunction(option)\r\n .value.toLowerCase()\r\n .includes(initialValue.toLowerCase())\r\n )\r\n );\r\n }, []);\r\n\r\n return (\r\n {\r\n const selectedOption = options.find((option) =>\r\n optionsToAutoCompleteMapFunction(option)\r\n .value.toLowerCase()\r\n .includes(value.toLowerCase())\r\n );\r\n if (!selectedOption) return;\r\n\r\n onSelectHandle(selectedOption);\r\n setFilteredOptions([selectedOption]);\r\n setSearchText(value);\r\n }}\r\n onSearch={(value) => {\r\n setSearchText(value);\r\n setFilteredOptions(\r\n options.filter((option) =>\r\n optionsToAutoCompleteMapFunction(option)\r\n .value.toLowerCase()\r\n .includes(value.toLowerCase())\r\n )\r\n );\r\n }}\r\n allowClear\r\n onClear={() => {\r\n setSearchText(\"\");\r\n setFilteredOptions(options);\r\n }}\r\n placeholder={placeHolder}\r\n />\r\n );\r\n};\r\n\r\nexport default SupervisionAutoComplete;\r\n","import { Action } from \"../../models/users/Action\";\r\nimport { ActionResponse } from \"../../models/users/ActionResponse\";\r\nimport { ActionType } from \"../../models/users/ActionType\";\r\nimport { ISODateTime } from \"../../types/types\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\nclass ActionTypeService extends BaseService {\r\n public async GetAll(): Promise {\r\n \r\n return await this.Get(\"/\");\r\n }\r\n}\r\n\r\n\r\nexport const actionTypeService = new ActionTypeService(\"userActionTypes\");","import { Button, DatePicker, message, Space } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport moment, { Moment } from \"moment\";\r\nimport { useState } from \"react\";\r\n\r\nimport UserActionsTable from \"../../../components/actions/UserActionsTable\";\r\nimport SelectUserInput from \"../../../components/general/inputs/SelectUserInput\";\r\nimport SupervisionAutoComplete from \"../../../components/general/inputs/SupervisionAutoComplete\";\r\nimport Loader from \"../../../components/general/loader/Loader\";\r\nimport useOnInitAsync from \"../../../hooks/useOnInitAsync\";\r\nimport { ActionResponse } from \"../../../models/users/ActionResponse\";\r\nimport { ActionType } from \"../../../models/users/ActionType\";\r\nimport { UserResponse } from \"../../../models/users/UserResponse\";\r\nimport { actionTypeService } from \"../../../services/actions/ActionTypeService\";\r\nimport { userActionService } from \"../../../services/actions/UserActionService\";\r\nimport { ISODateTime } from \"../../../types/types\";\r\n\r\ntype Props = {};\r\n\r\ntype FilterSettings = {\r\n userId?: number;\r\n from?: ISODateTime;\r\n to?: ISODateTime;\r\n actionTypeIds?: string;\r\n};\r\n\r\nconst UserActionsTablePage = (props: Props) => {\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [userActions, setUserActions] = useState([]);\r\n const [filterSettings, setFilterSettings] = useState({});\r\n const [userInputValue, setUserInputValue] = useState<\r\n UserResponse | undefined\r\n >();\r\n const [actionTypes, setActionTypes] = useState([]);\r\n\r\n useOnInitAsync(async () => {\r\n setUserActions(await userActionService.GetActionsFiltered({}));\r\n setActionTypes(await actionTypeService.GetAll());\r\n setIsLoading(false);\r\n });\r\n\r\n const filterHandler = async () => {\r\n setIsLoading(true);\r\n setUserActions(\r\n await userActionService.GetActionsFiltered(filterSettings)\r\n );\r\n setIsLoading(false);\r\n message.info(\"Filtered actions\");\r\n };\r\n\r\n const initialActionTypeValue = () => {\r\n if (!filterSettings.actionTypeIds) return \"\";\r\n\r\n const actionType = actionTypes.find(\r\n (x) => x.id == Number(filterSettings.actionTypeIds)\r\n );\r\n return actionType?.name;\r\n };\r\n\r\n const initialDateValue = () => {\r\n let date: [Moment?, Moment?] = [undefined, undefined];\r\n\r\n if (filterSettings.from) {\r\n date[0] = moment(filterSettings.from);\r\n }\r\n if (filterSettings.to) {\r\n date[1] = moment(filterSettings.to);\r\n }\r\n return date;\r\n };\r\n\r\n if (isLoading) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {\r\n setUserInputValue(user);\r\n setFilterSettings({\r\n ...filterSettings,\r\n userId: user?.id,\r\n });\r\n }}\r\n onClear={() => {\r\n setUserInputValue(undefined);\r\n setFilterSettings({\r\n ...filterSettings,\r\n userId: undefined,\r\n });\r\n }}\r\n />\r\n
\r\n ({\r\n value: acionType.name,\r\n })}\r\n onSelectHandle={(actionType) => {\r\n setFilterSettings({\r\n ...filterSettings,\r\n actionTypeIds: actionType.id.toString(),\r\n });\r\n }}\r\n initialValue={initialActionTypeValue()}\r\n placeHolder=\"Action Types\"\r\n />\r\n
\r\n\r\n {\r\n const from = date?.[0];\r\n const to = date?.[1];\r\n\r\n setFilterSettings({\r\n ...filterSettings,\r\n from: from?.toISOString() || undefined,\r\n to: to?.toISOString() || undefined,\r\n });\r\n }}\r\n defaultValue={initialDateValue() as any}\r\n />\r\n \r\n
\r\n\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(UserActionsTablePage);\r\n","\r\nexport enum IndeedCampaignBudgetType {\r\n OneTime = 1,\r\n Monthly = 2\r\n}\r\n","export enum IndeedCampaignObjectiveType {\r\n MAXIMUM = 1,\r\n BALANCE = 2,\r\n TARGET_APPLICATIONS = 3,\r\n TARGET_COST_PER_APPLICATION = 4\r\n}\r\n\r\nexport const INDEED_CAMPAIGN_OBJECTIVE_DEFAULT_VALUE = IndeedCampaignObjectiveType.BALANCE;","import { ISODateTime } from \"../../types/types\";\r\nimport { IndeedBudgetFirstMonthBehavior } from \"./IndeedBudgetFirstMonthBehavior\";\r\nimport { IndeedCampaignObjective } from \"./IndeedCampaignObjective\";\r\nimport { IndeedCampaignStatus } from \"./IndeedCampaignStatus\";\r\n\r\nexport class IndeedCreateCampaignEventPayload {\r\n constructor(\r\n public name: string,\r\n public userId: number,\r\n public status: IndeedCampaignStatus,\r\n // public trackingToken: string,\r\n public jobsList: number[],\r\n public startDate: ISODateTime,\r\n public pandoCampaignId: number,\r\n public pandoCompanyId: number,\r\n public objective: IndeedCampaignObjective,\r\n public jobsSourceName?: string,\r\n public budgetFirstMonthBehavior?: IndeedBudgetFirstMonthBehavior,\r\n public fixedEndDate?: ISODateTime,\r\n public targetEndDate?: ISODateTime,\r\n public budgetOnetimeLimit?: number,\r\n public budgetMonthlyLimit?: number,\r\n ) {\r\n }\r\n}\r\n","\r\nexport enum IndeedEndDateType {\r\n Fixed = 1,\r\n Target = 2\r\n}\r\n","\r\nimport { APIResponse } from \"../../models/APIResponse\";\r\nimport { IndeedAttachJobsToCampaignEventPayload } from \"../../models/indeed-manager/IndeedAttachJobsToCampaignEventPayload\";\r\nimport { IndeedCampaign } from \"../../models/indeed-manager/IndeedCampaign\";\r\nimport { IndeedCreateCampaignEventPayload } from \"../../models/indeed-manager/IndeedCreateCampaignEventPayload\";\r\nimport { IndeedSubAccount } from \"../../models/indeed-manager/IndeedSubAccount\";\r\nimport { IndeedUpdateCampaignBudgetEventPayload } from \"../../models/indeed-manager/IndeedUpdateCampaignBudgetEventPayload\";\r\nimport { IndeedUpdateCampaignEventPayload } from \"../../models/indeed-manager/IndeedUpdateCampaignEventPayload\";\r\nimport { PLIndeedData } from \"../../models/indeed-manager/PLIndeedData\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\nexport class IndeedService\r\n extends BaseService {\r\n\r\n /**\r\n * Gets a list of indeed campaigns by PL campaign ID\r\n * The campaigns are returned WITHOUT Indeed Job populated\r\n */\r\n async GetIndeedCampaignsByPLCampaignId(pandoLogicCampaignId: number) {\r\n const PLIndeedData = await this.Get(`/get-data/${pandoLogicCampaignId}`);\r\n return PLIndeedData;\r\n }\r\n \r\n /**\r\n * Gets a indeed Sub Account by PL campaign ID\r\n * \r\n */\r\n async GetIndeedSubAccountByCompanyId(companyId?: number) {\r\n const IndeedSubAccount = await this.Get(`/indeed-sub-account/${companyId}`);\r\n return IndeedSubAccount;\r\n }\r\n\r\n\r\n /**\r\n * Gets an Indeed campaign by Indeed campaign ID.\r\n * The campaign is returned with IndeedJobs list\r\n */\r\n async GetIndeedCampaignById(indeedCampaignId: string) {\r\n const indeedCampaign = await this.Get(`/campaigns/${indeedCampaignId}`);\r\n return indeedCampaign;\r\n }\r\n\r\n async CreateCampaign(createCampaignEventPayload: IndeedCreateCampaignEventPayload): Promise> {\r\n const apiResponse = await this.Post>(`/create-campaign`, createCampaignEventPayload);\r\n if (apiResponse.isError) {\r\n throw new Error(apiResponse.body);\r\n }\r\n return apiResponse;\r\n }\r\n\r\n async UpdateCampaign(updateCampaignEventPayload: IndeedUpdateCampaignEventPayload): Promise> {\r\n const apiResponse = await this.Patch>(`/update-campaign`, updateCampaignEventPayload);\r\n if (apiResponse.isError) {\r\n throw new Error(apiResponse.body);\r\n }\r\n return apiResponse;\r\n }\r\n\r\n async UpdateCampaignBudget(updateCampaignBudgetEventPayload: IndeedUpdateCampaignBudgetEventPayload): Promise> {\r\n const apiResponse = await this.Patch>(`/update-campaign-budget`, updateCampaignBudgetEventPayload);\r\n if (apiResponse.isError) {\r\n throw new Error(apiResponse.body);\r\n }\r\n return apiResponse;\r\n }\r\n\r\n async AttachJobsToCampaign(attachJobsToCampaignEventPayload: IndeedAttachJobsToCampaignEventPayload): Promise> {\r\n const apiResponse = await this.Post>(`/attach-jobs-to-campaign`, attachJobsToCampaignEventPayload);\r\n if (apiResponse.isError) {\r\n throw new Error(apiResponse.body);\r\n }\r\n return apiResponse;\r\n }\r\n}\r\n\r\nconst indeedService = new IndeedService(\"Indeed\");\r\nexport default indeedService","\r\n\r\nexport enum IndeedBudgetFirstMonthBehavior {\r\n StartNowProratedAmount = 1,\r\n StartNowFullAmount = 2,\r\n StartNextMonthFullAmount = 3\r\n}","import { Col, DatePicker, Form, Input, Row, Select, Typography } from \"antd\";\r\nimport moment, { Moment } from \"moment\";\r\nimport React, { useState } from \"react\";\r\n\r\nimport { IndeedBudgetFirstMonthBehavior } from \"../../models/indeed-manager/IndeedBudgetFirstMonthBehavior\";\r\nimport { IndeedCampaignBudgetType } from \"../../models/indeed-manager/IndeedCampaignBudgetType\";\r\nimport { IndeedEndDateType } from \"../../models/indeed-manager/IndeedEndDateType\";\r\n\r\nconst { Option } = Select;\r\n\r\ninterface Props {\r\n isStartDateEditable: boolean;\r\n budgetLimitTypeInitialValue?: IndeedCampaignBudgetType;\r\n}\r\n\r\nconst CampaignBudgetInputs = (props: Props) => {\r\n const { isStartDateEditable, budgetLimitTypeInitialValue } = props;\r\n \r\n const [budgetLimitType, setBudgetLimitType] = useState<\r\n IndeedCampaignBudgetType | undefined\r\n >(budgetLimitTypeInitialValue);\r\n\r\n const disableDateBeforeToday = (current?: Moment): boolean => {\r\n if (!current) return true;\r\n return current < moment().add(-1, \"day\").endOf(\"day\");\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n Budget Settings\r\n \r\n \r\n \r\n\r\n \r\n {}}\r\n allowClear>\r\n \r\n \r\n \r\n \r\n\r\n \r\n {\r\n // console.log(val, dateString);\r\n }}\r\n onOk={(val) => {\r\n // console.log(val);\r\n }}\r\n />\r\n \r\n\r\n \r\n {\r\n // console.log(val, dateString);\r\n }}\r\n onOk={(val) => {\r\n // console.log(val);\r\n }}\r\n />\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n {\r\n setBudgetLimitType(value);\r\n }}>\r\n \r\n Budget One Time Limit\r\n \r\n {/* \r\n Budget Monthly Limit\r\n */}\r\n \r\n \r\n \r\n \r\n {\r\n if (value < 50 && value > 0) {\r\n return Promise.reject(\r\n \"Value must be greater than 50\"\r\n );\r\n }\r\n return Promise.resolve();\r\n },\r\n },\r\n ]}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {}}\r\n allowClear>\r\n \r\n Start Now Prorated Amount\r\n \r\n \r\n Start Now Full Amount\r\n \r\n \r\n Start Next Month Full Amount\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default CampaignBudgetInputs;\r\n","\r\n\r\nexport enum IndeedCampaignStatus {\r\n Active = 1,\r\n Deleted = 2,\r\n Paused = 3\r\n}\r\n","import { Col, Form, Input, Row, Select, Typography } from \"antd\";\r\nimport { useState } from \"react\";\r\n\r\nimport { IndeedCampaignObjectiveType } from \"../../models/indeed-manager/IndeedCampaignObjectiveType\";\r\nimport { IndeedCampaignStatus } from \"../../models/indeed-manager/IndeedCampaignStatus\";\r\n\r\nconst { Option } = Select;\r\n\r\nconst campaignObjectiveTooltipText = `The objective set for the campaign. The four types of objectives are: MAXIMUM - Maximize applicant volume, BALANCE - optimize equally for speed, quantity, and cost, Applicants Goal - target a specific number of applies, CPA Goal - target a specific cost per apply.`;\r\n\r\ninterface Props {\r\n isStatusEditable: boolean;\r\n isCampaignObjectiveTypeEditable: boolean;\r\n campaignObjectiveTypeDefaultValue: IndeedCampaignObjectiveType;\r\n}\r\n\r\nconst CampaignDetailsInputs = (props: Props) => {\r\n const {\r\n isStatusEditable,\r\n isCampaignObjectiveTypeEditable,\r\n campaignObjectiveTypeDefaultValue,\r\n } = props;\r\n\r\n const [campaignObjectiveType, setCampaignObjectiveType] =\r\n useState(\r\n campaignObjectiveTypeDefaultValue\r\n );\r\n\r\n const isCampaignTargetInputDisabled = () => {\r\n return (\r\n campaignObjectiveType == IndeedCampaignObjectiveType.BALANCE ||\r\n campaignObjectiveType == IndeedCampaignObjectiveType.MAXIMUM\r\n );\r\n };\r\n\r\n /**\r\n * Components\r\n */\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n General Details\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n {\r\n setCampaignObjectiveType(value);\r\n }}>\r\n \r\n Balance\r\n \r\n \r\n Maximum\r\n \r\n \r\n Applicants Goal\r\n \r\n \r\n CPA Goal\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CampaignDetailsInputs;\r\n","\r\n\r\nimport { JobsCountResponse } from \"../../models/jobs/JobsCountResponse\";\r\nimport { Campaign } from \"../../models/operation/Campaign\";\r\nimport { CampaignPartial } from \"../../models/operation/CampaignPartial\";\r\nimport { GetJobsByIdApiDto } from \"../../models/operation/GetJobsByIdApiDto\";\r\nimport { Job } from \"../../models/operation/Job\";\r\nimport { CachePaginationBatchRequest } from \"../../models/pagination/CachePaginationBatchRequest\";\r\nimport { CachePaginationBatchResponse } from \"../../models/pagination/CachePaginationBatchResponse\";\r\nimport { PaginationParams } from \"../../models/pagination/PaginationParams\";\r\nimport { BaseService } from \"../BaseService\";\r\nimport { CachePaginationUtils } from \"../pagination/CachePaginationUtils\";\r\n\r\nexport class JobService extends BaseService {\r\n\r\n async GetJobsByCampaignIdPagination(campaignId: number, paginationParams: PaginationParams): Promise {\r\n const queryString = `campaignId=${campaignId}&offset=${paginationParams.offset}&limit=${paginationParams.limit}`\r\n const jobsPage = await\r\n this.Get(`?${queryString}`);\r\n return jobsPage;\r\n }\r\n\r\n async GetJobsByCompanyIdPagination(companyId: number, paginationParams: PaginationParams): Promise {\r\n const queryString = `companyId=${companyId}&offset=${paginationParams.offset}&limit=${paginationParams.limit}`\r\n const jobsPage = await\r\n this.Get(`?${queryString}`);\r\n return jobsPage;\r\n }\r\n\r\n\r\n async GetJobsByIds(getJobsByIdApiDto: GetJobsByIdApiDto): Promise {\r\n const jobs = await this.Post(`/byIds`, getJobsByIdApiDto);\r\n return jobs;\r\n }\r\n\r\n\r\n async GetCountAsync(getCountRequest: { campaignId?: number, companyId?: number }): Promise {\r\n let queryString = `?q`;\r\n if (getCountRequest.campaignId) {\r\n queryString += `&campaignId=${getCountRequest.campaignId}`\r\n }\r\n if (getCountRequest.companyId) {\r\n queryString += `&companyId=${getCountRequest.companyId}`\r\n }\r\n\r\n const jobCountRespose = await this.Get(`/count${queryString}`);\r\n return jobCountRespose;\r\n }\r\n\r\n\r\n}\r\n\r\n\r\nconst jobService = new JobService(\"Jobs\");\r\nexport default jobService;","\r\n\r\nexport const numberWithCommas = (num: number | string): string => {\r\n return num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n}\r\n\r\nexport const stripCommas = (formattedNumber: string): number => {\r\n return Number(formattedNumber.replace(\",\", \"\"));\r\n}\r\n\r\nexport const isNumber = (value: string): boolean => {\r\n try {\r\n return !isNaN(Number(value));\r\n }\r\n catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport const Round = (value: number, decimalPoints: number): number => {\r\n if (decimalPoints === 0) {\r\n return Math.round(value);\r\n }\r\n\r\n const multiplier = Math.pow(10, decimalPoints);\r\n return Math.round(value * multiplier) / multiplier;\r\n}\r\n\r\nexport const toFixed = (value: number, decimalPoints: number): number => {\r\n return Number(value.toFixed(decimalPoints));\r\n}","import \"./IndeedJobsToCampaignTransfer.scss\";\r\n\r\nimport { Transfer } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { useContext, useEffect, useState } from \"react\";\r\n\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport useOnInitAsync from \"../../hooks/useOnInitAsync\";\r\nimport { Job } from \"../../models/operation/Job\";\r\nimport indeedService from \"../../services/indeed/IndeedService\";\r\nimport jobService from \"../../services/operation/JobService\";\r\nimport { cachePaginatorService } from \"../../services/pagination/CachePaginatorService\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport { isNumber } from \"../../utils/NumbersHelper\";\r\nimport Loader from \"../general/loader/Loader\";\r\n\r\ninterface Props {\r\n plCampaignId: number;\r\n onChange: (jobIds: number[]) => void;\r\n indeedCampaignId?: string;\r\n onJobsLoad?: (jobIds: number[]) => void;\r\n}\r\n\r\nconst IndeedJobsToCampaignTransfer = (props: Props) => {\r\n const { plCampaignId, onChange, indeedCampaignId, onJobsLoad } = props;\r\n const [hasOptionsLoaded, setHasOptionsLoaded] = useState(false);\r\n const [jobOptions, setJobOptions] = useState([]);\r\n const [selectedJobIds, setSelectedJobIds] = useState();\r\n\r\n const { indeedStore } = useContext(RootStoreContext);\r\n\r\n useOnInitAsync(async () => {\r\n //TODO: refactor to a Paginator service (this method exhausts all pages)\r\n const jobsCount = await jobService.GetCountAsync({\r\n campaignId: plCampaignId,\r\n });\r\n let tasks = [];\r\n let batchSize = 1000;\r\n for (let index = 0; index < jobsCount.jobsCount; index += batchSize) {\r\n tasks.push(\r\n jobService.GetJobsByCampaignIdPagination(plCampaignId, {\r\n limit: batchSize,\r\n offset: index,\r\n })\r\n );\r\n }\r\n const jobBatches = await Promise.all(tasks);\r\n const _jobs = jobBatches.reduce((prev, cur) => {\r\n return [...prev, ...cur];\r\n }, []);\r\n\r\n setJobOptions(_jobs);\r\n setHasOptionsLoaded(true);\r\n });\r\n\r\n useEffect(() => {\r\n (async () => {\r\n if (indeedCampaignId) {\r\n const indeedCampaign =\r\n await indeedService.GetIndeedCampaignById(indeedCampaignId);\r\n if (!indeedCampaign.indeedJobs) return;\r\n\r\n // There is a use case that some indeed campaign jobs don't exist in the Pando campaign which causes a bug\r\n const jobsInIndeedCampaignAndPandoCampaign = jobOptions.filter(\r\n (x) =>\r\n indeedCampaign.indeedJobs?.some(\r\n (indeedJob) => indeedJob.jobId == x.jobId\r\n )\r\n );\r\n setSelectedJobIds(\r\n jobsInIndeedCampaignAndPandoCampaign.map((job) =>\r\n job.jobId.toString()\r\n )\r\n );\r\n onJobsLoad &&\r\n onJobsLoad(\r\n jobsInIndeedCampaignAndPandoCampaign.map((job) =>\r\n Number(job.jobId)\r\n )\r\n );\r\n }\r\n })();\r\n }, [indeedCampaignId, indeedStore.SelectedIndeedCampaign, jobOptions]);\r\n\r\n const filterOption = (inputValue: string, option: any) => {\r\n if (isNumber(inputValue)) {\r\n return searchByJobId(Number(inputValue));\r\n }\r\n\r\n if (isJobIdsInput(inputValue)) {\r\n const jobIds: number[] = inputValue\r\n .split(\",\")\r\n .map((jobId) => Number(jobId.trim()));\r\n return searchByJobIdsMultiple(jobIds);\r\n }\r\n\r\n if (inputValue.length >= 2) {\r\n return searchByJobTitleTextOrLocation();\r\n }\r\n return true;\r\n\r\n function searchByJobTitleTextOrLocation() {\r\n return (\r\n (getJobLocation(option).toLowerCase() ?? \"\").indexOf(\r\n inputValue.toLowerCase()\r\n ) > -1 ||\r\n (option.extJobTitleText?.toLowerCase() ?? \"\").indexOf(\r\n inputValue.toLowerCase()\r\n ) > -1\r\n );\r\n }\r\n\r\n function searchByJobId(inputValue: number) {\r\n return option.jobId == inputValue;\r\n }\r\n\r\n function isJobIdsInput(inputValue: string): boolean {\r\n return new RegExp(/^[\\d, ]+$/gm).test(inputValue);\r\n }\r\n\r\n function searchByJobIdsMultiple(jobIds: number[]): boolean {\r\n return jobIds.some((x) => x == option.jobId);\r\n }\r\n };\r\n\r\n const handleChange = (jobIdsRightSide: string[]) => {\r\n setSelectedJobIds(jobIdsRightSide);\r\n onChange(jobIdsRightSide.map((jobId) => Number(jobId)));\r\n };\r\n\r\n const handleSearch = (\r\n direction: \"left\" | \"right\",\r\n searchValue: string\r\n ) => {};\r\n\r\n const getJobLocation = (job: Job) => {\r\n return `${job.jobLocation.cityName}, ${job.jobLocation.stateShortName}`;\r\n };\r\n\r\n return (\r\n \r\n \r\n {!hasOptionsLoaded ? (\r\n \r\n ) : (\r\n ({\r\n key: job.jobId.toString(),\r\n ...job,\r\n }))}\r\n showSearch\r\n filterOption={filterOption}\r\n targetKeys={selectedJobIds}\r\n onChange={handleChange}\r\n onSearch={handleSearch}\r\n pagination\r\n className=\"jobs-transfer\"\r\n render={(job) => (\r\n
\r\n \r\n ({job.jobId}) {job.extJobTitleText} |\r\n Location: {getJobLocation(job)}\r\n
\r\n \r\n )}\r\n />\r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default observer(IndeedJobsToCampaignTransfer);\r\n","import { Button, Col, Form, message, Row, Select, Typography } from \"antd\";\r\nimport { Moment } from \"moment\";\r\nimport { useContext, useState } from \"react\";\r\nimport { useHistory } from \"react-router\";\r\n\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport { RoutesPaths } from \"../../constants/RoutePaths\";\r\nimport { FetchError } from \"../../exceptions/AlgoSupervisionExceptions\";\r\nimport { IndeedBudgetFirstMonthBehavior } from \"../../models/indeed-manager/IndeedBudgetFirstMonthBehavior\";\r\nimport { IndeedCampaignBudgetType } from \"../../models/indeed-manager/IndeedCampaignBudgetType\";\r\nimport { IndeedCampaignObjective } from \"../../models/indeed-manager/IndeedCampaignObjective\";\r\nimport {\r\n INDEED_CAMPAIGN_OBJECTIVE_DEFAULT_VALUE,\r\n IndeedCampaignObjectiveType\r\n} from \"../../models/indeed-manager/IndeedCampaignObjectiveType\";\r\nimport { IndeedCampaignStatus } from \"../../models/indeed-manager/IndeedCampaignStatus\";\r\nimport { IndeedCreateCampaignEventPayload } from \"../../models/indeed-manager/IndeedCreateCampaignEventPayload\";\r\nimport { IndeedEndDateType } from \"../../models/indeed-manager/IndeedEndDateType\";\r\nimport indeedService from \"../../services/indeed/IndeedService\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport { ISODateTime } from \"../../types/types\";\r\nimport CampaignBudgetInputs from \"./CampaignBudgetInputs\";\r\nimport CampaignDetailsInputs from \"./CampaignDetailsInputs\";\r\nimport IndeedJobsToCampaignTransfer from \"./IndeedJobsToCampaignTransfer\";\r\n\r\nconst { Option } = Select;\r\n\r\ninterface Props {\r\n plCampaignId: number;\r\n}\r\n\r\nconst layout = {\r\n labelCol: { span: 8 },\r\n wrapperCol: { span: 16 },\r\n};\r\n\r\n/* eslint-disable no-template-curly-in-string */\r\nconst validateMessages = {\r\n required: \"${label} is required!\",\r\n types: {\r\n email: \"${label} is not a valid email!\",\r\n number: \"${label} is not a valid number!\",\r\n },\r\n number: {\r\n range: \"${label} must be between ${min} and ${max}\",\r\n },\r\n};\r\n\r\ntype FormState = {\r\n campaignName: string;\r\n campaignStatus: IndeedCampaignStatus;\r\n budgetType: IndeedEndDateType;\r\n startDate: Moment;\r\n endDate: Moment;\r\n budgetLimitSettings: IndeedCampaignBudgetType;\r\n budgetLimitValue: string;\r\n budgetFirstMonthBehavior: IndeedBudgetFirstMonthBehavior;\r\n campaignObjective: IndeedCampaignObjective;\r\n};\r\n\r\ninterface Props {\r\n plCampaignId: number;\r\n}\r\n\r\nconst IndeedAddCampaignForm = (props: Props) => {\r\n const { plCampaignId } = props;\r\n const { campaignStore, userStore, indeedStore } =\r\n useContext(RootStoreContext);\r\n\r\n const history = useHistory();\r\n const [campaignJobsIds, setCampaignJobsIds] = useState([]);\r\n\r\n const onFinish = async (formState: FormState) => {\r\n try {\r\n var response = await indeedService.CreateCampaign(\r\n new IndeedCreateCampaignEventPayload(\r\n formState.campaignName,\r\n userStore.User!.id,\r\n formState.campaignStatus,\r\n campaignJobsIds,\r\n formState.startDate.toISOString(),\r\n plCampaignId,\r\n campaignStore.SelectedCampaign!.companyId,\r\n formState.campaignObjective,\r\n indeedStore.PLCampaignData!.indeedCampaignSourceInfo.sourceName,\r\n formState.budgetFirstMonthBehavior,\r\n deriveEndDate(\r\n formState.budgetType,\r\n IndeedEndDateType.Fixed,\r\n formState.endDate\r\n ),\r\n deriveEndDate(\r\n formState.budgetType,\r\n IndeedEndDateType.Target,\r\n formState.endDate\r\n ),\r\n deriveBudgetLimit(\r\n formState.budgetLimitSettings,\r\n formState.budgetLimitValue,\r\n IndeedCampaignBudgetType.OneTime\r\n ),\r\n deriveBudgetLimit(\r\n formState.budgetLimitSettings,\r\n formState.budgetLimitValue,\r\n IndeedCampaignBudgetType.Monthly\r\n )\r\n )\r\n );\r\n \r\n message.success(response.body);\r\n history.push(\r\n RoutesPaths.Supervision.IndeedRoutes.BuildCampaignRoute(\r\n plCampaignId\r\n )\r\n );\r\n } catch (error) {\r\n if (error instanceof FetchError) {\r\n message.error(error.message);\r\n }\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n Choose Jobs for Indeed Campaign\r\n \r\n \r\n \r\n {\r\n setCampaignJobsIds(jobIds);\r\n }}\r\n plCampaignId={plCampaignId}\r\n />\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IndeedAddCampaignForm;\r\n\r\nconst deriveEndDate = (\r\n currentType: IndeedEndDateType,\r\n budgetType: IndeedEndDateType,\r\n endDate: Moment\r\n): ISODateTime | undefined => {\r\n return currentType == budgetType ? endDate.toISOString() : undefined;\r\n};\r\n\r\nconst deriveBudgetLimit = (\r\n formBudgetLimitSettings: IndeedCampaignBudgetType,\r\n budgetLimitValue: string,\r\n wantedBudgetLimitSettings: IndeedCampaignBudgetType\r\n): number | undefined => {\r\n if (formBudgetLimitSettings == wantedBudgetLimitSettings) {\r\n return Number(budgetLimitValue);\r\n }\r\n return undefined;\r\n};\r\n","\r\nimport { message } from \"antd\";\r\n\r\nimport { RoutesPaths } from \"../../../../constants/RoutePaths\";\r\nimport { PLIndeedData } from \"../../../../models/indeed-manager/PLIndeedData\";\r\nimport { Company } from \"../../../../models/operation/Company\";\r\nimport indeedService from \"../../../../services/indeed/IndeedService\";\r\nimport companyService from \"../../../../services/operation/CompanyService\";\r\nimport { IndeedStore } from \"../../../../stores/IndeedStore\";\r\n\r\nexport const IndeedContextInitializers = {\r\n InitializePLCampaignData: async (campaignId: number, indeedStore: IndeedStore, history: any) => {\r\n try {\r\n if (indeedStore.PLCampaignData && campaignId == indeedStore.PLCampaignData.pLCampaignId) {\r\n return;\r\n }\r\n\r\n indeedStore.SetIsDataLoading(true);\r\n\r\n const _indeedData =\r\n await indeedService.GetIndeedCampaignsByPLCampaignId(\r\n campaignId\r\n );\r\n indeedStore.SetPLCampaignData(_indeedData);\r\n\r\n indeedStore.SetIsDataLoading(false);\r\n\r\n const company = await companyService.GetCompanyByCampaignId(campaignId);\r\n\r\n indeedStore.SetCompany(company);\r\n } catch (err) {\r\n history.push(RoutesPaths.Supervision.Campaigns);\r\n message.error(\r\n `Campaign with ID: ${campaignId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n InitializeSelectedIndeedCampaign: async (indeedCampaignId: string, plIndeedData: PLIndeedData, indeedStore: IndeedStore, history: any) => {\r\n //// BUG with caching code below:\r\n // if (indeedStore.SelectedIndeedCampaign && indeedCampaignId == indeedStore.SelectedIndeedCampaign.id) {\r\n // return;\r\n // }\r\n\r\n const indeedCampaign = await indeedService.GetIndeedCampaignById(indeedCampaignId);\r\n if (!indeedCampaign) {\r\n history.push(RoutesPaths.Supervision.IndeedRoutes.BuildCampaignRoute(plIndeedData.pLCampaignId));\r\n message.error(\r\n `Indeed campaign with ID: ${indeedCampaignId} doesn't exist`\r\n );\r\n }\r\n\r\n indeedStore.SetSelectedIndeedCampaign(indeedCampaign);\r\n },\r\n\r\n\r\n InitializeIndeedSubAccount: async (indeedStore: IndeedStore, history: any, companyId?: number) => {\r\n\r\n try {\r\n const indeedSubAccount = await indeedService.GetIndeedSubAccountByCompanyId(companyId);\r\n if (!indeedSubAccount) {\r\n /* message.info(\r\n `Indeed sub account for ID: ${campaignId} doesn't exist`\r\n );*/\r\n }\r\n\r\n indeedStore.SetIndeedSubAccount(indeedSubAccount);\r\n }\r\n catch (err) {\r\n /* message.error(\r\n `Indeed sub account for ID: ${campaignId} doesn't exist.`\r\n ); */\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n}\r\n","import { RoutesPaths } from \"../../../../constants/RoutePaths\";\r\nimport { BreadCrumb } from \"../../../../models/BreadCrumb\";\r\n\r\nexport const IndeedBreadcrumbs = {\r\n Indeed: (campaignId: number) => {\r\n return new BreadCrumb(\r\n \"Indeed\",\r\n RoutesPaths.Supervision.IndeedRoutes.BuildCampaignRoute(campaignId),\r\n null\r\n );\r\n },\r\n IndeedCampaign: (indeedCampaignName: string) => {\r\n return new BreadCrumb(indeedCampaignName, null, null);\r\n },\r\n AddCampaign: (campaignId: number) => {\r\n return new BreadCrumb(\r\n \"Add Campaign\",\r\n RoutesPaths.Supervision.IndeedRoutes.BuildAddCampaign(campaignId),\r\n null\r\n );\r\n },\r\n CampaignJobs: (campaignId: number, indeedCampaignId: string) => {\r\n return new BreadCrumb(\r\n \"Jobs\",\r\n RoutesPaths.Supervision.IndeedRoutes.BuildCampaignJobsRoute(\r\n campaignId,\r\n indeedCampaignId\r\n ),\r\n null\r\n );\r\n },\r\n AttachJobsToIndeedCampaign: (\r\n campaignId: number,\r\n indeedCampaignId: string\r\n ) => {\r\n return new BreadCrumb(\r\n \"Attach Jobs\",\r\n RoutesPaths.Supervision.IndeedRoutes.BuildAttachJobsToIndeedCampaign(\r\n campaignId,\r\n indeedCampaignId\r\n ),\r\n null\r\n );\r\n },\r\n EditCampaign: (campaignId: number, indeedCampaignId: string) => {\r\n return new BreadCrumb(\r\n \"Edit\",\r\n RoutesPaths.Supervision.IndeedRoutes.BuildEditIndeedCampaign(\r\n campaignId,\r\n indeedCampaignId\r\n ),\r\n null\r\n );\r\n },\r\n};\r\n","import { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\n\r\nimport IndeedAddCampaignForm from \"../../../components/indeed-manager/IndeedAddCampaignForm\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport { IndeedContextInitializers } from \"./helpers/IndeedContextInitializers\";\r\nimport { IndeedBreadcrumbs } from \"./helpers/IndeedManager.breadcrumbs\";\r\n\r\ninterface Props {}\r\n\r\nconst IndeedAddCampaignContainer = (props: Props) => {\r\n const match = useParams<{ campaignId: string }>();\r\n const history = useHistory();\r\n const { indeedStore } = useContext(RootStoreContext);\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n await IndeedContextInitializers.InitializePLCampaignData(\r\n Number(match.campaignId),\r\n indeedStore,\r\n history\r\n );\r\n },\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `Add Indeed Campaign for: ${indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignName}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n SupervisionBreadcrumbs.Campaigns(`${indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignName}`),\r\n IndeedBreadcrumbs.Indeed(Number(indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignID)),\r\n IndeedBreadcrumbs.AddCampaign(Number(indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignID))\r\n );\r\n },\r\n });\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(IndeedAddCampaignContainer);\r\n","\r\n\r\nexport class IndeedAttachJobsToCampaignEventPayload {\r\n\r\n constructor(\r\n public indeedCampaignId: string,\r\n public userId: number,\r\n public jobsList: number[],\r\n public detachFromOtherCampaigns: boolean,\r\n ) { }\r\n}","import { Button, message, Radio, Tooltip, Typography } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useState } from \"react\";\r\nimport { CopyToClipboard } from \"react-copy-to-clipboard\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nimport { RoutesPaths } from \"../../constants/RoutePaths\";\r\nimport { FetchError } from \"../../exceptions/AlgoSupervisionExceptions\";\r\nimport { IndeedAttachJobsToCampaignEventPayload } from \"../../models/indeed-manager/IndeedAttachJobsToCampaignEventPayload\";\r\nimport indeedService from \"../../services/indeed/IndeedService\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport IndeedJobsToCampaignTransfer from \"./IndeedJobsToCampaignTransfer\";\r\n\r\nconst uniqueRadioExplanation =\r\n 'If \"Unique\" is selected, all the jobs that are attached to this campaign are automatically detached from every other campaign (if they were attached)';\r\n\r\nconst multipleRadioExplanation =\r\n 'If \"Multiple\" is selected, All the jobs that are attached to this campaign will NOT be detached from other campaigns';\r\n\r\nenum AttachmentType {\r\n unique = \"unique\",\r\n multiple = \"multiple\",\r\n}\r\n\r\ninterface Props {\r\n plCampaignId: number;\r\n indeedCampaignId: string;\r\n}\r\n\r\nconst IndeedAttachJobsForm = (props: Props) => {\r\n const { plCampaignId, indeedCampaignId } = props;\r\n const { userStore, indeedStore } = useContext(RootStoreContext);\r\n const history = useHistory();\r\n\r\n const [campaignJobsIds, setCampaignJobsIds] = useState([]);\r\n const [radioAttachmentType, setRadioAttachmentType] =\r\n useState(AttachmentType.unique);\r\n\r\n const handleAttachJobsClick = async () => {\r\n const attachJobsEventPayload =\r\n new IndeedAttachJobsToCampaignEventPayload(\r\n indeedCampaignId,\r\n userStore.User!.id,\r\n campaignJobsIds,\r\n radioAttachmentType == AttachmentType.unique ? true : false,\r\n );\r\n\r\n try {\r\n var response = await indeedService.AttachJobsToCampaign(attachJobsEventPayload);\r\n message.success(response.body);\r\n history.push(\r\n RoutesPaths.Supervision.IndeedRoutes.BuildCampaignRoute(\r\n plCampaignId\r\n )\r\n );\r\n } catch (error) {\r\n if (error instanceof FetchError) {\r\n message.error(error.apiError.errorMessage);\r\n }\r\n }\r\n };\r\n\r\n return (\r\n
\r\n \r\n Attach Jobs for Indeed Campaign\r\n \r\n\r\n {\r\n setCampaignJobsIds(jobIds);\r\n }}\r\n onJobsLoad={(jobIds) => {\r\n setCampaignJobsIds(jobIds);\r\n }}\r\n plCampaignId={plCampaignId}\r\n indeedCampaignId={indeedCampaignId}\r\n />\r\n\r\n {/* NOTE: currently this feature is flagged off. All attachments are unique */}\r\n {/* \r\n Attachment Type\r\n \r\n
\r\n {\r\n switch (e.target.value) {\r\n case AttachmentType.unique:\r\n setRadioAttachmentType(AttachmentType.unique);\r\n break;\r\n case AttachmentType.multiple:\r\n setRadioAttachmentType(AttachmentType.multiple);\r\n break;\r\n default:\r\n throw new Error(\r\n \"unsupported radio button value\"\r\n );\r\n }\r\n }}\r\n value={radioAttachmentType}>\r\n \r\n Unique\r\n \r\n\r\n \r\n Multiple\r\n \r\n \r\n
*/}\r\n\r\n
\r\n \r\n Attach Jobs\r\n \r\n\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default observer(IndeedAttachJobsForm);\r\n","import { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\n\r\nimport IndeedAttachJobsForm from \"../../../components/indeed-manager/IndeedAttachJobsForm\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport { IndeedContextInitializers } from \"./helpers/IndeedContextInitializers\";\r\nimport { IndeedBreadcrumbs } from \"./helpers/IndeedManager.breadcrumbs\";\r\n\r\nconst IndeedAttachJobsToCampaignPage = () => {\r\n const match = useParams<{ campaignId: string; indeedCampaignId: string }>();\r\n const history = useHistory();\r\n const { indeedStore } = useContext(RootStoreContext);\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n await IndeedContextInitializers.InitializePLCampaignData(\r\n Number(match.campaignId),\r\n indeedStore,\r\n history\r\n );\r\n await IndeedContextInitializers.InitializeSelectedIndeedCampaign(\r\n match.indeedCampaignId,\r\n indeedStore.PLCampaignData!,\r\n indeedStore,\r\n history\r\n );\r\n },\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `Attach PL Jobs to Indeed Campaign: ${indeedStore.SelectedIndeedCampaign?.name}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n SupervisionBreadcrumbs.Campaigns(`${indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignName}`),\r\n IndeedBreadcrumbs.Indeed(Number(indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignID)),\r\n IndeedBreadcrumbs.IndeedCampaign(\r\n indeedStore.SelectedIndeedCampaign?.name ?? \"\"\r\n ),\r\n IndeedBreadcrumbs.AttachJobsToIndeedCampaign(\r\n Number(indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignID),\r\n match.indeedCampaignId\r\n )\r\n );\r\n },\r\n });\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(IndeedAttachJobsToCampaignPage);\r\n","\r\nexport class GetJobsByIdApiDto {\r\n /**\r\n *\r\n */\r\n constructor(\r\n public jobIds: number[]\r\n ) { }\r\n}","import { Job } from \"../../models/operation/Job\";\r\nimport { ISODateTime } from \"../../types/types\";\r\nimport { FormatDate } from \"../../utils/DateHelpers\";\r\nimport { TableDto } from \"../general/supervision-table/Table.dto\";\r\n\r\nexport class IndeedJobTableDto extends TableDto {\r\n constructor(\r\n public jobId: number, // alias=\"compPositionId\"\r\n public jobTitle: string,\r\n public location: string,\r\n // public lastModified: ISODateTime,\r\n public postDate: ISODateTime,\r\n ) {\r\n super();\r\n }\r\n\r\n public static MapFromJob(job: Job) {\r\n return new IndeedJobTableDto(\r\n job.jobId,\r\n job.extJobTitleText,\r\n `${job.jobLocation.cityName}, ${job.jobLocation.stateShortName}`,\r\n FormatDate(job.posCreationDate)\r\n )\r\n }\r\n}","import { Empty } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { useState } from \"react\";\r\n\r\nimport useOnInitAsync from \"../../hooks/useOnInitAsync\";\r\nimport { GetJobsByIdApiDto } from \"../../models/operation/GetJobsByIdApiDto\";\r\nimport { Job } from \"../../models/operation/Job\";\r\nimport jobService from \"../../services/operation/JobService\";\r\nimport Loader from \"../general/loader/Loader\";\r\nimport SupervisionTable from \"../general/supervision-table/SupervisionTable\";\r\nimport { IndeedJobTableDto } from \"./IndeedJobsTable.dto\";\r\n\r\ninterface Props {\r\n indeedCampaignName: string;\r\n jobs: number[];\r\n}\r\n\r\nconst IndeedJobsTable = (props: Props) => {\r\n const { indeedCampaignName, jobs } = props;\r\n\r\n const [jobsWithPLDataEnriched, setJobsWithPLDataEnriched] = useState(\r\n []\r\n );\r\n\r\n useOnInitAsync(async () => {\r\n if (jobs) {\r\n const getJobsByIdRequest = new GetJobsByIdApiDto(jobs);\r\n const plJobs = await jobService.GetJobsByIds(getJobsByIdRequest);\r\n setJobsWithPLDataEnriched(plJobs);\r\n }\r\n });\r\n\r\n if (jobs.length == 0) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (jobsWithPLDataEnriched.length == 0) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default observer(IndeedJobsTable);\r\n","import { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\n\r\nimport Loader from \"../../../components/general/loader/Loader\";\r\nimport IndeedJobsTable from \"../../../components/indeed-manager/IndeedJobsTable\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport { IndeedContextInitializers } from \"./helpers/IndeedContextInitializers\";\r\nimport { IndeedBreadcrumbs } from \"./helpers/IndeedManager.breadcrumbs\";\r\n\r\ninterface Props {}\r\n\r\nconst IndeedJobsViewContainer = () => {\r\n const match = useParams<{ campaignId: string; indeedCampaignId: string }>();\r\n const history = useHistory();\r\n const { indeedStore } = useContext(RootStoreContext);\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n await IndeedContextInitializers.InitializePLCampaignData(\r\n Number(match.campaignId),\r\n indeedStore,\r\n history\r\n );\r\n await IndeedContextInitializers.InitializeSelectedIndeedCampaign(\r\n match.indeedCampaignId,\r\n indeedStore.PLCampaignData!,\r\n indeedStore,\r\n history\r\n );\r\n },\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `Indeed Jobs for Indeed Campaign: ${indeedStore.SelectedIndeedCampaign?.name}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n SupervisionBreadcrumbs.Campaigns(`${indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignName}`),\r\n IndeedBreadcrumbs.Indeed(Number(indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignID)),\r\n IndeedBreadcrumbs.IndeedCampaign(\r\n indeedStore.SelectedIndeedCampaign?.name ?? \"\"\r\n ),\r\n IndeedBreadcrumbs.CampaignJobs(\r\n Number(indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignID),\r\n match.indeedCampaignId\r\n )\r\n );\r\n },\r\n });\r\n\r\n if (\r\n !indeedStore.SelectedIndeedCampaign ||\r\n !indeedStore.SelectedIndeedCampaign.indeedJobs\r\n ) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n {/* */}\r\n x.jobId\r\n )}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport default observer(IndeedJobsViewContainer);\r\n","export enum UserIds {\r\n Algo = 2644599\r\n}","import { message, Typography } from \"antd\";\r\nimport { History } from \"history\";\r\nimport { AiOutlineRobot } from \"react-icons/ai\";\r\nimport { BiTransfer } from \"react-icons/bi\";\r\nimport { FiEdit } from \"react-icons/fi\";\r\nimport { RiSuitcaseLine } from \"react-icons/ri\";\r\n\r\nimport { UserIds } from \"../../constants/IAM\";\r\nimport { RoutesPaths } from \"../../constants/RoutePaths\";\r\nimport { IndeedUpdateCampaignBudgetEventPayload } from \"../../models/indeed-manager/IndeedUpdateCampaignBudgetEventPayload\";\r\nimport { EActionTypes } from \"../../models/users/EActionTypes\";\r\nimport { userActionService } from \"../../services/actions/UserActionService\";\r\nimport indeedService from \"../../services/indeed/IndeedService\";\r\nimport { IndeedStore } from \"../../stores/IndeedStore\";\r\nimport { UIStore } from \"../../stores/UIStore\";\r\nimport { UserStore } from \"../../stores/UserStore\";\r\nimport { ActionsBuilder } from \"../general/supervision-table/types\";\r\nimport { IndeedCampaignTableDto } from \"./IndeedCampaignsTable.dto\";\r\n\r\nconst { Text } = Typography;\r\n\r\ntype IndeedCampaignActionsContext = {\r\n indeedStore: IndeedStore;\r\n history: History;\r\n plCampaignId: number;\r\n uiStore: UIStore;\r\n userStore: UserStore;\r\n};\r\n\r\nexport const IndeedCampaignActionsBuilder: ActionsBuilder<\r\n IndeedCampaignTableDto,\r\n IndeedCampaignActionsContext\r\n> = ({ history, indeedStore, plCampaignId, uiStore, userStore }) => [\r\n {\r\n text: \"View Jobs\",\r\n action: (indeedCampaign) => {\r\n indeedStore.SetSelectedIndeedCampaign(\r\n indeedStore.PLCampaignData?.indeedCampaigns.find(\r\n (x) => x.id == indeedCampaign.id\r\n )\r\n );\r\n history.push({\r\n pathname:\r\n RoutesPaths.Supervision.IndeedRoutes.BuildCampaignJobsRoute(\r\n plCampaignId,\r\n indeedCampaign.id\r\n ),\r\n });\r\n },\r\n Icon: RiSuitcaseLine,\r\n isDisplayed: () => true,\r\n },\r\n {\r\n text: \"Attach Jobs\",\r\n action: (indeedCampaign) => {\r\n indeedStore.SetSelectedIndeedCampaign(\r\n indeedStore.PLCampaignData?.indeedCampaigns.find(\r\n (x) => x.id == indeedCampaign.id\r\n )\r\n );\r\n history.push({\r\n pathname:\r\n RoutesPaths.Supervision.IndeedRoutes.BuildAttachJobsToIndeedCampaign(\r\n plCampaignId,\r\n indeedCampaign.id\r\n ),\r\n });\r\n },\r\n Icon: BiTransfer,\r\n isDisplayed: () => true,\r\n },\r\n {\r\n text: \"Edit Campaign\",\r\n action: (indeedCampaign) => {\r\n indeedStore.SetSelectedIndeedCampaign(\r\n indeedStore.PLCampaignData?.indeedCampaigns.find(\r\n (x) => x.id == indeedCampaign.id\r\n )\r\n );\r\n history.push({\r\n pathname:\r\n RoutesPaths.Supervision.IndeedRoutes.BuildEditIndeedCampaign(\r\n plCampaignId,\r\n indeedCampaign.id\r\n ),\r\n });\r\n },\r\n Icon: FiEdit,\r\n isDisplayed: () => true,\r\n },\r\n {\r\n text: \"Assign to Algo (Stem It)\",\r\n action: async (indeedCampaign) => {\r\n const popupBody = (\r\n

\r\n Stem is about to take control over campaign:{\" \"}\r\n {indeedCampaign.name} with ID:{\" \"}\r\n {indeedCampaign.id}\r\n
\r\n \r\n Which is currently managed by:{\" \"}\r\n {indeedCampaign.user}\r\n \r\n

\r\n );\r\n\r\n const updateCampaignBudgetPayload: IndeedUpdateCampaignBudgetEventPayload =\r\n {\r\n indeedCampaignId: indeedCampaign.id,\r\n userId: UserIds.Algo,\r\n budgetOnetimeLimit: Number(\r\n indeedCampaign.budget.replace(\"$\", \"\")\r\n ),\r\n };\r\n\r\n uiStore.SetPopUp({\r\n body: popupBody,\r\n title: \"Stem Control Request\",\r\n okClickHandler: async () => {\r\n await indeedService.UpdateCampaignBudget(\r\n updateCampaignBudgetPayload\r\n );\r\n\r\n await userActionService.Create({\r\n actionTypeId: EActionTypes.IndeedAlgoControlRequest,\r\n data: JSON.stringify({\r\n campaignId: plCampaignId,\r\n indeedCampaignId: indeedCampaign.id,\r\n }),\r\n userId: userStore.User!.id,\r\n });\r\n\r\n message.success(\r\n `Indeed Campaign ID:${indeedCampaign.id} returned control to Algo`\r\n );\r\n },\r\n okButtonText: \"Accept\",\r\n });\r\n },\r\n Icon: AiOutlineRobot,\r\n isDisplayed: (indeedCampaign) => indeedCampaign.user != \"Algo\",\r\n },\r\n];\r\n","import { IndeedBudgetFirstMonthBehavior } from \"../../models/indeed-manager/IndeedBudgetFirstMonthBehavior\";\r\nimport { IndeedCampaign } from \"../../models/indeed-manager/IndeedCampaign\";\r\nimport {\r\n INDEED_CAMPAIGN_OBJECTIVE_DEFAULT_VALUE,\r\n IndeedCampaignObjectiveType\r\n} from \"../../models/indeed-manager/IndeedCampaignObjectiveType\";\r\nimport { IndeedCampaignStatus } from \"../../models/indeed-manager/IndeedCampaignStatus\";\r\nimport { ISODateTime } from \"../../types/types\";\r\nimport { FormatDate } from \"../../utils/DateHelpers\";\r\nimport { TableDto } from \"../general/supervision-table/Table.dto\";\r\n\r\nexport class IndeedCampaignTableDto extends TableDto {\r\n constructor(\r\n public id: string,\r\n public name: string,\r\n public sourceName: string,\r\n public status: string,\r\n public budget: string,\r\n public objective: string,\r\n public startDate: ISODateTime,\r\n public endDate: ISODateTime,\r\n public budgetFirstMonthBehavior: string,\r\n public user: string\r\n\r\n ) {\r\n super();\r\n }\r\n\r\n public static MapFromIndeedCampaign(indeedCampaign: IndeedCampaign) {\r\n return new IndeedCampaignTableDto(\r\n indeedCampaign.id,\r\n indeedCampaign.name,\r\n indeedCampaign.indeedCampaignSourceInfo.sourceName ?? \"N.A\",\r\n IndeedCampaignStatus[indeedCampaign.status],\r\n `$${indeedCampaign.campaignBudget ?? 0}`,\r\n displayObjective(indeedCampaign),\r\n FormatDate(indeedCampaign.startDate),\r\n indeedCampaign.endDate ? FormatDate(indeedCampaign.endDate) : \"N.A\",\r\n indeedCampaign.budgetFirstMonthBehavior ? IndeedBudgetFirstMonthBehavior[indeedCampaign.budgetFirstMonthBehavior] : \"N.A\",\r\n indeedCampaign.userName\r\n\r\n )\r\n }\r\n}\r\n\r\nfunction displayObjective(indeedCampaign: IndeedCampaign): string {\r\n if (indeedCampaign.campaignObjectiveType == IndeedCampaignObjectiveType.TARGET_APPLICATIONS) {\r\n return `${indeedCampaign.campaignObjectiveTarget ?? 0} - Applications Goal`\r\n }\r\n\r\n if (indeedCampaign.campaignObjectiveType == IndeedCampaignObjectiveType.TARGET_COST_PER_APPLICATION) {\r\n return `${indeedCampaign.campaignObjectiveTarget ?? 0} - CPA Goal`\r\n }\r\n\r\n const objectiveType = indeedCampaign.campaignObjectiveType ? IndeedCampaignObjectiveType[indeedCampaign.campaignObjectiveType] : IndeedCampaignObjectiveType[INDEED_CAMPAIGN_OBJECTIVE_DEFAULT_VALUE];\r\n return objectiveType;\r\n}\r\n","import { Empty } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nimport { IndeedCampaign } from \"../../models/indeed-manager/IndeedCampaign\";\r\nimport { IndeedCampaignStatus } from \"../../models/indeed-manager/IndeedCampaignStatus\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport Loader from \"../general/loader/Loader\";\r\nimport SupervisionTable from \"../general/supervision-table/SupervisionTable\";\r\nimport { IndeedCampaignActionsBuilder } from \"./IndeedCampaignsTable.actions\";\r\nimport { IndeedCampaignTableDto } from \"./IndeedCampaignsTable.dto\";\r\n\r\ninterface Props {\r\n campaignId: number;\r\n indeedCampaigns: IndeedCampaign[] | undefined;\r\n}\r\n\r\nconst IndeedCampaignsTable = (props: Props) => {\r\n const { campaignId, indeedCampaigns } = props;\r\n\r\n const { campaignStore, indeedStore, uiStore, userStore } = useContext(RootStoreContext);\r\n const history = useHistory();\r\n\r\n if (!indeedCampaigns) {\r\n return ;\r\n }\r\n\r\n if (indeedCampaigns.length == 0) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default observer(IndeedCampaignsTable);\r\n","import { CreateIndeedCampaignObjectiveStrategyRequest } from \"../../models/indeed-manager/strategy/CreateIndeedCampaignObjectiveStrategyRequest\";\r\nimport { IndeedCampaignObjectiveStrategy } from \"../../models/indeed-manager/strategy/IndeedCampaignObjectiveStrategy\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\nclass IndeedStrategyManagementService extends BaseService {\r\n public async GetStrategiesByPlCampaign(\r\n plCampaignId: number | string\r\n ): Promise {\r\n return await this.Get(\r\n `/${plCampaignId}/indeed-strategy`\r\n );\r\n }\r\n\r\n public async CreateStrategy(\r\n plCampaignId: number | string,\r\n createIndeedCampaignObjectiveStrategyRequest: CreateIndeedCampaignObjectiveStrategyRequest\r\n ): Promise {\r\n return await this.Post(\r\n `/${plCampaignId}/indeed-strategy`,\r\n createIndeedCampaignObjectiveStrategyRequest\r\n );\r\n }\r\n\r\n public async DeleteStrategy(\r\n plCampaignId: number | string,\r\n id: number\r\n ): Promise {\r\n return await this.Delete(\r\n `/${plCampaignId}/indeed-strategy/${id}`\r\n );\r\n }\r\n}\r\n\r\nexport const indeedStrategyManagementService = new IndeedStrategyManagementService(\"campaign\");","import { Card, message, Typography } from \"antd\";\r\n\r\nimport { FetchError } from \"../../../exceptions/AlgoSupervisionExceptions\";\r\nimport { IndeedCampaignObjectiveType } from \"../../../models/indeed-manager/IndeedCampaignObjectiveType\";\r\nimport { IndeedCampaignObjectiveStrategy } from \"../../../models/indeed-manager/strategy/IndeedCampaignObjectiveStrategy\";\r\nimport { indeedStrategyManagementService } from \"../../../services/indeed/IndeedStrategyManagementService\";\r\n\r\nconst { Text } = Typography;\r\n\r\ntype Props = {\r\n indeedCampaignObjectiveStrategy: IndeedCampaignObjectiveStrategy;\r\n plCampaignId: number | string;\r\n onDelete: (objectiveId: number) => void;\r\n};\r\n\r\nfunction mapObjectiveTypeToReadableText(\r\n objectiveType: IndeedCampaignObjectiveType\r\n) {\r\n switch (objectiveType) {\r\n case IndeedCampaignObjectiveType.BALANCE:\r\n return \"Balanced\";\r\n case IndeedCampaignObjectiveType.MAXIMUM:\r\n return \"Maximum\";\r\n case IndeedCampaignObjectiveType.TARGET_APPLICATIONS:\r\n return \"Applicants\";\r\n case IndeedCampaignObjectiveType.TARGET_COST_PER_APPLICATION:\r\n return \"CPA\";\r\n default:\r\n throw new Error(\r\n `Unsupported indeed objective type ${objectiveType}`\r\n );\r\n }\r\n}\r\n\r\nconst IndeedStrategyCard = (props: Props) => {\r\n const { indeedCampaignObjectiveStrategy, plCampaignId, onDelete } = props;\r\n\r\n return (\r\n {\r\n try {\r\n await indeedStrategyManagementService.DeleteStrategy(\r\n plCampaignId,\r\n indeedCampaignObjectiveStrategy.id\r\n );\r\n onDelete(indeedCampaignObjectiveStrategy.id);\r\n message.success(\"Deleted strategy successfully\");\r\n } catch (error) {\r\n if (error instanceof FetchError) {\r\n message.error(error.apiError.errorMessage);\r\n }\r\n }\r\n }}>\r\n Delete\r\n ,\r\n ]}\r\n style={{ border: \"1px solid #d9d9d9\" }}>\r\n \r\n Percent{\" \"}\r\n \r\n {\r\n indeedCampaignObjectiveStrategy.percentOfCampaignStrategies\r\n }\r\n %\r\n \r\n \r\n
\r\n {indeedCampaignObjectiveStrategy.targetStrategyOptionMinValue && (\r\n <>\r\n \r\n Min Target Value{\" \"}\r\n \r\n {\r\n indeedCampaignObjectiveStrategy.targetStrategyOptionMinValue\r\n }\r\n \r\n \r\n
\r\n \r\n )}\r\n\r\n {indeedCampaignObjectiveStrategy.targetStrategyOptionMaxValue && (\r\n <>\r\n \r\n Max Target Value{\" \"}\r\n \r\n {\r\n indeedCampaignObjectiveStrategy.targetStrategyOptionMaxValue\r\n }\r\n \r\n \r\n
\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default IndeedStrategyCard;\r\n","export enum IndeedCampaignObjectiveType {\r\n MAXIMUM = 1,\r\n BALANCE = 2,\r\n TARGET_APPLICATIONS = 3,\r\n TARGET_COST_PER_APPLICATION = 4,\r\n}\r\n","import { Button, Form, Input, InputNumber, message, Select } from \"antd\";\r\nimport React, { useState } from \"react\";\r\n\r\nimport { FetchError } from \"../../../exceptions/AlgoSupervisionExceptions\";\r\nimport { IndeedCampaignObjectiveStrategy } from \"../../../models/indeed-manager/strategy/IndeedCampaignObjectiveStrategy\";\r\nimport { IndeedCampaignObjectiveType } from \"../../../models/indeed-manager/strategy/IndeedCampaignObjectiveType\";\r\nimport { indeedStrategyManagementService } from \"../../../services/indeed/IndeedStrategyManagementService\";\r\nimport Loader from \"../../general/loader/Loader\";\r\n\r\nconst { Option } = Select;\r\n\r\ntype FormState = {\r\n campaignObjectiveType: IndeedCampaignObjectiveType;\r\n percentOfCampaignStrategies: string;\r\n targetStrategyOptionMaxValue: string;\r\n targetStrategyOptionMinValue: string;\r\n};\r\n\r\ntype Props = {\r\n plCampaignId: string | number;\r\n onFormSubmitSuccesfully: (\r\n newlyCreatedStrategy: IndeedCampaignObjectiveStrategy\r\n ) => void;\r\n};\r\n\r\nconst IndeedStrategyForm = (props: Props) => {\r\n const { plCampaignId, onFormSubmitSuccesfully } = props;\r\n\r\n const [form] = Form.useForm();\r\n const [campaignObjectiveType, setCampaignObjectiveType] =\r\n useState();\r\n const [loading, setLoading] = useState(false);\r\n\r\n const onFinish = async (formState: FormState) => {\r\n setLoading(true);\r\n try {\r\n const newlyCreatedStrategy =\r\n await indeedStrategyManagementService.CreateStrategy(\r\n plCampaignId,\r\n {\r\n campaignObjectiveType: formState.campaignObjectiveType,\r\n percentOfCampaignStrategies: Number(\r\n formState.percentOfCampaignStrategies\r\n ),\r\n targetStrategyOptionMinValue:\r\n formState.targetStrategyOptionMinValue !== \"\"\r\n ? Number(formState.targetStrategyOptionMinValue)\r\n : undefined,\r\n targetStrategyOptionMaxValue:\r\n formState.targetStrategyOptionMaxValue !== \"\"\r\n ? Number(formState.targetStrategyOptionMaxValue)\r\n : undefined,\r\n }\r\n );\r\n\r\n onFormSubmitSuccesfully(newlyCreatedStrategy);\r\n\r\n message.success(\"Created new strategy successfully\");\r\n } catch (error) {\r\n if (error instanceof FetchError) {\r\n message.error(error.apiError.errorMessage);\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n {\r\n setCampaignObjectiveType(val);\r\n }}>\r\n \r\n \r\n \r\n Target Applications\r\n \r\n \r\n Target CPA\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n {(campaignObjectiveType ===\r\n IndeedCampaignObjectiveType.TARGET_APPLICATIONS ||\r\n campaignObjectiveType ===\r\n IndeedCampaignObjectiveType.TARGET_COST_PER_APPLICATION) && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {loading ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default IndeedStrategyForm;\r\n","import \"./IndeedStrategyManagement.scss\";\r\n\r\nimport { Col, Collapse, Row } from \"antd\";\r\nimport { useState } from \"react\";\r\n\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport useOnInitAsync from \"../../../hooks/useOnInitAsync\";\r\nimport { IndeedCampaignObjectiveStrategy } from \"../../../models/indeed-manager/strategy/IndeedCampaignObjectiveStrategy\";\r\nimport { indeedStrategyManagementService } from \"../../../services/indeed/IndeedStrategyManagementService\";\r\nimport Loader from \"../../general/loader/Loader\";\r\nimport IndeedStrategyCard from \"./IndeedStrategyCard\";\r\nimport IndeedStrategyForm from \"./IndeedStrategyForm\";\r\n\r\nconst { Panel } = Collapse;\r\n\r\ntype Props = {\r\n plCampaignId: string | number;\r\n};\r\n\r\nconst IndeedStrategyManagement = (props: Props) => {\r\n const { plCampaignId } = props;\r\n\r\n const [campaignObjectiveStrategies, setCampaignObjectiveStrategies] =\r\n useState();\r\n\r\n const callback = (key: any) => {};\r\n\r\n useOnInitAsync(async () => {\r\n const campaignStrategies =\r\n await indeedStrategyManagementService.GetStrategiesByPlCampaign(\r\n plCampaignId\r\n );\r\n setCampaignObjectiveStrategies(campaignStrategies);\r\n });\r\n\r\n if (!campaignObjectiveStrategies) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n setCampaignObjectiveStrategies([\r\n ...campaignObjectiveStrategies,\r\n newlyCreatedStrategy,\r\n ]);\r\n }}\r\n />\r\n \r\n\r\n \r\n {campaignObjectiveStrategies.map(\r\n (campaignObjectiveStrategy, index) => (\r\n \r\n {\r\n setCampaignObjectiveStrategies(\r\n campaignObjectiveStrategies.filter(\r\n (x) => x.id !== objectiveId\r\n )\r\n );\r\n }}\r\n />\r\n \r\n )\r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IndeedStrategyManagement;\r\n","import React, { useEffect } from \"react\";\r\n\r\nconst useOnPoller = (\r\n pollIntervalInSeconds: number,\r\n pollFunction: () => void\r\n) => {\r\n useEffect(() => {\r\n const interval = setInterval(\r\n pollFunction,\r\n pollIntervalInSeconds * 1000\r\n );\r\n\r\n return function cleanUp() {\r\n clearInterval(interval);\r\n };\r\n }, []);\r\n};\r\n\r\nexport default useOnPoller;\r\n","// styles.js\r\nimport styled from 'styled-components';\r\nimport { Checkbox, Input, InputNumber } from 'antd';\r\nimport TextArea from 'antd/lib/input/TextArea';\r\n\r\nexport const StyledInputNumberWrapper = styled(InputNumber)`\r\n background: white;\r\n border-radius: 4px;\r\n border: 1px #809BAF solid;\r\n justify-content: flex-start;\r\n align-items: center;\r\n display: flex;\r\n`;\r\n\r\nexport const StyledTextAreaWrapper = styled(Input.TextArea)`\r\n border-radius: 4px;\r\n border: 1px #809BAF solid;\r\n`;\r\n\r\nexport const StyledTitle = styled.div`\r\n align-self: stretch;\r\n height: 19px;\r\n display: flex;\r\n justify-content: flex-start;\r\n align-items: center;\r\n color: #225A78;\r\n font-size: 16px;\r\n font-family: 'Open Sans';\r\n font-weight: 700;\r\n line-height: 19.20px;\r\n word-wrap: break-word;\r\n`;\r\n\r\nexport const StyledHeader = styled.div`\r\n color: '#225A78';\r\n font-size: 18px;\r\n font-family: 'Open Sans';\r\n font-weight: '400';\r\n word-wrap: 'break-word' ;\r\n`;\r\n\r\nexport const StyledInputGroupWrapper = styled.div`\r\n flex-direction: row; \r\n justify-content: center;\r\n align-items: flex-start;\r\n gap: 24px;\r\n display: flex;\r\n`;\r\n\r\nexport const StyledColumnGroupWrapper = styled.div`\r\nflex-direction: column;\r\njustify-content: center;\r\nalign-items: flex-start;\r\ngap: 12px;\r\ndisplay: flex;\r\n`;\r\n\r\nexport const StyledColumnGroupToTopWrapper = styled.div`\r\nflex-direction: column;\r\njustify-content: flex-start;\r\nalign-items: flex-start;\r\ngap: 12px;\r\ndisplay: flex;\r\n`;\r\n\r\nexport const StyledInputLabel = styled.div`\r\n color: #485465;\r\n font-size: 14px;\r\n font-family: 'Open Sans';\r\n font-weight: 600;\r\n line-height: 18.20px;\r\n word-wrap: break-word;\r\n \r\n`;\r\n\r\nexport const StyledToggleWrapper = styled.div`\r\n width: 198px;\r\n background: white;\r\n border-radius: 4px;\r\n border: 1px #809BAF solid;\r\n justify-content: flex-start;\r\n align-items: center;\r\n display: flex;\r\n`;\r\n\r\nexport const StyledContainer = styled.div`\r\nwidth: 100%;\r\nheight: 100%;\r\npadding: 26px 24px 30px 24px;\r\nbackground: white;\r\nbox-shadow: 0px 1px 8px rgba(0, 0, 0, 0.10);\r\nborder-radius: 4px;\r\ndisplay: flex;\r\nflex-direction: column;\r\njustify-content: flex-start;\r\nalign-items: flex-start;\r\ngap: 24px;\r\n`;\r\n\r\nexport const StyledCheckbox = styled(Checkbox)`\r\n color: #225A78;\r\n font-size: 14px;\r\n font-family: 'Open Sans';\r\n font-weight: 500;\r\n line-height: 14.40px;\r\n word-wrap: break-word;\r\n`;\r\n\r\nexport const StyledSubSection = styled.div`\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: flex-start;\r\n gap: 12px;\r\n display: flex;\r\n`;\r\n\r\nexport const StyledGroupWrapper = styled.div`\r\n flex-direction: row; \r\n justify-content: center;\r\n gap: 24px;\r\n display: flex;\r\n`;\r\n\r\nexport const StyledModeWrapper = styled.div`\r\n justify-content: flex-start;\r\n align-items: center;\r\n gap: 8px;\r\n display: inline-flex;\r\n`;\r\n\r\n\r\n\r\n\r\n","\r\nexport enum SubAccountStatusId {\r\n Revoked = 0,\r\n Idle = -1,\r\n Active = 1\r\n}","import { Box } from \"@material-ui/core\";\r\nimport { Alert } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\"\r\nimport { StyledTitle } from \"../attributes-management/Styles\";\r\nimport { SubAccountStatusId } from \"../../models/indeed-manager/SubAccountStatusId\";\r\nimport { IndeedSubAccount } from \"../../models/indeed-manager/IndeedSubAccount\";\r\n\r\ninterface Props {\r\n indeedSubAccount?: IndeedSubAccount;\r\n showSubAccountName?: boolean;\r\n}\r\n\r\nconst IndeedSubAccountStatus = (props: Props) => {\r\n\r\n const { indeedSubAccount, showSubAccountName} = props;\r\n\r\n type AlertType = \"warning\" | \"error\" | \"success\" | \"info\" | undefined;\r\n\r\n // Helper function to generate alert message and type\r\n const getAlertMessageAndType = (indeedSubAccount?: IndeedSubAccount)\r\n : { message: string | null, type: AlertType, display: boolean } => {\r\n console.log(indeedSubAccount?.statusId);\r\n if (!indeedSubAccount) {\r\n return {\r\n message: \"This account isn't connected to an active Indeed sub account.\",\r\n type: \"error\",\r\n display: true\r\n };\r\n }\r\n\r\n const { statusId } = indeedSubAccount;\r\n\r\n switch (statusId) {\r\n case -1: // Idle\r\n return {\r\n message: \"This account is connected to an idle Indeed sub account.\",\r\n type: \"warning\",\r\n display: true\r\n };\r\n case 0: // Revoked\r\n return {\r\n message: \"This account is connected to a revoked Indeed sub account.\",\r\n type: \"error\",\r\n display: true\r\n };\r\n default : // Active\r\n return {\r\n message: null, // No alert message needed\r\n type: undefined,\r\n display: false\r\n };\r\n }\r\n };\r\n\r\n const { message, type, display } = getAlertMessageAndType(indeedSubAccount);\r\n\r\n const statusText = (indeedSubAccount?.statusId != null && indeedSubAccount?.statusId != undefined)\r\n ? SubAccountStatusId[indeedSubAccount.statusId]\r\n : \"Unknown\";\r\n return (\r\n <>\r\n {display && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\nexport default observer(IndeedSubAccountStatus)\r\n\r\n\r\n","import { Button, message } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport hash from \"object-hash\";\r\nimport { useContext, useRef } from \"react\";\r\nimport { BiPlusCircle } from \"react-icons/bi\";\r\nimport { Link, useHistory, useParams } from \"react-router-dom\";\r\n\r\nimport Loader from \"../../../components/general/loader/Loader\";\r\nimport IndeedCampaignsTable from \"../../../components/indeed-manager/IndeedCampaignsTable\";\r\nimport IndeedStrategyManagement from \"../../../components/indeed-manager/strategy/IndeedStrategyManagement\";\r\nimport { RoutesPaths } from \"../../../constants/RoutePaths\";\r\nimport useOnInitAsync from \"../../../hooks/useOnInitAsync\";\r\nimport useOnPoller from \"../../../hooks/useOnPoller\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport indeedService from \"../../../services/indeed/IndeedService\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport { IndeedContextInitializers } from \"./helpers/IndeedContextInitializers\";\r\nimport { IndeedBreadcrumbs } from \"./helpers/IndeedManager.breadcrumbs\";\r\nimport { IndeedSubAccount } from \"../../../models/indeed-manager/IndeedSubAccount\";\r\nimport IndeedSubAccountStatus from \"../../../components/indeed-manager/IndeedSubAccountStatus\";\r\nimport { SubAccountStatusId } from \"../../../models/indeed-manager/SubAccountStatusId\";\r\nimport \"./IndeedCampaignPage.scss\";\r\n\r\ninterface Props { }\r\n\r\nconst IndeedCampaignPage = (props: Props) => {\r\n const match = useParams<{ campaignId: string }>();\r\n const history = useHistory();\r\n const { indeedStore, uiStore, companyStore } = useContext(RootStoreContext);\r\n const plDataHash = useRef(\"\");\r\n\r\n useOnInitAsync(async () => {\r\n await IndeedContextInitializers.InitializePLCampaignData(\r\n Number(match.campaignId),\r\n indeedStore,\r\n history\r\n );\r\n await IndeedContextInitializers.InitializeIndeedSubAccount(\r\n indeedStore,\r\n history,\r\n companyStore.SelectedCompany?.companyId\r\n );\r\n uiStore.SetPageTitle(\r\n `Indeed Campaigns for: ${indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignName}`\r\n );\r\n plDataHash.current = hash(indeedStore.PLCampaignData ?? \"\");\r\n });\r\n\r\n usePageInitialization({\r\n\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n /* uiStore.SetPageTitle(\r\n `Indeed Campaigns for: ${indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignName}`\r\n );*/\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n SupervisionBreadcrumbs.Campaigns(`${indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignName}`),\r\n IndeedBreadcrumbs.Indeed(company.companyId),\r\n );\r\n },\r\n\r\n });\r\n\r\n // Update page if data changed\r\n useOnPoller(10, async () => {\r\n const plData = await indeedService.GetIndeedCampaignsByPLCampaignId(\r\n Number(match.campaignId)\r\n );\r\n\r\n if (hash(plData) != plDataHash.current) {\r\n indeedStore.SetPLCampaignData(plData);\r\n plDataHash.current = hash(plData);\r\n message.info(\"Updated table since data has been changed\");\r\n }\r\n });\r\n\r\n if (indeedStore.IsDataLoading) {\r\n return ;\r\n }\r\n\r\n const indeedSubAccountIsDisconnectedOrRevoked = () => {\r\n\r\n if (indeedStore?.indeedSubAccount?.statusId == SubAccountStatusId.Active\r\n || indeedStore?.indeedSubAccount?.statusId == SubAccountStatusId.Idle) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n return (\r\n
\r\n {/* */}\r\n \r\n \r\n\r\n \r\n\r\n
\r\n \r\n \r\n \r\n Add New Indeed Campaign\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default observer(IndeedCampaignPage);\r\n","import { ISODateTime } from \"../../types/types\";\r\nimport { IndeedBudgetFirstMonthBehavior } from \"./IndeedBudgetFirstMonthBehavior\";\r\n\r\nexport class IndeedUpdateCampaignBudgetEventPayload {\r\n constructor(\r\n public indeedCampaignId: string,\r\n public userId: number,\r\n public startDate?: ISODateTime,\r\n public fixedEndDate?: ISODateTime,\r\n public targetEndDate?: ISODateTime,\r\n public budgetFirstMonthBehavior?: IndeedBudgetFirstMonthBehavior,\r\n public budgetOnetimeLimit?: number,\r\n public budgetMonthlyLimit?: number\r\n ) {}\r\n}\r\n","import { CampaignSettingsAuditDto } from \"../../components/campaign-track-system/CampaignSettingsAudit.dto\";\r\nimport { IndeedCampaignObjective } from \"./IndeedCampaignObjective\";\r\nimport { IndeedCampaignStatus } from \"./IndeedCampaignStatus\";\r\n\r\nexport class IndeedUpdateCampaignEventPayload {\r\n constructor(\r\n public indeedCampaignId: string,\r\n public userId: number,\r\n public name?: string,\r\n public status?: IndeedCampaignStatus,\r\n public objective?: IndeedCampaignObjective\r\n ) { }\r\n}\r\n","import { Button, Form, message, Select } from \"antd\";\r\nimport moment, { Moment } from \"moment\";\r\nimport { useContext } from \"react\";\r\nimport { useHistory } from \"react-router\";\r\n\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport { RoutesPaths } from \"../../constants/RoutePaths\";\r\nimport { FetchError } from \"../../exceptions/AlgoSupervisionExceptions\";\r\nimport { IndeedBudgetFirstMonthBehavior } from \"../../models/indeed-manager/IndeedBudgetFirstMonthBehavior\";\r\nimport { IndeedCampaign } from \"../../models/indeed-manager/IndeedCampaign\";\r\nimport { IndeedCampaignBudgetType } from \"../../models/indeed-manager/IndeedCampaignBudgetType\";\r\nimport { IndeedCampaignObjective } from \"../../models/indeed-manager/IndeedCampaignObjective\";\r\nimport {\r\n INDEED_CAMPAIGN_OBJECTIVE_DEFAULT_VALUE,\r\n IndeedCampaignObjectiveType\r\n} from \"../../models/indeed-manager/IndeedCampaignObjectiveType\";\r\nimport { IndeedCampaignStatus } from \"../../models/indeed-manager/IndeedCampaignStatus\";\r\nimport { IndeedEndDateType } from \"../../models/indeed-manager/IndeedEndDateType\";\r\nimport { IndeedUpdateCampaignBudgetEventPayload } from \"../../models/indeed-manager/IndeedUpdateCampaignBudgetEventPayload\";\r\nimport { IndeedUpdateCampaignEventPayload } from \"../../models/indeed-manager/IndeedUpdateCampaignEventPayload\";\r\nimport indeedService from \"../../services/indeed/IndeedService\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport CampaignBudgetInputs from \"./CampaignBudgetInputs\";\r\nimport CampaignDetailsInputs from \"./CampaignDetailsInputs\";\r\n\r\nconst { Option } = Select;\r\n\r\ninterface Props {\r\n plCampaignId: number;\r\n}\r\n\r\nconst layout = {\r\n labelCol: { span: 8 },\r\n wrapperCol: { span: 16 },\r\n};\r\n\r\n/* eslint-disable no-template-curly-in-string */\r\nconst validateMessages = {\r\n required: \"${label} is required!\",\r\n types: {\r\n email: \"${label} is not a valid email!\",\r\n number: \"${label} is not a valid number!\",\r\n },\r\n number: {\r\n range: \"${label} must be between ${min} and ${max}\",\r\n },\r\n};\r\n\r\ntype FormState = {\r\n campaignName: string;\r\n campaignStatus: IndeedCampaignStatus;\r\n budgetType: IndeedEndDateType;\r\n startDate: Moment;\r\n endDate: Moment;\r\n budgetLimitSettings: IndeedCampaignBudgetType;\r\n budgetLimitValue: string;\r\n budgetFirstMonthBehavior: IndeedBudgetFirstMonthBehavior | undefined;\r\n campaignObjective: IndeedCampaignObjective;\r\n};\r\n\r\ninterface Props {\r\n plCampaignId: number;\r\n indeedCampaign: IndeedCampaign;\r\n}\r\n\r\nconst IndeedEditCampaignForm = (props: Props) => {\r\n const { plCampaignId, indeedCampaign } = props;\r\n const { userStore } = useContext(RootStoreContext);\r\n const history = useHistory();\r\n\r\n const onFinish = async (formState: FormState) => {\r\n const changedBudgetSettings = GetChangedBudgetSettings(\r\n formState,\r\n initialValues\r\n );\r\n\r\n const changedCampaignSettings = GetChangedCampaignSettings(\r\n formState,\r\n initialValues\r\n );\r\n\r\n if (\r\n IsEmptyObject(changedCampaignSettings) &&\r\n IsEmptyObject(changedBudgetSettings)\r\n ) {\r\n message.info(\"Nothing changed in campaign settings.\");\r\n return;\r\n }\r\n\r\n let hasErrorOccured = false;\r\n\r\n if (!IsEmptyObject(changedBudgetSettings)) {\r\n const newBudgetLimits = GetNewBudgetLimits(\r\n changedBudgetSettings,\r\n initialValues\r\n );\r\n\r\n const endDates = GetEndDates(changedBudgetSettings, initialValues);\r\n\r\n const updateBudgetRequest =\r\n new IndeedUpdateCampaignBudgetEventPayload(\r\n indeedCampaign.id,\r\n userStore.User!.id,\r\n changedBudgetSettings.startDate?.toISOString(),\r\n endDates.fixedEndDate,\r\n endDates.targetEndDate,\r\n changedBudgetSettings.budgetFirstMonthBehavior,\r\n newBudgetLimits.budgetOneTimeLimit,\r\n newBudgetLimits.budgetMonthlyLimit\r\n );\r\n\r\n try {\r\n var response = await indeedService.UpdateCampaignBudget(updateBudgetRequest);\r\n message.success(response.body);\r\n } catch (error) {\r\n if (error instanceof FetchError) {\r\n message.error(error.apiError.errorMessage);\r\n }\r\n hasErrorOccured = true;\r\n }\r\n }\r\n\r\n if (!IsEmptyObject(changedCampaignSettings)) {\r\n const updateCampaignRequest = new IndeedUpdateCampaignEventPayload(\r\n indeedCampaign.id,\r\n userStore.User!.id,\r\n changedCampaignSettings.name,\r\n changedCampaignSettings.status,\r\n changedCampaignSettings.campaignObjective\r\n );\r\n try {\r\n var response = await indeedService.UpdateCampaign(updateCampaignRequest);\r\n message.success(response.body);\r\n } catch (error) {\r\n if (error instanceof FetchError) {\r\n message.error(error.apiError.errorMessage);\r\n }\r\n hasErrorOccured = true;\r\n }\r\n }\r\n\r\n if (!hasErrorOccured) {\r\n history.push(\r\n RoutesPaths.Supervision.IndeedRoutes.BuildCampaignRoute(\r\n plCampaignId\r\n )\r\n );\r\n }\r\n };\r\n\r\n const initialValues: FormState = {\r\n campaignName: indeedCampaign.name,\r\n campaignStatus: indeedCampaign.status,\r\n budgetType: indeedCampaign.endDateType,\r\n startDate: moment(indeedCampaign.startDate),\r\n endDate: moment(indeedCampaign.endDate),\r\n budgetLimitSettings: indeedCampaign.campaignBudgetType,\r\n budgetLimitValue: indeedCampaign.campaignBudget?.toString() ?? \"0\",\r\n budgetFirstMonthBehavior: indeedCampaign.budgetFirstMonthBehavior,\r\n campaignObjective: {\r\n type:\r\n indeedCampaign.campaignObjectiveType ||\r\n INDEED_CAMPAIGN_OBJECTIVE_DEFAULT_VALUE,\r\n target: indeedCampaign.campaignObjectiveTarget,\r\n },\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default IndeedEditCampaignForm;\r\n\r\ntype ChangedBudgetSettings = {\r\n budgetType?: IndeedEndDateType;\r\n startDate?: Moment;\r\n endDate?: Moment;\r\n budgetLimitSettings?: IndeedCampaignBudgetType;\r\n budgetLimitValue?: string;\r\n budgetFirstMonthBehavior?: IndeedBudgetFirstMonthBehavior;\r\n};\r\n\r\nfunction GetChangedBudgetSettings(\r\n newFormState: FormState,\r\n oldFormState: FormState\r\n): ChangedBudgetSettings {\r\n const changedBudgetSettings: ChangedBudgetSettings = {};\r\n\r\n if (oldFormState.budgetType != newFormState.budgetType) {\r\n changedBudgetSettings[\"budgetType\"] = newFormState.budgetType;\r\n }\r\n\r\n if (!oldFormState.startDate.isSame(newFormState.startDate)) {\r\n changedBudgetSettings[\"startDate\"] = newFormState.startDate;\r\n }\r\n\r\n if (!oldFormState.endDate.isSame(newFormState.endDate)) {\r\n changedBudgetSettings[\"endDate\"] = newFormState.endDate;\r\n }\r\n\r\n if (oldFormState.budgetLimitSettings != newFormState.budgetLimitSettings) {\r\n changedBudgetSettings[\"budgetLimitSettings\"] =\r\n newFormState.budgetLimitSettings;\r\n }\r\n\r\n if (oldFormState.budgetLimitValue != newFormState.budgetLimitValue) {\r\n changedBudgetSettings[\"budgetLimitValue\"] =\r\n newFormState.budgetLimitValue;\r\n }\r\n\r\n if (\r\n oldFormState.budgetFirstMonthBehavior !=\r\n newFormState.budgetFirstMonthBehavior\r\n ) {\r\n changedBudgetSettings[\"budgetFirstMonthBehavior\"] =\r\n newFormState.budgetFirstMonthBehavior;\r\n }\r\n\r\n return changedBudgetSettings;\r\n}\r\n\r\ntype CampaignChangedSettings = {\r\n name?: string;\r\n status?: IndeedCampaignStatus;\r\n campaignObjective?: IndeedCampaignObjective;\r\n};\r\n\r\nfunction GetChangedCampaignSettings(\r\n newFormState: FormState,\r\n oldFormState: FormState\r\n): CampaignChangedSettings {\r\n const changedCampaignAttributes: CampaignChangedSettings = {};\r\n\r\n if (oldFormState.campaignName != newFormState.campaignName) {\r\n changedCampaignAttributes[\"name\"] = newFormState.campaignName;\r\n }\r\n\r\n if (oldFormState.campaignStatus != newFormState.campaignStatus) {\r\n changedCampaignAttributes[\"status\"] = newFormState.campaignStatus;\r\n }\r\n\r\n const changedCampaignObjective = GetChangedCampaignObjective(\r\n newFormState,\r\n oldFormState\r\n );\r\n if (changedCampaignObjective) {\r\n changedCampaignAttributes.campaignObjective = changedCampaignObjective;\r\n }\r\n\r\n return changedCampaignAttributes;\r\n}\r\n\r\nfunction GetNewBudgetLimits(\r\n changedBudgetSettings: ChangedBudgetSettings,\r\n initialFormState: FormState\r\n): {\r\n budgetOneTimeLimit?: number;\r\n budgetMonthlyLimit?: number;\r\n} {\r\n // if both settings and value changed\r\n if (\r\n changedBudgetSettings.budgetLimitSettings &&\r\n changedBudgetSettings.budgetLimitValue\r\n ) {\r\n if (\r\n changedBudgetSettings.budgetLimitSettings ==\r\n IndeedCampaignBudgetType.Monthly\r\n ) {\r\n return {\r\n budgetMonthlyLimit: Number(\r\n changedBudgetSettings.budgetLimitValue\r\n ),\r\n };\r\n } else if (\r\n changedBudgetSettings.budgetLimitSettings ==\r\n IndeedCampaignBudgetType.OneTime\r\n ) {\r\n return {\r\n budgetOneTimeLimit: Number(\r\n changedBudgetSettings.budgetLimitValue\r\n ),\r\n };\r\n }\r\n }\r\n\r\n // if only settings changed\r\n else if (\r\n changedBudgetSettings.budgetLimitSettings &&\r\n changedBudgetSettings.budgetLimitValue == undefined\r\n ) {\r\n if (\r\n changedBudgetSettings.budgetLimitSettings ==\r\n IndeedCampaignBudgetType.Monthly\r\n ) {\r\n return {\r\n budgetMonthlyLimit: Number(initialFormState.budgetLimitValue),\r\n };\r\n } else if (\r\n changedBudgetSettings.budgetLimitSettings ==\r\n IndeedCampaignBudgetType.OneTime\r\n ) {\r\n return {\r\n budgetOneTimeLimit: Number(initialFormState.budgetLimitValue),\r\n };\r\n }\r\n }\r\n\r\n // if only value changed\r\n else if (\r\n changedBudgetSettings.budgetLimitSettings == undefined &&\r\n changedBudgetSettings.budgetLimitValue\r\n ) {\r\n if (\r\n initialFormState.budgetLimitSettings ==\r\n IndeedCampaignBudgetType.Monthly\r\n ) {\r\n return {\r\n budgetMonthlyLimit: Number(\r\n changedBudgetSettings.budgetLimitValue\r\n ),\r\n };\r\n } else if (\r\n initialFormState.budgetLimitSettings ==\r\n IndeedCampaignBudgetType.OneTime\r\n ) {\r\n return {\r\n budgetOneTimeLimit: Number(\r\n changedBudgetSettings.budgetLimitValue\r\n ),\r\n };\r\n }\r\n }\r\n\r\n return {};\r\n}\r\n\r\nfunction GetEndDates(\r\n changedBudgetSettings: ChangedBudgetSettings,\r\n initialFormState: FormState\r\n): {\r\n fixedEndDate?: string;\r\n targetEndDate?: string;\r\n} {\r\n // if both budget type and end date changed\r\n if (changedBudgetSettings.budgetType && changedBudgetSettings.endDate) {\r\n if (changedBudgetSettings.budgetType == IndeedEndDateType.Fixed) {\r\n return {\r\n fixedEndDate: changedBudgetSettings.endDate.toISOString(),\r\n };\r\n } else if (\r\n changedBudgetSettings.budgetType == IndeedEndDateType.Target\r\n ) {\r\n return {\r\n targetEndDate: changedBudgetSettings.endDate.toISOString(),\r\n };\r\n }\r\n }\r\n\r\n // if only budgetType changed\r\n else if (\r\n changedBudgetSettings.budgetType &&\r\n changedBudgetSettings.endDate == undefined\r\n ) {\r\n if (changedBudgetSettings.budgetType == IndeedEndDateType.Fixed) {\r\n return {\r\n fixedEndDate: initialFormState.endDate.toISOString(),\r\n };\r\n } else if (\r\n changedBudgetSettings.budgetType == IndeedEndDateType.Target\r\n ) {\r\n return {\r\n targetEndDate: initialFormState.endDate.toISOString(),\r\n };\r\n }\r\n }\r\n\r\n // if only end date changed\r\n else if (\r\n changedBudgetSettings.budgetType == undefined &&\r\n changedBudgetSettings.endDate\r\n ) {\r\n if (initialFormState.budgetType == IndeedEndDateType.Fixed) {\r\n return {\r\n fixedEndDate: changedBudgetSettings.endDate.toISOString(),\r\n };\r\n } else if (initialFormState.budgetType == IndeedEndDateType.Target) {\r\n return {\r\n targetEndDate: changedBudgetSettings.endDate.toISOString(),\r\n };\r\n }\r\n }\r\n\r\n return {};\r\n}\r\n\r\nfunction GetChangedCampaignObjective(\r\n newFormState: FormState,\r\n oldFormState: FormState\r\n): IndeedCampaignObjective | undefined {\r\n if (\r\n oldFormState.campaignObjective.type ==\r\n IndeedCampaignObjectiveType.BALANCE ||\r\n oldFormState.campaignObjective.type ==\r\n IndeedCampaignObjectiveType.MAXIMUM\r\n ) {\r\n return undefined;\r\n }\r\n\r\n // If target changed\r\n if (\r\n newFormState.campaignObjective.target !=\r\n oldFormState.campaignObjective.target\r\n ) {\r\n return {\r\n type: oldFormState.campaignObjective.type,\r\n target: newFormState.campaignObjective.target,\r\n };\r\n }\r\n\r\n // If target didn't change\r\n return undefined;\r\n}\r\n\r\nfunction IsEmptyObject(object: object): boolean {\r\n return Object.keys(object).length == 0;\r\n}\r\n","import { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\n\r\nimport Loader from \"../../../components/general/loader/Loader\";\r\nimport IndeedEditCampaignForm from \"../../../components/indeed-manager/IndeedEditCampaignForm\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport { IndeedContextInitializers } from \"./helpers/IndeedContextInitializers\";\r\nimport { IndeedBreadcrumbs } from \"./helpers/IndeedManager.breadcrumbs\";\r\n\r\ninterface Props {}\r\n\r\nconst IndeedEditCampaignPage = (props: Props) => {\r\n const match = useParams<{ campaignId: string; indeedCampaignId: string }>();\r\n const history = useHistory();\r\n const { indeedStore } = useContext(RootStoreContext);\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n await IndeedContextInitializers.InitializePLCampaignData(\r\n Number(match.campaignId),\r\n indeedStore,\r\n history\r\n );\r\n await IndeedContextInitializers.InitializeSelectedIndeedCampaign(\r\n match.indeedCampaignId,\r\n indeedStore.PLCampaignData!,\r\n indeedStore,\r\n history\r\n );\r\n },\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `Edit Indeed Campaign: ${indeedStore.SelectedIndeedCampaign?.name}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n SupervisionBreadcrumbs.Campaigns(`${indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignName}`),\r\n IndeedBreadcrumbs.Indeed(Number(indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignID)),\r\n IndeedBreadcrumbs.IndeedCampaign(\r\n indeedStore.SelectedIndeedCampaign?.name ?? \"\"\r\n ),\r\n IndeedBreadcrumbs.EditCampaign(\r\n Number(indeedStore.PLCampaignData?.indeedCampaignSourceInfo.campaignID),\r\n match.indeedCampaignId\r\n )\r\n );\r\n },\r\n });\r\n\r\n if (!indeedStore.SelectedIndeedCampaign) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(IndeedEditCampaignPage);\r\n","import { CreateLinkedInBudgetStrategyRequest } from \"../../models/linkedin-manager/strategy/CreateLinkedInBudgetStrategyRequest\";\r\nimport { LinkedInBudgetStrategy } from \"../../models/linkedin-manager/strategy/LinkedInBudgetStrategy\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\nclass LinkedInStrategyManagementService extends BaseService {\r\n public async GetStrategiesByCompanyId(\r\n companyId: number | string\r\n ): Promise {\r\n return await this.Get(\r\n `/${companyId}/linkedin-strategy`\r\n );\r\n }\r\n\r\n public async CreateStrategy(\r\n companyId: number | string,\r\n createLinkedInBudgetStrategyRequest: CreateLinkedInBudgetStrategyRequest\r\n ): Promise {\r\n return await this.Post(\r\n `/${companyId}/linkedin-strategy`,\r\n createLinkedInBudgetStrategyRequest\r\n );\r\n }\r\n\r\n public async DeleteStrategy(\r\n companyId: number | string,\r\n id: number\r\n ): Promise {\r\n return await this.Delete(\r\n `/${companyId}/linkedin-strategy/${id}`\r\n );\r\n }\r\n}\r\n\r\nexport const linkedinStrategyManagementService = new LinkedInStrategyManagementService(\"company\");","export enum LinkedInBudgetLevel {\r\n LOW = 1,\r\n MEDIUM = 2,\r\n HIGH = 3,\r\n VERY_HIGH = 4\r\n}\r\n","import { Button, Form, Input, InputNumber, message, Select } from \"antd\";\r\nimport React, { useState } from \"react\";\r\n\r\nimport { FetchError } from \"../../../exceptions/AlgoSupervisionExceptions\";\r\nimport { LinkedInBudgetLevel } from \"../../../models/linkedin-manager/strategy/LinkedInBudgetLevel\";\r\nimport { LinkedInBudgetStrategy } from \"../../../models/linkedin-manager/strategy/LinkedInBudgetStrategy\";\r\nimport { linkedinStrategyManagementService } from \"../../../services/linkedin/LinkedInStrategyManagementService\";\r\nimport Loader from \"../../general/loader/Loader\";\r\n\r\nconst { Option } = Select;\r\n\r\ntype FormState = {\r\n budgetLevel: LinkedInBudgetLevel;\r\n percentOfStrategies: string;\r\n};\r\n\r\ntype Props = {\r\n companyId: string | number;\r\n onFormSubmitSuccesfully: (\r\n newlyCreatedStrategy: LinkedInBudgetStrategy\r\n ) => void;\r\n};\r\n\r\nconst LinkedInStrategyForm = (props: Props) => {\r\n const { companyId, onFormSubmitSuccesfully } = props;\r\n\r\n const [form] = Form.useForm();\r\n const [budgetLevel, setBudgetLevel] =\r\n useState();\r\n const [loading, setLoading] = useState(false);\r\n\r\n const onFinish = async (formState: FormState) => {\r\n setLoading(true);\r\n try {\r\n const newlyCreatedStrategy =\r\n await linkedinStrategyManagementService.CreateStrategy(\r\n companyId,\r\n {\r\n budgetLevel: formState.budgetLevel,\r\n percentOfStrategies: Number(\r\n formState.percentOfStrategies\r\n )\r\n }\r\n );\r\n\r\n onFormSubmitSuccesfully(newlyCreatedStrategy);\r\n\r\n message.success(\"Created new strategy successfully\");\r\n } catch (error) {\r\n if (error instanceof FetchError) {\r\n message.error(error.apiError.errorMessage);\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n {\r\n setBudgetLevel(val);\r\n }}>\r\n \r\n \r\n \r\n High\r\n \r\n \r\n Very High\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n {loading ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default LinkedInStrategyForm;\r\n","import { Card, message, Typography } from \"antd\";\r\n\r\nimport { FetchError } from \"../../../exceptions/AlgoSupervisionExceptions\";\r\nimport { LinkedInBudgetLevel } from \"../../../models/linkedin-manager/strategy/LinkedInBudgetLevel\";\r\nimport { LinkedInBudgetStrategy } from \"../../../models/linkedin-manager/strategy/LinkedInBudgetStrategy\";\r\nimport { linkedinStrategyManagementService } from \"../../../services/linkedin/LinkedInStrategyManagementService\";\r\n\r\nconst { Text } = Typography;\r\n\r\ntype Props = {\r\n linkedinBudgetStrategy: LinkedInBudgetStrategy;\r\n companyId: number | string;\r\n onDelete: (linkedinBudgetStrategyId: number) => void;\r\n};\r\n\r\nfunction mapBudgetLevelToReadableText(\r\n budgetLevel: LinkedInBudgetLevel\r\n) {\r\n switch (budgetLevel) {\r\n case LinkedInBudgetLevel.LOW:\r\n return \"Low\";\r\n case LinkedInBudgetLevel.MEDIUM:\r\n return \"Medium\";\r\n case LinkedInBudgetLevel.HIGH:\r\n return \"High\";\r\n case LinkedInBudgetLevel.VERY_HIGH:\r\n return \"Very High\";\r\n default:\r\n throw new Error(\r\n `Unsupported linkedin budget level ${budgetLevel}`\r\n );\r\n }\r\n}\r\n\r\nconst LinkedInStrategyCard = (props: Props) => {\r\n const { linkedinBudgetStrategy, companyId, onDelete } = props;\r\n\r\n return (\r\n {\r\n try {\r\n await linkedinStrategyManagementService.DeleteStrategy(\r\n companyId,\r\n linkedinBudgetStrategy.id\r\n );\r\n onDelete(linkedinBudgetStrategy.id);\r\n message.success(\"Deleted strategy successfully\");\r\n } catch (error) {\r\n if (error instanceof FetchError) {\r\n message.error(error.apiError.errorMessage);\r\n }\r\n }\r\n }}>\r\n Delete\r\n ,\r\n ]}\r\n style={{ border: \"1px solid #d9d9d9\" }}>\r\n \r\n Percent{\" \"}\r\n \r\n {\r\n linkedinBudgetStrategy.percentOfStrategies\r\n }\r\n %\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LinkedInStrategyCard;\r\n","import { Col, Collapse, Row } from \"antd\";\r\nimport { useState } from \"react\";\r\n\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport useOnInitAsync from \"../../../hooks/useOnInitAsync\";\r\nimport { LinkedInBudgetStrategy } from \"../../../models/linkedin-manager/strategy/LinkedInBudgetStrategy\";\r\nimport { linkedinStrategyManagementService } from \"../../../services/linkedin/LinkedInStrategyManagementService\";\r\nimport Loader from \"../../general/loader/Loader\";\r\nimport LinkedInStrategyForm from \"./LinkedInStrategyForm\";\r\nimport LinkedInStrategyCard from \"./LinkedInStrategyCard\";\r\n\r\nconst { Panel } = Collapse;\r\n\r\ntype Props = {\r\n companyId: string | number;\r\n};\r\n\r\nconst LinkedInStrategyManagement = (props: Props) => {\r\n const { companyId } = props;\r\n\r\n const [BudgetStrategies, setBudgetStrategies] =\r\n useState();\r\n\r\n const callback = (key: any) => {};\r\n\r\n useOnInitAsync(async () => {\r\n const companyStrategies =\r\n await linkedinStrategyManagementService.GetStrategiesByCompanyId(\r\n companyId\r\n );\r\n setBudgetStrategies(companyStrategies);\r\n });\r\n\r\n if (!BudgetStrategies) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n setBudgetStrategies([\r\n ...BudgetStrategies,\r\n newlyCreatedStrategy,\r\n ]);\r\n }}\r\n />\r\n \r\n\r\n \r\n {BudgetStrategies.map(\r\n (BudgetStrategy, index) => (\r\n \r\n {\r\n setBudgetStrategies(\r\n BudgetStrategies.filter(\r\n (x) => x.id !== BudgetStrategyId\r\n )\r\n );\r\n }}\r\n />\r\n \r\n )\r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LinkedInStrategyManagement;\r\n","import { RoutesPaths } from \"../../../../constants/RoutePaths\";\r\nimport { BreadCrumb } from \"../../../../models/BreadCrumb\";\r\n\r\nexport const LinkedInBreadcrumbs = {\r\n LinkedIn: (companyId: number) => {\r\n return new BreadCrumb(\r\n \"LinkedIn\",\r\n RoutesPaths.Supervision.LinkedInRoutes.BuildStrategyRoute(companyId),\r\n null\r\n );\r\n }\r\n};\r\n","import { Box } from \"@material-ui/core\";\r\nimport { observer } from \"mobx-react-lite\"\r\nimport { StyledTitle } from \"../attributes-management/Styles\";\r\nimport { LinkedInChildApplicationResponse } from \"../../models/linkedin-manager/LinkedInChildApplicationResponse\";\r\nimport { Alert } from \"antd\";\r\n\r\ninterface Props {\r\n linkedinChildApplication?: LinkedInChildApplicationResponse;\r\n}\r\n\r\nconst LinkedinChildApplication = (props: Props) => {\r\n\r\n const { linkedinChildApplication } = props;\r\n type AlertType = \"warning\" | \"error\" | \"info\" | undefined;\r\n\r\n // Helper function to generate alert message and type\r\n const getAlertMessageAndType = (linkedinChildApplication?: LinkedInChildApplicationResponse)\r\n : { message: string | null, type: AlertType, display: boolean } => {\r\n\r\n if (!linkedinChildApplication) {\r\n return {\r\n message: \"This account isn't connected to a LinkedIn child application\",\r\n type: \"error\",\r\n display: true\r\n };\r\n }\r\n return {\r\n message: null, // No alert message needed\r\n type: undefined,\r\n display: false\r\n };\r\n };\r\n\r\n const { message, type, display } = getAlertMessageAndType(linkedinChildApplication);\r\n\r\n return (\r\n <>\r\n {display && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n Linkedin child application: {linkedinChildApplication ? linkedinChildApplication.name : \"None\"}\r\n \r\n \r\n \r\n );\r\n};\r\nexport default observer(LinkedinChildApplication)\r\n\r\n\r\n","\r\nimport { LinkedInChildApplicationResponse } from \"../../models/linkedin-manager/LinkedInChildApplicationResponse\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\nexport class LinkedInService\r\n extends BaseService {\r\n /**\r\n * Gets the LinkedIn child application of a company\r\n * \r\n */\r\n async GetLinkedInChildApplicationByCompanyId(companyId?: number) {\r\n const linkedInChildApplication = await this.Get(`/linkedin-child-application/${companyId}`);\r\n return linkedInChildApplication;\r\n }\r\n}\r\n\r\nconst linkedinService = new LinkedInService(\"LinkedIn\");\r\nexport default linkedinService","\r\nimport { message } from \"antd\";\r\n\r\nimport { LinkedInStore } from \"../../../../stores/LinkedInStore\";\r\nimport linkedinService from \"../../../../services/linkedin/LinkedInService\";\r\n\r\nexport const LinkedInContextInitializers = {\r\n InitializeLinkedInChildApplication: async (linkedinStore: LinkedInStore, history: any, companyId?: number) => {\r\n\r\n const linkedInChildApplication = await linkedinService.GetLinkedInChildApplicationByCompanyId(companyId);\r\n linkedinStore.SetLinkedInChildApplication(linkedInChildApplication);\r\n }\r\n}\r\n","import { observer } from \"mobx-react-lite\";\r\nimport { useContext, useRef } from \"react\";\r\nimport { Link, useHistory, useParams } from \"react-router-dom\";\r\n\r\nimport Loader from \"../../../components/general/loader/Loader\";\r\nimport LinkedInStrategyManagement from \"../../../components/linkedin-manager/strategy/LinkedInStrategyManagement\";\r\nimport { RoutesPaths } from \"../../../constants/RoutePaths\";\r\nimport useOnInitAsync from \"../../../hooks/useOnInitAsync\";\r\nimport useOnPoller from \"../../../hooks/useOnPoller\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport linkedinService from \"../../../services/linkedin/LinkedInService\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport { LinkedInBreadcrumbs } from \"./helpers/LinkedInManager.breadcrumbs\";\r\nimport LinkedInChildApplication from \"../../../components/linkedin-manager/LinkedInChildApplication\";\r\nimport { LinkedInContextInitializers } from \"./helpers/LinkedInContextInitializers\";\r\n\r\ninterface Props { }\r\n\r\nconst LinkedInPage = (props: Props) => {\r\n const match = useParams<{ companyId: string }>();\r\n const history = useHistory();\r\n const { uiStore, companyStore, linkedinStore } = useContext(RootStoreContext);\r\n const plDataHash = useRef(\"\");\r\n\r\n useOnInitAsync(async () => {\r\n await LinkedInContextInitializers.InitializeLinkedInChildApplication(\r\n linkedinStore,\r\n history,\r\n companyStore.SelectedCompany?.companyId\r\n );\r\n uiStore.SetPageTitle(\r\n `LinkedIn Budgets for: ${companyStore.SelectedCompany?.companyName}`\r\n );\r\n });\r\n\r\n usePageInitialization({\r\n\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `LinkedIn Budgets for: ${companyStore.SelectedCompany?.companyName}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n LinkedInBreadcrumbs.LinkedIn(company.companyId),\r\n );\r\n },\r\n\r\n });\r\n\r\n if (linkedinStore.IsDataLoading) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n\r\n
\r\n );\r\n};\r\n\r\nexport default observer(LinkedInPage);\r\n","import { LoginRequest } from \"../models/auth/LoginRequest\";\r\nimport { LoginResponse } from \"../models/auth/LoginResponse\";\r\nimport { BaseService } from \"./BaseService\";\r\n\r\nexport class AuthService extends BaseService {\r\n public async Login(loginRequest: LoginRequest) {\r\n const loginResponse = await this.Post(\"/login\", loginRequest);\r\n return loginResponse;\r\n }\r\n}\r\n\r\n\r\nexport const authService = new AuthService(\"auth\");","import \"./SupervisionTitle.scss\";\r\n\r\nimport React from \"react\";\r\n\r\ntype Props = {};\r\n\r\nconst SupervisionTitle = (props: Props) => {\r\n return (\r\n
\r\n
\r\n
\r\n

Algo

\r\n

Supervision

\r\n

\r\n Algo\r\n Supervision\r\n

\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default SupervisionTitle;\r\n","import \"./LoginPage.scss\";\r\n\r\nimport { Divider, message } from \"antd\";\r\nimport React, { useState } from \"react\";\r\nimport { BsMicrosoft } from \"react-icons/bs\";\r\nimport { useHistory } from \"react-router\";\r\n\r\nimport settings from \"../../../config/AppSettings/SettingsFactory\";\r\nimport { RoutesPaths } from \"../../../constants/RoutePaths\";\r\nimport { authService } from \"../../../services/AuthService\";\r\nimport { ValidateEmail } from \"../../../utils/EmailUtils\";\r\nimport SupervisionTitle from \"./SupervisionTitle\";\r\n\r\ntype Props = {};\r\n\r\nconst LoginPage = (props: Props) => {\r\n const [email, setEmail] = useState();\r\n const [password, setPassword] = useState();\r\n const [loading, setLoading] = useState(false);\r\n\r\n const history = useHistory();\r\n\r\n const handleFormLogin = async () => {\r\n if (!email) {\r\n message.error(\"Email can't be empty\");\r\n return;\r\n }\r\n\r\n if (!password) {\r\n message.error(\"Password can't be empty\");\r\n return;\r\n }\r\n\r\n if (!ValidateEmail(email)) {\r\n message.error(\"Please provide a valid email\");\r\n return;\r\n }\r\n\r\n try {\r\n setLoading(true);\r\n await authService.Login({\r\n email,\r\n password,\r\n });\r\n\r\n setLoading(false);\r\n history.push(RoutesPaths.Supervision.Campaigns);\r\n } catch (error) {\r\n message.error(\"Invalid credentials\");\r\n }\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n

Login

\r\n {/*\r\n \r\n \r\n Microsoft Login\r\n \r\n \r\n OR */}\r\n
\r\n setEmail(e.target.value)}\r\n />\r\n setPassword(e.target.value)}\r\n />\r\n \r\n {loading ? \"Loading...\" : \"Let me in.\"}\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default LoginPage;\r\n","export const ValidateEmail = (email: string) => {\r\n return String(email)\r\n .toLowerCase()\r\n .match(\r\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\r\n );\r\n };","\r\nexport enum CookieConstants {\r\n UserIdentityCookie = \"User.Identity\"\r\n}","import { message } from \"antd\";\r\nimport Cookies from \"js-cookie\";\r\nimport React, { useEffect } from \"react\";\r\nimport { Redirect } from \"react-router-dom\";\r\n\r\nimport { CookieConstants } from \"../../constants/CookieConstants\";\r\nimport { RoutesPaths } from \"../../constants/RoutePaths\";\r\n\r\ntype Props = {};\r\n\r\nconst LogoutPage = (props: Props) => {\r\n useEffect(() => {\r\n message.success(\"Successfully logged out\");\r\n }, []);\r\n\r\n Cookies.remove(CookieConstants.UserIdentityCookie);\r\n return ;\r\n};\r\n\r\nexport default LogoutPage;\r\n","import React from 'react'\r\n\r\ninterface Props {\r\n \r\n}\r\n\r\n\r\n/**\r\n * TODO: Customize that page\r\n */\r\nconst NotFoundPage = (props: Props) => {\r\n return (\r\n
\r\n 404 Page Not Found\r\n
\r\n )\r\n}\r\n\r\nexport default NotFoundPage\r\n","import { Space, Table, TablePaginationConfig } from \"antd\";\r\nimport { FilterValue, SorterResult } from \"antd/lib/table/interface\";\r\nimport { EntityRecordDetailed } from \"../../../models/EntityRecord\";\r\nimport { Box, Button } from \"@material-ui/core\";\r\nimport { observer } from \"mobx-react-lite\";\r\n\r\nconst externalColumn: any = {\r\n title: \"External\",\r\n key: \"action\",\r\n render: (text: any, record: EntityRecordDetailed) => (\r\n \r\n \r\n window.alert(\r\n \"Will redirect you to campaign details in the future\"\r\n )\r\n }\r\n variant=\"text\"\r\n color=\"primary\"\r\n style={{ marginRight: \"30px\" }}>\r\n Campaign Details\r\n \r\n \r\n ),\r\n};\r\n\r\ntype entityTypes = \"Campaigns\" | \"Groups\" | \"Jobs\";\r\n\r\nconst GetChildEntityName = (entityName: entityTypes): entityTypes | \"\" => {\r\n switch (entityName) {\r\n case \"Campaigns\":\r\n // return \"Groups\";\r\n return \"Jobs\";\r\n case \"Groups\":\r\n return \"Jobs\";\r\n default:\r\n return \"\";\r\n }\r\n};\r\n\r\ninterface Props {\r\n entityName: entityTypes;\r\n entityData: EntityRecordDetailed[];\r\n columns: {title: string, dataIndex: string | string[]}[]\r\n HandleChildEntityButtonClick: (entityName: string) => void;\r\n HandleVendorButtonClick: (record: EntityRecordDetailed) => void;\r\n}\r\n\r\nconst EntityPage = (props: Props) => {\r\n const actionColumn: any = {\r\n title: \"Action\",\r\n key: \"action\",\r\n render: (text: any, record: EntityRecordDetailed) => (\r\n \r\n props.HandleVendorButtonClick(record)}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n style={{ marginRight: \"30px\" }}>\r\n Vendors\r\n \r\n {props.entityName != \"Jobs\" && (\r\n \r\n props.HandleChildEntityButtonClick(\r\n record.entityName\r\n )\r\n }>\r\n View {GetChildEntityName(props.entityName)}\r\n \r\n )}\r\n \r\n ),\r\n };\r\n\r\n // const columns = [\r\n // {\r\n // title: props.entityName,\r\n // dataIndex: \"entityName\",\r\n // },\r\n // {\r\n // title: \"Jobs\",\r\n // dataIndex: \"jobsCount\",\r\n // sorter: {\r\n // compare: (a: EntityRecordDetailed, b: EntityRecordDetailed) =>\r\n // a.jobsCount - b.jobsCount,\r\n // //multiple: 3,\r\n // },\r\n // },\r\n // ];\r\n\r\n return (\r\n {\r\n // console.log(\"params\", pagination, filters, sorter, extra);\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default observer(EntityPage);\r\n","/* eslint-disable no-use-before-define */\r\nimport React from \"react\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\r\nimport { EntityRecordDetailed } from \"../../../models/EntityRecord\";\r\n\r\ninterface Props {\r\n entityData: EntityRecordDetailed[];\r\n HandleInputChange: (text: string[]) => void;\r\n}\r\n\r\nconst EntityPageAutoComplete = (props: Props) => {\r\n return (\r\n
\r\n option.entityName)}\r\n onChange={(_, entityNameList: string[]) => {\r\n props.HandleInputChange(entityNameList);\r\n }}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport default EntityPageAutoComplete;\r\n","import { makeStyles } from \"@material-ui/core\";\r\n// Material UI\r\n\r\nexport const useStyles = makeStyles((theme) => ({\r\n activeVendor: {\r\n backgroundColor: \"rgba(67, 160, 71, 0.2)\",\r\n borderBottom: '1px solid #f0f0f0',\r\n },\r\n inActiveVendor: {\r\n backgroundColor: \"rgba(229, 57, 53, 0.2)\",\r\n borderBottom: '1px solid #f0f0f0',\r\n },\r\n avatarBackground: {\r\n backgroundColor: \"#fff\",\r\n },\r\n vendorImg: {\r\n objectFit: \"contain\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n },\r\n}));\r\n","import React, { useContext } from \"react\";\r\nimport Avatar from \"@material-ui/core/Avatar\";\r\nimport List from \"@material-ui/core/List\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport ListItemAvatar from \"@material-ui/core/ListItemAvatar\";\r\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\r\nimport ListItemSecondaryAction from \"@material-ui/core/ListItemSecondaryAction\";\r\nimport ListItemText from \"@material-ui/core/ListItemText\";\r\nimport { Button, ButtonGroup } from \"@material-ui/core\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { useStyles } from \"./VendorDrawerList.styles\";\r\nimport { PublisherSelectionActionType } from \"../../../types/publisher-selection/PublisherSelectionTypes\";\r\nimport { RootStoreContext } from \"./../../../stores/RootStoreContext\";\r\nimport { vendorMockType, vendorsData } from \"./../mock-data/vendors-list\";\r\n\r\n/**\r\n * Helper Components\r\n */\r\ninterface ButtonGroupComponentPropsType {\r\n HandleButtonActionClick: (\r\n actionType: PublisherSelectionActionType,\r\n vendor: vendorMockType\r\n ) => (event: any) => void;\r\n vendor: vendorMockType;\r\n}\r\n\r\nconst ButtonGroupComponent = (props: ButtonGroupComponentPropsType) => {\r\n const { HandleButtonActionClick, vendor } = props;\r\n\r\n const IsSelected = (actionType: PublisherSelectionActionType) => {\r\n const styledProps = {\r\n variant: \"contained\",\r\n color: \"primary\",\r\n };\r\n if (actionType == \"Exclude\" && vendor.operationTypeId == 1) {\r\n return styledProps;\r\n }\r\n if (actionType == \"Include\" && vendor.operationTypeId == 2) {\r\n return styledProps;\r\n }\r\n\r\n if (actionType == \"Exclusive\" && vendor.operationTypeId == 3) {\r\n return styledProps;\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n Include\r\n \r\n \r\n Exclude\r\n \r\n \r\n Exclusive\r\n \r\n \r\n );\r\n};\r\n\r\ninterface Props {\r\n vendorsData: vendorMockType[];\r\n}\r\n\r\nconst VendorDrawerList = (props: Props) => {\r\n const { uiStore, publisherSelectionStore } = useContext(RootStoreContext);\r\n\r\n const classes = useStyles();\r\n\r\n /**\r\n * Functions\r\n */\r\n const HandleButtonActionClick =\r\n (actionType: PublisherSelectionActionType, vendor: vendorMockType) =>\r\n (event: any): void => {\r\n publisherSelectionStore.DialogBox.Set(vendor, actionType, [\r\n \"Job A: Include\",\r\n \"Job C: Exclude\",\r\n ]);\r\n\r\n publisherSelectionStore.SetSelectedPublisherActionType(actionType);\r\n publisherSelectionStore.SetSelectedVendor(vendor);\r\n };\r\n\r\n return (\r\n \r\n {props.vendorsData.map((vendor: vendorMockType) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default observer(VendorDrawerList);\r\n","/* eslint-disable no-use-before-define */\r\nimport React from \"react\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\r\nimport { vendorMockType } from \"../mock-data/vendors-list\";\r\nimport { observer } from 'mobx-react-lite';\r\n\r\ninterface Props {\r\n vendorData: vendorMockType[];\r\n HandleInputChange: (text: string[]) => void;\r\n}\r\n\r\nconst VendorDrawerAutocomplete = (props: Props) => {\r\n return (\r\n
\r\n option.vendorName)}\r\n onChange={(_, vendorsList: string[]) => {\r\n props.HandleInputChange(vendorsList);\r\n }}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport default observer(VendorDrawerAutocomplete);\r\n","import { Box, Drawer, Typography } from \"@material-ui/core\";\r\nimport React, { useState, useEffect, useContext } from \"react\";\r\nimport VendorDrawerList from \"../vendor-drawer-list/VendorDrawerList\";\r\nimport VendorDrawerAutocomplete from \"./../vendor-drawer-autocomplete/VendorDrawerAutocomplete\";\r\nimport { vendorMockType, vendorsData } from \"../mock-data/vendors-list\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\n\r\ninterface Props {\r\n isOpen: boolean;\r\n onClose:\r\n | ((event: {}, reason: \"backdropClick\" | \"escapeKeyDown\") => void)\r\n | undefined;\r\n}\r\n\r\nconst VendorDrawer = (props: Props) => {\r\n const { uiStore, publisherSelectionStore } = useContext(RootStoreContext);\r\n const [vendorsFiltered, setVendorsFiltered] = useState([]);\r\n\r\n /**\r\n * Functions\r\n */\r\n const HandleAutoCompleteSearch = (vendorList: string[]) => {\r\n setVendorsFiltered(vendorList);\r\n };\r\n\r\n const GetVendorsAfterFilter = (): vendorMockType[] => {\r\n if (vendorsFiltered.length == 0) {\r\n return publisherSelectionStore.VendorsForEntity!;\r\n }\r\n\r\n return publisherSelectionStore.VendorsForEntity!.filter((vendor) =>\r\n vendorsFiltered.some((filteredVendor) =>\r\n vendor.vendorName\r\n .toLowerCase()\r\n .includes(filteredVendor.toLowerCase())\r\n )\r\n );\r\n };\r\n\r\n /**\r\n * Hooks\r\n */\r\n useEffect(() => {\r\n if (!publisherSelectionStore.VendorsForEntity) {\r\n publisherSelectionStore.SetVendorsForEntity();\r\n }\r\n }, []);\r\n\r\n /**\r\n * Render\r\n */\r\n\r\n if (!publisherSelectionStore.VendorsForEntity) {\r\n return
loading...
;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n Select publishers for:{\" \"}\r\n \r\n {\" \"}\r\n {publisherSelectionStore.SelectedEntity?.entityName ?? \"\"} (\r\n {publisherSelectionStore.MockActiveEntityType ?? \"\"})\r\n \r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default observer(VendorDrawer);\r\n","import { EntityRecordDetailed } from \"../../../models/EntityRecord\"\r\n\r\nexport type EntityRecordHierarchyType = {\r\n entityLevelName: \"Campaigns\" | \"Groups\" | \"Jobs\",\r\n entities: EntityRecordDetailed[]\r\n // entities: EntityRecordDetailed<{ campaignName: string, startDate: string, endDate: string }>[]\r\n}\r\n\r\nexport const campaignsMock: EntityRecordHierarchyType<{ campaignName: string, startDate: string, endDate: string }> = {\r\n \"entityLevelName\": \"Campaigns\",\r\n \"entities\": [\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 1,\r\n \"entityName\": \"Blount memorial Hospital\",\r\n \"entityData\": {\r\n \"campaignName\": \"Blount memorial Hospital\",\r\n \"startDate\": \"2017-11-26 00:00:00\",\r\n \"endDate\": \"2018-11-25 23:59:59\"\r\n }\r\n\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 2,\r\n \"entityName\": \"Parrish Medical Center\",\r\n \"entityData\": {\r\n \"campaignName\": \"Parrish Medical Center\",\r\n \"startDate\": \"2017-07-24 00:00:00\",\r\n \"endDate\": \"2018-07-28 23:59:59\"\r\n }\r\n\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 3,\r\n \"entityName\": \"Advance Financial\",\r\n \"entityData\": {\r\n \"campaignName\": \"Advance Financial\",\r\n \"startDate\": \"2018-11-17 00:00:00\",\r\n \"endDate\": \"2019-04-23 23:59:59\"\r\n }\r\n\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 4,\r\n \"entityName\": \"Lazer Spot-Pp\",\r\n \"entityData\": {\r\n \"campaignName\": \"Lazer Spot-Pp\",\r\n \"startDate\": \"2018-02-11 00:00:00\",\r\n \"endDate\": \"2019-05-28 23:59:59\"\r\n }\r\n\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 5,\r\n \"entityName\": \"Meridian Health\",\r\n \"entityData\": {\r\n \"campaignName\": \"Meridian Health\",\r\n \"startDate\": \"2017-01-02 00:00:00\",\r\n \"endDate\": \"2017-04-28 23:59:59\"\r\n }\r\n\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 7,\r\n \"entityName\": \"Mesquite Gaming\",\r\n \"entityData\": {\r\n \"campaignName\": \"Mesquite Gaming\",\r\n \"startDate\": \"2016-07-28 00:00:00\",\r\n \"endDate\": \"2016-12-28 23:59:59\"\r\n }\r\n\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 8,\r\n \"entityName\": \"Integrity Staffing\",\r\n \"entityData\": {\r\n \"campaignName\": \"Integrity Staffing\",\r\n \"startDate\": \"2017-11-26 00:00:00\",\r\n \"endDate\": \"2018-11-25 23:59:59\"\r\n }\r\n\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 1,\r\n \"entityName\": \"Classic Carriers\",\r\n \"entityData\": {\r\n \"campaignName\": \"Classic Carriers\",\r\n \"startDate\": \"2017-11-26 00:00:00\",\r\n \"endDate\": \"2018-11-25 23:59:59\"\r\n }\r\n\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 1,\r\n \"entityName\": \"Witham Memorial Hospital\",\r\n \"entityData\": {\r\n \"campaignName\": \"Witham Memorial Hospital\",\r\n \"startDate\": \"2017-11-26 00:00:00\",\r\n \"endDate\": \"2018-11-25 23:59:59\"\r\n }\r\n\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 2,\r\n \"entityName\": \"Avis Budget Group\",\r\n \"entityData\": {\r\n \"campaignName\": \"Avis Budget Group\",\r\n \"startDate\": \"2017-11-26 00:00:00\",\r\n \"endDate\": \"2018-11-25 23:59:59\"\r\n }\r\n\r\n }\r\n ]\r\n}","import { EntityRecordHierarchyType } from \"./campaigns-list\";\r\n\r\n// export const jobsMock: EntityRecordHierarchyType = {} as EntityRecordHierarchyType\r\n\r\nexport const jobsMock: EntityRecordHierarchyType<{ location: string, jobTitleText: string }> = {\r\n \"entityLevelName\": \"Jobs\",\r\n \"entities\": [\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 1,\r\n \"entityName\": \"Truck Driver\",\r\n \"entityData\": {\r\n jobTitleText: \"Foreign Language Teacher\",\r\n location: \"Concord, NH\"\r\n\r\n }\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 2,\r\n \"entityName\": \"Dietary Manager\",\r\n \"entityData\": {\r\n jobTitleText: \"General Assistant Professor\",\r\n location: \"South Bend Area\"\r\n\r\n }\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 3,\r\n \"entityName\": \"Clerk\",\r\n \"entityData\": {\r\n jobTitleText: \"Nurse Manager\",\r\n location: \"NE, COLUMBUS\"\r\n\r\n }\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 4,\r\n \"entityName\": \"Chef\",\r\n \"entityData\": {\r\n jobTitleText: \"Senior Accountant\",\r\n location: \"NE, GRAND ISLAND\"\r\n\r\n }\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 5,\r\n \"entityName\": \"Programmer Analyst\",\r\n \"entityData\": {\r\n jobTitleText: \"MOORHEAD, MN\",\r\n location: \"Certified Peer Specialist\"\r\n\r\n }\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 7,\r\n \"entityName\": \"Marketing Representative\",\r\n \"entityData\": {\r\n jobTitleText: \"Automobile Salesperson\",\r\n location: \"FARGO, ND\"\r\n\r\n }\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 7,\r\n \"entityName\": \"Research Communications/Grant Dev Specialist\",\r\n \"entityData\": {\r\n jobTitleText: \"Pharmacy Technician\",\r\n location: \"BISMARCK, ND\"\r\n\r\n }\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 7,\r\n \"entityName\": \"Software Engineer\",\r\n \"entityData\": {\r\n jobTitleText: \"Sales Representative\",\r\n location: \"CONTACT VIRGINIA\"\r\n\r\n }\r\n },\r\n {\r\n \"entityTypeId\": 5,\r\n \"entityId\": 7,\r\n \"entityName\": \"Accountant\",\r\n \"entityData\": {\r\n jobTitleText: \"Administrative Assistant\",\r\n location: \"NEW YORK NEW YORK\"\r\n\r\n }\r\n },\r\n ]\r\n}","import React, { useContext } from \"react\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport {\r\n Box,\r\n List,\r\n ListItem,\r\n ListItemText,\r\n Typography,\r\n} from \"@material-ui/core\";\r\n\r\nconst PublisherSelectionDialog = () => {\r\n const { uiStore, publisherSelectionStore } = useContext(RootStoreContext);\r\n\r\n /**\r\n * Functions\r\n */\r\n const handleClose = () => {\r\n publisherSelectionStore.DialogBox.Reset();\r\n };\r\n\r\n const HandleConfirm = () => {\r\n if (\r\n !publisherSelectionStore.SelectedPublisherActionType ||\r\n !publisherSelectionStore.SelectedVendor\r\n ) {\r\n throw new Error(\r\n \"Cant confirm because either vendor or action type isn't selected\"\r\n );\r\n }\r\n\r\n publisherSelectionStore.HandleVendorAction(\r\n publisherSelectionStore.SelectedPublisherActionType,\r\n publisherSelectionStore.SelectedVendor\r\n );\r\n\r\n \r\n publisherSelectionStore.DialogBox.Reset();\r\n };\r\n\r\n return (\r\n \r\n \r\n Warning\r\n \r\n\r\n \r\n \r\n \r\n \r\n {publisherSelectionStore.DialogBox.actionType}\r\n {\" \"}\r\n \r\n {\" \"}\r\n {publisherSelectionStore.DialogBox.Vendor\r\n ?.vendorName ?? \"\"}\r\n {\" \"}\r\n FOR{\" \"}\r\n \r\n {publisherSelectionStore.SelectedEntity?.entityName}\r\n \r\n \r\n \r\n The following rules will be overriden:\r\n \r\n
\r\n \r\n {publisherSelectionStore.DialogBox.Conflicts.map(\r\n (conflict) => (\r\n \r\n \r\n \r\n )\r\n )}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\nexport default observer(PublisherSelectionDialog);\r\n","import React, { useContext, useEffect, useState } from \"react\";\r\nimport { Box, Typography } from \"@material-ui/core\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport EntityPage from \"../../../components/publisher-selection/entity-page/EntityPage\";\r\nimport EntityPageAutoComplete from \"../../../components/publisher-selection/entity-page-autocomplete/EntityPageAutoComplete\";\r\nimport { EntityRecordDetailed } from \"../../../models/EntityRecord\";\r\nimport useSetCurrentRoute from \"../../../hooks/useSetCurrentRoute\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { BreadCrumb } from \"../../../models/BreadCrumb\";\r\nimport VendorDrawer from \"../../../components/publisher-selection/vendor-drawer/VendorDrawer\";\r\n\r\n/**\r\n * Mock Data\r\n */\r\nimport { groupsMock } from \"../../../components/publisher-selection/mock-data/groups-list\";\r\nimport {\r\n campaignsMock,\r\n EntityRecordHierarchyType,\r\n} from \"../../../components/publisher-selection/mock-data/campaigns-list\";\r\nimport { jobsMock } from \"../../../components/publisher-selection/mock-data/jobs-list\";\r\nimport PublisherSelectionDialog from \"../../../components/publisher-selection/publisher-selection-dialog/PublisherSelectionDialog\";\r\n\r\ninterface Props {}\r\n\r\nconst ChooseCutOffContainer = (props: Props) => {\r\n const { uiStore, publisherSelectionStore } = useContext(RootStoreContext);\r\n\r\n const GetEntities = (): [\r\n EntityRecordHierarchyType,\r\n { dataIndex: string | string[]; title: string }[]\r\n ] => {\r\n switch (publisherSelectionStore.MockActiveEntityType) {\r\n case \"campaigns\":\r\n return [\r\n campaignsMock,\r\n [\r\n {\r\n dataIndex: [\"entityData\", \"campaignName\"],\r\n title: \"Campaign Name\",\r\n },\r\n {\r\n dataIndex: [\"entityData\", \"startDate\"],\r\n title: \"Start Date\",\r\n },\r\n {\r\n dataIndex: [\"entityData\", \"endDate\"],\r\n title: \"End Date\",\r\n },\r\n ],\r\n ];\r\n\r\n // case \"groups\":\r\n // return [groupsMock, []];\r\n\r\n case \"jobs\":\r\n return [\r\n jobsMock,\r\n [\r\n {\r\n dataIndex: [\"entityData\", \"jobTitleText\"],\r\n title: \"Job Title\",\r\n },\r\n {\r\n dataIndex: [\"entityData\", \"location\"],\r\n title: \"Location\",\r\n },\r\n ],\r\n ];\r\n\r\n default:\r\n throw new Error(\"Invalid MockActiveEntityType type\");\r\n }\r\n };\r\n\r\n /**\r\n * Local State\r\n */\r\n\r\n const [entityRecordHierarchy, setEntityRecordHierarchy] = useState<\r\n EntityRecordHierarchyType\r\n >({} as EntityRecordHierarchyType);\r\n\r\n const [entityDataFiltered, setEntityDataFiltered] = useState<\r\n EntityRecordDetailed[]\r\n >([]);\r\n\r\n const [isVendorDrawerOpen, setIsVendorDrawerOpen] =\r\n useState(false);\r\n\r\n /**\r\n * Event Handlers\r\n */\r\n\r\n const HandleInputSearch = (entityNameList: string[]) => {\r\n if (entityNameList.length == 0) {\r\n setEntityDataFiltered(entityRecordHierarchy.entities);\r\n return;\r\n }\r\n\r\n setEntityDataFiltered(\r\n entityRecordHierarchy.entities.filter((entityRecord) =>\r\n entityNameList.some((selectValue) =>\r\n selectValue\r\n .toLowerCase()\r\n .includes(entityRecord.entityName.toLowerCase())\r\n )\r\n )\r\n );\r\n };\r\n\r\n const HandleChildEntityButtonClick = (entityName: string) => {\r\n if (entityRecordHierarchy.entityLevelName == \"Campaigns\") {\r\n const breadCrumb = new BreadCrumb(entityName, null, () => {\r\n publisherSelectionStore.SetMockActiveEntityType(\"jobs\");\r\n uiStore.RemoveBreadCrumbsUntil(entityName);\r\n });\r\n uiStore.AddBreadCrumbs(breadCrumb);\r\n publisherSelectionStore.SetMockActiveEntityType(\"jobs\");\r\n }\r\n\r\n // if (entityRecordHierarchy.entityLevelName == \"Groups\") {\r\n // const breadCrumb = new BreadCrumb(entityName, null, () => {\r\n // publisherSelectionStore.SetMockActiveEntityType(\"jobs\");\r\n // uiStore.RemoveBreadCrumbsUntil(entityName);\r\n // });\r\n // uiStore.AddBreadCrumbPath(breadCrumb);\r\n // publisherSelectionStore.SetMockActiveEntityType(\"jobs\");\r\n // }\r\n };\r\n\r\n const HandleVendorButtonClick = (record: EntityRecordDetailed) => {\r\n publisherSelectionStore.SetSelectedEntity(record);\r\n setIsVendorDrawerOpen(true);\r\n };\r\n\r\n const HandleDrawerClose = () => {\r\n publisherSelectionStore.RemoveSelectedEntity();\r\n setIsVendorDrawerOpen(false);\r\n };\r\n\r\n /**\r\n * Hooks\r\n */\r\n\r\n useEffect(() => {\r\n const [_entityRecordHierarchy] = GetEntities();\r\n setEntityRecordHierarchy(_entityRecordHierarchy);\r\n setEntityDataFiltered(_entityRecordHierarchy.entities);\r\n }, [publisherSelectionStore.MockActiveEntityType]);\r\n\r\n useSetCurrentRoute();\r\n\r\n useEffect(() => {\r\n const rootContainerBreadCrumb = new BreadCrumb(\r\n \"Select Cut Offs\",\r\n null,\r\n () => {\r\n publisherSelectionStore.SetMockActiveEntityType(\"campaigns\");\r\n uiStore.RemoveBreadCrumbsUntil(rootContainerBreadCrumb);\r\n }\r\n );\r\n\r\n uiStore.AddBreadCrumbs(rootContainerBreadCrumb);\r\n }, []);\r\n\r\n /**\r\n * Render\r\n */\r\n\r\n if (Object.keys(entityRecordHierarchy).length == 0) {\r\n return
loading...
;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {entityRecordHierarchy.entityLevelName}\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default observer(ChooseCutOffContainer);\r\n","export type shortcutType = {\r\n Keys: string,\r\n Action: string\r\n}\r\n\r\nexport const userShortcuts: shortcutType[] = [\r\n {\r\n Keys: \"Alt + b\",\r\n Action: \"Toggles sidebar\",\r\n },\r\n {\r\n Keys: \"Alt + h\",\r\n Action: \"Toggles header menu\",\r\n },\r\n {\r\n Keys: \"Alt + q\",\r\n Action: \"Open this page (shortcut page)\",\r\n },\r\n];","import React from \"react\";\r\n\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport { shortcutType } from \"./ShortcutsData\";\r\n\r\ninterface Props {\r\n shortcut: shortcutType\r\n}\r\n\r\nconst ShortCutItem = (props: Props) => {\r\n return (\r\n \r\n \r\n {props.shortcut.Keys}\r\n \r\n {props.shortcut.Action}\r\n \r\n );\r\n};\r\n\r\nexport default ShortCutItem;\r\n","import { Typography } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport { Box } from \"@material-ui/core\";\r\nimport { userShortcuts } from \"../../components/general/shortcuts/ShortcutsData\";\r\nimport ShortCutItem from \"../../components/general/shortcuts/ShortCutItem\";\r\n\r\ninterface Props {}\r\n\r\nconst ShortCutsManualContainer = (props: Props) => {\r\n return (\r\n \r\n \r\n \r\n Shortcuts Guide\r\n \r\n \r\n\r\n \r\n \r\n \r\n Shortcut\r\n \r\n \r\n Action\r\n \r\n \r\n\r\n {userShortcuts.map((shortcut) => (\r\n \r\n ))}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ShortCutsManualContainer;\r\n","export const spacingUnit = 8;","import { Col, Row, Select, Space, Typography } from \"antd\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\n\r\nimport { spacingUnit } from \"../../../assets/styles/theme\";\r\nimport useOnInitAsync from \"../../../hooks/useOnInitAsync\";\r\nimport { CampaignPartial } from \"../../../models/operation/CampaignPartial\";\r\nimport campaignService from \"../../../services/operation/CampaignService\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport Loader from \"../../general/loader/Loader\";\r\n\r\nconst { Option } = Select;\r\n\r\ninterface Props {}\r\n\r\nconst CampaignSelectInput = (props: Props) => {\r\n const [options, setOptions] = useState();\r\n const { campaignStore } = useContext(RootStoreContext);\r\n\r\n useOnInitAsync(async () => {\r\n const campaignsPartial = await campaignService.GetAllPartial();\r\n setOptions(campaignsPartial);\r\n });\r\n\r\n if (!options || options.length == 0) {\r\n return ;\r\n }\r\n\r\n const defaultValue =\r\n campaignStore.SearchedCampaigns.length > 0\r\n ? campaignStore.SearchedCampaigns.map((campaign) =>\r\n BuildOptionValue(campaign.campaignName, campaign.campaignID)\r\n )\r\n : [];\r\n return (\r\n
\r\n \r\n \r\n Search Campaign(s)\r\n \r\n\r\n {\r\n const campaignIds = selectedOptionValues.map(\r\n (campaign) => ParseCampaignId(campaign)\r\n );\r\n campaignStore.SetSearchedCampaigns(campaignIds);\r\n }}>\r\n {options.map((campaignPartial) => (\r\n \r\n {campaignPartial.campaignName} - {campaignPartial.campaignID}\r\n \r\n ))}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default CampaignSelectInput;\r\n\r\nconst separator = \"##\";\r\n\r\nconst BuildOptionValue = (campaignName: string, campaignId: number) => {\r\n return `${campaignName}${separator}${campaignId}`;\r\n};\r\n\r\nconst ParseCampaignId = (campaign: string) => {\r\n return Number(campaign.split(separator)[1]);\r\n};\r\n","import { History } from \"history\";\r\nimport { IoMdCut } from \"react-icons/io\";\r\nimport { SiIndeed } from \"react-icons/si\";\r\nimport { CgData } from \"react-icons/cg\";\r\nimport { MdGroupWork } from \"react-icons/md\";\r\n\r\nimport { RoutesPaths } from \"../../../constants/RoutePaths\";\r\nimport { ActionsBuilder } from \"../../general/supervision-table/types\";\r\nimport { CampaignTableDto } from \"./CampaignTable.dto\";\r\n\r\ntype CampaignsTableActionsContext = {\r\n history: History;\r\n}\r\n\r\nexport const CampaignsTableActionsBuilder: ActionsBuilder =\r\n ({ history }) => [\r\n {\r\n text: \"Indeed Management\",\r\n action: (campaign) => {\r\n if (!history) {\r\n throw new Error(\"history doesn't exist in context... Can't perform redirect\");\r\n }\r\n\r\n history.push(\r\n RoutesPaths.Supervision.IndeedRoutes.BuildCampaignRoute(campaign.CampaignId)\r\n );\r\n },\r\n Icon: SiIndeed,\r\n isDisplayed: () => true\r\n },\r\n /* NOT ACTIVE\r\n {\r\n text: \"Campaign Settings\",\r\n action: (campaign) => {\r\n if (!history) {\r\n throw new Error(\"history doesn't exist in context... Can't perform redirect\");\r\n }\r\n\r\n history.push(\r\n RoutesPaths.Supervision.CampaignTrackSystemRoutes.BuildCampaignRoute(campaign.CampaignId)\r\n );\r\n },\r\n Icon: CgData,\r\n isDisplayed: () => true\r\n },\r\n */\r\n {\r\n text: \"Groups\",\r\n action: (campaign) => {\r\n if (!history) {\r\n throw new Error(\"history doesn't exist in context... Can't perform redirect\");\r\n }\r\n\r\n history.push(\r\n RoutesPaths.Supervision.GroupsRoutes.BuildGroupRoute(campaign.CampaignId)\r\n );\r\n },\r\n \r\n Icon: MdGroupWork,\r\n isDisplayed: () => true\r\n },\r\n /*\r\n {\r\n text: \"Vendor Management\",\r\n action: (campaign) => {\r\n if (!history) {\r\n throw new Error(\"history doesn't exist in context... Can't perform redirect\");\r\n }\r\n\r\n history.push(\r\n RoutesPaths.Supervision.VendorManagementRoutes.BuildCampaignVendorManagementRoute(campaign.CampaignId)\r\n // RoutesPaths.PublisherSelection.ChooseCutOff\r\n );\r\n },\r\n Icon: IoMdCut,\r\n isDisplayed: () => true\r\n }\r\n */\r\n ]","\r\nimport { Campaign } from \"../../../models/operation/Campaign\";\r\nimport { ISODateTime } from \"../../../types/types\";\r\nimport { FormatDate } from \"../../../utils/DateHelpers\";\r\nimport { TableDto } from \"../../general/supervision-table/Table.dto\";\r\n\r\n/**\r\n * Creates a campaign table dto that is displayed in the table\r\n */\r\nexport class CampaignTableDto extends TableDto {\r\n \r\n public CampaignId: number;\r\n public CampaignName: string;\r\n public CreationDate: ISODateTime;\r\n public EndDate: ISODateTime;\r\n public Status: string;\r\n\r\n constructor(campaign: Campaign) {\r\n super();\r\n this._id = campaign.companyId;\r\n this.CampaignId = campaign.campaignID;\r\n this.CampaignName = campaign.campaignName;\r\n this.CreationDate = FormatDate(campaign.creationDate);\r\n this.EndDate = FormatDate(campaign.forceEndDate ?? campaign.endDate);\r\n this.Status = this.DetermineStatus(campaign.statusId);\r\n }\r\n\r\n\r\n private DetermineStatus(statusId: number) {\r\n switch (statusId) {\r\n case 1: return \"Setup\";\r\n case 2: return \"Active\";\r\n case 3: return \"Removed\";\r\n case 4: return \"Stop\";\r\n case 5: return \"Paused\";\r\n\r\n default: throw new Error(`Unsupported Status number ${statusId}`);\r\n }\r\n }\r\n}","import \"./CampaignTable.scss\";\r\n\r\nimport { Empty, Table } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nimport { Campaign } from \"../../../models/operation/Campaign\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { DOMCoordinates } from \"../../../types/types\";\r\nimport Loader from \"../../general/loader/Loader\";\r\nimport SupervisionTable from \"../../general/supervision-table/SupervisionTable\";\r\nimport { CampaignsTableActionsBuilder } from \"./CampaignsTable.actions\";\r\nimport { CampaignTableDto } from \"./CampaignTable.dto\";\r\n\r\nexport type RightClickData = {\r\n clickCoordinates: DOMCoordinates;\r\n clickedCampaign: CampaignTableDto;\r\n rowIndex: number;\r\n};\r\n\r\ninterface Props {}\r\nconst CampaignsTable = (props: Props) => {\r\n const history = useHistory();\r\n\r\n const { campaignStore } = useContext(RootStoreContext);\r\n\r\n const [campaigns, setCampaigns] = useState(\r\n undefined\r\n );\r\n\r\n useEffect(() => {\r\n setCampaigns(campaignStore.SearchedCampaigns);\r\n }, [campaignStore.SearchedCampaigns]);\r\n\r\n if (campaigns == undefined) {\r\n return ;\r\n }\r\n\r\n if (campaigns.length == 0) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n new CampaignTableDto(c))}\r\n rowActionSettings={{\r\n actions: CampaignsTableActionsBuilder({\r\n history: history\r\n }),\r\n showActionsOnRightClick: true,\r\n showActionsOnLastColumn: true,\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default observer(CampaignsTable);\r\n","import { Tooltip } from \"antd\";\r\nimport React from \"react\";\r\nimport { SiAdobeacrobatreader, SiMicrosoftexcel } from \"react-icons/si\";\r\n\r\nimport { Box } from \"@material-ui/core\";\r\n\r\ninterface Props {}\r\n\r\nconst CampaignsTableIconActions = (props: Props) => {\r\n return (\r\n \r\n \r\n {\r\n window.alert(\"To be done\");\r\n }}\r\n />\r\n \r\n\r\n \r\n {\r\n window.alert(\"To be done\");\r\n }}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CampaignsTableIconActions;\r\n","import React from \"react\";\r\n\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport CampaignSelectInput from \"../../../components/supervision/campaigns/CampaignSelectInput\";\r\nimport CampaignsTable from \"../../../components/supervision/campaigns/CampaignsTable\";\r\nimport CampaignsTableIconActions from \"../../../components/supervision/campaigns/CampaignsTableIconActions\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\n\r\ninterface Props {}\r\n\r\nconst CampaignsContainer = (props: Props) => {\r\n usePageInitialization({\r\n pageTitle: \"Algo Supervision - Campaigns\"\r\n })\r\n\r\n return (\r\n
\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default CampaignsContainer;\r\n","import { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport AuditCampaignForm from \"../../../components/campaign-track-system/AuditCampaignForm\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport CampaignSettingBreadCrumbs from \"./helpers/CampaignSetting.breadcrumbs\";\r\nimport { CampaignSettingContextInitializers } from \"./helpers/CampaignSettingContextInitializers\";\r\n\r\n\r\nconst CampaignTrackAddAuditPage = () => {\r\n\r\n const { campaignSettingStore } = useContext(RootStoreContext);\r\n const match = useParams<{ campaignId: string; campaignAuditId: string }>();\r\n const history = useHistory();\r\n\r\n\r\n usePageInitialization({\r\n\r\n onInitAsync: async () => {\r\n\r\n await CampaignSettingContextInitializers.InitializeCampaignSettingTypes(\r\n campaignSettingStore,\r\n history\r\n )\r\n .then(async () =>\r\n await campaignSettingStore.SetupdateOperationState(false)\r\n );\r\n },\r\n\r\n onCampaignContextCallBack: (campaign, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `Campaign Audits for: ${campaign.campaignName}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Campaigns(campaign.campaignName),\r\n CampaignSettingBreadCrumbs.CampaignSetting(campaign.campaignID),\r\n CampaignSettingBreadCrumbs.AddCampaignSettingAudit(\r\n campaign.campaignID\r\n )\r\n );\r\n },\r\n })\r\n\r\n return (\r\n
\r\n \r\n
)\r\n\r\n}\r\n\r\nexport default observer(CampaignTrackAddAuditPage);","\r\nexport enum BudgetType {\r\n Fixed = 1,\r\n Capped = 2\r\n}","\r\nexport enum GroupStatus {\r\n Removed = 0,\r\n Active = 1\r\n \r\n}","import { BudgetType } from \"../../models/groups/BudgetType\";\r\nimport { GroupResponse } from \"../../models/groups/GroupResponse\";\r\nimport { GroupStatus } from \"../../models/groups/GroupStatus\";\r\nimport { ISODateTime } from \"../../types/types\";\r\nimport { FormatDate } from \"../../utils/DateHelpers\";\r\nimport { TableDto } from \"../general/supervision-table/Table.dto\";\r\n\r\n\r\nexport class GroupTableDto extends TableDto{\r\n constructor(\r\n public groupId: number,\r\n public campaignId: number,\r\n public groupName: string,\r\n public status: string,\r\n public userName: string,\r\n public budget: number,\r\n public budgetType: string,\r\n public creationDate : ISODateTime,\r\n )\r\n {\r\n super();\r\n }\r\n public static MapFromGroup(groupResponse: GroupResponse) {\r\n return new GroupTableDto(\r\n groupResponse.groupId,\r\n groupResponse.campaignId,\r\n groupResponse.groupName,\r\n GroupStatus[Number(groupResponse.isActive)],\r\n groupResponse.userName,\r\n groupResponse.groupBudget.amount,\r\n BudgetType[groupResponse.groupBudget.budgetType],\r\n FormatDate(groupResponse.creationDate),\r\n\r\n )\r\n }\r\n\r\n}","import { extend } from \"lodash\";\r\nimport { APIResponse } from \"../../models/APIResponse\";\r\nimport { GroupBudgetBalance } from \"../../models/groups/GroupBudgetBalance\";\r\nimport { GroupBudgetRequest } from \"../../models/groups/GroupBudgetRequest\";\r\nimport { GroupCreateRequest } from \"../../models/groups/GroupCreateRequest\";\r\nimport { GroupResponse } from \"../../models/groups/GroupResponse\";\r\nimport { GroupUpdateRequest } from \"../../models/groups/GroupUpdateRequest\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\nexport class GroupService extends BaseService {\r\n async GetAllAsync(campaignId: number) {\r\n const groupsData = await this.Get(\r\n `/${campaignId}`\r\n );\r\n return groupsData;\r\n }\r\n\r\n async CreateAsync(groupCreateRequest: GroupCreateRequest): Promise {\r\n const apiResponse = await this.Post>(\r\n \"\",\r\n groupCreateRequest\r\n );\r\n if (apiResponse.isError) {\r\n throw new Error(apiResponse.body);\r\n }\r\n }\r\n\r\n async DeleteAsync(campaignId: number, groupId: number) {\r\n const deletedGroup = await this.Delete(\r\n `/${campaignId}/${groupId}`\r\n );\r\n return deletedGroup;\r\n }\r\n\r\n async GetGroupById(groupId: number) {\r\n return await this.Get(`/group/${groupId}`);\r\n }\r\n\r\n async UpdateGroup(\r\n groupId: number,\r\n updateGroupRequest: GroupUpdateRequest\r\n ): Promise {\r\n const apiResponse = await this.Put>(\r\n `/${groupId}`,\r\n updateGroupRequest\r\n );\r\n if (apiResponse.isError) {\r\n throw new Error(apiResponse.body);\r\n }\r\n }\r\n\r\n\r\n async UpdateGroupBudget(\r\n groupId: number,\r\n updateGroupBudgetRequest: GroupBudgetRequest\r\n ): Promise {\r\n const apiResponse = await this.Put>(\r\n `/group-budget/${groupId}`,\r\n updateGroupBudgetRequest\r\n );\r\n if (apiResponse.isError) {\r\n throw new Error(apiResponse.body);\r\n }\r\n }\r\n \r\n\r\n async GetGroupBudgetBalance(\r\n campaignId: number,\r\n groupId?: number\r\n ) : Promise \r\n {\r\n const groupBudgetBalance = await this.Get(\r\n `/group-budget/${campaignId}/${groupId ?? ''}`\r\n );\r\n return groupBudgetBalance;\r\n }\r\n \r\n}\r\n\r\nconst groupService = new GroupService(\"Groups\");\r\nexport default groupService;\r\n","import { RoutesPaths } from \"../../constants/RoutePaths\";\r\nimport { UIStore } from \"../../stores/UIStore\";\r\nimport { UserStore } from \"../../stores/UserStore\";\r\nimport { GroupTableDto } from \"./GroupTable.dto\";\r\nimport { message, Typography } from \"antd\";\r\nimport { ActionsBuilder } from \"../general/supervision-table/types\";\r\nimport { GroupStore } from \"../../stores/GroupStore\";\r\nimport { History } from \"history\";\r\nimport { FiEdit } from \"react-icons/fi\";\r\nimport { RiDeleteBin7Line, RiSuitcaseLine } from \"react-icons/ri\";\r\nimport { GroupStatus } from \"../../models/groups/GroupStatus\";\r\nimport groupService from \"../../services/groups/GroupsService\";\r\nimport { IoMdCut } from \"react-icons/io\";\r\nimport { BiTransfer } from \"react-icons/bi\";\r\n\r\nconst { Text } = Typography;\r\n\r\ntype GroupActionsContext = {\r\n groupStore: GroupStore;\r\n history: History;\r\n campaignId: number;\r\n uiStore: UIStore;\r\n userStore: UserStore;\r\n};\r\n\r\nexport const GroupsActionBuilder: ActionsBuilder =\r\n ({ history, groupStore, campaignId, uiStore, userStore }) => [\r\n {\r\n text: \"View Jobs\",\r\n action: (groupTableDto) => {\r\n groupStore.SetSelectedGroup(\r\n groupStore.GroupsResponse?.find(\r\n (x) => x.groupId == groupTableDto.groupId\r\n )\r\n );\r\n history.push({\r\n pathname:\r\n RoutesPaths.Supervision.GroupsRoutes.BuildGroupJobsRoute(campaignId, groupTableDto.groupId)\r\n });\r\n }\r\n ,\r\n Icon: RiSuitcaseLine,\r\n isDisplayed: () => true,\r\n },\r\n {\r\n text: \"Delete Group\",\r\n action: (groupTableDto) => {\r\n\r\n const popupBody = (\r\n

\r\n Sure you want to delete audit from campaign: {\" \"}\r\n {groupTableDto.groupName} with group ID:{\" \"}\r\n {groupTableDto.groupId}\r\n

\r\n );\r\n\r\n uiStore.SetPopUp(\r\n {\r\n body: popupBody,\r\n title: \"Stem Control Request\",\r\n okClickHandler: async () => {\r\n await groupService.DeleteAsync(campaignId, groupTableDto.groupId);\r\n let auditIndex = groupStore\r\n .GroupsResponse\r\n .findIndex(x => x.groupId == groupTableDto.groupId);\r\n groupStore.GroupsResponse[auditIndex].isActive = GroupStatus.Removed\r\n\r\n message.success(\r\n `Group ID:${groupTableDto.groupId} deleted`\r\n );\r\n },\r\n okButtonText: \"Accept\",\r\n }\r\n );\r\n },\r\n Icon: RiDeleteBin7Line,\r\n isDisplayed: () => true,\r\n\r\n },\r\n {\r\n text: \"Edit Group\",\r\n action: (groupTableDto) => {\r\n groupStore.SetSelectedGroup(\r\n groupStore.GroupsResponse?.find(\r\n (x) => x.groupId == groupTableDto.groupId\r\n )\r\n );\r\n history.push({\r\n pathname: RoutesPaths.Supervision.GroupsRoutes.BuildEditGroup(\r\n campaignId,\r\n groupTableDto.groupId\r\n ),\r\n });\r\n },\r\n Icon: FiEdit,\r\n isDisplayed: () => true,\r\n },\r\n {\r\n text: \"Attach Jobs\",\r\n action: (groupTableDto) => {\r\n groupStore.SetSelectedGroup(\r\n groupStore.GroupsResponse?.find(\r\n (x) => x.groupId == groupTableDto.groupId\r\n )\r\n );\r\n history.push({\r\n pathname: RoutesPaths.Supervision.GroupsRoutes.BuildAttachJobsToGroup(\r\n campaignId,\r\n groupTableDto.groupId\r\n ),\r\n });\r\n },\r\n Icon: BiTransfer,\r\n isDisplayed: () => true,\r\n },\r\n {\r\n text: \"Vendor Management\",\r\n action: (groupTableDto) => {\r\n if (!history) {\r\n throw new Error(\"history doesn't exist in context... Can't perform redirect\");\r\n }\r\n history.push(\r\n RoutesPaths.Supervision.VendorManagementRoutes\r\n .BuildGroupVendorManagementRoute(campaignId, groupTableDto.groupId)\r\n );\r\n },\r\n Icon: IoMdCut,\r\n isDisplayed: () => true\r\n }\r\n ]","import { Empty } from \"antd\";\r\nimport { useContext, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\n\r\nimport { observer } from \"mobx-react-lite\";\r\nimport SupervisionTable from \"../general/supervision-table/SupervisionTable\";\r\nimport { GroupResponse } from \"../../models/groups/GroupResponse\";\r\nimport { GroupStore } from \"../../stores/GroupStore\";\r\nimport { GroupTableDto } from \"./GroupTable.dto\";\r\nimport { GroupsActionBuilder } from \"./GroupTable.actions\"\r\n\r\ninterface Props {\r\n campaignId: number;\r\n groups: GroupResponse[];\r\n}\r\n\r\n\r\n\r\nconst GroupsTable = (props: Props) => {\r\n\r\n const { groups, campaignId } = props;\r\n const { groupStore, uiStore, userStore } = useContext(RootStoreContext);\r\n const history = useHistory();\r\n\r\n\r\n if (groups.length == 0) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n\r\n\r\n}\r\n\r\n\r\n\r\nexport default observer(GroupsTable);","\r\nimport { RoutesPaths } from \"../../../../constants/RoutePaths\";\r\nimport { BreadCrumb } from \"../../../../models/BreadCrumb\";\r\n\r\nexport const GroupsBreadCrumbs = {\r\n\r\n Groups: (campaignId: number) => {\r\n return new BreadCrumb(\r\n \"Groups\",\r\n RoutesPaths.Supervision.GroupsRoutes.BuildGroupRoute(campaignId),\r\n null\r\n );\r\n },\r\n\r\n GroupName: (groupName: string) => {\r\n return new BreadCrumb(groupName, null, null);\r\n },\r\n\r\n GroupJobs: (campaignId: number, groupId: number) => {\r\n return new BreadCrumb(\r\n \"Jobs\",\r\n RoutesPaths.Supervision.GroupsRoutes.BuildGroupJobsRoute(\r\n campaignId,\r\n groupId\r\n ),\r\n null\r\n );\r\n },\r\n\r\n AddGroup: (campaignId: number) => {\r\n return new BreadCrumb(\r\n \"Add Group\",\r\n RoutesPaths.Supervision.GroupsRoutes.BuildAddGroup(campaignId),\r\n null\r\n );\r\n },\r\n\r\n EditGroup: (campaignId: number, groupId: number) => {\r\n return new BreadCrumb(\r\n \"Edit Group\",\r\n RoutesPaths.Supervision.GroupsRoutes.BuildEditGroup(campaignId, groupId),\r\n null\r\n );\r\n },\r\n\r\n AttachJobs: (campaignId: number, groupId: number) => {\r\n return new BreadCrumb(\r\n \"Attach Jobs\",\r\n RoutesPaths.Supervision.GroupsRoutes.BuildAttachJobsToGroup(campaignId, groupId),\r\n null\r\n );\r\n },\r\n}\r\n\r\n\r\nexport default GroupsBreadCrumbs;","import { GroupJobResponse } from \"../../models/groups/GroupJobResponse\";\r\nimport { GroupJobsRequest } from \"../../models/groups/GroupJobsRequest\";\r\nimport { Job } from \"../../models/operation/Job\";\r\nimport { PaginationParams } from \"../../models/pagination/PaginationParams\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\n\r\nexport class GroupJobsService extends BaseService {\r\n\r\n async GetAllByGroupIdAsync(groupId: number): Promise {\r\n const GroupJobsData = await this.Get(`/${groupId}`);\r\n return GroupJobsData;\r\n\r\n }\r\n\r\n async AttachedDetachedAsync(groupJobRequest: GroupJobsRequest)\r\n {\r\n const apiResponse = await this.Post(\r\n \"/attached-jobs\",\r\n groupJobRequest\r\n );\r\n }\r\n\r\n async GetJobsByCampaignIdPagination(campaignId: number, paginationParams: PaginationParams): Promise {\r\n const queryString = `campaignId=${campaignId}&offset=${paginationParams.offset}&limit=${paginationParams.limit}`\r\n const jobsPage = await\r\n this.Get(`?${queryString}`);\r\n return jobsPage;\r\n }\r\n\r\n\r\n\r\n}\r\n\r\nconst groupJobsService = new GroupJobsService(\"GroupJobs\");\r\nexport default groupJobsService;","import { message } from \"antd\";\r\nimport { RoutesPaths } from \"../../../../constants/RoutePaths\";\r\nimport GroupJobsService from \"../../../../services/groups/GroupJobsService\";\r\nimport groupService from \"../../../../services/groups/GroupsService\";\r\nimport GroupsService from \"../../../../services/groups/GroupsService\";\r\nimport campaignService from \"../../../../services/operation/CampaignService\";\r\nimport { GroupStore } from \"../../../../stores/GroupStore\";\r\n\r\nexport const GroupsContextInitializers = {\r\n\r\n InitializeGroupCampaign: async (campaignId: number, groupsStore: GroupStore, history: any) => {\r\n try {\r\n const campaign = await campaignService.GetById(campaignId);\r\n groupsStore.SetSelectedCampaign(campaign);\r\n }\r\n catch (err) {\r\n history.push(RoutesPaths.Supervision.Companies);\r\n message.error(\r\n `Campaign with ID: ${campaignId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n InitializeGroupData: async (campaignId: number, groupsStore: GroupStore, history: any) => {\r\n try {\r\n\r\n const _groupData = await GroupsService.GetAllAsync(campaignId);\r\n groupsStore.SetGroups(_groupData);\r\n }\r\n catch (err) {\r\n history.push(RoutesPaths.Supervision.Companies);\r\n message.error(\r\n `Campaign with ID: ${campaignId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n\r\n InitializeGroupJobsData: async (groupId: number, groupsStore: GroupStore, history: any) => {\r\n try {\r\n\r\n const _groupJobsData = await GroupJobsService.GetAllByGroupIdAsync(groupId);\r\n groupsStore.SetGroupJobs(_groupJobsData);\r\n }\r\n catch (err) {\r\n history.push(RoutesPaths.Supervision.Campaigns);\r\n message.error(\r\n `Group with ID: ${groupId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n\r\n InitializeSelectedGroup: async (groupId: number, groupsStore: GroupStore, history: any) => {\r\n try {\r\n const group = await groupService.GetGroupById(groupId);\r\n groupsStore.SetSelectedGroup(group);\r\n } catch (err) {\r\n message.error(\r\n `Group with ID: ${groupId} doesn't exist`\r\n );\r\n }\r\n },\r\n\r\n\r\n InitializeGroupBudgetBalance: async (campaignId: number, groupsStore: GroupStore, history: any, groupId?: number) => {\r\n try {\r\n const _groupBudgetBalance = await groupService.GetGroupBudgetBalance(campaignId,groupId);\r\n groupsStore.SetGroupBudgetBalance(_groupBudgetBalance);\r\n } catch (err) {\r\n message.error(\r\n `Balance to campaign with ID: ${campaignId} doesn't exist`\r\n );\r\n }\r\n }\r\n\r\n\r\n}","import { Link, useHistory, useParams } from \"react-router-dom\";\r\nimport { ISODateTime } from \"../../../types/types\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport GroupsTable from \"../../../components/groups/GroupsTable\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport GroupsBreadCrumbs from \"./helpers/GroupsBreadCrumbs\";\r\nimport { GroupsContextInitializers } from \"./helpers/GroupsContextInitializers \";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { useContext } from \"react\";\r\nimport { Button } from \"antd\";\r\nimport { BiPlusCircle } from \"react-icons/bi\";\r\nimport { RoutesPaths } from \"../../../constants/RoutePaths\";\r\n\r\ninterface Props {}\r\n\r\nconst GroupPage = (props: Props) => {\r\n const match = useParams<{ campaignId: string }>();\r\n const { groupStore } = useContext(RootStoreContext);\r\n const history = useHistory();\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n await GroupsContextInitializers.InitializeGroupData(\r\n Number(match.campaignId),\r\n groupStore,\r\n history\r\n );\r\n await GroupsContextInitializers.InitializeGroupCampaign(\r\n Number(match.campaignId),\r\n groupStore,\r\n history\r\n );\r\n },\r\n\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `Groups for: ${groupStore.SelectedCampaign?.campaignName}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n SupervisionBreadcrumbs.Campaigns(\r\n `${groupStore.SelectedCampaign?.campaignName}`\r\n ),\r\n GroupsBreadCrumbs.Groups(\r\n Number(groupStore.SelectedCampaign?.campaignID)\r\n )\r\n );\r\n },\r\n });\r\n\r\n return (\r\n
\r\n \r\n\r\n
\r\n \r\n \r\n \r\n Add New Group\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default observer(GroupPage);\r\n","import \"./JobsTransfer.scss\";\r\n\r\nimport { Transfer } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { useContext, useEffect, useState } from \"react\";\r\nimport { FiInfo } from \"react-icons/fi\";\r\n\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport useOnInitAsync from \"../../hooks/useOnInitAsync\";\r\nimport { Job } from \"../../models/operation/Job\";\r\nimport jobService from \"../../services/operation/JobService\";\r\nimport { isNumber } from \"../../utils/NumbersHelper\";\r\nimport Loader from \"../general/loader/Loader\";\r\nimport groupJobsService from \"../../services/groups/GroupJobsService\";\r\nimport { GroupJobResponse } from \"../../models/groups/GroupJobResponse\";\r\nimport Paragraph from \"antd/lib/typography/Paragraph\";\r\n\r\ninterface Props {\r\n plCampaignId: number;\r\n groupId?: number;\r\n onChange: (jobIds: number[]) => void;\r\n onJobsLoad?: (jobIds: number[]) => void;\r\n}\r\n\r\nconst GroupJobTransfer = (props: Props) => {\r\n const { plCampaignId, groupId, onChange } = props;\r\n const [hasOptionsLoaded, setHasOptionsLoaded] = useState(false);\r\n const [jobOptions, setJobOptions] = useState([]);\r\n const [selectedJobIds, setSelectedJobIds] = useState();\r\n\r\n useOnInitAsync(async () => {\r\n\r\n if (groupId) {\r\n const attachedJobs = await groupJobsService.GetAllByGroupIdAsync(groupId);\r\n setSelectedJobIds(attachedJobs.map((jobId) => jobId.jobId.toString()));\r\n }\r\n\r\n //TODO: refactor to a Paginator service (this method exhausts all pages)\r\n const jobsCount = await jobService.GetCountAsync({\r\n campaignId: plCampaignId,\r\n });\r\n let tasks = [];\r\n let batchSize = 1000;\r\n for (let index = 0; index < jobsCount.jobsCount; index += batchSize) {\r\n tasks.push(\r\n groupJobsService.GetJobsByCampaignIdPagination(plCampaignId, {\r\n limit: batchSize,\r\n offset: index,\r\n })\r\n );\r\n }\r\n const jobBatches = await Promise.all(tasks);\r\n const _jobs = jobBatches.reduce((prev, cur) => {\r\n return [...prev, ...cur];\r\n }, []);\r\n\r\n setJobOptions(_jobs);\r\n setHasOptionsLoaded(true);\r\n });\r\n\r\n\r\n\r\n const filterOption = (inputValue: string, option: any) => {\r\n if (isNumber(inputValue)) {\r\n return searchByJobId(Number(inputValue));\r\n }\r\n\r\n if (isJobIdsInput(inputValue)) {\r\n const jobIds: number[] = inputValue\r\n .split(\",\")\r\n .map((jobId) => Number(jobId.trim()));\r\n return searchByJobIdsMultiple(jobIds);\r\n }\r\n if (inputValue.length >= 2) {\r\n return searchByJobTitleTextOrLocation();\r\n }\r\n return true;\r\n\r\n function searchByJobTitleTextOrLocation() {\r\n return (\r\n (getJobLocation(option.job).toLowerCase() ?? \"\").indexOf(\r\n inputValue.toLowerCase()\r\n ) > -1 ||\r\n (option.job.extJobTitleText?.toLowerCase() ?? \"\").indexOf(\r\n inputValue.toLowerCase()\r\n ) > -1\r\n );\r\n }\r\n\r\n function searchByJobId(inputValue: number) {\r\n return option.job.jobId == inputValue;\r\n }\r\n\r\n function isJobIdsInput(inputValue: string): boolean {\r\n return new RegExp(/^[\\d, ]+$/gm).test(inputValue);\r\n }\r\n\r\n function searchByJobIdsMultiple(jobIds: number[]): boolean {\r\n return jobIds.some((x) => x == option.job.jobId);\r\n }\r\n };\r\n\r\n const handleChange = (jobIdsRightSide: string[]) => {\r\n setSelectedJobIds(jobIdsRightSide);\r\n onChange(jobIdsRightSide.map((jobId) => Number(jobId)));\r\n };\r\n\r\n const handleSearch = (\r\n direction: \"left\" | \"right\",\r\n searchValue: string\r\n ) => { };\r\n\r\n const getJobLocation = (job: Job) => {\r\n\r\n return `${job.jobLocation.cityName}, ${job.jobLocation.stateShortName}`;\r\n\r\n };\r\n\r\n const getGroupId = (groupJobResponse: GroupJobResponse) => {\r\n if (groupJobResponse.groupId == undefined || !groupJobResponse.isActive) {\r\n return '';\r\n }\r\n return `Group Name: ${groupJobResponse.groupName}`;\r\n };\r\n\r\n const IsJobAttachedToGroup = (groupJobResponse: GroupJobResponse) => {\r\n if (groupJobResponse.isActive) {\r\n return (\r\n \r\n )\r\n }\r\n else return '';\r\n\r\n }\r\n\r\n return (\r\n \r\n \r\n {!hasOptionsLoaded ? (\r\n \r\n ) : (\r\n ({\r\n key: groupJob.job.jobId.toString(),\r\n ...groupJob,\r\n }))}\r\n showSearch\r\n filterOption={filterOption}\r\n targetKeys={selectedJobIds}\r\n onChange={handleChange}\r\n onSearch={handleSearch}\r\n pagination\r\n className=\"jobs-transfer\"\r\n render={(groupJob) => (\r\n \r\n {IsJobAttachedToGroup(groupJob)} ({groupJob.job.jobId}) {groupJob.job.extJobTitleText} |\r\n Location: {getJobLocation(groupJob.job)}\r\n\r\n \r\n )}\r\n />\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default observer(GroupJobTransfer);","import { Box } from \"@material-ui/core\";\r\nimport { Button, Col, Form, Input, message, Row, Select, Typography } from \"antd\";\r\nimport Paragraph from \"antd/lib/typography/Paragraph\";\r\nimport { useContext, useState } from \"react\";\r\nimport { FiInfo } from \"react-icons/fi\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { RoutesPaths } from \"../../constants/RoutePaths\";\r\nimport { FetchError } from \"../../exceptions/AlgoSupervisionExceptions\";\r\nimport { BudgetType } from \"../../models/groups/BudgetType\";\r\nimport { GroupBudgetBalance } from \"../../models/groups/GroupBudgetBalance\";\r\nimport { GroupCreateRequest } from \"../../models/groups/GroupCreateRequest\";\r\nimport { GroupStatus } from \"../../models/groups/GroupStatus\";\r\nimport GroupsService from \"../../services/groups/GroupsService\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport JobTransfer from \"../jobs/JobTransfer\";\r\n\r\nconst { Option } = Select;\r\n\r\ntype FormState = {\r\n groupName: string;\r\n isActive: GroupStatus;\r\n budget: number;\r\n budgetType: BudgetType;\r\n};\r\n\r\ninterface Props {\r\n campaignId: number;\r\n isStatusEditable: boolean;\r\n groupBudgetBalance: GroupBudgetBalance;\r\n}\r\n\r\n\r\nconst layout = {\r\n labelCol: { span: 8 },\r\n wrapperCol: { span: 16 },\r\n};\r\n\r\n\r\n\r\nconst GroupAddForm = (props: Props) => {\r\n\r\n const {\r\n campaignId,\r\n isStatusEditable,\r\n groupBudgetBalance\r\n } = props;\r\n\r\n const { userStore, groupStore } = useContext(RootStoreContext);\r\n const [campaignJobsIds, setCampaignJobsIds] = useState([]);\r\n const history = useHistory();\r\n const onFinish = async (formState: FormState) => {\r\n try {\r\n\r\n let groupCreateRequest: GroupCreateRequest = {\r\n\r\n campaignId: campaignId,\r\n groupName: formState.groupName,\r\n isActive: true,\r\n userId: userStore.User?.id,\r\n jobsList: campaignJobsIds,\r\n budgetType: formState.budgetType,\r\n amount: formState.budget\r\n };\r\n\r\n await GroupsService.CreateAsync(groupCreateRequest);\r\n history.push(\r\n RoutesPaths.Supervision.GroupsRoutes.BuildGroupRoute(\r\n campaignId\r\n )\r\n );\r\n message.success(\"Group creation requested successfully\");\r\n\r\n } catch (error) {\r\n if (error instanceof FetchError) {\r\n message.error(error.apiError.errorMessage);\r\n }\r\n }\r\n };\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n General Details\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Budget Settings (Client) \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ({\r\n validator(ruleObject, value, err) {\r\n if (value < 0) {\r\n return Promise.reject(\r\n \"Value must be greater than 0\"\r\n );\r\n }\r\n if (value > groupBudgetBalance.campaignBalance && getFieldValue(\"budgetType\") == BudgetType.Fixed) {\r\n return Promise.reject(\r\n `Value must be equal or less than ${groupBudgetBalance.campaignBalance}`\r\n );\r\n }\r\n if (value > groupBudgetBalance.campaignBudget && getFieldValue(\"budgetType\") == BudgetType.Capped) {\r\n return Promise.reject(\r\n `Value must be equal or less than ${groupBudgetBalance.campaignBudget}`\r\n );\r\n }\r\n return Promise.resolve();\r\n }\r\n })\r\n ]}>\r\n \r\n \r\n\r\n \r\n\r\n \r\n Choose Jobs for Group\r\n \r\n\r\n {\r\n setCampaignJobsIds(jobIds);\r\n }}\r\n plCampaignId={campaignId}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\nexport default GroupAddForm;","import { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport GroupAddForm from \"../../../components/groups/GroupAddForm\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport GroupsBreadCrumbs from \"./helpers/GroupsBreadCrumbs\";\r\nimport { GroupsContextInitializers } from \"./helpers/GroupsContextInitializers \";\r\n\r\ninterface Props {}\r\n\r\nconst GroupsAddPage = (props: Props) => {\r\n const match = useParams<{ campaignId: string }>();\r\n const { groupStore } = useContext(RootStoreContext);\r\n const history = useHistory();\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n await GroupsContextInitializers.InitializeGroupData(\r\n Number(match.campaignId),\r\n groupStore,\r\n history\r\n );\r\n\r\n await GroupsContextInitializers.InitializeGroupBudgetBalance(\r\n Number(match.campaignId),\r\n groupStore,\r\n history\r\n );\r\n },\r\n\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `Add Groups for: ${groupStore.SelectedCampaign?.campaignName}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n SupervisionBreadcrumbs.Campaigns(\r\n `${groupStore.SelectedCampaign?.campaignName}`\r\n ),\r\n GroupsBreadCrumbs.Groups(\r\n Number(groupStore.SelectedCampaign?.campaignID)\r\n ),\r\n GroupsBreadCrumbs.AddGroup(\r\n Number(groupStore.SelectedCampaign?.campaignID)\r\n )\r\n );\r\n },\r\n });\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(GroupsAddPage);\r\n","import { GroupJobResponse } from \"../../models/groups/GroupJobResponse\";\r\nimport { GroupStatus } from \"../../models/groups/GroupStatus\";\r\nimport { ISODateTime } from \"../../types/types\";\r\nimport { FormatDate } from \"../../utils/DateHelpers\";\r\nimport { TableDto } from \"../general/supervision-table/Table.dto\";\r\n\r\n\r\nexport class GroupJobsTableDto extends TableDto {\r\n constructor(\r\n public groupJobId: number,\r\n public groupId: string,\r\n public campaignId: number,\r\n public jobId: number,\r\n public status: string,\r\n public userName: string,\r\n public creationDate: ISODateTime,\r\n public modificationDate: ISODateTime,\r\n ) {\r\n super();\r\n }\r\n\r\n public static MapFromGroupJob(groupJobResponse: GroupJobResponse) {\r\n return new GroupJobsTableDto(\r\n groupJobResponse.groupJobId,\r\n groupJobResponse.groupId,\r\n groupJobResponse.campaignId,\r\n groupJobResponse.jobId,\r\n GroupStatus[Number(groupJobResponse.isActive)],\r\n groupJobResponse.userName,\r\n FormatDate(groupJobResponse.creationDate),\r\n FormatDate(groupJobResponse.modificationDate),\r\n\r\n )\r\n }\r\n}","import { Empty } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\n\r\nimport { GroupJobResponse } from \"../../models/groups/GroupJobResponse\";\r\nimport Loader from \"../general/loader/Loader\";\r\nimport SupervisionTable from \"../general/supervision-table/SupervisionTable\";\r\nimport { GroupJobsTableDto } from \"./GroupJobsTable.dto\";\r\n\r\ninterface Props {\r\n groupName: string;\r\n groupId: number;\r\n groupJobs: GroupJobResponse[];\r\n}\r\n\r\nconst GroupsJobsTable = (props: Props) => {\r\n\r\n const { groupJobs, groupName } = props;\r\n\r\n\r\n if (groupJobs.length == 0) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (groupJobs.length == 0) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default observer(GroupsJobsTable);","import { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\n\r\nimport Loader from \"../../../components/general/loader/Loader\";\r\nimport GroupsJobsTable from \"../../../components/groups/GroupsJobsTable\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport GroupsBreadCrumbs from \"./helpers/GroupsBreadCrumbs\";\r\nimport { GroupsContextInitializers } from \"./helpers/GroupsContextInitializers \";\r\n\r\ninterface Props { }\r\n\r\nconst IndeedJobsViewContainer = () => {\r\n const match = useParams<{ campaignId: string; groupId: string }>();\r\n const history = useHistory();\r\n const { groupStore } = useContext(RootStoreContext);\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n await GroupsContextInitializers.InitializeGroupJobsData(\r\n Number(match.groupId),\r\n groupStore,\r\n history,\r\n );\r\n await GroupsContextInitializers.InitializeSelectedGroup(\r\n Number(match.groupId),\r\n groupStore,\r\n history\r\n );\r\n await GroupsContextInitializers.InitializeGroupCampaign(\r\n Number(match.campaignId),\r\n groupStore,\r\n history\r\n );\r\n },\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `Jobs for Group: ${groupStore.SelectedGroup?.groupName}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n SupervisionBreadcrumbs.Campaigns(\r\n `${groupStore.SelectedCampaign?.campaignName}`\r\n ),\r\n GroupsBreadCrumbs.Groups(\r\n Number(groupStore.SelectedCampaign?.campaignID)\r\n ),\r\n GroupsBreadCrumbs.GroupName(\r\n groupStore.SelectedGroup?.groupName?? \"\"\r\n ),\r\n GroupsBreadCrumbs.GroupJobs(\r\n Number(groupStore.SelectedGroup?.campaignId),\r\n Number(match.groupId)\r\n )\r\n );\r\n },\r\n });\r\n\r\n if (!groupStore.GroupJobsResponse) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(IndeedJobsViewContainer);","import { useContext } from \"react\";\r\nimport { useHistory } from \"react-router\";\r\n\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport {\r\n Button,\r\n Col,\r\n Form,\r\n Input,\r\n message,\r\n Row,\r\n Select,\r\n Typography,\r\n} from \"antd\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport { GroupResponse } from \"../../models/groups/GroupResponse\";\r\nimport { GroupStatus } from \"../../models/groups/GroupStatus\";\r\nimport { FetchError } from \"../../exceptions/AlgoSupervisionExceptions\";\r\nimport { RoutesPaths } from \"../../constants/RoutePaths\";\r\nimport { GroupUpdateRequest } from \"../../models/groups/GroupUpdateRequest\";\r\nimport { GroupService } from \"../../services/groups/GroupsService\";\r\nimport { BudgetType } from \"../../models/groups/BudgetType\";\r\nimport { GroupBudgetRequest } from \"../../models/groups/GroupBudgetRequest\";\r\nimport { GroupBudgetBalance } from \"../../models/groups/GroupBudgetBalance\";\r\n\r\nconst { Option } = Select;\r\n\r\ntype FormState = {\r\n groupName: string;\r\n isActive: GroupStatus;\r\n budget: number;\r\n budgetType: BudgetType;\r\n};\r\n\r\nconst layout = {\r\n labelCol: { span: 8 },\r\n wrapperCol: { span: 16 },\r\n};\r\n\r\ninterface Props {\r\n campaignId: number;\r\n group: GroupResponse;\r\n groupBudgetBalance: GroupBudgetBalance;\r\n}\r\n\r\nconst groupsService = new GroupService(\"Groups\");\r\n\r\nconst GroupsEditForm = (props: Props) => {\r\n const { campaignId, group, groupBudgetBalance } = props;\r\n const { userStore } = useContext(RootStoreContext);\r\n const history = useHistory();\r\n\r\n const onFinish = async (formState: FormState) => {\r\n const changedGroupSettings = GetChangedGroupSettings(\r\n formState,\r\n initialValues\r\n );\r\n\r\n const changedGroupBudget = GetChangedGroupBudget(\r\n formState,\r\n initialValues\r\n );\r\n\r\n if (IsEmptyObject(changedGroupSettings) && IsEmptyObject(changedGroupBudget)) {\r\n message.info(\"Nothing changed in group settings.\");\r\n return;\r\n }\r\n\r\n let hasErrorOccured = false;\r\n\r\n if (!IsEmptyObject(changedGroupSettings)) {\r\n const updateGroupRequest: GroupUpdateRequest = {\r\n groupId: group.groupId,\r\n campaignId: campaignId,\r\n groupName: formState.groupName,\r\n isActive: formState.isActive\r\n };\r\n try {\r\n await groupsService.UpdateGroup(group.groupId, updateGroupRequest);\r\n message.success(\"Group details updated successfully\");\r\n } catch (error) {\r\n if (error instanceof FetchError) {\r\n message.error(error.apiError.errorMessage);\r\n }\r\n hasErrorOccured = true;\r\n }\r\n }\r\n\r\n if (!IsEmptyObject(changedGroupBudget)) {\r\n const updateGroupRequest: GroupBudgetRequest = {\r\n groupId: group.groupId,\r\n id: group.groupBudget.id,\r\n amount: Number(formState.budget),\r\n budgetType: formState.budgetType,\r\n campaignId: campaignId\r\n };\r\n console.log(Number(formState.budget));\r\n try {\r\n await groupsService.UpdateGroupBudget(group.groupId, updateGroupRequest);\r\n message.success(\"Group budget updated successfully\");\r\n } catch (error) {\r\n if (error instanceof FetchError) {\r\n message.error(error.apiError.errorMessage);\r\n }\r\n hasErrorOccured = true;\r\n }\r\n }\r\n\r\n if (!hasErrorOccured) {\r\n history.push(\r\n RoutesPaths.Supervision.GroupsRoutes.BuildGroupRoute(\r\n campaignId\r\n )\r\n );\r\n }\r\n };\r\n\r\n const initialValues: FormState = {\r\n groupName: group.groupName,\r\n isActive: group.isActive ? GroupStatus.Active : GroupStatus.Removed,\r\n budget: group.groupBudget?.amount,\r\n budgetType: group.groupBudget?.budgetType\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n General Details\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n ({\r\n validator(ruleObject, value, err) {\r\n if (value < 0) {\r\n return Promise.reject(\r\n \"Value must be greater than 0\"\r\n );\r\n }\r\n if (value > groupBudgetBalance.campaignBalance && getFieldValue(\"budgetType\") == BudgetType.Fixed) {\r\n return Promise.reject(\r\n `Value must be equal or less than ${groupBudgetBalance.campaignBalance}`\r\n );\r\n }\r\n if (value > groupBudgetBalance.campaignBudget && getFieldValue(\"budgetType\") == BudgetType.Capped) {\r\n return Promise.reject(\r\n `Value must be equal or less than ${groupBudgetBalance.campaignBudget}`\r\n );\r\n }\r\n return Promise.resolve();\r\n }\r\n })\r\n ]}>\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default GroupsEditForm;\r\n\r\ntype ChangedGroupSettings = {\r\n groupName?: string;\r\n isActive?: GroupStatus;\r\n amount?: number;\r\n budgetType?: BudgetType;\r\n};\r\n\r\nfunction GetChangedGroupSettings(\r\n newFormState: FormState,\r\n oldFormState: FormState\r\n): ChangedGroupSettings {\r\n const changedGroupAttributes: ChangedGroupSettings = {};\r\n\r\n if (oldFormState.groupName != newFormState.groupName) {\r\n changedGroupAttributes[\"groupName\"] = newFormState.groupName;\r\n }\r\n\r\n if (oldFormState.isActive != newFormState.isActive) {\r\n changedGroupAttributes[\"isActive\"] = newFormState.isActive;\r\n }\r\n\r\n return changedGroupAttributes;\r\n}\r\n\r\nfunction GetChangedGroupBudget(\r\n newFormState: FormState,\r\n oldFormState: FormState\r\n): ChangedGroupSettings {\r\n const changedGroupBudgetAttributes: ChangedGroupSettings = {};\r\n\r\n if (oldFormState.budget != newFormState.budget) {\r\n changedGroupBudgetAttributes[\"amount\"] = newFormState.budget;\r\n }\r\n\r\n if (oldFormState.budgetType != newFormState.budgetType) {\r\n changedGroupBudgetAttributes[\"budgetType\"] = newFormState.budgetType;\r\n }\r\n\r\n return changedGroupBudgetAttributes;\r\n}\r\n\r\nfunction IsEmptyObject(object: object): boolean {\r\n return Object.keys(object).length == 0;\r\n}\r\n","import { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\n\r\nimport Loader from \"../../../components/general/loader/Loader\";\r\nimport GroupsEditForm from \"../../../components/groups/GroupsEditForm\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport GroupsBreadCrumbs from \"./helpers/GroupsBreadCrumbs\";\r\nimport { GroupsContextInitializers } from \"./helpers/GroupsContextInitializers \";\r\n\r\ninterface Props {}\r\n\r\nconst GroupsEditPage = (props: Props) => {\r\n const match = useParams<{ campaignId: string; groupId: string }>();\r\n const { groupStore } = useContext(RootStoreContext);\r\n const history = useHistory();\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n await GroupsContextInitializers.InitializeGroupData(\r\n Number(match.campaignId),\r\n groupStore,\r\n history\r\n );\r\n await GroupsContextInitializers.InitializeSelectedGroup(\r\n Number(match.groupId),\r\n groupStore,\r\n history\r\n );\r\n await GroupsContextInitializers.InitializeGroupBudgetBalance(\r\n Number(match.campaignId),\r\n groupStore,\r\n history,\r\n Number(match.groupId)\r\n );\r\n await GroupsContextInitializers.InitializeGroupCampaign(\r\n Number(match.campaignId),\r\n groupStore,\r\n history\r\n );\r\n },\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `Edit Group: ${groupStore.SelectedGroup?.groupName}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n SupervisionBreadcrumbs.Campaigns(\r\n `${groupStore.SelectedCampaign?.campaignName}`\r\n ),\r\n GroupsBreadCrumbs.Groups(\r\n Number(groupStore.SelectedCampaign?.campaignID)\r\n ),\r\n GroupsBreadCrumbs.GroupName(groupStore.SelectedGroup?.groupName ?? \"\"),\r\n GroupsBreadCrumbs.EditGroup(\r\n Number(groupStore.SelectedGroup?.campaignId),\r\n Number(match.groupId)\r\n )\r\n );\r\n },\r\n });\r\n\r\n if (!groupStore.SelectedGroup) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(GroupsEditPage);\r\n","import { Button, Col, message, Row, Typography } from \"antd\";\r\nimport { useContext, useState } from \"react\";\r\nimport CopyToClipboard from \"react-copy-to-clipboard\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { RoutesPaths } from \"../../constants/RoutePaths\";\r\nimport { FetchError } from \"../../exceptions/AlgoSupervisionExceptions\";\r\nimport { GroupJobResponse } from \"../../models/groups/GroupJobResponse\";\r\nimport { GroupJobsRequest } from \"../../models/groups/GroupJobsRequest\";\r\nimport groupJobsService from \"../../services/groups/GroupJobsService\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport JobTransfer from \"../jobs/JobTransfer\";\r\n\r\n\r\n\r\ninterface Props {\r\n campaignId: number;\r\n groupId: number;\r\n}\r\n\r\n\r\n\r\nconst GroupsAttachJobsForm = (props: Props) => {\r\n\r\n const { campaignId, groupId } = props;\r\n const [campaignJobsIds, setCampaignJobsIds] = useState([]);\r\n const { userStore, groupStore } = useContext(RootStoreContext);\r\n const history = useHistory();\r\n const handleAttachJobsClick = async () => {\r\n let groupCreateRequest: GroupJobsRequest = {\r\n campaignId: campaignId,\r\n isActive: true,\r\n userId: userStore.User?.id,\r\n groupId: groupId,\r\n groupName: groupStore.SelectedGroup?.groupName || \"\",\r\n jobsList: campaignJobsIds,\r\n };\r\n try {\r\n await groupJobsService.AttachedDetachedAsync(groupCreateRequest);\r\n message.success(\"Successfully attach jobed to campaign\");\r\n history.push(\r\n RoutesPaths.Supervision.GroupsRoutes.BuildGroupRoute(\r\n campaignId\r\n )\r\n );\r\n } catch (error) {\r\n if (error instanceof FetchError) {\r\n message.error(error.apiError.errorMessage);\r\n }\r\n }\r\n };\r\n\r\n return (\r\n
\r\n \r\n Attach Jobs for Group\r\n \r\n {\r\n setCampaignJobsIds(jobIds);\r\n }}\r\n plCampaignId={campaignId}\r\n groupId={groupId}\r\n />\r\n
\r\n \r\n Attach Jobs\r\n \r\n \r\n
\r\n
\r\n\r\n )\r\n\r\n}\r\n\r\nexport default GroupsAttachJobsForm","import { useContext } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport GroupsAttachJobsForm from \"../../../components/groups/GroupsAttachJobsForm\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport GroupsBreadCrumbs from \"./helpers/GroupsBreadCrumbs\";\r\nimport { GroupsContextInitializers } from \"./helpers/GroupsContextInitializers \";\r\n\r\nconst GroupsAttachJobsPage = () => {\r\n const match = useParams<{ campaignId: string; groupId: string }>();\r\n const { groupStore } = useContext(RootStoreContext);\r\n const history = useHistory();\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n await GroupsContextInitializers.InitializeGroupJobsData(\r\n Number(match.groupId),\r\n groupStore,\r\n history\r\n );\r\n await GroupsContextInitializers.InitializeSelectedGroup(\r\n Number(match.groupId),\r\n groupStore,\r\n history\r\n );\r\n await GroupsContextInitializers.InitializeGroupCampaign(\r\n Number(match.campaignId),\r\n groupStore,\r\n history\r\n );\r\n },\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `Attach Jobs for Group: ${groupStore.SelectedGroup?.groupName}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n SupervisionBreadcrumbs.Campaigns(\r\n `${groupStore.SelectedCampaign?.campaignName}`\r\n ),\r\n GroupsBreadCrumbs.Groups(\r\n Number(groupStore.SelectedCampaign?.campaignID)\r\n ),\r\n GroupsBreadCrumbs.GroupName(groupStore.SelectedGroup?.groupName ?? \"\"),\r\n GroupsBreadCrumbs.AttachJobs(\r\n Number(groupStore.SelectedGroup?.campaignId),\r\n Number(match.groupId)\r\n )\r\n );\r\n },\r\n });\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default GroupsAttachJobsPage;\r\n","export enum ClassificationType {\r\n None = 0,\r\n Exclusive = 1,\r\n Excluded = 2\r\n}","import \"./ColumnSuperVision.scss\";\r\n\r\nimport { Button, Input, InputRef, Space } from \"antd\";\r\nimport {\r\n FilterConfirmProps,\r\n FilterDropdownProps,\r\n Key\r\n} from \"antd/lib/table/interface\";\r\nimport { makeObservable, observable } from \"mobx\";\r\nimport Highlighter from \"react-highlight-words\";\r\n\r\nimport { SearchOutlined } from \"@ant-design/icons\";\r\n\r\nexport class SearchColumn {\r\n private _dataIndex: string;\r\n private _searchInput: InputRef | null = null;\r\n\r\n constructor(dataIndex: string) {\r\n makeObservable(this);\r\n this._dataIndex = dataIndex;\r\n }\r\n\r\n @observable\r\n public searchText: string = \"\";\r\n\r\n @observable\r\n public searchColumn: string = \"\";\r\n\r\n public handleSearch(\r\n selectedKeys: Key[],\r\n confirm: (param?: FilterConfirmProps | undefined) => void,\r\n dataIndex: string\r\n ) {\r\n confirm(); //triggers OnFilter() function in CreateColumn()\r\n this.searchText = selectedKeys[0] as string;\r\n this.searchColumn = dataIndex;\r\n }\r\n\r\n public handleReset(\r\n clearFilters: (() => void) | undefined,\r\n confirm: (param?: FilterConfirmProps | undefined) => void\r\n ) {\r\n clearFilters!();\r\n this.searchText = \"\";\r\n confirm();\r\n }\r\n\r\n public CreateColumn() {\r\n return {\r\n filterDropdown: ({\r\n setSelectedKeys,\r\n selectedKeys,\r\n confirm,\r\n clearFilters,\r\n }: FilterDropdownProps) => (\r\n
\r\n {\r\n this._searchInput = node;\r\n }}\r\n placeholder={`Search ${this._dataIndex}`}\r\n value={selectedKeys[0]}\r\n onChange={(e) =>\r\n setSelectedKeys(\r\n e.target.value ? [e.target.value] : []\r\n )\r\n }\r\n onPressEnter={() =>\r\n this.handleSearch(\r\n selectedKeys,\r\n confirm,\r\n this._dataIndex\r\n )\r\n }\r\n style={{ marginBottom: 8, display: \"block\" }}\r\n />\r\n \r\n \r\n this.handleSearch(\r\n selectedKeys,\r\n confirm,\r\n this._dataIndex\r\n )\r\n }\r\n icon={}\r\n size=\"small\"\r\n style={{ width: 90 }}>\r\n Search\r\n \r\n \r\n this.handleReset(clearFilters, confirm)\r\n }\r\n size=\"small\"\r\n style={{ width: 90 }}>\r\n Reset\r\n \r\n \r\n
\r\n ),\r\n filterIcon: (filtered: boolean) => (\r\n \r\n ),\r\n onFilter: (value: any, record: T) => {\r\n let recordKeyValue = (record as any)[this._dataIndex];\r\n return recordKeyValue\r\n ? recordKeyValue\r\n .toString()\r\n .toLowerCase()\r\n .includes(value.toLowerCase())\r\n : false;\r\n },\r\n onFilterDropdownVisibleChange: (visible: boolean) => {\r\n if (visible && this._searchInput != null) {\r\n setTimeout(() => this._searchInput!.select(), 100);\r\n }\r\n },\r\n render: (text: any, record: T) => {\r\n if (this.searchColumn == this._dataIndex) {\r\n return (\r\n \r\n );\r\n }\r\n return text;\r\n },\r\n };\r\n }\r\n}\r\n","export enum ELevelTypes {\r\n Default = 0,\r\n Group = 1,\r\n Campaign = 2,\r\n Company = 3,\r\n Affiliate = 4\r\n}","import {\r\n Badge,\r\n Button,\r\n Empty,\r\n Table,\r\n Checkbox,\r\n Segmented,\r\n Space,\r\n Form,\r\n Input,\r\n Switch,\r\n Tag,\r\n} from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { Key, useContext, useEffect, useState } from \"react\";\r\nimport { EntityVendorResponse } from \"../../models/vendor-management/EntityVendorResponse\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport type { ColumnsType } from \"antd/es/table\";\r\nimport { ClassificationType } from \"../../models/vendor-management/ClassificationType\";\r\nimport { ISODateTime } from \"../../types/types\";\r\nimport { Box, TextField, Tooltip } from \"@material-ui/core\";\r\nimport { FormatDateIfValid } from \"../../utils/DateHelpers\";\r\nimport { CommentIsEdit } from \"./types\";\r\nimport { EditOutlined } from \"@ant-design/icons\";\r\nimport Paragraph from \"antd/lib/typography/Paragraph\";\r\nimport { SearchColumn } from \"./SearchColumn\";\r\nimport { DecompositionString } from \"../../utils/StringHelper\";\r\nimport { ELevelTypes } from \"../../models/vendor-management/settings/ELevelTypes\";\r\nimport \"./VendorManagementTable.scss\";\r\n\r\n\r\ninterface Props { }\r\n\r\nconst VendorManagement = (props: Props) => {\r\n const [vendors, setVendors] = useState([]);\r\n const { vendorManagementStore } = useContext(RootStoreContext);\r\n const { SelectedClassificationType } = vendorManagementStore;\r\n const [commentIsEdit, seCommentIsEdit] = useState();\r\n\r\n const selectedRowKeys = vendorManagementStore.SearchedVendors.reduce(\r\n function (selectedRowIndex: number[], vendor, index) {\r\n /* if (vendor.inclusionEnforcement == true && SelectedClassificationType != ClassificationType.Excluded) {\r\n vendor.classificationType = ClassificationType.Exclusive\r\n }*/\r\n if (vendor.classificationType != ClassificationType.None) {\r\n selectedRowIndex.push(index);\r\n }\r\n return selectedRowIndex;\r\n },\r\n []\r\n );\r\n useEffect(() => {\r\n setVendors(vendorManagementStore.SearchedVendors);\r\n }, [vendorManagementStore.SearchedVendors]);\r\n\r\n const rowSelection = {\r\n onSelectAll: (selected: boolean, selectedRows: any[]) => {\r\n vendorManagementStore.SearchedVendors.forEach((vendor, index) => {\r\n var selectedVendor = vendorManagementStore.SearchedVendors[index];\r\n\r\n if (selected == true && ClassificationTypeIsOptional(selectedVendor)) {\r\n selectedVendor.classificationType = SelectedClassificationType;\r\n } else if (ClassificationTypeIsOptional(selectedVendor)) {\r\n selectedVendor.classificationType = ClassificationType.None;\r\n }\r\n vendorManagementStore.AddToEffectedRows(selectedVendor);\r\n });\r\n },\r\n\r\n onSelect: (record: any, selected: boolean) => {\r\n let vendorIndex = vendorManagementStore.SearchedVendors.findIndex(\r\n (x) => x.vendorId == record.vendorId\r\n );\r\n if (selected == true) {\r\n vendorManagementStore.SearchedVendors[vendorIndex].classificationType =\r\n SelectedClassificationType;\r\n } else {\r\n vendorManagementStore.SearchedVendors[vendorIndex].classificationType =\r\n ClassificationType.None;\r\n }\r\n vendorManagementStore.AddToEffectedRows(\r\n vendorManagementStore.SearchedVendors[vendorIndex]\r\n );\r\n },\r\n\r\n getCheckboxProps: (record: EntityVendorResponse) => ({\r\n disabled: !ClassificationTypeIsOptional(record),\r\n }),\r\n\r\n selectedRowKeys: selectedRowKeys,\r\n };\r\n\r\n const columns: ColumnsType = [\r\n {\r\n dataIndex: \"isOperativeCutoff\",\r\n key: \"isOperativeCutoff\",\r\n width: \"3%\",\r\n render: (value, record: EntityVendorResponse) => (\r\n \r\n \r\n \r\n ),\r\n },\r\n {\r\n title: 'Rule Source',\r\n dataIndex: \"inheritedLevel\",\r\n key: \"inheritedLevel\",\r\n width: \"10%\",\r\n render: (value, record: EntityVendorResponse) => (\r\n \r\n \r\n {record.inheritedLevel != ELevelTypes.Default ? ELevelTypes[record.inheritedLevel] : ''}\r\n \r\n \r\n ),\r\n },\r\n {\r\n title: \"VendorId\",\r\n dataIndex: \"vendorId\",\r\n key: \"vendorId\",\r\n ...new SearchColumn(\"vendorId\").CreateColumn(),\r\n },\r\n {\r\n title: \"VendorName\",\r\n dataIndex: \"vendorName\",\r\n key: \"vendorName\",\r\n width: \"15%\",\r\n ...new SearchColumn(\"vendorName\").CreateColumn(),\r\n },\r\n { title: \"UserName\", dataIndex: \"userName\", key: \"userName\" },\r\n Table.SELECTION_COLUMN,\r\n {\r\n title: ClassificationType[SelectedClassificationType],\r\n key: \"classificationType\",\r\n },\r\n {\r\n title: (record: EntityVendorResponse) => {\r\n return (\r\n <>\r\n \r\n {\r\n var updateVendors = [\r\n ...vendorManagementStore.SearchedVendors,\r\n ];\r\n updateVendors.forEach(function (part, index) {\r\n if (\r\n !InclusionEnforcementIsOptional(\r\n vendorManagementStore.SearchedVendors[index]\r\n )\r\n ) {\r\n // use ! (not) , beacuse InclusionEnforcementIsOptional use for disabled attribute\r\n vendorManagementStore.SearchedVendors[\r\n index\r\n ].inclusionEnforcement = e.target.checked;\r\n vendorManagementStore.AddToEffectedRows(\r\n vendorManagementStore.SearchedVendors[index]\r\n );\r\n }\r\n });\r\n setVendors(updateVendors);\r\n }}\r\n />\r\n Inclusion Enforcement\r\n \r\n \r\n );\r\n },\r\n key: \"InclusionEnforcement\",\r\n dataIndex: \"InclusionEnforcement\",\r\n width: \"13%\",\r\n render: (value, record: EntityVendorResponse) => (\r\n \r\n {\r\n let vendorIndex = vendorManagementStore.SearchedVendors.findIndex(\r\n (x) => x.vendorId == record.vendorId\r\n );\r\n vendorManagementStore.SearchedVendors[\r\n vendorIndex\r\n ].inclusionEnforcement = e.target.checked;\r\n vendorManagementStore.AddToEffectedRows(\r\n vendorManagementStore.SearchedVendors[vendorIndex]\r\n );\r\n }}\r\n style={{ marginRight: \"30px\" }}\r\n checked={record.inclusionEnforcement ?? false}\r\n disabled={InclusionEnforcementIsOptional(record)}\r\n >\r\n \r\n ),\r\n },\r\n {\r\n title: \"ModificationDate\",\r\n dataIndex: \"modificationDate\",\r\n key: \"modificationDate\",\r\n render: (val) => FormatDateIfValid(val),\r\n },\r\n {\r\n title: \"Reason Type\",\r\n dataIndex: \"reasonType\",\r\n key: \"reasonType\",\r\n width: \"10%\",\r\n render: (val) => DecompositionString(val),\r\n },\r\n {\r\n title: \"Comment\",\r\n dataIndex: \"comment\",\r\n key: \"comment\",\r\n width: \"25%\",\r\n render: (value, record: EntityVendorResponse, rowIndex) => {\r\n if (commentIsEdit?.isEditAble && commentIsEdit.rowIndex == rowIndex) {\r\n return (\r\n \r\n {\r\n let vendorIndex =\r\n vendorManagementStore.SearchedVendors.findIndex(\r\n (x) => x.vendorId == record.vendorId\r\n );\r\n vendorManagementStore.SearchedVendors[vendorIndex].comment =\r\n e.target.value;\r\n vendorManagementStore.AddToEffectedRows(\r\n vendorManagementStore.SearchedVendors[vendorIndex]\r\n );\r\n let commentIsEdit: CommentIsEdit = {\r\n isEditAble: false,\r\n rowIndex: rowIndex,\r\n };\r\n seCommentIsEdit(commentIsEdit);\r\n }}\r\n />\r\n \r\n );\r\n }\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n {value}\r\n \r\n
\r\n
\r\n \r\n );\r\n },\r\n onCell: (record, rowIndex) => {\r\n return {\r\n onClick: () => {\r\n let commentIsEdit: CommentIsEdit = {\r\n isEditAble: true,\r\n rowIndex: rowIndex,\r\n };\r\n seCommentIsEdit(commentIsEdit);\r\n },\r\n };\r\n },\r\n }\r\n ];\r\n\r\n if (vendors.length == 0) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n const InclusionEnforcementIsOptional = (record: EntityVendorResponse) => {\r\n switch (SelectedClassificationType) {\r\n case ClassificationType.Excluded: {\r\n if (record.classificationType == ClassificationType.Excluded) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n case ClassificationType.Exclusive: {\r\n if (record.classificationType == ClassificationType.Exclusive) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n }\r\n };\r\n\r\n const ClassificationTypeIsOptional = (record: EntityVendorResponse) => {\r\n switch (SelectedClassificationType) {\r\n case ClassificationType.Excluded: {\r\n if (record.inclusionEnforcement == true) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n case ClassificationType.Exclusive: {\r\n if (record.inclusionEnforcement == true) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n }\r\n };\r\n\r\n return (\r\n ({ ...data, key: i }))}\r\n pagination={{\r\n pageSize: 10,\r\n showSizeChanger: false,\r\n }}\r\n columns={columns}\r\n rowSelection={rowSelection}\r\n />\r\n );\r\n};\r\n\r\nexport default observer(VendorManagement);\r\n","\r\n\r\nexport const DecompositionString = (text: string): string => {\r\n if (text == null || text == undefined)\r\n return \"\";\r\n return text.replace(/([a-z])([A-Z])/g, '$1 $2');\r\n}","import { Col, Row, Select, Space, Typography } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport { spacingUnit } from \"../../assets/styles/theme\";\r\nimport { ClassificationType } from \"../../models/vendor-management/ClassificationType\";\r\nimport { EntityVendorResponse } from \"../../models/vendor-management/EntityVendorResponse\";\r\nimport vendorManagementService from \"../../services/vendor-management/CampaignVendorService\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport Loader from \"../general/loader/Loader\";\r\nimport \"./VendorSelectInput.scss\";\r\n\r\n\r\nconst { Option } = Select;\r\n\r\ninterface Props {\r\n entityVendors: EntityVendorResponse[]\r\n}\r\n\r\n\r\n// ... (other imports)\r\n\r\nconst VendorSelectInput = (props: Props) => {\r\n const { entityVendors } = props;\r\n const [filterValue, setFilterValue] = useState('');\r\n const { vendorManagementStore } = useContext(RootStoreContext);\r\n const [filteredOptions, setFilteredOptions] = useState([]);\r\n const [selectedValues, setSelectedValues] = useState();\r\n\r\n\r\n useEffect(() => {\r\n const defaultValue = vendorManagementStore.SearchedVendors.map((vendor) =>\r\n BuildOptionValue(vendor.vendorName, vendor.vendorId)\r\n );\r\n\r\n setSelectedValues(defaultValue);\r\n setFilteredOptions(filteredOptions.length ? filteredOptions : entityVendors);\r\n \r\n }, [vendorManagementStore.SearchedVendors]);\r\n\r\n const handleFilter = (inputValue: string) => {\r\n setFilterValue(inputValue);\r\n const filtered = entityVendors.filter(\r\n (vendor) =>\r\n vendor.vendorName.toLowerCase().includes(inputValue.toLowerCase()) ||\r\n vendor.vendorId.toString().includes(inputValue)\r\n );\r\n setFilteredOptions(filtered);\r\n };\r\n\r\n const handleBlur = () => {\r\n setFilteredOptions(entityVendors)\r\n };\r\n\r\n return (\r\n
\r\n \r\n Search Vendor(s)\r\n
\r\n {\r\n const vendorIds = selectedOptionValues.map((vendor) =>\r\n ParseVendorId(vendor)\r\n );\r\n vendorManagementStore.SetSearchedVendors(vendorIds);\r\n }}\r\n >\r\n {filteredOptions.map((vendor) => (\r\n \r\n {vendor.vendorName} - {vendor.vendorId}\r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n\r\nexport default observer(VendorSelectInput);\r\n\r\n\r\nconst separator = \"##\";\r\n\r\nconst BuildOptionValue = (vendorName: string, vendorId: number) => {\r\n return `${vendorName}${separator}${vendorId}`;\r\n};\r\n\r\nconst ParseVendorId = (vendor: string) => {\r\n return Number(vendor.split(separator)[1]);\r\n};","import settings from \"../../config/AppSettings/SettingsFactory\";\r\nimport { ManualActionRequestSource } from \"../../models/manual-actions/ManualActionRequestSource\";\r\nimport { Affiliate } from \"../../models/operation/Affiliate\";\r\nimport { EntityVendorRequest } from \"../../models/vendor-management/EntityVendorRequest\";\r\nimport { EntityVendorResponse } from \"../../models/vendor-management/EntityVendorResponse\";\r\nimport { EntityDistributionSettings } from \"../../models/vendor-management/settings/EntityDistributionSettings\";\r\nimport { EntityDistributionSettingsResponse } from \"../../models/vendor-management/settings/EntityDistributionSettingsResponse\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\n\r\n\r\nexport class AffiliateVendorService extends BaseService {\r\n\r\n async GetAllAsync(affiliateId: number): Promise {\r\n const vendorManagementdata = await this.Get(`/all/${affiliateId}`);\r\n return vendorManagementdata;\r\n }\r\n\r\n async SetAffiliatesVendors(vendorsWithDecision: EntityVendorRequest[], affiliateId: number, \r\n manualActionRequestSource: ManualActionRequestSource) {\r\n\r\n const vendorManagementdata = await this.Post(`/${affiliateId}?manualActionRequestSource=${manualActionRequestSource}`, vendorsWithDecision);\r\n return vendorManagementdata;\r\n }\r\n\r\n async GetAffiliateSettingsAsync(affiliateId: number) {\r\n const vendorManagementdata = await this.Get(`/settings/${affiliateId}`);\r\n return vendorManagementdata;\r\n }\r\n\r\n async SetAffiliateDistributionSettings(entityStateAttributeRequest: EntityDistributionSettings, affiliateId: number) {\r\n const dataState = await this\r\n .Post(`/settings/${affiliateId}`, entityStateAttributeRequest);\r\n return dataState;\r\n }\r\n\r\n async GetEffectedEntitesChangeModeAsync(entityDistributionSettings: EntityDistributionSettings, affiliateId: number) {\r\n const entitySettingsResponse = await this.Post(\r\n `/settings-validation/${affiliateId}`,\r\n entityDistributionSettings\r\n );\r\n return entitySettingsResponse;\r\n }\r\n\r\n\r\n}\r\n\r\nconst affiliateVendorService = new AffiliateVendorService(\"AffiliateVendors\", settings.vendorManagementUrl);\r\nexport default affiliateVendorService;","import settings from \"../../config/AppSettings/SettingsFactory\";\r\nimport { ManualActionRequestSource } from \"../../models/manual-actions/ManualActionRequestSource\";\r\nimport { EntityVendorRequest } from \"../../models/vendor-management/EntityVendorRequest\";\r\nimport { EntityVendorResponse } from \"../../models/vendor-management/EntityVendorResponse\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\n\r\n\r\nexport class CampaignVendorService extends BaseService{\r\n\r\n async GetAllAsync(campaignId: number) {\r\n const vendorManagementdata = await this.Get(`/all/${campaignId}`);\r\n return vendorManagementdata;\r\n }\r\n \r\n async SetCampaignsVendors(vendorsWithDecision: EntityVendorRequest[] , campaignId: number, manualActionRequestSource: ManualActionRequestSource) {\r\n \r\n const vendorManagementdata = await this.Post(`/${campaignId}?manualActionRequestSource=${manualActionRequestSource}`, vendorsWithDecision);\r\n return vendorManagementdata;\r\n }\r\n}\r\n\r\nconst campaignVendorService = new CampaignVendorService(\"CampaignVendors\", settings.vendorManagementUrl);\r\nexport default campaignVendorService;","import settings from \"../../config/AppSettings/SettingsFactory\";\r\nimport { EntityDistributionSettings } from \"../../models/vendor-management/settings/EntityDistributionSettings\";\r\nimport { EntityVendorRequest } from \"../../models/vendor-management/EntityVendorRequest\";\r\nimport { EntityVendorResponse } from \"../../models/vendor-management/EntityVendorResponse\";\r\nimport { BaseService } from \"../BaseService\";\r\nimport { EntityDistributionSettingsResponse } from \"../../models/vendor-management/settings/EntityDistributionSettingsResponse\";\r\nimport { ValidAction } from \"../../models/ValidAction\";\r\nimport { ManualActionRequestSource } from \"../../models/manual-actions/ManualActionRequestSource\";\r\n\r\nexport class CompanyVendorService extends BaseService {\r\n\r\n async GetAllAsync(companyId: number) {\r\n const vendorManagementdata = await this.Get(\r\n `/all/${companyId}`\r\n );\r\n return vendorManagementdata;\r\n }\r\n\r\n async SetCompanysVendors(\r\n vendorsWithDecision: EntityVendorRequest[],\r\n companyId: number, \r\n manualActionRequestSource: ManualActionRequestSource\r\n ) {\r\n const vendorManagementdata = await this.Post(\r\n `/${companyId}?manualActionRequestSource=${manualActionRequestSource}`,\r\n vendorsWithDecision\r\n );\r\n return vendorManagementdata;\r\n }\r\n\r\n // Settings\r\n async GetCompanySettingsAsync(companyId: number) {\r\n const vendorManagementdata = await this.Get( `/settings/${companyId}`);\r\n return vendorManagementdata;\r\n }\r\n\r\n async SetCompanyDistributionSettings(entityDistributionSettings: EntityDistributionSettings, companyId: number) : Promise{\r\n const entitySettings = await this.Post(\r\n `/settings/${companyId}`,\r\n entityDistributionSettings\r\n );\r\n return entitySettings;\r\n }\r\n\r\n async GetEffectedEntitesChangeModeAsync(entityDistributionSettings: EntityDistributionSettings, companyId: number) {\r\n const entitySettingsResponse = await this.Post(\r\n `/settings-validation/${companyId}`,\r\n entityDistributionSettings\r\n );\r\n return entitySettingsResponse;\r\n }\r\n\r\n async ResetCompanyVendors(companyId: number) {\r\n const dataState = await this.Delete(`/reset/${companyId}`);\r\n return dataState;\r\n }\r\n\r\n async ChangeSettingsIsValidValidationAsync(entityDistributionSettings: EntityDistributionSettings, companyId: number) {\r\n const entitySettingsResponse = await this.Post(\r\n `/settings-action-validation/${companyId}`,entityDistributionSettings)\r\n return entitySettingsResponse;\r\n }\r\n\r\n}\r\n\r\nconst companyVendorService = new CompanyVendorService(\r\n \"CompanyVendors\",\r\n settings.vendorManagementUrl\r\n);\r\nexport default companyVendorService;\r\n","import settings from \"../../config/AppSettings/SettingsFactory\";\r\nimport { ValidAction } from \"../../models/ValidAction\";\r\nimport { ManualActionRequestSource } from \"../../models/manual-actions/ManualActionRequestSource\";\r\nimport { EntityVendorRequest } from \"../../models/vendor-management/EntityVendorRequest\";\r\nimport { EntityVendorResponse } from \"../../models/vendor-management/EntityVendorResponse\";\r\nimport { ValidationDto } from \"../../models/vendor-management/ValidationDto\";\r\nimport { EntityDistributionSettings } from \"../../models/vendor-management/settings/EntityDistributionSettings\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\n\r\n\r\nexport class GroupVendorService extends BaseService {\r\n\r\n async GetAllAsync(groupId: number) {\r\n const vendorManagementdata = await this.Get(`/all/${groupId}`);\r\n return vendorManagementdata;\r\n }\r\n\r\n async ValidateRules(vendorsWithDecision: EntityVendorRequest[], groupId: number) {\r\n\r\n const validateRules = await this.Post(`/validate/${groupId}`, vendorsWithDecision);\r\n return validateRules;\r\n }\r\n\r\n async SetGroupVendors(vendorsWithDecision: EntityVendorRequest[], groupId: number, manualActionRequestSource: ManualActionRequestSource) {\r\n const vendorManagementdata = await this.Post(`/${groupId}?manualActionRequestSource=${manualActionRequestSource}`, vendorsWithDecision);\r\n return vendorManagementdata;\r\n }\r\n\r\n async ResetGroupVendors(groupId: number) {\r\n const dataSettings = await this.Delete(`/reset/${groupId}`);\r\n return dataSettings;\r\n }\r\n\r\n async GetGroupSettingsAsync(groupId: number) {\r\n const vendorManagementdata = await this.Get( `/settings/${groupId}`);\r\n return vendorManagementdata;\r\n }\r\n\r\n async SetCompanyDistributionSettings(entityDistributionSettings: EntityDistributionSettings, groupId: number) : Promise{\r\n const entitySettings = await this.Post(\r\n `/settings/${groupId}`,\r\n entityDistributionSettings\r\n );\r\n return entitySettings;\r\n }\r\n\r\n async ChangeSettingsIsValidValidationAsync(entityDistributionSettings: EntityDistributionSettings, groupId: number) {\r\n const entitySettingsResponse = await this.Post(\r\n `/settings-action-validation/${groupId}`,entityDistributionSettings)\r\n return entitySettingsResponse;\r\n }\r\n\r\n\r\n}\r\n\r\nconst groupVendorService = new GroupVendorService(\"GroupVendors\", settings.vendorManagementUrl);\r\nexport default groupVendorService;","import { message } from \"antd\";\r\nimport { RoutesPaths } from \"../../../../constants/RoutePaths\";\r\nimport affiliateVendorService from \"../../../../services/vendor-management/AffiliateVendorService\";\r\nimport campaignVendorService from \"../../../../services/vendor-management/CampaignVendorService\";\r\nimport companyVendorService from \"../../../../services/vendor-management/CompanyVendorService\";\r\nimport groupVendorService from \"../../../../services/vendor-management/GroupVendorService\";\r\n\r\nimport { VendorManagementStore } from \"../../../../stores/VendorManagementStore\";\r\n\r\nexport const VendorManagmentContextInitializers = {\r\n\r\n InitializeAffiliateVendorsData: async (affiliateId: number, vendorManagementStore: VendorManagementStore, history: any) => {\r\n try {\r\n const _vendorsAffiliateData = await affiliateVendorService.GetAllAsync(affiliateId);\r\n vendorManagementStore.SetVendors(_vendorsAffiliateData);\r\n }\r\n catch (err) {\r\n history.push(RoutesPaths.Supervision.Affiliates);\r\n message.error(\r\n `Affiliate with ID: ${affiliateId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n\r\n InitializeCompanyVendorsData: async (\r\n companyId: number,\r\n vendorManagementStore: VendorManagementStore,\r\n history: any\r\n ) => {\r\n try {\r\n const _vendorsCompanyData = await companyVendorService.GetAllAsync(\r\n companyId\r\n );\r\n vendorManagementStore.SetVendors(_vendorsCompanyData);\r\n } catch (err) {\r\n history.push(RoutesPaths.Supervision.Companies);\r\n message.error(\r\n `Account with ID: ${companyId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n InitializeCampaignVendorsData: async (\r\n campaignId: number,\r\n vendorManagementStore: VendorManagementStore,\r\n history: any\r\n ) => {\r\n try {\r\n const _vendorsCampaignData = await campaignVendorService.GetAllAsync(\r\n campaignId\r\n );\r\n vendorManagementStore.SetVendors(_vendorsCampaignData);\r\n } catch (err) {\r\n history.push(RoutesPaths.Supervision.Campaigns);\r\n message.error(\r\n `Campaign with ID: ${campaignId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n InitializeGroupVendorsData: async (\r\n groupId: number,\r\n vendorManagementStore: VendorManagementStore,\r\n history: any\r\n ) => {\r\n try {\r\n const _vendorsGroupData = await groupVendorService.GetAllAsync(groupId);\r\n vendorManagementStore.SetVendors(_vendorsGroupData);\r\n } catch (err) {\r\n history.push(RoutesPaths.Supervision.GroupsRoutes.GroupRoute);\r\n message.error(\r\n `Group with ID: ${groupId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n InitializeClassificationType: async (\r\n campaignId: number,\r\n vendorManagementStore: VendorManagementStore,\r\n history: any\r\n ) => {\r\n try {\r\n } catch (err) {\r\n history.push(RoutesPaths.Supervision.Campaigns);\r\n message.error(\r\n `Campaign with ID: ${campaignId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n};\r\n","import { ClassificationType } from \"../../../../models/vendor-management/ClassificationType\";\r\nimport { VendorManagementStore } from \"../../../../stores/VendorManagementStore\";\r\n\r\nexport const ClassificationTypeValidation = {\r\n\r\n InitClassificationType: async (vendorManagementStore: VendorManagementStore) => {\r\n\r\n const _vendors = vendorManagementStore.Vendors;\r\n\r\n let mode = _vendors.some(vendor => vendor.classificationType == ClassificationType.Exclusive)\r\n if (mode == true) {\r\n vendorManagementStore.SetClassificationType(ClassificationType.Exclusive);\r\n }\r\n else {\r\n vendorManagementStore.SetClassificationType(ClassificationType.Excluded);\r\n }\r\n\r\n },\r\n\r\n\r\n}","import { message, Segmented } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { useContext, useState } from \"react\";\r\nimport useOnInitAsync from \"../../hooks/useOnInitAsync\";\r\nimport { ClassificationType } from \"../../models/vendor-management/ClassificationType\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport companyVendorsService from \"../../services/vendor-management/CompanyVendorService\";\r\nimport \"./CampaignVendorPage.scss\";\r\nimport { EntityDistributionSettings } from \"../../models/vendor-management/settings/EntityDistributionSettings\";\r\nimport { ValidAction } from \"../../models/ValidAction\";\r\n\r\n\r\ninterface Props { \r\n onValid: (newSettings: EntityDistributionSettings) => Promise;\r\n}\r\n\r\nconst VendorManagmentMode = (props: Props) => {\r\n\r\n const { vendorManagementStore, uiStore } = useContext(RootStoreContext);\r\n const [classificationType, setClassificationType] = useState('Black List');\r\n const { onValid } = props;\r\n\r\n useOnInitAsync(async () => {\r\n if (vendorManagementStore.EntitySettings) {\r\n let selectedType = fromClassificationTypeToMode(vendorManagementStore.EntitySettings.classificationType);\r\n setClassificationType(selectedType);\r\n }\r\n }, [vendorManagementStore.SelectedClassificationType]);\r\n\r\n const onChange = async (value: any) => {\r\n\r\n let seletedclassificationType = fromModeToClassificationType(value);\r\n let validAction = await actionIsValid(seletedclassificationType);\r\n\r\n\r\n if (validAction.isValid) {\r\n setClassificationType(value);\r\n vendorManagementStore.SetClassificationType(seletedclassificationType);\r\n }\r\n else {\r\n const popupBody = (\r\n

\r\n {validAction.errorMessage.toString()}\r\n

\r\n );\r\n\r\n uiStore.SetPopUp(\r\n {\r\n body: popupBody,\r\n title: \"Change Work Mode\",\r\n okClickHandler: async () => {\r\n message.error(\r\n `Can't change mode`\r\n );\r\n },\r\n okButtonText: \"Ok\",\r\n })\r\n }\r\n }\r\n\r\n const actionIsValid = async (value: ClassificationType) => {\r\n\r\n let validAction: ValidAction = {\r\n isValid: true,\r\n errorMessage: ''\r\n }\r\n\r\n let newSettings: EntityDistributionSettings;\r\n newSettings = vendorManagementStore.EntitySettings\r\n newSettings.classificationType = value;\r\n\r\n let validActionReponse = await onValid(newSettings);\r\n if (!validActionReponse.isValid) {\r\n validAction = validActionReponse;\r\n return validAction;\r\n }\r\n \r\n CheckModeCompatiableToTableValues(value,validAction);\r\n\r\n return validAction;\r\n }\r\n\r\n const CheckModeCompatiableToTableValues = (value: ClassificationType, validAction: ValidAction) => {\r\n\r\n validAction.errorMessage = 'The work mode cannot be changed because there are vendors with values ​from the opposite work mode:\\n Vendor ids:'\r\n\r\n if (value == ClassificationType.Exclusive) {\r\n let vendorsInBlackList = vendorManagementStore.Vendors\r\n .filter(vendor => vendor.classificationType == ClassificationType.Excluded ||\r\n vendor.inclusionEnforcement)\r\n\r\n if (vendorsInBlackList.length > 0) {\r\n validAction.errorMessage += buildMessageWithVendorIds(vendorsInBlackList);\r\n validAction.isValid = false;\r\n }\r\n }\r\n else if (value == ClassificationType.Excluded) {\r\n let vendorsInWhiteList = vendorManagementStore.Vendors\r\n .filter(vendor => vendor.classificationType == ClassificationType.Exclusive)\r\n\r\n if (vendorsInWhiteList.length > 0) {\r\n validAction.errorMessage += buildMessageWithVendorIds(vendorsInWhiteList);\r\n validAction.isValid = false;\r\n }\r\n }\r\n }\r\n\r\n const buildMessageWithVendorIds = (vendors: any[]) => {\r\n let vendorIdsMessage: string = '';\r\n vendors.forEach(vendor => {\r\n vendorIdsMessage += vendor.vendorId.toString() + ', '\r\n });\r\n\r\n return vendorIdsMessage;\r\n }\r\n\r\n const fromModeToClassificationType = (value: any) => {\r\n if (value == 'White List') {\r\n return ClassificationType.Exclusive;\r\n }\r\n else {\r\n return ClassificationType.Excluded;\r\n }\r\n }\r\n\r\n const fromClassificationTypeToMode = (value: any) => {\r\n if (value == ClassificationType.Exclusive) {\r\n return 'White List';\r\n }\r\n else {\r\n return 'Black List';\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n )\r\n}\r\n\r\nexport default observer(VendorManagmentMode);","import { RoutesPaths } from \"../../../../constants/RoutePaths\";\r\nimport { BreadCrumb } from \"../../../../models/BreadCrumb\";\r\n\r\n\r\n\r\nexport const VendorManagmentBreadCrumbs =\r\n{\r\n AffiliatVendor: (affiliateId: number) => {\r\n return new BreadCrumb(\r\n \"Vendor-Management\",\r\n RoutesPaths.Supervision.VendorManagementRoutes.BuildAffiliateVendorManagementRoute(affiliateId),\r\n null\r\n );\r\n },\r\n\r\n CompanyVendor: (companyId: number) => {\r\n return new BreadCrumb(\r\n \"Vendor-Management\",\r\n RoutesPaths.Supervision.VendorManagementRoutes.BuildCompanyVendorManagementRoute(companyId),\r\n null\r\n );\r\n },\r\n\r\n CampaignVendor: (campaignId: number) => {\r\n return new BreadCrumb(\r\n \"Vendor-Management\",\r\n RoutesPaths.Supervision.VendorManagementRoutes.BuildCampaignVendorManagementRoute(campaignId),\r\n null\r\n );\r\n },\r\n\r\n GroupVendor: (campaignId: number, groupId: number) => {\r\n return new BreadCrumb(\r\n \"Vendor-Management\",\r\n RoutesPaths.Supervision.VendorManagementRoutes.BuildGroupVendorManagementRoute(campaignId, groupId),\r\n null\r\n );\r\n },\r\n\r\n\r\n\r\n}\r\n\r\nexport default VendorManagmentBreadCrumbs;","export enum ManualActionRequestSource{\r\n None = 0,\r\n CampaignTeam = 1,\r\n ClientRequest = 2,\r\n}","import { Box } from \"@material-ui/core\";\r\nimport { Button, message } from 'antd';\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { useContext, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport VendorManagement from \"../../../components/vendor-management/VendorManagement\";\r\nimport VendorSelectInput from \"../../../components/vendor-management/VendorSelectInput\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { VendorManagmentContextInitializers } from \"./helpers/VendorManagmentContextInitializers\";\r\nimport vendorManagementService from \"../../../services/vendor-management/CampaignVendorService\";\r\nimport { ClassificationTypeValidation } from \"./helpers/ClassificationTypeValidation\";\r\nimport VendorManagmentMode from \"../../../components/vendor-management/VendorManagmentMode\";\r\nimport { ClassificationType } from \"../../../models/vendor-management/ClassificationType\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport VendorManagmentBreadCrumbs from \"./helpers/VendorManagmentBreadCrumbs\";\r\nimport { RoutesPaths } from \"../../../constants/RoutePaths\";\r\nimport { ValidAction } from \"../../../models/ValidAction\";\r\nimport { EntityDistributionSettings } from \"../../../models/vendor-management/settings/EntityDistributionSettings\";\r\nimport { ManualActionRequestSource } from \"../../../models/manual-actions/ManualActionRequestSource\";\r\nimport { ReportPage } from \"./helpers/ReportPage\";\r\n\r\n\r\n\r\ninterface Props { }\r\n\r\nconst CampaignVendorPage = (props: Props) => {\r\n\r\n const match = useParams<{ campaignId: string }>();\r\n const { vendorManagementStore, userStore, uiStore } = useContext(RootStoreContext);\r\n\r\n const history = useHistory();\r\n\r\n usePageInitialization({\r\n\r\n onInitAsync: async () => {\r\n await vendorManagementStore.SetSearchedVendors([]) // reset\r\n await VendorManagmentContextInitializers.InitializeCampaignVendorsData(\r\n Number(match.campaignId),\r\n vendorManagementStore,\r\n history\r\n )\r\n var isWhitelist = vendorManagementStore.Vendors?.some(vendor => vendor.classificationType === ClassificationType.Exclusive);\r\n var manualVendors = vendorManagementStore.Vendors?.filter(vendor =>\r\n vendor.classificationType == ClassificationType.Excluded ||\r\n vendor.classificationType == ClassificationType.Exclusive ||\r\n vendor.inclusionEnforcement\r\n );\r\n var operativeVendors = vendorManagementStore.Vendors?.filter(operativeVendor =>\r\n !manualVendors.some(manualVendor => manualVendor.vendorId == operativeVendor.vendorId));\r\n var sortedVendors = manualVendors.concat(operativeVendors);\r\n vendorManagementStore.SearchedVendors = sortedVendors.filter(vendor =>\r\n\r\n vendor.classificationType != ClassificationType.None || vendor.inclusionEnforcement !== false || !isWhitelist && vendor.isOperativeCutoff\r\n );\r\n ClassificationTypeValidation.InitClassificationType(vendorManagementStore);\r\n },\r\n onCampaignContextCallBack: (campaign, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `Vendor Managment for: ${campaign.campaignName}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Campaigns(campaign.campaignName),\r\n VendorManagmentBreadCrumbs.CampaignVendor(campaign.campaignID),\r\n );\r\n },\r\n })\r\n\r\n const onApply = async () => {\r\n try {\r\n let messageToPopUp = \"Please Choose Manual Action Request Source!\"\r\n vendorManagementStore.SetVendorsToApply(vendorManagementStore.rowsEffected);\r\n vendorManagementStore.SelectedVendorsToApply.forEach(vendor => {\r\n vendor.userId = userStore.User!.id;\r\n });\r\n vendorManagementStore.rowsEffected = [];\r\n let reportResult: any = {\r\n sourceRequest: ManualActionRequestSource,\r\n action: true\r\n }; //await ReportPage.BuildReport(uiStore,messageToPopUp);\r\n\r\n if (reportResult.action) {\r\n await vendorManagementService.SetCampaignsVendors(\r\n vendorManagementStore.SelectedVendorsToApply, Number(match.campaignId), reportResult.sourceRequest);\r\n }\r\n else {\r\n return;\r\n }\r\n\r\n message.success(\"Campaign vendors updated successfully\");\r\n history.push(RoutesPaths.Supervision.Campaigns);\r\n } catch (error) {\r\n message.error(\"Campaign vendors updated failed\");\r\n\r\n }\r\n\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n {\r\n throw new Error(\"Function not implemented.\");\r\n } } />\r\n \r\n \r\n
\r\n \r\n Apply Changes\r\n \r\n\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default observer(CampaignVendorPage);\r\n\r\n","import React, { useContext, useEffect, useState } from 'react';\r\nimport { Button, Segmented, Switch, message } from 'antd';\r\nimport VendorManagmentMode from './VendorManagmentMode';\r\nimport { RootStoreContext } from '../../stores/RootStoreContext';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { Box } from \"@material-ui/core\";\r\nimport { ValidAction } from '../../models/ValidAction';\r\nimport { EntityDistributionSettings } from '../../models/vendor-management/settings/EntityDistributionSettings';\r\nimport companyVendorsService from \"../../services/vendor-management/CompanyVendorService\";\r\n\r\n\r\ninterface Props {\r\n onValid: (newSettings: EntityDistributionSettings) => Promise;\r\n }\r\n \r\n\r\nconst PanelControl = (props: Props) => {\r\n const { vendorManagementStore, uiStore } = useContext(RootStoreContext);\r\n const [isInheritable, setIsInheritable] = useState();\r\n const { onValid } = props;\r\n\r\n\r\n useEffect(() => {\r\n \r\n if (vendorManagementStore.EntitySettings) {\r\n setIsInheritable(BoolToMode(vendorManagementStore.EntitySettings.isInheritable));\r\n }\r\n }, [vendorManagementStore.EntitySettings]);\r\n\r\n const handleIsInheritChange = async (value: any) => {\r\n let isInheritableBoolValue = ModeToBool(value);\r\n let validAction = await actionIsValid(isInheritableBoolValue);\r\n\r\n if (validAction.isValid) {\r\n setIsInheritable(value);\r\n vendorManagementStore.SetEntityStateIsInheritable(isInheritableBoolValue);\r\n }\r\n else {\r\n const popupBody = (\r\n

\r\n {validAction.errorMessage.toString()}\r\n

\r\n );\r\n uiStore.SetPopUp(\r\n {\r\n body: popupBody,\r\n title: \"Change Work Mode\",\r\n okClickHandler: async () => {\r\n message.error(\r\n `Can't change mode`\r\n );\r\n },\r\n okButtonText: \"Ok\",\r\n })\r\n }\r\n }\r\n\r\n const actionIsValid = async (value: boolean) => {\r\n\r\n let newSettings = {...vendorManagementStore.EntitySettings};\r\n newSettings.classificationType = vendorManagementStore.EntitySettings.classificationType\r\n newSettings.isInheritable = value;\r\n\r\n let validActionReponse = await onValid(newSettings);\r\n\r\n return validActionReponse;\r\n }\r\n\r\n const BoolToMode = (isInheritable: boolean) => isInheritable ? 'Inherit' : 'Not Inherit';\r\n const ModeToBool = (isInheritable: string) => isInheritable == 'Inherit' ? true : false;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default observer(PanelControl);\r\n","import { Button, message } from \"antd\";\r\nimport { useContext } from \"react\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport \"./CampaignVendorPage.scss\";\r\n\r\ninterface Props {\r\n onApply: () => void;\r\n onReset: () => void;\r\n}\r\n\r\nconst Commands = (props: Props) => {\r\n\r\n const { uiStore } = useContext(RootStoreContext);\r\n const { onApply, onReset } = props;\r\n\r\n const handleApplyClick = () => {\r\n onApply();\r\n\r\n }\r\n\r\n const handleResetClick = () => {\r\n const popupBody = (\r\n

\r\n Are you sure you want to reset? All changes will be lost:\r\n

\r\n );\r\n\r\n uiStore.SetPopUp(\r\n {\r\n body: popupBody,\r\n title: \"Reset\",\r\n okClickHandler: async () => {\r\n await onReset();\r\n },\r\n cancelClickHandler: () => { },\r\n okButtonText: \"Approve\",\r\n cancelButtonText: \"Abort\",\r\n });\r\n\r\n }\r\n\r\n return (\r\n
\r\n \r\n Apply Changes\r\n \r\n \r\n Reset\r\n \r\n
\r\n );\r\n\r\n}\r\n\r\nexport default Commands;\r\n","import { VendorManagementStore } from \"../../../../stores/VendorManagementStore\";\r\nimport companyVendorService from \"../../../../services/vendor-management/CompanyVendorService\";\r\nimport { RoutesPaths } from \"../../../../constants/RoutePaths\";\r\nimport { message } from \"antd\";\r\nimport affiliateVendorService from \"../../../../services/vendor-management/AffiliateVendorService\";\r\nimport groupVendorService from \"../../../../services/vendor-management/GroupVendorService\";\r\n\r\n\r\n\r\nexport const VendorManagmentStateContextInitializers = {\r\n\r\n\r\n InitializeGroupSettingsData: async (\r\n groupId: number,\r\n vendorManagementStore: VendorManagementStore,\r\n history: any\r\n ) => {\r\n try {\r\n const _groupSettingsData = await groupVendorService.GetGroupSettingsAsync(\r\n groupId\r\n );\r\n vendorManagementStore.SetEntityState(_groupSettingsData);\r\n } catch (err) {\r\n history.push(RoutesPaths.Supervision.Affiliates);\r\n message.error(\r\n `Group with ID: ${groupId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n InitializeCompanySettingsData: async (\r\n companyId: number,\r\n vendorManagementStore: VendorManagementStore,\r\n history: any\r\n ) => {\r\n try {\r\n const _companySettingsData = await companyVendorService.GetCompanySettingsAsync(\r\n companyId\r\n );\r\n vendorManagementStore.SetEntityState(_companySettingsData);\r\n } catch (err) {\r\n history.push(RoutesPaths.Supervision.Affiliates);\r\n message.error(\r\n `Account with ID: ${companyId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n InitializeAffiliateSettingsData: async (\r\n affiliateId: number,\r\n vendorManagementStore: VendorManagementStore,\r\n history: any\r\n ) => {\r\n try {\r\n const _affiliateStateData = await affiliateVendorService.GetAffiliateSettingsAsync(\r\n affiliateId\r\n );\r\n vendorManagementStore.SetEntityState(_affiliateStateData);\r\n } catch (err) {\r\n history.push(RoutesPaths.Supervision.Affiliates);\r\n message.error(\r\n `Affiliate with ID: ${affiliateId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n \r\n}","import React, { useContext } from \"react\";\r\nimport { EntityDistributionSettings } from \"../../../../models/vendor-management/settings/EntityDistributionSettings\";\r\nimport { EntityVendorResponse } from \"../../../../models/vendor-management/EntityVendorResponse\";\r\nimport { UIStore } from \"../../../../stores/UIStore\";\r\nimport { ELevelTypes } from \"../../../../components/actions/ELevelTypes\";\r\nimport { CopyOutlined } from '@ant-design/icons';\r\nimport { Divider, List, Typography } from 'antd';\r\nimport { Button } from \"antd\";\r\nimport { ManualActionRequestSource } from \"../../../../models/manual-actions/ManualActionRequestSource\";\r\nimport \"./ReportPage.scss\"\r\n\r\n\r\nexport const ReportPage = {\r\n BuildReport: async (uiStore: UIStore, rowsEffected: EntityVendorResponse[], resetEntitiesCollections?: EntityDistributionSettings[]\r\n ): Promise<{ sourceRequest: ManualActionRequestSource, action: boolean }> => {\r\n\r\n const handleCopy = () => {\r\n const reportText = generateReportText(rowsEffected, resetEntitiesCollections);\r\n navigator.clipboard.writeText(reportText)\r\n .then(() => {\r\n console.log('Text copied successfully!');\r\n })\r\n .catch((error) => {\r\n console.error('Error copying text:', error);\r\n });\r\n };\r\n\r\n const generateReportText = (vendors: EntityVendorResponse[], entities?: EntityDistributionSettings[]) => {\r\n let reportText = 'Affected Entities:\\n\\n';\r\n entities?.forEach((entity) => {\r\n reportText += `${ELevelTypes[entity.eLevelTypes]} ID: ${entity.entityId}\\n`;\r\n });\r\n\r\n reportText += '\\nAffected Vendors:\\n\\n';\r\n vendors.forEach((vendor) => {\r\n reportText += `${vendor.vendorName} ID: ${vendor.vendorId}\\n`;\r\n });\r\n\r\n return reportText;\r\n };\r\n\r\n return new Promise<{ sourceRequest: ManualActionRequestSource, action: boolean }>((resolve, reject) => {\r\n const popupBodyApply = (\r\n
\r\n
\r\n {resetEntitiesCollections && resetEntitiesCollections.length > 0 && (\r\n <>\r\n Affected Entities
}\r\n bordered\r\n dataSource={resetEntitiesCollections}\r\n renderItem={(item) => (\r\n \r\n {ELevelTypes[item.eLevelTypes]} - {item.entityName} - {item.entityId}\r\n \r\n )}\r\n />\r\n \r\n )}\r\n {rowsEffected && rowsEffected.length > 0 && (\r\n <>\r\n \r\n Affected Vendors
}\r\n bordered\r\n dataSource={rowsEffected}\r\n renderItem={(item) => (\r\n \r\n {item.vendorName} - {item.vendorId}\r\n \r\n )}\r\n />\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n\r\n uiStore.SetPopUp({\r\n body: popupBodyApply,\r\n title: 'Report Page',\r\n okClickHandler: async () => {\r\n const selectedValue = uiStore.PopUp?.selectedValue ?? ManualActionRequestSource.CampaignTeam;\r\n resolve({ sourceRequest: selectedValue, action: true });\r\n },\r\n cancelClickHandler: async () => {\r\n const selectedValue = uiStore.PopUp?.selectedValue ?? ManualActionRequestSource.CampaignTeam;\r\n resolve({ sourceRequest: selectedValue, action: false });\r\n },\r\n okButtonText: 'Approve',\r\n cancelButtonText: 'Abort',\r\n closable: false,\r\n hideSelectButton: false,\r\n })\r\n });\r\n },\r\n};\r\n\r\n","import { Box } from \"@material-ui/core\";\r\nimport { Button, message, Segmented } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { useContext, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport VendorManagement from \"../../../components/vendor-management/VendorManagement\";\r\nimport VendorSelectInput from \"../../../components/vendor-management/VendorSelectInput\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { VendorManagmentContextInitializers } from \"./helpers/VendorManagmentContextInitializers\";\r\nimport groupVendorService from \"../../../services/vendor-management/GroupVendorService\";\r\nimport VendorManagmentMode from \"../../../components/vendor-management/VendorManagmentMode\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport VendorManagmentBreadCrumbs from \"./helpers/VendorManagmentBreadCrumbs\";\r\nimport GroupsBreadCrumbs from \"../groups/helpers/GroupsBreadCrumbs\";\r\nimport { ClassificationType } from \"../../../models/vendor-management/ClassificationType\";\r\nimport { RoutesPaths } from \"../../../constants/RoutePaths\";\r\nimport VlidateVendorActions from \"./helpers/VlidateVendorActions\";\r\nimport { ValidationDto } from \"../../../models/vendor-management/ValidationDto\";\r\nimport { GroupsContextInitializers } from \"../groups/helpers/GroupsContextInitializers \";\r\nimport PanelControl from \"../../../components/vendor-management/ControlPanael\";\r\nimport Commands from \"../../../components/vendor-management/Commands\";\r\nimport { VendorManagmentStateContextInitializers } from \"./helpers/VendorManagmentStateContextInitializers\";\r\nimport { ReportPage } from \"./helpers/ReportPage\";\r\nimport { ValidAction } from \"../../../models/ValidAction\";\r\nimport { EntityDistributionSettings } from \"../../../models/vendor-management/settings/EntityDistributionSettings\";\r\nimport { ManualActionRequestSource } from \"../../../models/manual-actions/ManualActionRequestSource\";\r\n\r\n\r\ninterface Props { }\r\n\r\nconst GroupVendorPage = (props: Props) => {\r\n const match = useParams<{ groupId: string; campaignId: string }>();\r\n const { vendorManagementStore, userStore, groupStore, uiStore } =\r\n useContext(RootStoreContext);\r\n const history = useHistory();\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n await vendorManagementStore.SetSearchedVendors([]); //reset\r\n await VendorManagmentStateContextInitializers.InitializeGroupSettingsData(\r\n Number(match.groupId),\r\n vendorManagementStore,\r\n history\r\n )\r\n await VendorManagmentContextInitializers.InitializeGroupVendorsData(\r\n Number(match.groupId),\r\n vendorManagementStore,\r\n history\r\n );\r\n vendorManagementStore.SearchedVendors =\r\n vendorManagementStore.Vendors?.filter(\r\n (vendor) =>\r\n vendor.classificationType != ClassificationType.None ||\r\n vendor.inclusionEnforcement !== false\r\n );\r\n await GroupsContextInitializers.InitializeSelectedGroup(\r\n Number(match.groupId),\r\n groupStore,\r\n history\r\n );\r\n await GroupsContextInitializers.InitializeGroupCampaign(\r\n Number(match.campaignId),\r\n groupStore,\r\n history\r\n );\r\n },\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `Vendor Managment for Group: ${groupStore.SelectedGroup?.groupName}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n SupervisionBreadcrumbs.Campaigns(\r\n `${groupStore.SelectedCampaign?.campaignName}`\r\n ),\r\n GroupsBreadCrumbs.Groups(\r\n Number(groupStore.SelectedCampaign?.campaignID)\r\n ),\r\n GroupsBreadCrumbs.GroupName(\r\n groupStore.SelectedGroup?.groupName ?? \"\"\r\n ),\r\n VendorManagmentBreadCrumbs.GroupVendor(Number(match.campaignId), Number(groupStore.SelectedGroup?.groupId),)\r\n );\r\n },\r\n });\r\n\r\n\r\n const validateAction = async (validateRules: ValidationDto[]) => {\r\n let messgae: string = 'Warning!, Break vendor hierarchy\\n';\r\n validateRules.forEach(validateRule => {\r\n validateRule.rules.forEach(rule => {\r\n messgae += `Rules Break: ${rule.message} `;\r\n }\r\n )\r\n });\r\n\r\n return messgae;\r\n\r\n}\r\n\r\n\r\n const onApply = async () => {\r\n try {\r\n vendorManagementStore.SetVendorsToApply(\r\n vendorManagementStore.rowsEffected\r\n );\r\n vendorManagementStore.SelectedVendorsToApply.forEach((vendor) => {\r\n vendor.userId = userStore.User!.id;\r\n });\r\n\r\n const reportResult = await ReportPage.BuildReport(uiStore, vendorManagementStore.rowsEffected);\r\n\r\n /*let validateRules = await groupVendorService.ValidateRules(\r\n vendorManagementStore.SelectedVendorsToApply,\r\n Number(match.groupId)\r\n );\r\n\r\n if (validateRules.length > 0) {\r\n await validateAction(validateRules);\r\n return;\r\n }*/\r\n if (reportResult.action) {\r\n await setGroupVendors(reportResult.sourceRequest);\r\n await groupVendorService.SetCompanyDistributionSettings(\r\n vendorManagementStore.EntitySettings,\r\n Number(match.groupId)\r\n )\r\n vendorManagementStore.rowsEffected = [];\r\n }\r\n else return;\r\n\r\n } catch (error) {\r\n message.error(\"Group vendors updated failed\");\r\n }\r\n };\r\n\r\n const setGroupVendors = async (sourceRequest: ManualActionRequestSource) => {\r\n await groupVendorService.SetGroupVendors(\r\n vendorManagementStore.SelectedVendorsToApply,\r\n Number(match.groupId),sourceRequest\r\n );\r\n\r\n message.success(\"Group vendors updated successfully\");\r\n history.push(\r\n RoutesPaths.Supervision.GroupsRoutes.BuildGroupRoute(\r\n Number(match.campaignId)\r\n )\r\n );\r\n };\r\n\r\n const onReset = async () => {\r\n try {\r\n\r\n await groupVendorService.ResetGroupVendors(Number(match.groupId));\r\n message.success(\"Group vendors reset successfully\");\r\n history.push(\r\n RoutesPaths.Supervision.GroupsRoutes.BuildGroupRoute(\r\n Number(match.campaignId)\r\n )\r\n );\r\n\r\n } catch (error) {\r\n message.error(\"Company vendors reset failed\");\r\n }\r\n };\r\n\r\n const onVaild = async (newSettings: EntityDistributionSettings) => {\r\n console.log(\"Group Vendor Page onVaild ===> \")\r\n return await groupVendorService.ChangeSettingsIsValidValidationAsync(\r\n newSettings,\r\n Number(newSettings.entityId)\r\n );\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(GroupVendorPage);\r\n","import { History } from \"history\";\r\nimport { IoMdCut } from \"react-icons/io\";\r\nimport { SiIndeed, SiLinkedin } from \"react-icons/si\";\r\nimport { CgData } from \"react-icons/cg\";\r\nimport { MdGroupWork } from \"react-icons/md\";\r\nimport { FiLayers } from \"react-icons/fi\";\r\n\r\nimport { RoutesPaths } from \"../../../constants/RoutePaths\";\r\nimport { ActionsBuilder } from \"../../general/supervision-table/types\";\r\nimport { Company } from \"../../../models/operation/Company\";\r\nimport { CompanyTableDto } from \"./CompanyTable.dto\";\r\n\r\n\r\ntype CompaniesTableActionsContext = {\r\n history: History;\r\n}\r\n\r\nexport const CompaniesTableActionsBuilder: ActionsBuilder =\r\n ({ history }) => [\r\n {\r\n text: \"Account Settings\",\r\n action: (company) => {\r\n if (!history) {\r\n throw new Error(\"history doesn't exist in context... Can't perform redirect\");\r\n }\r\n\r\n history.push(\r\n RoutesPaths.Supervision.CompanyTrackSystemRoutes.BuildCompanyRoute(company.companyId)\r\n );\r\n },\r\n Icon: CgData,\r\n isDisplayed: () => true\r\n },\r\n {\r\n text: \"Vendor Management\",\r\n action: (company) => {\r\n if (!history) {\r\n throw new Error(\"history doesn't exist in context... Can't perform redirect\");\r\n }\r\n\r\n history.push(\r\n RoutesPaths.Supervision.VendorManagementRoutes.BuildCompanyVendorManagementRoute(company.companyId)\r\n // RoutesPaths.PublisherSelection.ChooseCutOff\r\n );\r\n },\r\n Icon: IoMdCut,\r\n isDisplayed: () => true\r\n },\r\n {\r\n text: \"Company Attributes\",\r\n action: (company) => {\r\n if (!history) {\r\n throw new Error(\"history doesn't exist in context... Can't perform redirect\");\r\n }\r\n\r\n history.push(\r\n RoutesPaths.Supervision.AttributesManagementRoutes.BuildCompanyAttributesRouteManagementRoute(company.companyId)\r\n );\r\n },\r\n Icon: FiLayers,\r\n isDisplayed: () => true\r\n },\r\n {\r\n text: \"LinkedIn Management\",\r\n action: (company) => {\r\n if (!history) {\r\n throw new Error(\"history doesn't exist in context... Can't perform redirect\");\r\n }\r\n\r\n history.push(\r\n RoutesPaths.Supervision.LinkedInRoutes.BuildStrategyRoute(company.companyId)\r\n );\r\n },\r\n Icon: SiLinkedin,\r\n isDisplayed: () => false\r\n }\r\n ]","\r\nimport { Campaign } from \"../../../models/operation/Campaign\";\r\nimport { Company } from \"../../../models/operation/Company\";\r\nimport { TableDto } from \"../../general/supervision-table/Table.dto\";\r\n\r\n/**\r\n * Creates a company table dto that is displayed in the table\r\n */\r\nexport class CompanyTableDto extends TableDto {\r\n \r\n public companyId: number;\r\n public companyName: string;\r\n public affiliateId: number;\r\n\r\n constructor(company: Company) {\r\n super();\r\n this._id = company.companyId;\r\n this.companyId = company.companyId;\r\n this.companyName = company.companyName;\r\n this.affiliateId = company.affiliateId;\r\n }\r\n}\r\n\r\n\r\nexport class CompanyTableDtoExpand extends TableDto {\r\n \r\n public companyId: number;\r\n public companyName: string;\r\n public affiliateId: number;\r\n\r\n constructor(company: Company) {\r\n super();\r\n this._id = company.affiliateId;\r\n this.companyId = company.companyId;\r\n this.companyName = company.companyName;\r\n this.affiliateId = company.affiliateId;\r\n }\r\n}","import \"./CompaniesTable.scss\";\r\n\r\nimport { Empty, Table } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { DOMCoordinates } from \"../../../types/types\";\r\nimport Loader from \"../../general/loader/Loader\";\r\nimport SupervisionTable from \"../../general/supervision-table/SupervisionTable\";\r\nimport { Company } from \"../../../models/operation/Company\";\r\nimport { CompaniesTableActionsBuilder } from \"./CompaniesTable.actions\";\r\nimport { CompanyTableDto } from \"./CompanyTable.dto\";\r\nimport { Campaign } from \"../../../models/operation/Campaign\";\r\nimport { CampaignTableDto } from \"../campaigns/CampaignTable.dto\";\r\nimport { CampaignsTableActionsBuilder } from \"../campaigns/CampaignsTable.actions\";\r\nimport { TableRowSelection } from \"antd/lib/table/interface\";\r\n\r\nexport type RightClickData = {\r\n clickCoordinates: DOMCoordinates;\r\n clickedCompany: CompanyTableDto;\r\n rowIndex: number;\r\n};\r\n\r\ninterface Props { }\r\nconst CompaniesTable = (props: Props) => {\r\n const history = useHistory();\r\n\r\n const { companyStore , uiStore } = useContext(RootStoreContext);\r\n const [selectedRowKeys, setSelectedRowKeys] = useState([companyStore.SelectedCompany?.companyId]);\r\n\r\n const [companies, setCompanies] = useState(\r\n undefined\r\n );\r\n\r\n const [campaigns, setCampaigns] = useState(\r\n undefined\r\n );\r\n\r\n useEffect(() => {\r\n SortCompanies();\r\n setCompanies(companyStore.SearchedCompanies);\r\n var campaignsFlat = companyStore.SearchedCompanies?.flatMap(company => company.campaign);\r\n setCampaigns(campaignsFlat);\r\n }, [companyStore.SearchedCompanies]);\r\n\r\n const SortCompanies = () =>{\r\n companyStore.SearchedCompanies = companyStore.SearchedCompanies.sort((a, b) => {\r\n if (a.companyId == companyStore.SelectedCompany?.companyId) {\r\n return -1; // Move 'a' to the beginning\r\n } else if (b.companyId == companyStore.SelectedCompany?.companyId) {\r\n return 1; // Move 'b' to the beginning\r\n } else {\r\n return 0; // Keep the order unchanged\r\n }\r\n });\r\n\r\n }\r\n\r\n if (companies == undefined) {\r\n return ;\r\n }\r\n\r\n if (companies.length == 0) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n const rowSelection = {\r\n selectedRowKeys,\r\n hideSelectAll: true,\r\n renderCell: (originNode: any, record: any) => {\r\n return rowSelection.onSelect(record)}>Select;\r\n },\r\n onSelect: (record: any) => {\r\n const company = companies.find(c => c.companyId == record.companyId);\r\n\r\n if (company != undefined) {\r\n companyStore.SetSelectedCompany(company);\r\n }\r\n setSelectedRowKeys([record.key]);\r\n }\r\n };\r\n\r\n return (\r\n new CompanyTableDto(c))}\r\n rowActionSettings={{\r\n actions: CompaniesTableActionsBuilder({\r\n history: history\r\n }),\r\n showActionsOnRightClick: true,\r\n showActionsOnLastColumn: true,\r\n }}\r\n tableRowSelection={rowSelection}\r\n expandableDataSource={campaigns?.map((c) => new CampaignTableDto(c))}\r\n isExpendable={true}\r\n isShowSizeChanger={true}\r\n expandableActionSettings={{\r\n actions: CampaignsTableActionsBuilder({ history: history }),\r\n showActionsOnRightClick: true,\r\n showActionsOnLastColumn: true,\r\n }}\r\n \r\n />\r\n );\r\n};\r\n\r\nexport default observer(CompaniesTable);\r\n","import React, { useContext, useEffect, useState } from \"react\";\r\n\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport CompanySelectInput from \"../../../components/supervision/companies/CompanySelectInput\";\r\nimport CompaniesTableIconActions from \"../../../components/supervision/companies/CompaniesTableIconActions\";\r\nimport CompaniesTable from \"../../../components/supervision/companies/CompaniesTable\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport companyService from \"../../../services/operation/CompanyService\";\r\nimport { observer } from \"mobx-react-lite\";\r\n\r\ninterface Props { }\r\n\r\nconst CompaniesContainer = (props: Props) => {\r\n\r\n const { companyStore, uiStore } = useContext(RootStoreContext);\r\n const [title, setTitle] = useState(companyStore.SelectedCompany?.companyName ?? \"\");\r\n\r\n useEffect(() => {\r\n if (companyStore.SelectedCompany != undefined) {\r\n setTitle(companyStore.SelectedCompany.companyName)\r\n uiStore.SetPageTitle(`Algo Supervision - Accounts (${companyStore.SelectedCompany.companyName})`)\r\n \r\n }\r\n }, [companyStore.SelectedCompany]);\r\n\r\n \r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n let companies = await companyService.GetCompaniesWithActiveCampaigns();\r\n companyStore.SetCompanies(companies)\r\n\r\n },\r\n pageTitle: `Algo Supervision - Accounts (${title})`\r\n })\r\n\r\n\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(CompaniesContainer);\r\n","import { Box } from \"@material-ui/core\";\r\nimport { Button, message } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { useContext, useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport VendorManagement from \"../../../components/vendor-management/VendorManagement\";\r\nimport VendorSelectInput from \"../../../components/vendor-management/VendorSelectInput\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { VendorManagmentContextInitializers } from \"./helpers/VendorManagmentContextInitializers\";\r\nimport { VendorManagmentStateContextInitializers } from \"./helpers/VendorManagmentStateContextInitializers\";\r\nimport companyVendorsService from \"../../../services/vendor-management/CompanyVendorService\";\r\nimport { ClassificationTypeValidation } from \"./helpers/ClassificationTypeValidation\";\r\nimport VendorManagmentMode from \"../../../components/vendor-management/VendorManagmentMode\";\r\nimport { ClassificationType } from \"../../../models/vendor-management/ClassificationType\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport VendorManagmentBreadCrumbs from \"./helpers/VendorManagmentBreadCrumbs\";\r\nimport { RoutesPaths } from \"../../../constants/RoutePaths\";\r\nimport PanelControl from \"../../../components/vendor-management/ControlPanael\";\r\nimport Commands from \"../../../components/vendor-management/Commands\";\r\nimport { ELevelTypes } from \"../../../components/actions/ELevelTypes\";\r\nimport { ReportPage } from \"./helpers/ReportPage\";\r\nimport { EntityDistributionSettings } from \"../../../models/vendor-management/settings/EntityDistributionSettings\";\r\nimport IndeedSubAccountStatus from \"../../../components/indeed-manager/IndeedSubAccountStatus\";\r\nimport { IndeedContextInitializers } from \"../indeed-manager/helpers/IndeedContextInitializers\";\r\n\r\n\r\ninterface Props { }\r\n\r\nconst CompanyVendorPage = (props: Props) => {\r\n const match = useParams<{ companyId: string}>();\r\n const { vendorManagementStore, userStore,\r\n uiStore, indeedStore, companyStore } = useContext(RootStoreContext);\r\n\r\n const history = useHistory();\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n await vendorManagementStore.SetSearchedVendors([]); // reset\r\n await VendorManagmentStateContextInitializers.InitializeCompanySettingsData(\r\n Number(match.companyId),\r\n vendorManagementStore,\r\n history\r\n )\r\n await updateAndSort();\r\n await IndeedContextInitializers.InitializeIndeedSubAccount(\r\n indeedStore,\r\n history,\r\n companyStore.SelectedCompany?.companyId,\r\n );\r\n },\r\n\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n uiStore.SetPageTitle(`Vendor Managment for: ${company.companyName}`);\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n VendorManagmentBreadCrumbs.CompanyVendor(company.companyId)\r\n );\r\n },\r\n });\r\n\r\n\r\n\r\n const onApply = async () => {\r\n try {\r\n //vendors record changes\r\n vendorManagementStore.SetVendorsToApply(\r\n vendorManagementStore.rowsEffected\r\n );\r\n vendorManagementStore.SelectedVendorsToApply.forEach((vendor) => {\r\n vendor.userId = userStore.User!.id;\r\n });\r\n\r\n //settings changes\r\n let entityDistributionSettingsResponse = await companyVendorsService.GetEffectedEntitesChangeModeAsync(\r\n vendorManagementStore.EntitySettings,\r\n Number(match.companyId)\r\n );\r\n\r\n const reportResult = await ReportPage.BuildReport(uiStore,\r\n vendorManagementStore.rowsEffected, entityDistributionSettingsResponse.resetEntitiesCollections);\r\n\r\n if (reportResult.action) {\r\n await companyVendorsService.SetCompanyDistributionSettings(\r\n vendorManagementStore.EntitySettings,\r\n Number(match.companyId)\r\n )\r\n\r\n await companyVendorsService.SetCompanysVendors(\r\n vendorManagementStore.SelectedVendorsToApply, Number(match.companyId), reportResult.sourceRequest);\r\n vendorManagementStore.rowsEffected = [];\r\n\r\n await updateAndSort();\r\n }\r\n\r\n else {\r\n return;\r\n }\r\n\r\n message.success(\"Company vendors updated successfully\");\r\n //history.push(RoutesPaths.Supervision.Companies);\r\n\r\n } catch (error) {\r\n message.error(\"Company vendors updated failed\");\r\n }\r\n };\r\n\r\n\r\n const updateAndSort = async () => {\r\n await VendorManagmentContextInitializers.InitializeCompanyVendorsData(\r\n Number(match.companyId),\r\n vendorManagementStore,\r\n history\r\n );\r\n\r\n let isWhitelist = vendorManagementStore.EntitySettings.classificationType == ClassificationType.Exclusive\r\n\r\n vendorManagementStore.SearchedVendors =\r\n vendorManagementStore.Vendors?.filter(\r\n (vendor) =>\r\n vendor.classificationType != ClassificationType.None ||\r\n vendor.inclusionEnforcement !== false || !isWhitelist && vendor.isOperativeCutoff\r\n ).sort((a, b) => {\r\n if (!a.isOperativeCutoff && b.isOperativeCutoff) {\r\n return -1; // `b` comes before `a`\r\n } else if (!a.isOperativeCutoff && b.isOperativeCutoff) {\r\n return 1; // `a` comes before `b`\r\n } else {\r\n return 0; // no change in order\r\n }\r\n });\r\n }\r\n\r\n\r\n const IndeedIsIncludedInTheList = () => {\r\n const foundVendors = vendorManagementStore.Vendors.filter(v =>\r\n v.vendorName && v.vendorName.includes(\"Indeed\")\r\n );\r\n\r\n let classificationType = vendorManagementStore?.EntitySettings?.classificationType;\r\n if (foundVendors.length > 0) {\r\n // Whitelist check: If at least one vendor is Exclusive, return true\r\n if (classificationType === ClassificationType.Exclusive) {\r\n if (foundVendors.some(v => v.classificationType === ClassificationType.Exclusive)) {\r\n return true;\r\n }\r\n }\r\n\r\n // Blacklist check: If at least one vendor is None, return true. If all are Excluded, return false\r\n if (classificationType === ClassificationType.Excluded) {\r\n if (foundVendors.some(v => v.classificationType === ClassificationType.None)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n const onReset = async () => {\r\n try {\r\n await companyVendorsService.ResetCompanyVendors(Number(match.companyId));\r\n message.success(\"Company vendors reset successfully\");\r\n history.push(RoutesPaths.Supervision.Companies);\r\n\r\n } catch (error) {\r\n message.error(\"Company vendors reset failed\");\r\n }\r\n };\r\n\r\n const onVaild = async (newSettings: EntityDistributionSettings) => {\r\n\r\n return await companyVendorsService.ChangeSettingsIsValidValidationAsync(\r\n newSettings,\r\n Number(newSettings.entityId)\r\n );\r\n }\r\n\r\n return (\r\n
\r\n {IndeedIsIncludedInTheList() && (\r\n \r\n )} \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(CompanyVendorPage);\r\n","import { APIResponse } from \"../../models/APIResponse\";\r\nimport { CompanySettingsAuditCreateModel } from \"../../models/company-track-system/CompanySettingsAuditCreateModel\";\r\nimport { CompanySettingsAuditResponse } from \"../../models/company-track-system/CompanySettingsAuditResponse\";\r\nimport { PaginationParams } from \"../../models/pagination/PaginationParams\";\r\nimport { ISODateTime } from \"../../types/types\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\nexport class CompanySettingAuditService extends BaseService {\r\n async GetCompanySettingsAuditByPagination(\r\n companyId: number,\r\n paginationOptions: PaginationParams\r\n ) {\r\n const companySettingsAuditData = await this.Post<\r\n CompanySettingsAuditResponse[]\r\n >(`/paginate/${companyId}`, paginationOptions);\r\n return companySettingsAuditData;\r\n }\r\n\r\n async UpdateCompanySettingsAudit(\r\n auditId: string,\r\n auditUpdateModel: CompanySettingsAuditCreateModel\r\n ): Promise {\r\n const UpdatedAudit = await this.Put(\r\n `/${auditId}`,\r\n auditUpdateModel\r\n );\r\n return UpdatedAudit;\r\n }\r\n\r\n async CreateCompanySettingsAudit(\r\n campaignSettingsAuditCreateModel: CompanySettingsAuditCreateModel\r\n ): Promise {\r\n const createdAudit = await this.Post(\r\n \"\",\r\n campaignSettingsAuditCreateModel\r\n );\r\n return createdAudit;\r\n }\r\n\r\n async DeleteCompanySettingsAudit(\r\n companyId: number,\r\n auditId: string\r\n ): Promise {\r\n const deletedAudit = await this.Delete(\r\n `/${companyId}/${auditId}`\r\n );\r\n return deletedAudit;\r\n }\r\n\r\n async UploadFile(file: any, userId: string): Promise> {\r\n const fromData = new FormData();\r\n fromData.append(\"csvFile\", file);\r\n fromData.append(\"userId\", userId);\r\n\r\n const fileUploaded = await this.Post>(\r\n `/bulk-upload`,\r\n fromData\r\n );\r\n\r\n return fileUploaded;\r\n }\r\n\r\n async GetFilteredCompanySettingsAudits(getActionsRequest: {\r\n userId?: number;\r\n from?: ISODateTime;\r\n to?: ISODateTime;\r\n optionTypeId?: string;\r\n companyId?: number;\r\n }): Promise {\r\n let queryString = \"\";\r\n\r\n if (getActionsRequest.companyId) {\r\n queryString += `&companyId=${getActionsRequest.companyId}`;\r\n }\r\n if (getActionsRequest.optionTypeId) {\r\n queryString += `&optionTypeId=${getActionsRequest.optionTypeId}`;\r\n }\r\n if (getActionsRequest.userId) {\r\n queryString += `&userId=${getActionsRequest.userId}`;\r\n }\r\n if (getActionsRequest.from) {\r\n queryString += `&from=${getActionsRequest.from}`;\r\n }\r\n if (getActionsRequest.to) {\r\n queryString += `&to=${getActionsRequest.to}`;\r\n }\r\n\r\n let url = `/?q${queryString}`;\r\n return await this.Get(url);\r\n }\r\n}\r\n\r\nconst companySettingAuditService = new CompanySettingAuditService(\r\n \"CompanySettingsAudit\"\r\n);\r\nexport default companySettingAuditService;\r\n","export enum CompanySettingsStatus {\r\n Active = 1,\r\n Removed = 2,\r\n}\r\n","import { CompanySettingStore } from \"../../stores/CompanySettingStore\";\r\nimport { ActionsBuilder } from \"../general/supervision-table/types\";\r\nimport { History } from \"history\";\r\nimport { FiEdit } from \"react-icons/fi\";\r\nimport { RiDeleteBin7Line } from \"react-icons/ri\";\r\nimport { RoutesPaths } from \"../../constants/RoutePaths\";\r\nimport { CompanySettingsAuditDto } from \"./CompanySettingsAudit.dto\";\r\nimport { UIStore } from \"../../stores/UIStore\";\r\nimport companySettingAuditService from \"../../services/company-settings/CompanySettingAuditService\";\r\nimport { message, Typography } from \"antd\";\r\nimport { CompanySettingsStatus } from \"../../models/company-track-system/CompanySettingsStatus\";\r\n\r\nconst { Text } = Typography;\r\n\r\ntype CompanySettingActionsContext = {\r\n companySettingStore: CompanySettingStore;\r\n uiStore: UIStore;\r\n history: History;\r\n companyId: number;\r\n};\r\n\r\nexport const CompanySettingActionsBuilder: ActionsBuilder<\r\n CompanySettingsAuditDto,\r\n CompanySettingActionsContext\r\n> = ({ history, companySettingStore, uiStore, companyId }) => [\r\n {\r\n text: \"Edit Company Setting\",\r\n action: (companySettingAudit) => {\r\n companySettingStore.SetSelectedCompanySettingAudit(\r\n companySettingStore.CompanySettingsAuditsResponse?.find(\r\n (x) => x.id == companySettingAudit.id\r\n )\r\n );\r\n history.push({\r\n pathname:\r\n RoutesPaths.Supervision.CompanyTrackSystemRoutes.BuildEditCompanySettingAudit(\r\n companyId,\r\n companySettingAudit.id\r\n ),\r\n });\r\n },\r\n Icon: FiEdit,\r\n isDisplayed: () => true,\r\n },\r\n\r\n {\r\n text: \"Delete audit\",\r\n action: (companySettingAudit) => {\r\n const popupBody = (\r\n

\r\n Sure you want to delete audit from company:{\" \"}\r\n {companySettingAudit.companyName} with audit ID:{\" \"}\r\n {companySettingAudit.id}\r\n

\r\n );\r\n\r\n uiStore.SetPopUp({\r\n body: popupBody,\r\n title: \"Stem Control Request\",\r\n okClickHandler: async () => {\r\n await companySettingAuditService.DeleteCompanySettingsAudit(\r\n companyId,\r\n companySettingAudit.id\r\n );\r\n let auditIndex =\r\n companySettingStore.CompanySettingsAuditsResponse.findIndex(\r\n (x) => x.id == companySettingAudit.id\r\n );\r\n companySettingStore.CompanySettingsAuditsResponse[auditIndex].status =\r\n CompanySettingsStatus.Removed;\r\n\r\n message.success(\r\n `Audit Company Setting ID:${companySettingAudit.id} deleted`\r\n );\r\n },\r\n okButtonText: \"Accept\",\r\n });\r\n },\r\n Icon: RiDeleteBin7Line,\r\n isDisplayed: () => true,\r\n },\r\n];\r\n","import { CompanySettingsAuditResponse } from \"../../models/company-track-system/CompanySettingsAuditResponse\";\r\nimport { CompanySettingsStatus } from \"../../models/company-track-system/CompanySettingsStatus\";\r\nimport { ISODateTime } from \"../../types/types\";\r\nimport { FormatDate } from \"../../utils/DateHelpers\";\r\nimport { TableDto } from \"../general/supervision-table/Table.dto\";\r\n\r\n\r\n\r\nexport class CompanySettingsAuditDto extends TableDto {\r\n constructor(\r\n public id: string,\r\n public companyId: number,\r\n public date : ISODateTime,\r\n public status: string,\r\n public companyName: string,\r\n public type : string,\r\n public value: string,\r\n public caseNumber: string,\r\n public userName: string,\r\n public comment: string\r\n\r\n ) {\r\n super();\r\n }\r\n\r\n public static MapFromCompanySettingsAudit(companySettingsAudit: CompanySettingsAuditResponse) {\r\n return new CompanySettingsAuditDto(\r\n companySettingsAudit.id,\r\n companySettingsAudit.companyId,\r\n FormatDate(companySettingsAudit.creationDate),\r\n companySettingsAudit.status ? CompanySettingsStatus[companySettingsAudit.status] : \"N.A\",\r\n companySettingsAudit.companyName,\r\n companySettingsAudit.type,\r\n companySettingsAudit.value,\r\n companySettingsAudit.caseNumber,\r\n companySettingsAudit.userName,\r\n companySettingsAudit.comment\r\n\r\n )\r\n }\r\n}","import { Empty } from \"antd\";\r\nimport { useContext, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { CompanySettingsAuditResponse } from \"../../models/company-track-system/CompanySettingsAuditResponse\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport { CompanySettingActionsBuilder } from \"./CompanySettingAuditTable.actions\";\r\nimport { CompanySettingsAuditDto } from \"./CompanySettingsAudit.dto\";\r\n\r\nimport { observer } from \"mobx-react-lite\";\r\nimport SupervisionTable from \"../general/supervision-table/SupervisionTable\";\r\n\r\ninterface Props {\r\n companyId: number;\r\n companyAudits: CompanySettingsAuditResponse[];\r\n}\r\n\r\nconst CompanySettingAuditTable = (props: Props) => {\r\n const { companyAudits, companyId } = props;\r\n const { companySettingStore, uiStore } = useContext(RootStoreContext);\r\n const history = useHistory();\r\n\r\n if (companyAudits.length == 0) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(CompanySettingAuditTable);\r\n","import { CompanySettingTypeResponse } from \"../../models/company-track-system/CompanySettingTypeResponse\";\r\nimport { CompanySettingTypeValueOption } from \"../../models/company-track-system/CompanySettingTypeValueOption\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\nexport class CompanySettingTypeService extends BaseService {\r\n async GetCompanySettingTypes() {\r\n const companySettingTypeData = await this.Get(\r\n \"\"\r\n );\r\n return companySettingTypeData;\r\n }\r\n\r\n async GetSettingTypeValueOptionsPerType(companySettingTypeId: number) {\r\n const companySettingTypeData = await this.Get<\r\n CompanySettingTypeValueOption[]\r\n >(`/${companySettingTypeId}/valueOptions`);\r\n return companySettingTypeData;\r\n }\r\n}\r\n\r\nconst companySettingTypeService = new CompanySettingTypeService(\r\n \"CompanySettingTypes\"\r\n);\r\nexport default companySettingTypeService;\r\n","import { message } from \"antd\";\r\nimport { RoutesPaths } from \"../../../../constants/RoutePaths\";\r\nimport { PaginationParams } from \"../../../../models/pagination/PaginationParams\";\r\nimport companySettingAuditService from \"../../../../services/company-settings/CompanySettingAuditService\";\r\nimport companySettingTypeService from \"../../../../services/company-settings/CompanySettingTypeService\";\r\nimport { CompanySettingStore } from \"../../../../stores/CompanySettingStore\";\r\n\r\nexport const CompanySettingContextInitializers = {\r\n InitializeCompanyAuditData: async (\r\n companyId: number,\r\n companySettingStore: CompanySettingStore,\r\n history: any\r\n ) => {\r\n try {\r\n const _auditData =\r\n await companySettingAuditService.GetFilteredCompanySettingsAudits({\r\n companyId,\r\n });\r\n companySettingStore.SetCompanySettingsAudits(_auditData);\r\n } catch (err) {\r\n history.push(RoutesPaths.Supervision.Companies);\r\n message.error(\r\n `Company with ID: ${companyId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n InitializeCompanySettingTypes: async (\r\n companySettingStore: CompanySettingStore,\r\n history: any\r\n ) => {\r\n try {\r\n const _settingTypesData =\r\n await companySettingTypeService.GetCompanySettingTypes();\r\n\r\n await companySettingStore.SetCompanySettingTypes(_settingTypesData);\r\n } catch (err) {\r\n history.push(RoutesPaths.Supervision.Companies);\r\n message.error(\r\n `Failed to find Company setting types Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n InitializeSelectedCompanySettingAudit: async (\r\n auditId: string,\r\n companySettingStore: CompanySettingStore,\r\n history: any\r\n ) => {\r\n try {\r\n companySettingStore.SetSelectedCompanySettingAudit(\r\n companySettingStore.CompanySettingsAuditsResponse?.find(\r\n (x) => x.id == auditId\r\n )\r\n );\r\n } catch (err) {\r\n history.push(RoutesPaths.Supervision.Companies);\r\n message.error(\r\n `Failed to find Company setting types Returned to home page`\r\n );\r\n }\r\n },\r\n};\r\n","import { RoutesPaths } from \"../../../../constants/RoutePaths\";\r\nimport { BreadCrumb } from \"../../../../models/BreadCrumb\";\r\n\r\nexport const CompanySettingBreadCrumbs = {\r\n CompanySetting: (companyId: number) => {\r\n return new BreadCrumb(\r\n \"Company-Settings\",\r\n RoutesPaths.Supervision.CompanyTrackSystemRoutes.BuildCompanyRoute(\r\n companyId\r\n ),\r\n null\r\n );\r\n },\r\n CompanySettingAudit: (CompanyName: string) => {\r\n return new BreadCrumb(CompanyName, null, null);\r\n },\r\n AddCompanySettingAudit: (companyId: number) => {\r\n return new BreadCrumb(\r\n \"Add Audit\",\r\n RoutesPaths.Supervision.CompanyTrackSystemRoutes.BuildAddCompanySettingAudit(\r\n companyId\r\n ),\r\n null\r\n );\r\n },\r\n EditCompanySettingAudit: (\r\n companyId: number,\r\n companySettingAuditId: string\r\n ) => {\r\n return new BreadCrumb(\r\n \"Edit\",\r\n RoutesPaths.Supervision.CompanyTrackSystemRoutes.BuildEditCompanySettingAudit(\r\n companyId,\r\n companySettingAuditId\r\n ),\r\n null\r\n );\r\n },\r\n};\r\n\r\nexport default CompanySettingBreadCrumbs;\r\n","import { Upload, message, Button, Row, Col } from 'antd';\r\nimport { UploadOutlined } from '@ant-design/icons';\r\nimport { useContext, useState } from 'react';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { RootStoreContext } from '../../stores/RootStoreContext';\r\nimport { Box } from '@material-ui/core';\r\nimport \"./UploadCsvFile.scss\";\r\nimport companySettingAuditService from '../../services/company-settings/CompanySettingAuditService';\r\n\r\nconst UploadCsvFile = () => {\r\n\r\n const [uploadDisabled, setUploadDisabled] = useState(true);\r\n const { userStore } = useContext(RootStoreContext);\r\n const [infoFile, setInfoFile] = useState({});\r\n\r\n const onChange = (info: any) => {\r\n\r\n if (info.file.status !== 'uploading') {\r\n // console.log(info.file, info.fileList);\r\n }\r\n if (info.file.status === 'done') {\r\n message.success(`${info.file.name} file uploaded successfully`);\r\n } else if (info.file.status === 'error') {\r\n message.error(`${info.file.error}. ${info.file.name} file upload failed.`);\r\n }\r\n }\r\n\r\n const uploadFile = async () => {\r\n\r\n\r\n await companySettingAuditService.UploadFile(infoFile.file, userStore.User!.id.toString())\r\n .then((response) => {\r\n if (response.isError) {\r\n infoFile.onError(response.body);\r\n }\r\n else\r\n infoFile.onSuccess(\"ok\");\r\n\r\n setUploadDisabled(true);\r\n })\r\n\r\n\r\n }\r\n\r\n const chooseFile = (info: any) => {\r\n\r\n setInfoFile(info);\r\n setUploadDisabled(false);\r\n\r\n }\r\n\r\n const onRemove = () => {\r\n\r\n setUploadDisabled(true);\r\n }\r\n\r\n return (\r\n \r\n\r\n \r\n \r\n \r\n }\r\n type=\"primary\"\r\n shape=\"round\"\r\n size=\"large\"\r\n style={{\r\n alignItems: \"center\",\r\n display: 'inline-flex',\r\n width: 177,\r\n }}>\r\n Choose File\r\n \r\n \r\n \r\n \r\n }\r\n type=\"primary\"\r\n shape=\"round\"\r\n size=\"large\"\r\n style={{\r\n display: 'inline-flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n marginLeft: 10\r\n }} >\r\n Upload\r\n \r\n \r\n )\r\n}\r\n\r\n\r\n\r\nexport default observer(UploadCsvFile);","import { useContext, useState } from \"react\";\r\nimport { Link, useHistory, useParams } from \"react-router-dom\";\r\nimport useOnInitAsync from \"../../../hooks/useOnInitAsync\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { CompanySettingsAuditResponse } from \"../../../models/company-track-system/CompanySettingsAuditResponse\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport AuditTable from \"../../../components/company-track-system/CompanySettingAuditTable\";\r\nimport { CompanySettingContextInitializers } from \"./helpers/CompanySettingContextInitializers\";\r\nimport { AutoComplete, Button, DatePicker, Empty, message, Space } from \"antd\";\r\nimport { BiPlusCircle } from \"react-icons/bi\";\r\nimport { RoutesPaths } from \"../../../constants/RoutePaths\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport CompanySettingBreadCrumbs from \"./helpers/CompanySetting.breadcrumbs\";\r\nimport { ISODateTime } from \"../../../types/types\";\r\nimport { UserResponse } from \"../../../models/users/UserResponse\";\r\nimport { Moment } from \"moment\";\r\nimport SelectUserInput from \"../../../components/general/inputs/SelectUserInput\";\r\nimport Loader from \"../../../components/general/loader/Loader\";\r\nimport moment from \"moment\";\r\nimport companySettingAuditService from \"../../../services/company-settings/CompanySettingAuditService\";\r\nimport UploadCsvFile from \"../../../components/company-track-system/UploadCsvFile\";\r\n\r\ninterface Props {}\r\n\r\ntype FilterSettings = {\r\n userId?: number;\r\n from?: ISODateTime;\r\n to?: ISODateTime;\r\n optionTypeId?: string;\r\n companyId?: number;\r\n};\r\n\r\nconst CompanyTrackAuditPage = (props: Props) => {\r\n const match = useParams<{ companyId: string }>();\r\n const { companySettingStore } = useContext(RootStoreContext);\r\n const history = useHistory();\r\n\r\n const [filterSettings, setFilterSettings] = useState({\r\n companyId: Number(match.companyId),\r\n });\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [userInputValue, setUserInputValue] = useState<\r\n UserResponse | undefined\r\n >();\r\n\r\n const [typeValue, setTypeValue] = useState();\r\n const companySettingTypes = companySettingStore.CompanySettingTypes;\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n await CompanySettingContextInitializers.InitializeCompanyAuditData(\r\n Number(match.companyId),\r\n companySettingStore,\r\n history\r\n );\r\n\r\n await CompanySettingContextInitializers.InitializeCompanySettingTypes(\r\n companySettingStore,\r\n history\r\n );\r\n\r\n setIsLoading(false);\r\n },\r\n\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n uiStore.SetPageTitle(`Company Audits for: ${company.companyName}`);\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n CompanySettingBreadCrumbs.CompanySetting(company.companyId)\r\n );\r\n },\r\n });\r\n\r\n if (!companySettingStore.CompanySettingsAuditsResponse) {\r\n return ;\r\n }\r\n\r\n const filterHandler = async () => {\r\n setIsLoading(true);\r\n await companySettingAuditService\r\n .GetFilteredCompanySettingsAudits(filterSettings)\r\n .then((audits) => {\r\n companySettingStore.SetCompanySettingsAudits(audits);\r\n });\r\n\r\n setIsLoading(false);\r\n message.info(\"Filtered actions\");\r\n };\r\n\r\n const initialDateValue = () => {\r\n let date: [Moment?, Moment?] = [undefined, undefined];\r\n\r\n if (filterSettings.from) {\r\n date[0] = moment(filterSettings.from);\r\n }\r\n if (filterSettings.to) {\r\n date[1] = moment(filterSettings.to);\r\n }\r\n return date;\r\n };\r\n\r\n if (isLoading) {\r\n return ;\r\n }\r\n\r\n const typeOptions = companySettingTypes\r\n ?.filter((x) => x.settingType.toLowerCase())\r\n .map((x) => ({ value: x.settingType, id: x.id }));\r\n\r\n return (\r\n
\r\n \r\n {\r\n setUserInputValue(user);\r\n setFilterSettings({\r\n ...filterSettings,\r\n userId: user?.id,\r\n });\r\n }}\r\n onClear={() => {\r\n setUserInputValue(undefined);\r\n setFilterSettings({\r\n ...filterSettings,\r\n userId: undefined,\r\n });\r\n }}\r\n />\r\n {\r\n setFilterSettings({\r\n ...filterSettings,\r\n optionTypeId: selectedType?.id,\r\n });\r\n setTypeValue(typeValue);\r\n }}\r\n allowClear\r\n onClear={() => {\r\n setFilterSettings({\r\n ...filterSettings,\r\n optionTypeId: undefined,\r\n });\r\n setTypeValue(\"\");\r\n }}\r\n value={typeValue}\r\n placeholder=\"Setting Type\"\r\n />\r\n\r\n {\r\n const from = date?.[0];\r\n const to = date?.[1];\r\n\r\n setFilterSettings({\r\n ...filterSettings,\r\n from: from?.toISOString() || undefined,\r\n to: to?.toISOString() || undefined,\r\n });\r\n }}\r\n defaultValue={initialDateValue() as any}\r\n />\r\n \r\n \r\n\r\n \r\n\r\n
\r\n \r\n \r\n \r\n Add New Audit\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default observer(CompanyTrackAuditPage);\r\n","import { Affiliate } from \"../../models/operation/Affiliate\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\n\r\nexport class AffiliateService extends BaseService {\r\n \r\n async GetAffiliates() {\r\n\r\n const AffiliateData = await this.Get(\"\");\r\n return AffiliateData;\r\n }\r\n\r\n async GetById(affiliateId: number): Promise {\r\n const affilaite = await this.Get(`/${affiliateId}`);\r\n return affilaite;\r\n }\r\n}\r\n\r\nconst affiliateService = new AffiliateService(\"Affiliate\");\r\nexport default affiliateService;\r\n\r\n","import { message } from \"antd\";\r\nimport React, { useContext, useEffect } from \"react\";\r\nimport { useHistory } from \"react-router\";\r\nimport { useParams } from \"react-router-dom\";\r\n\r\nimport { RoutesPaths } from \"../constants/RoutePaths\";\r\nimport { BreadCrumb } from \"../models/BreadCrumb\";\r\nimport { Affiliate } from \"../models/operation/Affiliate\";\r\nimport affiliateService from \"../services/affiliates/AffiliateService\";\r\nimport { RootStoreContext } from \"../stores/RootStoreContext\";\r\nimport { UIStore } from \"../stores/UIStore\";\r\nimport useOnInit from \"./useOnInit\";\r\nimport useOnInitAsync from \"./useOnInitAsync\";\r\nimport useSetCurrentRoute from \"./useSetCurrentRoute\";\r\n\r\n/**\r\n * NOTE: Use that hook on every page component\r\n * Initializes page configuration\r\n */\r\nconst usePageInitializationAffiliate = (initializeConfig: {\r\n pageTitle?: string;\r\n pageBreadCrumbs?: BreadCrumb[];\r\n onInitAsync?: () => Promise;\r\n onCallback?: (uiStore: UIStore) => void;\r\n onAffiliateContextCallBack?: (affiliate: Affiliate, uiStore: UIStore) => void;\r\n}) => {\r\n const match = useParams<{ affiliateId?: string }>();\r\n const history = useHistory();\r\n\r\n const { uiStore, affiliateStore } = useContext(RootStoreContext);\r\n\r\n useSetCurrentRoute();\r\n\r\n useOnInit(() => {\r\n if (initializeConfig.pageTitle) {\r\n uiStore.SetPageTitle(initializeConfig.pageTitle);\r\n }\r\n if (initializeConfig.pageBreadCrumbs) {\r\n uiStore.AddBreadCrumbs(...initializeConfig.pageBreadCrumbs);\r\n }\r\n\r\n if (initializeConfig.onCallback) {\r\n initializeConfig.onCallback(uiStore);\r\n }\r\n });\r\n\r\n useOnInitAsync(async () => {\r\n if(initializeConfig.onInitAsync) {\r\n await initializeConfig.onInitAsync();\r\n }\r\n\r\n if (match.affiliateId) {\r\n uiStore.SetIsWebsiteLoading(true);\r\n try {\r\n const affiliate = await affiliateService.GetById(\r\n Number(match.affiliateId)\r\n );\r\n affiliateStore.SetSelectedAffiliate(affiliate);\r\n \r\n if (initializeConfig.onAffiliateContextCallBack) {\r\n initializeConfig.onAffiliateContextCallBack(\r\n affiliate,\r\n uiStore\r\n );\r\n }\r\n } catch (err) {\r\n history.push(RoutesPaths.Supervision.Affiliates);\r\n message.error(\r\n `Affiliate with ID: ${match.affiliateId} doesn't exist. Returned to home page`\r\n );\r\n } finally {\r\n uiStore.SetIsWebsiteLoading(false);\r\n }\r\n }\r\n });\r\n};\r\n\r\nexport default usePageInitializationAffiliate;","import { Box } from \"@material-ui/core\";\r\nimport { Button, message } from 'antd';\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { useContext, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport VendorManagement from \"../../../components/vendor-management/VendorManagement\";\r\nimport VendorSelectInput from \"../../../components/vendor-management/VendorSelectInput\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { VendorManagmentContextInitializers } from \"./helpers/VendorManagmentContextInitializers\";\r\nimport { ClassificationTypeValidation } from \"./helpers/ClassificationTypeValidation\";\r\nimport VendorManagmentMode from \"../../../components/vendor-management/VendorManagmentMode\";\r\nimport { ClassificationType } from \"../../../models/vendor-management/ClassificationType\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport VendorManagmentBreadCrumbs from \"./helpers/VendorManagmentBreadCrumbs\";\r\nimport { RoutesPaths } from \"../../../constants/RoutePaths\";\r\nimport affiliateVendorService from \"../../../services/vendor-management/AffiliateVendorService\";\r\nimport usePageInitializationAffiliate from \"../../../hooks/usePageInitializationAffiliate\";\r\nimport { VendorManagmentStateContextInitializers } from \"./helpers/VendorManagmentStateContextInitializers\";\r\nimport { ReportPage } from \"./helpers/ReportPage\";\r\nimport { EntityDistributionSettings } from \"../../../models/vendor-management/settings/EntityDistributionSettings\";\r\nimport { ValidAction } from \"../../../models/ValidAction\";\r\n\r\n\r\n\r\ninterface Props { }\r\n\r\nconst AffiliateVendorPage = (props: Props) => {\r\n\r\n const match = useParams<{ affiliateId: string }>();\r\n const { vendorManagementStore, userStore, uiStore } = useContext(RootStoreContext);\r\n\r\n const history = useHistory();\r\n\r\n usePageInitializationAffiliate({\r\n onInitAsync: async () => {\r\n await vendorManagementStore.SetSearchedVendors([]) // reset\r\n await VendorManagmentStateContextInitializers.InitializeAffiliateSettingsData(\r\n Number(match.affiliateId),\r\n vendorManagementStore,\r\n history\r\n )\r\n await VendorManagmentContextInitializers.InitializeAffiliateVendorsData(\r\n Number(match.affiliateId),\r\n vendorManagementStore,\r\n history\r\n )\r\n vendorManagementStore.SearchedVendors = vendorManagementStore.Vendors?.filter(vendor =>\r\n vendor.classificationType != ClassificationType.None || vendor.inclusionEnforcement !== false\r\n );\r\n\r\n },\r\n onAffiliateContextCallBack: (affiliate, uiStore) => {\r\n uiStore.SetPageTitle(\r\n `Vendor Managment for: ${affiliate.affiliateName}`\r\n );\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Affiliates(affiliate.affiliateName),\r\n VendorManagmentBreadCrumbs.AffiliatVendor(affiliate.affiliateId),\r\n );\r\n },\r\n })\r\n\r\n const onApply = async () => {\r\n try {\r\n vendorManagementStore.SetVendorsToApply(vendorManagementStore.rowsEffected);\r\n vendorManagementStore.SelectedVendorsToApply.forEach(vendor => {\r\n vendor.userId = userStore.User!.id;\r\n });\r\n\r\n //settings changes\r\n let entityDistributionSettingsResponse = await affiliateVendorService.GetEffectedEntitesChangeModeAsync(\r\n vendorManagementStore.EntitySettings,\r\n Number(match.affiliateId)\r\n );\r\n\r\n const reportResult = await ReportPage.BuildReport(uiStore,\r\n vendorManagementStore.rowsEffected, entityDistributionSettingsResponse.resetEntitiesCollections);\r\n\r\n if (reportResult.action) {\r\n await affiliateVendorService.SetAffiliateDistributionSettings(\r\n vendorManagementStore.EntitySettings,\r\n Number(match.affiliateId)\r\n )\r\n\r\n await affiliateVendorService.SetAffiliatesVendors(\r\n vendorManagementStore.SelectedVendorsToApply, Number(match.affiliateId), reportResult.sourceRequest);\r\n vendorManagementStore.rowsEffected = [];\r\n }\r\n else {\r\n return;\r\n }\r\n //\r\n\r\n message.success(\"Affiliate vendors updated successfully\");\r\n history.push(RoutesPaths.Supervision.Affiliates);\r\n } catch (error) {\r\n message.error(\"Affiliate vendors updated failed\");\r\n\r\n }\r\n\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n {return {isValid: true, errorMessage: ''}}}/>\r\n \r\n \r\n
\r\n \r\n Apply Changes\r\n \r\n\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default observer(AffiliateVendorPage);","import {\r\n AutoComplete,\r\n Button,\r\n Col,\r\n DatePicker,\r\n Form,\r\n Input,\r\n message,\r\n Row,\r\n TimePicker,\r\n Typography,\r\n} from \"antd\";\r\nimport { useContext, useEffect, useState } from \"react\";\r\nimport { CompanySettingTypeResponse } from \"../../models/company-track-system/CompanySettingTypeResponse\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport companySettingTypeService from \"../../services/company-settings/CompanySettingTypeService\";\r\nimport { CompanySettingTypeValueOption } from \"../../models/company-track-system/CompanySettingTypeValueOption\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { CompanySettingsAuditCreateModel } from \"../../models/company-track-system/CompanySettingsAuditCreateModel\";\r\nimport { CompanySettingsStatus } from \"../../models/company-track-system/CompanySettingsStatus\";\r\nimport CompanySettingAuditService from \"../../services/company-settings/CompanySettingAuditService\";\r\nimport moment from \"moment\";\r\nimport { Box } from \"@material-ui/core\";\r\nimport { FetchError } from \"../../exceptions/AlgoSupervisionExceptions\";\r\nimport { RoutesPaths } from \"../../constants/RoutePaths\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\ninterface Props {\r\n companyAuditId: string;\r\n companyId: number;\r\n}\r\n\r\nconst layout = {\r\n labelCol: { span: 4 },\r\n};\r\n\r\nconst layoutType = {\r\n labelCol: { span: 8 },\r\n};\r\n\r\nconst layoutValueOptionlabel = {\r\n labelCol: { span: 6 },\r\n};\r\n\r\nconst AuditCompanyForm = (props: Props) => {\r\n const { companySettingStore, userStore } = useContext(RootStoreContext);\r\n\r\n const { companyId, companyAuditId } = props;\r\n\r\n const [selectedType, setSelectedType] =\r\n useState();\r\n const [valueOptionTypes, setValueOptionTypes] =\r\n useState();\r\n const [selectedValueOption, setSelectedValueOption] = useState<\r\n string | undefined\r\n >();\r\n const [caseNumber, setCaseNumber] = useState();\r\n const [comment, setComment] = useState();\r\n const [companySettingTypeTextValue, setCompanySettingTypeTextValue] =\r\n useState(\"\");\r\n\r\n const [date, setDate] = useState(moment(Date.now()));\r\n\r\n const history = useHistory();\r\n\r\n const [typeOptions, setTypeOptions] = useState();\r\n\r\n useEffect(() => {\r\n setTypeOptions(\r\n companySettingStore.CompanySettingTypes?.filter((x) =>\r\n x.settingType.toLowerCase()\r\n ).map((x) => ({ value: x.settingType, id: x.id, dataType: x.dataType }))\r\n );\r\n }, [companySettingStore.CompanySettingTypes]);\r\n\r\n useEffect(() => {\r\n if (companySettingStore.updateOperationState) {\r\n setUpdateState();\r\n return;\r\n }\r\n cleanUpState();\r\n }, [companySettingStore.updateOperationState]);\r\n\r\n const setUpdateState = () => {\r\n const selectedAudit = companySettingStore.SelectedCompanySettingAudit;\r\n\r\n const typeRes = companySettingStore.CompanySettingTypes?.find(\r\n (x) => x.settingType == selectedAudit?.type\r\n );\r\n setSelectedType(typeRes);\r\n setCompanySettingTypeTextValue(typeRes?.settingType);\r\n setSelectedValueOption(selectedAudit?.value);\r\n setCaseNumber(selectedAudit?.caseNumber);\r\n setComment(selectedAudit?.comment);\r\n setDate(moment(selectedAudit?.creationDate));\r\n };\r\n\r\n const setSelectedTypeOnSelection = async (\r\n data: string,\r\n selectedType: any\r\n ) => {\r\n setCompanySettingTypeTextValue(data);\r\n\r\n setSelectedType(selectedType);\r\n\r\n const valueOptions =\r\n await companySettingTypeService.GetSettingTypeValueOptionsPerType(\r\n selectedType?.id\r\n );\r\n setValueOptionTypes(valueOptions);\r\n };\r\n\r\n const onSubmit = async (e: React.MouseEvent) => {\r\n let auditCreateModel: CompanySettingsAuditCreateModel = {\r\n companyId: companyId,\r\n creationDate: date,\r\n companySettingTypeId: selectedType?.id,\r\n caseNumber: caseNumber || \"\",\r\n status: CompanySettingsStatus.Active,\r\n userId: userStore.User!.id,\r\n value: selectedValueOption,\r\n comment: comment,\r\n };\r\n\r\n try {\r\n if (companySettingStore.updateOperationState) {\r\n const updatedAudit =\r\n await CompanySettingAuditService.UpdateCompanySettingsAudit(\r\n companyAuditId,\r\n auditCreateModel\r\n );\r\n message.success(\"Company setting audit updated successfully\");\r\n } else {\r\n const createdAudit =\r\n await CompanySettingAuditService.CreateCompanySettingsAudit(\r\n auditCreateModel\r\n );\r\n message.success(\"Company setting audit created successfully\");\r\n }\r\n\r\n history.push(\r\n RoutesPaths.Supervision.CompanyTrackSystemRoutes.BuildCompanyRoute(\r\n companyId\r\n )\r\n );\r\n } catch (error) {\r\n if (error instanceof FetchError) {\r\n message.error(\"Company setting audit is not created\");\r\n }\r\n }\r\n\r\n cleanUpState();\r\n };\r\n\r\n const cleanUpState = () => {\r\n setCaseNumber(\"\");\r\n setComment(\"\");\r\n setSelectedValueOption(\"\");\r\n setDate(moment(Date.now()));\r\n setSelectedType(undefined);\r\n setCompanySettingTypeTextValue(\"\");\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n {companySettingStore.updateOperationState ? (\r\n Edit Audit\r\n ) : (\r\n Create Audit\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n \r\n option!.value\r\n ?.toUpperCase()\r\n .indexOf(inputValue.toUpperCase()) !== -1\r\n }\r\n placeholder=\"Choose audit criterion\"\r\n />\r\n }\r\n \r\n \r\n \r\n \r\n ({\r\n value: x.valueOption,\r\n }))}\r\n onSelect={(data: string) => {\r\n setSelectedValueOption(data);\r\n }}\r\n onSearch={(data: string) => setSelectedValueOption(data)}\r\n filterOption={(inputValue, option) =>\r\n option!.value\r\n ?.toUpperCase()\r\n .indexOf(inputValue.toUpperCase()) !== -1\r\n }\r\n allowClear={true}\r\n placeholder=\"Choose value\"\r\n value={selectedValueOption}\r\n />\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {\r\n setDate(dateInput);\r\n }}\r\n />\r\n {\r\n setDate(time);\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n setCaseNumber(e.target.value)}\r\n value={caseNumber}\r\n placeholder=\"123456\"\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n setComment(e.target.value)}\r\n value={comment}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(AuditCompanyForm);\r\n","import { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport AuditCompanyForm from \"../../../components/company-track-system/AuditCompanyForm\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport CompanySettingBreadCrumbs from \"./helpers/CompanySetting.breadcrumbs\";\r\nimport { CompanySettingContextInitializers } from \"./helpers/CompanySettingContextInitializers\";\r\n\r\nconst CompanyTrackEditAuditPage = () => {\r\n const { companySettingStore } = useContext(RootStoreContext);\r\n const match = useParams<{ companyId: string; auditId: string }>();\r\n const history = useHistory();\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n await CompanySettingContextInitializers.InitializeCompanyAuditData(\r\n Number(match.companyId),\r\n companySettingStore,\r\n history\r\n );\r\n\r\n await CompanySettingContextInitializers.InitializeCompanySettingTypes(\r\n companySettingStore,\r\n history\r\n );\r\n\r\n await CompanySettingContextInitializers.InitializeSelectedCompanySettingAudit(\r\n match.auditId,\r\n companySettingStore,\r\n history\r\n ).then(\r\n async () => await companySettingStore.SetupdateOperationState(true)\r\n );\r\n },\r\n\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n uiStore.SetPageTitle(`Company Audits for: ${company.companyName}`);\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n CompanySettingBreadCrumbs.CompanySetting(company.companyId),\r\n CompanySettingBreadCrumbs.EditCompanySettingAudit(\r\n company.companyId,\r\n match.auditId\r\n )\r\n );\r\n },\r\n });\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(CompanyTrackEditAuditPage);\r\n","import { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport AuditCompanyForm from \"../../../components/company-track-system/AuditCompanyForm\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport CompanySettingBreadCrumbs from \"./helpers/CompanySetting.breadcrumbs\";\r\nimport { CompanySettingContextInitializers } from \"./helpers/CompanySettingContextInitializers\";\r\n\r\nconst CompanyTrackAddAuditPage = () => {\r\n const { companySettingStore } = useContext(RootStoreContext);\r\n const match = useParams<{ companyId: string; companyAuditId: string }>();\r\n const history = useHistory();\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n await CompanySettingContextInitializers.InitializeCompanySettingTypes(\r\n companySettingStore,\r\n history\r\n ).then(\r\n async () => await companySettingStore.SetupdateOperationState(false)\r\n );\r\n },\r\n\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n uiStore.SetPageTitle(`Company Audits for: ${company.companyName}`);\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n CompanySettingBreadCrumbs.CompanySetting(company.companyId),\r\n CompanySettingBreadCrumbs.AddCompanySettingAudit(company.companyId)\r\n );\r\n },\r\n });\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(CompanyTrackAddAuditPage);\r\n","import { ActionsBuilder } from \"../../general/supervision-table/types\";\r\nimport { AffiliateTableDto } from \"./AffiliateTable.dto\";\r\nimport { History } from \"history\";\r\nimport { RoutesPaths } from \"../../../constants/RoutePaths\";\r\nimport { IoMdCut } from \"react-icons/io\";\r\n\r\n\r\n\r\ntype AffiliatesTableActionsContext = {\r\n history: History;\r\n}\r\n\r\nexport const AffiliatesTableActionsBuilder: ActionsBuilder =\r\n ({ history }) => [\r\n {\r\n text: \"Vendor Management\",\r\n action: (affiliate) => {\r\n if (!history) {\r\n throw new Error(\"history doesn't exist in context... Can't perform redirect\");\r\n }\r\n\r\n history.push(\r\n RoutesPaths.Supervision.VendorManagementRoutes.BuildAffiliateVendorManagementRoute(affiliate.affiliateId)\r\n\r\n );\r\n },\r\n Icon: IoMdCut,\r\n isDisplayed: () => true\r\n }\r\n ]","import { Affiliate } from \"../../../models/operation/Affiliate\";\r\nimport { TableDto } from \"../../general/supervision-table/Table.dto\";\r\n\r\n\r\n\r\nexport class AffiliateTableDto extends TableDto {\r\n\r\n public affiliateId: number;\r\n public affiliateName: string;\r\n\r\n constructor(affiliate: Affiliate) {\r\n super();\r\n this._id = affiliate.affiliateId;\r\n this.affiliateId = affiliate.affiliateId;\r\n this.affiliateName = affiliate.affiliateName;\r\n }\r\n\r\n\r\n}","import { Empty } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { useContext, useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Affiliate } from \"../../../models/operation/Affiliate\";\r\nimport { Company } from \"../../../models/operation/Company\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { DOMCoordinates } from \"../../../types/types\";\r\nimport Loader from \"../../general/loader/Loader\";\r\nimport SupervisionTable from \"../../general/supervision-table/SupervisionTable\";\r\nimport { CompaniesTableActionsBuilder } from \"../companies/CompaniesTable.actions\";\r\nimport { CompanyTableDto, CompanyTableDtoExpand } from \"../companies/CompanyTable.dto\";\r\nimport { AffiliatesTableActionsBuilder } from \"./AffiliatesTable.action\";\r\nimport { AffiliateTableDto } from \"./AffiliateTable.dto\";\r\n\r\nexport type RightClickData = {\r\n clickCoordinates: DOMCoordinates;\r\n clickedCompany: AffiliateTableDto;\r\n rowIndex: number;\r\n};\r\n\r\ninterface Props { }\r\n\r\nconst AffiliatesTable = (props: Props) => {\r\n\r\n const history = useHistory();\r\n\r\n const { affiliateStore } = useContext(RootStoreContext);\r\n\r\n const [affiliates, setAffiliates] = useState(undefined);\r\n const [selectedRowKeys, setSelectedRowKeys] = useState([affiliateStore.SelectedAffiliate?.affiliateId]);\r\n const [companies, setCompanies] = useState(\r\n undefined\r\n );\r\n\r\n useEffect(() => {\r\n SortAffiliates();\r\n setAffiliates(affiliateStore.allAffiliates);\r\n var companiesFlat = affiliateStore.allAffiliates?.flatMap(affiliates => affiliates.companies);\r\n setCompanies(companiesFlat);\r\n\r\n }, [affiliateStore.allAffiliates])\r\n\r\n const SortAffiliates = () => {\r\n affiliateStore.allAffiliates = affiliateStore.allAffiliates.sort((a, b) => {\r\n if (a.affiliateId == affiliateStore.SelectedAffiliate?.affiliateId) {\r\n return -1;\r\n } else if (b.affiliateId == affiliateStore.SelectedAffiliate?.affiliateId) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n }\r\n\r\n if (affiliates == undefined) {\r\n return ;\r\n }\r\n\r\n if (affiliates.length == 0) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n const rowSelection = {\r\n selectedRowKeys,\r\n hideSelectAll: true,\r\n renderCell: (originNode: any, record: any) => {\r\n return rowSelection.onSelect(record)}>Select;\r\n },\r\n onSelect: (record: any) => {\r\n const affiliate = affiliates.find(c => c.affiliateId == record.affiliateId);\r\n\r\n if (affiliate != undefined) {\r\n affiliateStore.SetSelectedAffiliate(affiliate);\r\n }\r\n setSelectedRowKeys([record.key]);\r\n }\r\n };\r\n\r\n return (\r\n new AffiliateTableDto(aff))}\r\n rowActionSettings={{\r\n actions: AffiliatesTableActionsBuilder({\r\n history: history\r\n }),\r\n showActionsOnRightClick: true,\r\n showActionsOnLastColumn: true,\r\n }}\r\n expandableDataSource={companies?.map((c) => new CompanyTableDtoExpand(c))}\r\n tableRowSelection={rowSelection}\r\n isExpendable={true}\r\n expandableActionSettings={{\r\n actions: CompaniesTableActionsBuilder({ history: history }),\r\n showActionsOnRightClick: true,\r\n showActionsOnLastColumn: true,\r\n }} />\r\n );\r\n\r\n}\r\n\r\nexport default observer(AffiliatesTable);","import { Box } from \"@material-ui/core\";\r\nimport { useContext, useEffect, useState } from \"react\";\r\nimport AffiliateSelectInput from \"../../../components/supervision/affiliates/AffiliateSelectInput\";\r\nimport AffiliatesTable from \"../../../components/supervision/affiliates/AffiliatesTable\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { Affiliate } from \"../../../models/operation/Affiliate\";\r\nimport affiliateService from \"../../../services/affiliates/AffiliateService\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { observer } from \"mobx-react-lite\";\r\n\r\n\r\ninterface Props { }\r\n\r\n\r\n\r\nconst AffiliatesContainer = (props: Props) => {\r\n const { affiliateStore, uiStore } = useContext(RootStoreContext);\r\n //const [allAffiliate, setAllAffiliates] = useState();\r\n const [title, setTitle] = useState(affiliateStore.SelectedAffiliate?.affiliateName ?? \"\");\r\n\r\n useEffect(() => {\r\n if (affiliateStore.SelectedAffiliate != undefined) {\r\n\r\n setTitle(affiliateStore.SelectedAffiliate.affiliateName)\r\n uiStore.SetPageTitle(`Algo Supervision - Affiliates (${affiliateStore.SelectedAffiliate?.affiliateName})`)\r\n\r\n }\r\n }, [affiliateStore.SelectedAffiliate]);\r\n\r\n\r\n usePageInitialization({\r\n pageTitle: `Algo Supervision - Affiliates (${title})`,\r\n\r\n onInitAsync: async () => {\r\n const affiliates = await affiliateService.GetAffiliates();\r\n await affiliateStore.SetAllAffiliates(affiliates);\r\n\r\n }\r\n })\r\n\r\n\r\n return (\r\n
\r\n {/* \r\n \r\n */}\r\n \r\n\r\n
\r\n );\r\n\r\n}\r\n\r\n\r\nexport default observer(AffiliatesContainer);","import { JobState } from \"../../models/explainability/JobState\";\r\nimport { ISODateTime } from \"../../types/types\";\r\nimport { TableDto } from \"../general/supervision-table/Table.dto\";\r\n\r\n\r\n\r\nexport class JobStateDto extends TableDto \r\n{\r\n public job_id?: number;\r\n public is_distributed?: string;\r\n public reason_name?: string;\r\n public user_name?: string;\r\n public last_modified?: ISODateTime\r\n\r\n\r\n \r\n constructor(jobState?: JobState)\r\n {\r\n super();\r\n this.job_id = jobState?.job_id;\r\n this.user_name = jobState?.user_name;\r\n this.last_modified = jobState?.last_modified;\r\n this.reason_name = jobState?.reason_name;\r\n this.is_distributed = jobState?.is_distributed;\r\n\r\n }\r\n \r\n\r\n\r\n\r\n}","import { JobVendorState } from \"../../models/explainability/JobVendorState\";\r\nimport { ISODateTime } from \"../../types/types\";\r\nimport { TableDto } from \"../general/supervision-table/Table.dto\";\r\n\r\nexport class JobVendorStateDto extends TableDto \r\n{\r\n public job_id?: number;\r\n public vendor_id?: number;\r\n public vendor_name?: string;\r\n public is_cut_off?: string;\r\n public reason_name?: string;\r\n public user_name?: string;\r\n public last_modified?: ISODateTime\r\n\r\n\r\n constructor(jobVendorState?: JobVendorState)\r\n {\r\n super();\r\n this.job_id = jobVendorState?.job_id;\r\n this.user_name = jobVendorState?.user_name;\r\n this.last_modified = jobVendorState?.last_modified;\r\n this.is_cut_off = jobVendorState?.is_cut_off;\r\n this.reason_name = jobVendorState?.reason_name;\r\n this.vendor_id = jobVendorState?.vendor_id;\r\n this.vendor_name = jobVendorState?.vendor_name;\r\n\r\n }\r\n \r\n\r\n\r\n\r\n}","\r\nexport enum JobSerachingType {\r\n JobState = 1,\r\n JobVendorState = 2\r\n}","import { observer } from \"mobx-react-lite\"\r\nimport SupervisionTable from \"../general/supervision-table/SupervisionTable\"\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { useContext, useEffect, useState } from \"react\";\r\nimport { JobState } from \"../../models/explainability/JobState\";\r\nimport { JobStateDto } from \"./JobState.dto\";\r\nimport Loader from \"../general/loader/Loader\";\r\nimport useOnInitAsync from \"../../hooks/useOnInitAsync\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport { JobVendorState } from \"../../models/explainability/JobVendorState\";\r\nimport { JobBase } from \"../../models/explainability/JobBase\";\r\nimport { JobVendorStateDto } from \"./JobVendorState.dto\";\r\nimport { JobSerachingType } from \"../../models/explainability/JobSerachingType\";\r\nimport { Empty, Spin } from \"antd\";\r\n\r\ninterface Props {\r\n isLoading : boolean;\r\n }\r\n\r\nconst ExplainabilityTable = (props: Props) => {\r\n\r\n const { explainabilityStore } = useContext(RootStoreContext);\r\n const [jobs, setJobs] = useState([]);\r\n\r\n const jobDtos = jobs.map(job => {\r\n if (explainabilityStore.SelectedJobSerachingType == JobSerachingType.JobVendorState) {\r\n return new JobVendorStateDto(job as JobVendorState);\r\n }\r\n return new JobStateDto(job as JobState);\r\n });\r\n\r\n useEffect(() => {\r\n setJobs(explainabilityStore.JobsState);\r\n }, [explainabilityStore.JobsState])\r\n\r\n if (props.isLoading) {\r\n return ;\r\n }\r\n \r\n if (!jobDtos || jobDtos.length == 0) {\r\n return \r\n }\r\n\r\n\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\n\r\nexport default observer(ExplainabilityTable)","import { Col, Row, Select, Space, Typography } from \"antd\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\n\r\nimport { spacingUnit } from \"../../../assets/styles/theme\";\r\nimport useOnInitAsync from \"../../../hooks/useOnInitAsync\";\r\nimport { CampaignPartial } from \"../../../models/operation/CampaignPartial\";\r\nimport { Company } from \"../../../models/operation/Company\";\r\nimport campaignService from \"../../../services/operation/CampaignService\";\r\nimport companyService from \"../../../services/operation/CompanyService\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport Loader from \"../../general/loader/Loader\";\r\n\r\nconst { Option } = Select;\r\n\r\ninterface Props {\r\n width?: string; // Define the width prop\r\n mode?: \"multiple\" | undefined;\r\n onChange?: (selectedOptionValues: string[]) => void;\r\n defaulatValueCompanies: Company[];\r\n}\r\n\r\nconst CompanySelectInput = (props: Props) => {\r\n const [options, setOptions] = useState();\r\n const { width } = props;\r\n\r\n useOnInitAsync(async () => {\r\n const companies = await companyService.GetCompaniesWithActiveCampaigns();\r\n setOptions(companies);\r\n });\r\n\r\n if (!options || options.length == 0) {\r\n return ;\r\n }\r\n\r\n const defaultValue =\r\n props.defaulatValueCompanies?.length > 0\r\n ? props.defaulatValueCompanies?.map((company) =>\r\n BuildOptionValue(company.companyName, company.companyId)\r\n )\r\n : [];\r\n\r\n return (\r\n
\r\n \r\n \r\n {options.map((company) => (\r\n \r\n {company.companyName} - {company.companyId}\r\n \r\n ))}\r\n \r\n
\r\n\r\n );\r\n};\r\n\r\nexport default CompanySelectInput;\r\n\r\nconst separator = \"##\";\r\n\r\nconst BuildOptionValue = (companyName: string, companyId: number) => {\r\n return `${companyName}${separator}${companyId}`;\r\n};\r\n","import axios from \"axios\";\r\nimport settings from \"../../config/AppSettings/SettingsFactory\";\r\nimport { JobState } from \"../../models/explainability/JobState\";\r\nimport { BaseService } from \"../BaseService\";\r\nimport { JobVendorState } from \"../../models/explainability/JobVendorState\";\r\nimport { ActiveJob } from \"../../models/explainability/ActiveJob\";\r\n\r\n\r\n\r\n\r\nexport class JobsStateService extends BaseService {\r\n\r\n async getJobStateByCompanyId(account_id: number): Promise {\r\n const jobsStateByAccountId = await this.Get(`/JobStatebyAccount/${account_id}`);\r\n return jobsStateByAccountId;\r\n }\r\n\r\n async getJobStateByJobsIds(jobs_lst: number[]): Promise {\r\n const jobsStateByJobIds = await this.Post(`/JobStatebyJob`, jobs_lst);\r\n return jobsStateByJobIds;\r\n }\r\n\r\n async getAciveJobByAccount(account_id: number): Promise {\r\n const activeJobs = await this.Get(`/AccountJobs/${account_id}`);\r\n return activeJobs;\r\n }\r\n \r\n}\r\n\r\n\r\nconst jobsStateService = new JobsStateService(\"Job\", settings.explainabilityServiceUrl);\r\nexport default jobsStateService;\r\n","import { useContext, useState } from \"react\";\r\nimport { Select, Space, Typography } from \"antd\";\r\nimport { JobState } from \"../../models/explainability/JobState\";\r\nimport useOnInitAsync from \"../../hooks/useOnInitAsync\";\r\nimport explainabilityService from \"../../services/explainability/ExplainabilityService\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport Loader from \"../general/loader/Loader\";\r\nimport { spacingUnit } from \"../../assets/styles/theme\";\r\nimport jobService from \"../../services/operation/JobService\";\r\nimport { Job } from \"../../models/operation/Job\";\r\nimport jobsStateService from \"../../services/explainability/JobsStateService\";\r\nimport { ActiveJob } from \"../../models/explainability/ActiveJob\";\r\n\r\nconst { Option } = Select;\r\n\r\ninterface Props {\r\n companyId?: number;\r\n}\r\n\r\nconst JobSelectInput = (props: Props) => {\r\n const [options, setOptions] = useState([]);\r\n const { explainabilityStore } = useContext(RootStoreContext);\r\n\r\n useOnInitAsync(async () => {\r\n\r\n if (props.companyId != undefined) {\r\n const jobs = await jobsStateService.getAciveJobByAccount(props.companyId); /*await jobService.GetJobsByCompanyIdPagination(props.companyId, {\r\n limit: 1000,\r\n offset: 0,\r\n })*/\r\n setOptions(jobs)\r\n }\r\n\r\n }, [explainabilityStore.SelectedCompany]);\r\n\r\n return (\r\n
\r\n {\r\n const jobsIds = selectedOptionValues.map(\r\n (jobState) => ParsejobId(jobState)\r\n );\r\n explainabilityStore.SetSearchedJobsIds(jobsIds);\r\n }}>\r\n {options.map((jobState) => (\r\n \r\n {jobState.job_id}\r\n \r\n ))}\r\n \r\n
\r\n );\r\n};\r\n\r\nconst ParsejobId = (JobId: string) => {\r\n return Number(JobId);\r\n};\r\n\r\nexport default JobSelectInput;","import { Col, Row, Select, Space, Typography } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport { spacingUnit } from \"../../assets/styles/theme\";\r\nimport { EntityVendorResponse } from \"../../models/vendor-management/EntityVendorResponse\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport { Vendor } from \"../../models/explainability/Vendor\";\r\nimport { JobSerachingType } from \"../../models/explainability/JobSerachingType\";\r\n\r\n\r\nconst { Option } = Select;\r\n\r\ninterface Props {\r\n vendors: Vendor[]\r\n}\r\n\r\n\r\nconst VendorSelect = (props: Props) => {\r\n const { vendors } = props;\r\n const [defaultValue, setdefaultValue] = useState();\r\n const { explainabilityStore } = useContext(RootStoreContext);\r\n const [filterValue, setFilterValue] = useState('');\r\n const [filteredOptions, setFilteredOptions] = useState([]);\r\n\r\n\r\n useEffect(() => {\r\n const defaultValue = explainabilityStore.SearchedVendors\r\n .map((vendor) =>\r\n BuildOptionValue(vendor.vendor_name, vendor.vendor_id)) ;\r\n\r\n setdefaultValue(defaultValue);\r\n setFilteredOptions(filteredOptions.length ? filteredOptions : vendors);\r\n\r\n }, [explainabilityStore.SearchedVendors]);\r\n\r\n\r\n const handleFilter = (inputValue: string) => {\r\n setFilterValue(inputValue);\r\n const filtered = vendors.filter(\r\n (vendor) =>\r\n vendor.vendor_name.toLowerCase().includes(inputValue.toLowerCase()) ||\r\n vendor.vendor_id.toString().includes(inputValue)\r\n );\r\n setFilteredOptions(filtered);\r\n };\r\n\r\n const handleBlur = () => {\r\n setFilteredOptions(vendors)\r\n };\r\n /*if (!entityVendors || entityVendors.length == 0 ||\r\n !vendorManagementStore.SearchedVendors ||vendorManagementStore.SearchedVendors.length == 0) {\r\n return ;\r\n }*/\r\n\r\n return (\r\n
\r\n {\r\n const vendoIds = selectedOptionValues.map(\r\n (vendor) => ParseVendorId(vendor)\r\n );\r\n explainabilityStore.SetSearchedVendors(vendoIds);\r\n }}>\r\n {filteredOptions.map((vendorsPartial) => (\r\n \r\n {vendorsPartial.vendor_name} - {vendorsPartial.vendor_id}\r\n \r\n ))}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(VendorSelect);\r\n\r\nconst separator = \"##\";\r\n\r\nconst BuildOptionValue = (vendorName: string, vendorId: number) => {\r\n return `${vendorName}${separator}${vendorId}`;\r\n};\r\n\r\nconst ParseVendorId = (vendor: string) => {\r\n return Number(vendor.split(separator)[1]);\r\n};","import settings from \"../../config/AppSettings/SettingsFactory\";\r\nimport { JobState } from \"../../models/explainability/JobState\";\r\nimport { Vendor } from \"../../models/explainability/Vendor\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\n\r\n\r\nexport class ExplainabilityService extends BaseService {\r\n\r\n\r\n async getJobStateByIds(GetManyByIdsRequest: { ids: number[] }) {\r\n const jobStateData = await this.Post(\"/get-multiple-by-ids\", GetManyByIdsRequest);\r\n return jobStateData;\r\n }\r\n\r\n async getAllVendors()\r\n {\r\n const vendors = await this.Get(`/AllVendors`);\r\n return vendors;\r\n }\r\n\r\n}\r\n\r\n\r\nconst explainabilityService = new ExplainabilityService(\"Vendor\", settings.explainabilityServiceUrl);\r\nexport default explainabilityService;","import settings from \"../../config/AppSettings/SettingsFactory\";\r\nimport { JobVendorState } from \"../../models/explainability/JobVendorState\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\nexport class JobVendorStateService extends BaseService {\r\n\r\n\r\n async getJobVendorStateByCompanyId(account_id: number): Promise {\r\n const jobsStateVendorByAccountId = await this.Get(`/JobVendorStateByAccount/${account_id}`);\r\n return jobsStateVendorByAccountId;\r\n }\r\n\r\n async getJobVendorStateByJobsIds(account_id: number, jobs_lst: number[], vendors_id_lst: number[]): Promise {\r\n const data = {\r\n jobs_lst: jobs_lst,\r\n vendors_id_lst: vendors_id_lst,\r\n };\r\n const jobsStateVendorByJobIds = await this.Post(`/JobVendorStateByJobIds/${account_id}`, data);\r\n return jobsStateVendorByJobIds;\r\n }\r\n\r\n\r\n}\r\n\r\nconst jobVendorStateService = new JobVendorStateService(\"JobVendor\", settings.explainabilityServiceUrl);\r\nexport default jobVendorStateService;","import { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport { JobSerachingType } from \"../../models/explainability/JobSerachingType\";\r\nimport jobVendorStateService from \"../../services/explainability/JobVendorStateService\";\r\nimport jobsStateService from \"../../services/explainability/JobsStateService\";\r\nimport { Button, Space } from \"antd\";\r\n\r\ninterface Props {\r\n isLoading : boolean;\r\n setLoding: (isLoading : boolean) => void;\r\n }\r\n\r\n\r\nconst SearchJobState = (props: Props) => {\r\n\r\n const { explainabilityStore } = useContext(RootStoreContext);\r\n const { SelectedJobSerachingType, SelectedCompany } = explainabilityStore\r\n const companyId = SelectedCompany ? SelectedCompany.companyId : undefined;\r\n\r\n const onClick = async () => {\r\n if (companyId == undefined) {\r\n return;\r\n }\r\n props.setLoding(true);\r\n if (SelectedJobSerachingType == JobSerachingType.JobVendorState) {\r\n if (explainabilityStore.SearchedJobs.length > 0 || explainabilityStore.SearchedVendors.length > 0) {\r\n let vendors_ids = explainabilityStore.SearchedVendors.map( v => v.vendor_id)\r\n let jobsStateVendorByJobIds = await jobVendorStateService\r\n .getJobVendorStateByJobsIds(companyId, explainabilityStore.SearchedJobs, vendors_ids)\r\n explainabilityStore.JobsState = jobsStateVendorByJobIds;\r\n }\r\n else {// get all\r\n let jobsStateVendorByAccountId = await jobVendorStateService.getJobVendorStateByCompanyId(companyId);\r\n explainabilityStore.JobsState = jobsStateVendorByAccountId;\r\n }\r\n\r\n }\r\n else {\r\n if (explainabilityStore.SearchedJobs.length > 0) {\r\n let jobsStateByAccountId = await jobsStateService\r\n .getJobStateByJobsIds(explainabilityStore.SearchedJobs);\r\n explainabilityStore.JobsState = jobsStateByAccountId;\r\n }\r\n else {// get all \r\n let jobsStateByAccountId = await jobsStateService.getJobStateByCompanyId(companyId);\r\n explainabilityStore.JobsState = jobsStateByAccountId;\r\n }\r\n\r\n }\r\n props.setLoding(false);\r\n }\r\n\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\n\r\nexport default observer(SearchJobState);","import { Box } from \"@material-ui/core\";\r\nimport { observer } from \"mobx-react-lite\"\r\nimport ExplainabilityTable from \"../../../components/explainability/ExplainabilityTable\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport { Button, Col, Row, Select, Space, Typography } from \"antd\";\r\nimport { spacingUnit } from \"../../../assets/styles/theme\";\r\nimport CompanySelectInput from \"../../../components/supervision/companies/CompanySelectInput\";\r\nimport JobSelectInput from \"../../../components/explainability/JobSelectInput\";\r\nimport { useContext, useState } from \"react\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport VendorSelect from \"../../../components/explainability/VendorSelect\";\r\nimport explainabilityService from \"../../../services/explainability/ExplainabilityService\";\r\nimport { JobSerachingType } from \"../../../models/explainability/JobSerachingType\";\r\nimport SearchJobState from \"../../../components/explainability/SearchJobState\";\r\n\r\n\r\nconst { Option } = Select;\r\n\r\nconst ExplainabilityMainPage = () => {\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n const { explainabilityStore } = useContext(RootStoreContext);\r\n const { SelectedCompany } = explainabilityStore\r\n const companyId = SelectedCompany ? SelectedCompany.companyId : undefined;\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n explainabilityStore.AllVendors = await explainabilityService.getAllVendors();\r\n }\r\n })\r\n\r\n const onChange = (selectedCompany: any) => {\r\n if (selectedCompany != undefined) {\r\n let companyId = ParseCompanyId(selectedCompany)\r\n explainabilityStore.SetSearchedCompany(companyId);\r\n }\r\n }\r\n\r\n const ParseCompanyId = (company: string) => {\r\n const separator = \"##\";\r\n return Number(company.split(separator)[1]);\r\n };\r\n\r\n const handleSelectChange = (value: JobSerachingType) => {\r\n explainabilityStore.JobsState = []\r\n explainabilityStore.SelectedJobSerachingType = value\r\n };\r\n\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\n\r\nexport default observer(ExplainabilityMainPage)","export enum EAppGoalMode {\r\n NoStop = 0,\r\n Stop = 1,\r\n Minimal = 2,\r\n\r\n}","export enum EPacingMode {\r\n None = 0,\r\n Paced = 1,\r\n Accelerated = 2,\r\n\r\n}\r\n","import React, { useContext, useEffect } from 'react';\r\nimport {\r\n StyledCheckbox, StyledContainer, StyledGroupWrapper,\r\n StyledColumnGroupWrapper, StyledInputLabel,\r\n StyledInputNumberWrapper, StyledTitle, StyledColumnGroupToTopWrapper\r\n} from './Styles';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { RootStoreContext } from '../../stores/RootStoreContext';\r\n\r\n\r\n\r\nconst Caps = () => {\r\n\r\n const { attributesManagementStore } = useContext(RootStoreContext);\r\n const { CompanyAttributesAggregation } = attributesManagementStore;\r\n const { allVendorsCap, indeedCap, craiglistBudget } = CompanyAttributesAggregation;\r\n\r\n\r\n useEffect(() => {\r\n\r\n }, [CompanyAttributesAggregation.allVendorsCap,\r\n CompanyAttributesAggregation.indeedCap,\r\n CompanyAttributesAggregation.craiglistBudget,]);\r\n\r\n\r\n const onChangeAllVendorsCap = (value: any) => {\r\n if (allVendorsCap) {\r\n allVendorsCap.cap = value;\r\n attributesManagementStore.onChangeAttribute(allVendorsCap);\r\n }\r\n }\r\n\r\n const onIsOriginalsOnlyAllVendors = () => {\r\n if (allVendorsCap) {\r\n allVendorsCap.isOriginalsOnly = !allVendorsCap.isOriginalsOnly;\r\n attributesManagementStore.onChangeAttribute(allVendorsCap);\r\n }\r\n }\r\n\r\n const onChangeIndeedCap = (value: any) => {\r\n if (indeedCap) {\r\n indeedCap.cap = value;\r\n attributesManagementStore.onChangeAttribute(indeedCap);\r\n }\r\n }\r\n\r\n const onIsOriginalsOnly = () => {\r\n if (indeedCap) {\r\n indeedCap.isOriginalsOnly = !indeedCap.isOriginalsOnly;\r\n attributesManagementStore.onChangeAttribute(indeedCap);\r\n }\r\n }\r\n ///\r\n\r\n const onChangeCraiglistCap = (value: any) => {\r\n if (craiglistBudget) {\r\n craiglistBudget.budget = value;\r\n attributesManagementStore.onChangeAttribute(craiglistBudget);\r\n }\r\n }\r\n\r\n\r\n return (\r\n\r\n \r\n Carousel Cap\r\n \r\n \r\n All Vendors\r\n \r\n Original Only\r\n \r\n \r\n Indeed\r\n \r\n Original Only\r\n \r\n \r\n CraigsList budget\r\n \r\n \r\n \r\n\r\n \r\n\r\n );\r\n};\r\n\r\nexport default observer(Caps);\r\n","import React, { useContext, useEffect } from 'react';\r\nimport { Typography, Switch, Select, Radio, Tooltip } from 'antd';\r\nimport { EAppGoalMode } from '../../models/company-attributes/attributes-types/EAppGoalMode';\r\nimport { EPacingMode } from '../../models/company-attributes/attributes-types/EPacingMode';\r\nimport {\r\n StyledCheckbox,\r\n StyledColumnGroupWrapper, StyledContainer, StyledHeader, StyledInputGroupWrapper, StyledInputLabel, StyledInputNumberWrapper,\r\n StyledModeWrapper, StyledSubSection, StyledTitle,\r\n StyledToggleWrapper\r\n} from './Styles';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { RootStoreContext } from '../../stores/RootStoreContext';\r\nimport Caps from './Caps';\r\n\r\nconst { Option } = Select;\r\n\r\n\r\n\r\nconst AlgoModes = () => {\r\n\r\n const { attributesManagementStore } = useContext(RootStoreContext);\r\n const { CompanyAttributesAggregation, CompanyProfile } = attributesManagementStore;\r\n const { pacingMode, reachAppGoalMode,\r\n manualDistribution, agencyMode,\r\n holdback, expressWay, autoPilot,avoidSoftLaunchJobsCarouselCAP } = CompanyAttributesAggregation;\r\n\r\n\r\n\r\n useEffect(() => {\r\n\r\n }, [CompanyAttributesAggregation,\r\n CompanyAttributesAggregation.pacingMode,\r\n CompanyAttributesAggregation.reachAppGoalMode,\r\n CompanyAttributesAggregation.manualDistribution,\r\n CompanyAttributesAggregation.agencyMode,\r\n CompanyAttributesAggregation.expressWay,\r\n CompanyAttributesAggregation.autoPilot,\r\n CompanyAttributesAggregation.avoidSoftLaunchJobsCarouselCAP,\r\n CompanyProfile]);\r\n\r\n const onChangePacingMode = (e: any) => {\r\n\r\n if (e.target.value == EPacingMode.Accelerated && holdback?.isHoldback) {\r\n return;\r\n }\r\n\r\n if (pacingMode) {\r\n pacingMode.pacingModeType = e.target.value;\r\n attributesManagementStore.onChangeAttribute(pacingMode);\r\n }\r\n };\r\n\r\n const onChangeReachAppGoalMode = (value: EAppGoalMode) => {\r\n if (reachAppGoalMode) {\r\n reachAppGoalMode.appGoalMode = value;\r\n attributesManagementStore.onChangeAttribute(reachAppGoalMode);\r\n }\r\n };\r\n\r\n const onChangeManualDistribution = () => {\r\n if (manualDistribution) {\r\n let isStopDistribution = manualDistribution.stopDistribution;\r\n manualDistribution.stopDistribution = !isStopDistribution;\r\n attributesManagementStore.onChangeAttribute(manualDistribution);\r\n }\r\n };\r\n\r\n const onChangeAgencyModeNumberOfDays = (value: any) => {\r\n if (agencyMode) {\r\n agencyMode.cap = value;\r\n attributesManagementStore.onChangeAttribute(agencyMode);\r\n }\r\n };\r\n\r\n const onIsHoldback = () => {\r\n if (holdback && pacingMode?.pacingModeType != EPacingMode.Accelerated) {\r\n holdback.isHoldback = !holdback.isHoldback;\r\n attributesManagementStore.onChangeAttribute(holdback);\r\n }\r\n }\r\n\r\n const onIsExpressWay = () => {\r\n if (expressWay) {\r\n expressWay.isExpressWay = !expressWay.isExpressWay;\r\n attributesManagementStore.onChangeAttribute(expressWay);\r\n }\r\n }\r\n\r\n const onIsAutoPilot = () => {\r\n if (autoPilot) {\r\n autoPilot.isAutoPilot = !autoPilot.isAutoPilot;\r\n attributesManagementStore.onChangeAttribute(autoPilot);\r\n }\r\n }\r\n\r\n const onIsAvoidSoft = () => {\r\n if (avoidSoftLaunchJobsCarouselCAP) {\r\n avoidSoftLaunchJobsCarouselCAP.isAvoidSoftLaunchJobsCarouselCAP = !avoidSoftLaunchJobsCarouselCAP.isAvoidSoftLaunchJobsCarouselCAP;\r\n attributesManagementStore.onChangeAttribute(avoidSoftLaunchJobsCarouselCAP);\r\n }\r\n }\r\n\r\n return (\r\n \r\n Algo strategy\r\n \r\n Modes\r\n \r\n Pacing\r\n \r\n \r\n Accelerated\r\n \r\n Paced\r\n \r\n \r\n \r\n Bidding\r\n \r\n HoldBack\r\n \r\n \r\n \r\n \r\n Agency\r\n \r\n \r\n Days\r\n \r\n \r\n \r\n Reach app goal mode\r\n \r\n \r\n \r\n \r\n Stop distribution\r\n \r\n Off\r\n \r\n On\r\n \r\n Additional functionality\r\n \r\n \r\n Is AutoPilot\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n );\r\n};\r\n\r\nexport default observer(AlgoModes);\r\n","import settings from \"../../config/AppSettings/SettingsFactory\";\r\nimport { CompanyAttributesAggregation } from \"../../models/company-attributes/CompanyAttributesAggregation\";\r\nimport { CompanyPreferenceDto } from \"../../models/company-attributes/CompanyPreferenceDto\";\r\nimport { CustomerCampaignAttributesAggregation } from \"../../models/company-attributes/CustomerCampaignAttributesAggregation\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\n\r\n\r\n\r\nexport class CompanyAttributesService extends BaseService {\r\n\r\n async getAllAsync(companyId: number) {\r\n const companyAttributesdata = await this.Get(`/${companyId}`);\r\n return companyAttributesdata;\r\n }\r\n\r\n async setCompanysAttributes(companyAttributes: CompanyAttributesAggregation) {\r\n const companyAttributesdata = await this.Post(``, companyAttributes);\r\n return companyAttributesdata;\r\n }\r\n\r\n async getCustomerRequestsAsync(companyId: number) {\r\n const companyAttributesdata = await this.Get(`/customer-campaign-attributes/${companyId}`);\r\n return companyAttributesdata;\r\n }\r\n\r\n}\r\n\r\n\r\nconst companyAttributesService = new CompanyAttributesService(\"company-attributes\", settings.attributesManagementServiceUrl);\r\nexport default companyAttributesService;\r\n\r\n","import settings from \"../../config/AppSettings/SettingsFactory\";\r\nimport { CompanyProfile } from \"../../models/company-attributes/CompanyProfile\";\r\nimport { CompanyPreferenceDto } from \"../../models/company-attributes/CompanyPreferenceDto\";\r\nimport { BaseService } from \"../BaseService\";\r\n\r\n\r\n\r\nexport class CompanyPreferenceService extends BaseService\r\n{\r\n async getCompanyPreference(companyId: number) {\r\n const companyPreferenceData = await this.Get(`/${companyId}`);\r\n return companyPreferenceData;\r\n }\r\n\r\n async setCompanyPreference(companyPreferenceDto: CompanyPreferenceDto) {\r\n const companyAttributesdata = await this.Post(``, companyPreferenceDto);\r\n return companyAttributesdata;\r\n }\r\n\r\n async getCompanyProfile(companyId: number) : Promise {\r\n const CompanyProfile = await this.Get(`/profile/${companyId}`);\r\n return CompanyProfile;\r\n }\r\n\r\n}\r\n\r\n\r\nconst companyPreferenceService = new CompanyPreferenceService(\"company-preference\", settings.attributesManagementServiceUrl);\r\nexport default companyPreferenceService;\r\n\r\n","export enum EPerMode {\r\n PerCycle = 0,\r\n PerCampaign = 1,\r\n PerCompany = 2\r\n}","import { message } from \"antd\";\r\nimport { RoutesPaths } from \"../../../../constants/RoutePaths\";\r\nimport companyAttributesService from \"../../../../services/attributes-management/CompanyAttributesService\";\r\nimport { AttributesManagementStore } from \"../../../../stores/AttributesManagementStore\";\r\nimport companyPreferenceService from \"../../../../services/attributes-management/CompanyPreference\";\r\nimport { initializeAttributesIfNeeded } from \"../../../../models/company-attributes/CompanyAttributesAggregation\";\r\n\r\n\r\nexport const AttributesManagmentContextInitializers = {\r\n\r\n InitializeAttributesManagementData: async (companyId: number, attributesManagementStore: AttributesManagementStore, history: any) => {\r\n try {\r\n const _companyAttributesData = await companyAttributesService.getAllAsync(companyId);\r\n const initializedAttributesData = initializeAttributesIfNeeded(_companyAttributesData);\r\n await attributesManagementStore.SetAttributes(initializedAttributesData);\r\n \r\n }\r\n catch (err) {\r\n history.push(RoutesPaths.Supervision.Companies);\r\n message.error(\r\n `Company with ID: ${companyId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n InitializeCustomerRequestData: async (companyId: number, attributesManagementStore: AttributesManagementStore, history: any) => {\r\n try {\r\n const _customerRequestData = await companyAttributesService.getCustomerRequestsAsync(companyId);\r\n await attributesManagementStore.SetCustomerRequest(_customerRequestData);\r\n \r\n }\r\n catch (err) {\r\n history.push(RoutesPaths.Supervision.Companies);\r\n message.error(\r\n `Company with ID: ${companyId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n\r\n InitializeCompanyPreferenceData: async (companyId: number, attributesManagementStore: AttributesManagementStore, history: any) => {\r\n try {\r\n const _companyPreferenceData = await companyPreferenceService.getCompanyPreference(companyId);\r\n await attributesManagementStore.SetCompanyPreference(_companyPreferenceData);\r\n }\r\n catch (err) {\r\n history.push(RoutesPaths.Supervision.Companies);\r\n message.error(\r\n `Company with ID: ${companyId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n\r\n InitializeCompanyProfileData: async (companyId: number, attributesManagementStore: AttributesManagementStore, history: any) => {\r\n try {\r\n const _companyProfile= await companyPreferenceService.getCompanyProfile(companyId);\r\n await attributesManagementStore.SetCompanyProfile(_companyProfile);\r\n }\r\n catch (err) {\r\n history.push(RoutesPaths.Supervision.Companies);\r\n message.error(\r\n `Company with ID: ${companyId} doesn't exist. Returned to home page`\r\n );\r\n }\r\n },\r\n\r\n\r\n\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import { ManualActionRequestSource } from \"../manual-actions/ManualActionRequestSource\";\r\nimport { AgencyMode } from \"./attributes-types/AgencyMode\";\r\nimport { AllVendorsCap } from \"./attributes-types/AllVendorsCap\";\r\nimport { ApplicantLimitPerJob } from \"./attributes-types/ApplicantLimitPerJob\";\r\nimport { ApplicantLimitPerPriorityJob } from \"./attributes-types/ApplicantLimitPerPriorityJob\";\r\nimport { AutoPilot } from \"./attributes-types/AutoPilot\";\r\nimport { AvoidSoftLaunchJobsCarouselCAP } from \"./attributes-types/AvoidSoftLaunchJobsCarouselCAP\";\r\nimport { BaseAttribute } from \"./attributes-types/BaseAttribute\";\r\nimport { BudgetLimitPerJob } from \"./attributes-types/BudgetLimitPerJob\";\r\nimport { BudgetLimitPerPriorityJob } from \"./attributes-types/BudgetLimitPerPriorityJob\";\r\nimport { CraiglistBudget } from \"./attributes-types/CraiglistBudget\";\r\nimport { EAppGoalMode } from \"./attributes-types/EAppGoalMode\";\r\nimport { EPacingMode } from \"./attributes-types/EPacingMode\";\r\nimport { EPerMode } from \"./attributes-types/EPerMode\";\r\nimport { ExpressWay } from \"./attributes-types/ExpressWay\";\r\nimport { Holdback } from \"./attributes-types/HoldBack\";\r\nimport { IndeedCap } from \"./attributes-types/IndeedCap\";\r\nimport { ManualDistribution } from \"./attributes-types/ManualDistribution\";\r\nimport { PacingMode } from \"./attributes-types/PacingMode\";\r\nimport { ReachAppGoalMode } from \"./attributes-types/ReachAppGoalMode\";\r\n\r\n\r\n\r\nexport interface CompanyAttributesAggregation {\r\n [key: string]: BaseAttribute | undefined;\r\n companyId?: any;\r\n userId?: any;\r\n allVendorsCap?: AllVendorsCap;\r\n applicantLimitPerJob?: ApplicantLimitPerJob;\r\n budgetLimitPerJob?: BudgetLimitPerJob;\r\n craiglistBudget?: CraiglistBudget;\r\n indeedCap?: IndeedCap;\r\n manualDistribution?: ManualDistribution;\r\n pacingMode?: PacingMode;\r\n reachAppGoalMode?: ReachAppGoalMode;\r\n agencyMode?: AgencyMode;\r\n holdback?: Holdback;\r\n expressWay?: ExpressWay;\r\n autoPilot?: AutoPilot;\r\n avoidSoftLaunchJobsCarouselCAP?: AvoidSoftLaunchJobsCarouselCAP;\r\n budgetLimitPerPriorityJob?: BudgetLimitPerPriorityJob;\r\n applicantLimitPerPriorityJob?: ApplicantLimitPerPriorityJob;\r\n}\r\n\r\n\r\nexport function initializeAttributesIfNeeded(attributes: CompanyAttributesAggregation): CompanyAttributesAggregation {\r\n return {\r\n ...attributes,\r\n autoPilot: attributes.autoPilot ?? { isAutoPilot: false, isEdited: false },\r\n expressWay: attributes.expressWay ?? { isExpressWay: false, isEdited: false },\r\n holdback: attributes.holdback ?? { isHoldback: false, isEdited: false },\r\n agencyMode: attributes.agencyMode ?? { cap: 0, isEdited: false },\r\n reachAppGoalMode: attributes.reachAppGoalMode ?? { appGoalMode: EAppGoalMode.NoStop, isEdited: false },\r\n pacingMode: attributes.pacingMode ?? { pacingModeType: EPacingMode.None, isEdited: false },\r\n manualDistribution: attributes.manualDistribution ?? { stopDistribution: false, isEdited: false },\r\n indeedCap: attributes.indeedCap ?? { cap: 0, isOriginalsOnly: false, isEdited: false },\r\n craiglistBudget: attributes.craiglistBudget ?? { budget: 0, isEdited: false },\r\n budgetLimitPerJob: attributes.budgetLimitPerJob ?? { limit: 0, mode: EPerMode.PerCycle, requestSource: ManualActionRequestSource.None, isEdited: false, },\r\n applicantLimitPerJob: attributes.applicantLimitPerJob ?? { limit: 0, mode: EPerMode.PerCycle, requestSource: ManualActionRequestSource.None, isEdited: false, },\r\n allVendorsCap: attributes.allVendorsCap ?? { cap: 0, isOriginalsOnly: false, isEdited: false },\r\n avoidSoftLaunchJobsCarouselCAP: attributes.avoidSoftLaunchJobsCarouselCAP ?? { isAvoidSoftLaunchJobsCarouselCAP: true, isEdited: false },\r\n budgetLimitPerPriorityJob: attributes.budgetLimitPerPriorityJob ?? { isPriorityLimit: false, limit: 0, mode: EPerMode.PerCycle, requestSource: ManualActionRequestSource.None, isEdited: false },\r\n applicantLimitPerPriorityJob: attributes.applicantLimitPerPriorityJob ?? { isPriorityLimit: false, limit: 0, mode: EPerMode.PerCycle, requestSource: ManualActionRequestSource.None, isEdited: false }\r\n };\r\n}","import { RoutesPaths } from \"../../../../constants/RoutePaths\";\r\nimport { BreadCrumb } from \"../../../../models/BreadCrumb\";\r\n\r\n\r\n\r\nexport const AttributesManagmentBreadCrumbs =\r\n{\r\n CompanyAttributes: (companyId: number) => {\r\n return new BreadCrumb(\r\n \"Attributes-Managment\",\r\n RoutesPaths.Supervision.AttributesManagementRoutes.BuildCompanyAttributesRouteManagementRoute(companyId),\r\n null\r\n );\r\n },\r\n}\r\n\r\nexport default AttributesManagmentBreadCrumbs","import { observer } from \"mobx-react-lite\";\r\nimport { useContext, useEffect } from \"react\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport { StyledContainer, StyledInputLabel, StyledTextAreaWrapper, StyledTitle } from \"./Styles\";\r\n\r\n\r\nconst Comments = () => {\r\n\r\n const { attributesManagementStore } = useContext(RootStoreContext);\r\n const { CompanyPreference } = attributesManagementStore;\r\n\r\n useEffect(() => {\r\n }, [attributesManagementStore.CompanyPreference]);\r\n\r\n const setGenralText = (value: string) => {\r\n CompanyPreference.comment = value;\r\n };\r\n\r\n const setStrategyText = (value: string) => {\r\n CompanyPreference.strategy = value;\r\n };\r\n\r\n return (\r\n \r\n Comments\r\n Strategy\r\n setStrategyText(e.target.value)}\r\n placeholder=\"Strategy\"\r\n autoSize={{ minRows: 3, maxRows: 3 }}\r\n value={CompanyPreference.strategy}\r\n />\r\n General notes\r\n setGenralText(e.target.value)}\r\n placeholder=\"General text\"\r\n autoSize={{ minRows: 3, maxRows: 3 }}\r\n value={CompanyPreference.comment}\r\n />\r\n \r\n )\r\n\r\n}\r\n\r\nexport default observer(Comments);","import { Divider, Select, Tooltip } from \"antd\";\r\nimport { useContext } from \"react\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport { EPerMode } from \"../../models/company-attributes/attributes-types/EPerMode\";\r\nimport { ManualActionRequestSource } from \"../../models/manual-actions/ManualActionRequestSource\";\r\nimport { StyledCheckbox, StyledColumnGroupWrapper, StyledInputGroupWrapper, StyledInputLabel, StyledInputNumberWrapper, StyledSubSection, StyledTitle, StyledToggleWrapper } from \"./Styles\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { LimitAttrubute } from \"../../models/company-attributes/attributes-types/LimitAttrubute\";\r\n\r\n\r\nconst { Option } = Select;\r\n\r\n\r\ntype Props = {\r\n customerRequestLimit?: number;\r\n customerRequestPriorityLimit?: number;\r\n limiAttrubute: LimitAttrubute | undefined;\r\n header: string\r\n limitType: string;\r\n defaultValueForExpressWay: number;\r\n};\r\n\r\nconst AttributeLimit = (props: Props) => {\r\n\r\n const { attributesManagementStore } = useContext(RootStoreContext);\r\n const { CompanyAttributesAggregation } = attributesManagementStore;\r\n const { expressWay } = CompanyAttributesAggregation;\r\n const { limiAttrubute, header, customerRequestLimit,\r\n customerRequestPriorityLimit, limitType,defaultValueForExpressWay } = props;\r\n\r\n const onChangeMode = (value: EPerMode) => {\r\n if (limiAttrubute) {\r\n limiAttrubute.mode = value;\r\n attributesManagementStore.onChangeAttribute(limiAttrubute);\r\n }\r\n }\r\n\r\n const onRequestSource = (value: ManualActionRequestSource) => {\r\n if (limiAttrubute) {\r\n limiAttrubute.requestSource = value;\r\n attributesManagementStore.onChangeAttribute(limiAttrubute);\r\n }\r\n }\r\n\r\n const onChangeLimit = (value: any) => {\r\n if (limiAttrubute) {\r\n limiAttrubute.limit = value;\r\n attributesManagementStore.onChangeAttribute(limiAttrubute);\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n {header} \r\n \r\n \r\n \r\n {limitType}\r\n \r\n \r\n \r\n Per period\r\n \r\n \r\n \r\n \r\n \r\n Client General\r\n \r\n \r\n \r\n Client Priority\r\n \r\n \r\n \r\n \r\n\r\n \r\n )\r\n\r\n\r\n}\r\n\r\nexport default observer(AttributeLimit)","import { Select, Tooltip } from \"antd\";\r\nimport { useContext } from \"react\";\r\nimport { RootStoreContext } from \"../../stores/RootStoreContext\";\r\nimport { EPerMode } from \"../../models/company-attributes/attributes-types/EPerMode\";\r\nimport { ManualActionRequestSource } from \"../../models/manual-actions/ManualActionRequestSource\";\r\nimport { StyledCheckbox, StyledColumnGroupWrapper, StyledInputGroupWrapper, StyledInputLabel, StyledInputNumberWrapper, StyledSubSection, StyledTitle, StyledToggleWrapper } from \"./Styles\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { LimitAttrubute } from \"../../models/company-attributes/attributes-types/LimitAttrubute\";\r\nimport { PriorityLimitAttrubute } from \"../../models/company-attributes/attributes-types/PriorityLimitAttrubute\";\r\n\r\n\r\nconst { Option } = Select;\r\n\r\ntype Props = {\r\n priorityLimitAttrubute: PriorityLimitAttrubute | undefined;\r\n label: string;\r\n limitType: string\r\n defaultValueForExpressWay: number;\r\n};\r\n\r\nconst AttributePriorityLimit = (props: Props) => {\r\n\r\n const { attributesManagementStore } = useContext(RootStoreContext);\r\n const { CompanyAttributesAggregation } = attributesManagementStore;\r\n const { expressWay } = CompanyAttributesAggregation;\r\n const { priorityLimitAttrubute ,label, limitType, defaultValueForExpressWay} = props;\r\n\r\n const onChangeMode = (value: EPerMode) => {\r\n if (priorityLimitAttrubute) {\r\n priorityLimitAttrubute.mode = value;\r\n attributesManagementStore.onChangeAttribute(priorityLimitAttrubute);\r\n }\r\n }\r\n\r\n const onChangeLimit = (value: any) => {\r\n if (priorityLimitAttrubute) {\r\n priorityLimitAttrubute.limit = value;\r\n attributesManagementStore.onChangeAttribute(priorityLimitAttrubute);\r\n }\r\n }\r\n\r\n const onIsPpriority = () => {\r\n if (priorityLimitAttrubute) {\r\n priorityLimitAttrubute.isPriorityLimit = !priorityLimitAttrubute.isPriorityLimit;\r\n attributesManagementStore.onChangeAttribute(priorityLimitAttrubute);\r\n }\r\n }\r\n\r\n const IsPpriorityChecked = () =>{ \r\n return priorityLimitAttrubute?.isPriorityLimit || expressWay?.isExpressWay;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n {label}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n\r\n\r\n}\r\n\r\nexport default observer(AttributePriorityLimit)","import { observer } from 'mobx-react-lite';\r\nimport { StyledColumnGroupWrapper, StyledContainer, StyledHeader } from './Styles';\r\nimport Comments from './Comments';\r\nimport { useContext } from 'react';\r\nimport { RootStoreContext } from '../../stores/RootStoreContext';\r\nimport AttributeLimit from './AttributeLimit';\r\nimport AttributePriorityLimit from './AttributePriorityLimit';\r\n\r\n\r\nconst CampaignRules = () => {\r\n const { attributesManagementStore } = useContext(RootStoreContext);\r\n const { CompanyAttributesAggregation, CustomerCampaignAttributesAggregation } = attributesManagementStore;\r\n const { applicantLimitPerJob, applicantLimitPerPriorityJob,\r\n budgetLimitPerJob, budgetLimitPerPriorityJob, } = CompanyAttributesAggregation;\r\n\r\n return (\r\n \r\n Campaign rules\r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default observer(CampaignRules);\r\n","import { Button, Col, Form, Row, Typography, message } from \"antd\";\r\nimport AlgoModes from \"../../../components/attributes-management/AlgoModes\";\r\nimport usePageInitialization from \"../../../hooks/usePageInitialization\";\r\nimport \"./CompanyAttributesPage.scss\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { AttributesManagmentContextInitializers } from \"./heplers/AttributesManagmentContextInitializers\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { useContext, useEffect } from \"react\";\r\nimport { SupervisionBreadcrumbs } from \"../supervision/breadcrumbs/supervision.breadcrumbs\";\r\nimport AttributesManagmentBreadCrumbs from \"./heplers/AttributesManagmentBreadCrumbs\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport companyAttributesService from \"../../../services/attributes-management/CompanyAttributesService\";\r\nimport CampaignRules from \"../../../components/attributes-management/CampaignRules\";\r\nimport Comments from \"../../../components/attributes-management/Comments\";\r\nimport companyPreferenceService from \"../../../services/attributes-management/CompanyPreference\";\r\nimport { FetchError } from \"../../../exceptions/AlgoSupervisionExceptions\";\r\nimport styled from \"styled-components\";\r\nimport companyService from \"../../../services/operation/CompanyService\";\r\nimport { UpdateReasonPage } from \"./heplers/UpdateReasonPage\";\r\n\r\n\r\nconst StyledContainer = styled.div`\r\nwidth: 80%;\r\nheight: 100%;\r\nalign-items: flex-start;\r\ngap: 24px;\r\ndisplay: flex; \r\n`;\r\n\r\nconst StyledComponent = styled.div`\r\n flex: 1; // This will make both components share the available space equally\r\n`;\r\n\r\n\r\nconst CompanyAttributesPage = () => {\r\n\r\n const match = useParams<{ companyId: string }>();\r\n const { attributesManagementStore, userStore, uiStore } = useContext(RootStoreContext);\r\n const { CompanyProfile } = attributesManagementStore;\r\n const history = useHistory();\r\n const [form] = Form.useForm();\r\n\r\n useEffect(() => {\r\n if(CompanyProfile != undefined)\r\n {\r\n const fetchData = async () => {\r\n const company = await companyService.GetCompanyById(\r\n Number(match.companyId)\r\n );\r\n uiStore.SetPageTitle(\r\n `Company Attributes for: ${company.companyName} - ${CompanyProfile.displayLabel}`\r\n );\r\n }\r\n fetchData();\r\n }\r\n}, [CompanyProfile]);\r\n\r\n\r\n usePageInitialization({\r\n onInitAsync: async () => {\r\n await AttributesManagmentContextInitializers.InitializeAttributesManagementData(\r\n Number(match.companyId),\r\n attributesManagementStore,\r\n history\r\n )\r\n await AttributesManagmentContextInitializers.InitializeCompanyPreferenceData(\r\n Number(match.companyId),\r\n attributesManagementStore,\r\n history\r\n )\r\n await AttributesManagmentContextInitializers.InitializeCompanyProfileData(\r\n Number(match.companyId),\r\n attributesManagementStore,\r\n history\r\n )\r\n await AttributesManagmentContextInitializers.InitializeCustomerRequestData(\r\n Number(match.companyId),\r\n attributesManagementStore,\r\n history\r\n )\r\n },\r\n\r\n onCompanyContextCallBack: (company, uiStore) => {\r\n\r\n uiStore.AddBreadCrumbs(\r\n SupervisionBreadcrumbs.Companies(company.companyName),\r\n AttributesManagmentBreadCrumbs.CompanyAttributes(company.companyId)\r\n );\r\n },\r\n });\r\n\r\n \r\n const onApply = async () => {\r\n try {\r\n let companysAttributesToUpdate = attributesManagementStore.getEditedAttributes(userStore.User?.id);\r\n await companyAttributesService.setCompanysAttributes(companysAttributesToUpdate);\r\n\r\n let companyPreference = attributesManagementStore.getCompanyPreference();\r\n companyPreference.userId = userStore.User?.id;\r\n await companyPreferenceService.setCompanyPreference(companyPreference);\r\n\r\n attributesManagementStore.resetIsEdited();\r\n\r\n message.success(\"Company Attributes updated successfully\");\r\n }\r\n catch (error) {\r\n message.error(\"Company Attributes updated failed\");\r\n console.log(error);\r\n }\r\n\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Apply Changes\r\n \r\n \r\n\r\n )\r\n}\r\n\r\n\r\nexport default observer(CompanyAttributesPage)","/**\r\n * Configuration for all routes in the application\r\n */\r\n\r\nimport { Redirect } from \"react-router-dom\";\r\n\r\nimport { RoutesPaths } from \"../constants/RoutePaths\";\r\nimport { BreadCrumb } from \"../models/BreadCrumb\";\r\nimport { RouteModel } from \"../models/RouteModel\";\r\nimport AccessDeniedPage from \"./pages/AccessDeniedPage\";\r\nimport CampaignTrackAuditPage from \"./pages/campaign-track-system/CampaignTrackAuditPage\";\r\nimport CampaignTrackEditAuditPage from \"./pages/campaign-track-system/CampaignTrackEditAuditPage\";\r\nimport IFramePage from \"./pages/IFramePage\";\r\nimport UserActionsTablePage from \"./pages/actions/UserActionsTablePage\";\r\nimport IndeedAddCampaignContainer from \"./pages/indeed-manager/IndeedAddCampaignPage\";\r\nimport IndeedAttachJobsToCampaignPage from \"./pages/indeed-manager/IndeedAttachJobsToCampaignPage\";\r\nimport IndeedJobsViewContainer from \"./pages/indeed-manager/IndeedCampaignJobsPage\";\r\nimport IndeedCampaignPage from \"./pages/indeed-manager/IndeedCampaignPage\";\r\nimport IndeedEditCampaignPage from \"./pages/indeed-manager/IndeedEditCampaignPage\";\r\nimport LinkedInPage from \"./pages/linkedin-manager/LinkedInPage\";\r\nimport LoginPage from \"./pages/Login/LoginPage\";\r\nimport LogoutPage from \"./pages/LogoutPage\";\r\nimport NotFoundPage from \"./pages/NotFoundPage\";\r\nimport ChooseCutOffContainer from \"./pages/publisher-selection/ChooseCutOffPage\";\r\nimport ShortCutsManualContainer from \"./pages/ShortCutsManualPage\";\r\nimport CampaignsContainer from \"./pages/supervision/CampaignsPage\";\r\nimport CampaignTrackAddAuditPage from \"./pages/campaign-track-system/CampaignTrackAddAuditPage\";\r\nimport GroupsPage from \"./pages/groups/GroupsPage\";\r\nimport GroupsAddPage from \"./pages/groups/GroupsAddPage\";\r\nimport GroupJobsPage from \"./pages/groups/GroupJobsPage\";\r\nimport GroupsEditPage from \"./pages/groups/GroupsEditPage\";\r\nimport GroupsAttachJobsPage from \"./pages/groups/GroupsAttachJobsPage\";\r\nimport VendorManagement from \"../components/vendor-management/VendorManagement\";\r\nimport CampaignVendorPage from \"./pages/vendor-management/CampaignVendorPage\";\r\nimport GroupVendorPage from \"./pages/vendor-management/GroupVendorPage\";\r\nimport CompaniesContainer from \"./pages/supervision/CompaniesPage\";\r\nimport CompanyVendorPage from \"./pages/vendor-management/CompanyVendorPage\";\r\nimport CompanyTrackAuditPage from \"./pages/company-track-system/CompanyTrackAuditPage\";\r\nimport AffiliateVendorPage from \"./pages/vendor-management/AffiliateVendorPage\";\r\nimport CompanyTrackEditAuditPage from \"./pages/company-track-system/CompanyTrackEditAuditPage\";\r\nimport CompanyTrackAddAuditPage from \"./pages/company-track-system/CompanyTrackAddAuditPage\";\r\nimport AffiliatesContainer from \"./pages/supervision/AffiliatesPage\";\r\nimport ExplainabilityMainPage from \"./pages/explainability/ExplainabilityMainPage\";\r\nimport CompanyAttributesPage from \"./pages/attributes-management/CompanyAttributesPage\";\r\n\r\nconst emptyHandlerToShowCursorArrow = () => {};\r\n\r\n/**\r\n * Publisher Selection\r\n */\r\nexport const rootRoute = new RouteModel(\r\n RoutesPaths.Root.Index,\r\n ,\r\n \"Algo Supervision\",\r\n [new BreadCrumb(\"Algo Supervision\", null, emptyHandlerToShowCursorArrow)]\r\n);\r\n\r\nexport const loginRoute = new RouteModel(\r\n RoutesPaths.Root.Login,\r\n ,\r\n \"\",\r\n []\r\n);\r\n\r\nexport const logoutRoute = new RouteModel(\r\n RoutesPaths.Root.Logout,\r\n ,\r\n \"\",\r\n []\r\n);\r\n\r\nexport const notFoundRoute = new RouteModel(\r\n RoutesPaths.Root.NotFound,\r\n ,\r\n \"\",\r\n []\r\n);\r\n\r\nexport const accessDeniedRoute = new RouteModel(\r\n RoutesPaths.Root.AccessDenied,\r\n ,\r\n \"\",\r\n []\r\n);\r\n\r\n\r\nexport const publisherSelectionPageRoute = new RouteModel(\r\n RoutesPaths.PublisherSelection.ChooseCutOff,\r\n ,\r\n \"Publisher Selection Page\",\r\n [new BreadCrumb(\"Publisher Selection\", null, emptyHandlerToShowCursorArrow)]\r\n);\r\n\r\n/**\r\n * Settings\r\n */\r\nexport const shortcutManualsRoute = new RouteModel(\r\n RoutesPaths.Settings.ShortCutsManual,\r\n ,\r\n \"Settings\",\r\n [\r\n new BreadCrumb(\"Settings\", null, null),\r\n new BreadCrumb(\r\n \"Short Cuts Manual\",\r\n RoutesPaths.Settings.ShortCutsManual,\r\n emptyHandlerToShowCursorArrow\r\n ),\r\n ]\r\n);\r\n\r\n/* \r\n============================ NEW\r\nSupervision\r\n*/\r\nconst supervisionBaseBreadCrumb = new BreadCrumb(\r\n \"Algo Supervision\",\r\n RoutesPaths.Supervision.Companies,\r\n emptyHandlerToShowCursorArrow\r\n);\r\n\r\nconst campaignsBreadCrumb = new BreadCrumb(\r\n \"Campaigns\",\r\n RoutesPaths.Supervision.Campaigns,\r\n emptyHandlerToShowCursorArrow\r\n);\r\n\r\nconst companiesBreadCrumb = new BreadCrumb(\r\n \"Accounts\",\r\n RoutesPaths.Supervision.Companies,\r\n emptyHandlerToShowCursorArrow\r\n);\r\n\r\n\r\nconst affiliatesBreadCrumb = new BreadCrumb(\r\n \"Affiliates\",\r\n RoutesPaths.Supervision.Affiliates,\r\n emptyHandlerToShowCursorArrow\r\n);\r\n\r\nexport const supervisionCampaignsRoute = new RouteModel(\r\n RoutesPaths.Supervision.Campaigns,\r\n ,\r\n \"Campaigns Supervision\",\r\n [supervisionBaseBreadCrumb, campaignsBreadCrumb]\r\n);\r\n\r\nexport const supervisionCompaniesRoute = new RouteModel(\r\n RoutesPaths.Supervision.Companies,\r\n ,\r\n \"Accounts Supervision\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n);\r\n\r\nexport const supervisionAffiliatesRoute = new RouteModel(\r\n RoutesPaths.Supervision.Affiliates,\r\n ,\r\n \"Affiliates Supervision\",\r\n [supervisionBaseBreadCrumb, affiliatesBreadCrumb]\r\n);\r\n\r\n/**\r\n * Indeed Management\r\n */\r\nexport const indeedRoutes = {\r\n campaignRoute: new RouteModel(\r\n RoutesPaths.Supervision.IndeedRoutes.CampaignRoute,\r\n ,\r\n \"Indeed Campaigns\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n addCampaignRoute: new RouteModel(\r\n RoutesPaths.Supervision.IndeedRoutes.AddCampaign,\r\n ,\r\n \"Add Indeed Campaign\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n campaignJobsRoute: new RouteModel(\r\n RoutesPaths.Supervision.IndeedRoutes.CampaignJobsRoute,\r\n ,\r\n \"Indeed Jobs\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n attachJobsToIndeedCampaign: new RouteModel(\r\n RoutesPaths.Supervision.IndeedRoutes.AttachJobsToIndeedCampaign,\r\n ,\r\n \"Attach Jobs To Indeed Campaign\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n editCampaign: new RouteModel(\r\n RoutesPaths.Supervision.IndeedRoutes.EditIndeedCampaign,\r\n ,\r\n \"Edit Indeed Campaign\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n};\r\n\r\n/**\r\n * LinkedIn Management\r\n */\r\nexport const linkedinRoutes = {\r\n managementRoute: new RouteModel(\r\n RoutesPaths.Supervision.LinkedInRoutes.StrategyRoute,\r\n ,\r\n \"LinkedIn\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n};\r\n\r\n/**\r\n * Company Setting\r\n */\r\nexport const CompanyTrackSystemRoutes = {\r\n audit: new RouteModel(\r\n RoutesPaths.Supervision.CompanyTrackSystemRoutes.CompanySettingsRoute,\r\n ,\r\n \"Company Track System\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n edit: new RouteModel(\r\n RoutesPaths.Supervision.CompanyTrackSystemRoutes.EditCompanySettingAudit,\r\n ,\r\n \"Company Track System\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n add: new RouteModel(\r\n RoutesPaths.Supervision.CompanyTrackSystemRoutes.AddCompanySettingAudit,\r\n ,\r\n \"Company Track System\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n};\r\n\r\n/**\r\n * Campaign Setting\r\n */\r\nexport const CampaignTrackSystemRoutes = {\r\n audit: new RouteModel(\r\n RoutesPaths.Supervision.CampaignTrackSystemRoutes.CampaignSettingsRoute,\r\n ,\r\n \"Campaign Track System\",\r\n [supervisionBaseBreadCrumb, campaignsBreadCrumb]\r\n ),\r\n edit: new RouteModel(\r\n RoutesPaths.Supervision.CampaignTrackSystemRoutes.EditCampaignSettingAudit,\r\n ,\r\n \"Campaign Track System\",\r\n [supervisionBaseBreadCrumb, campaignsBreadCrumb]\r\n ),\r\n\r\n add: new RouteModel(\r\n RoutesPaths.Supervision.CampaignTrackSystemRoutes.AddCampaignSettingAudit,\r\n ,\r\n \"Campaign Track System\",\r\n [supervisionBaseBreadCrumb, campaignsBreadCrumb]\r\n ),\r\n};\r\n\r\n// Actions\r\nconst actionsBreadCrumb = new BreadCrumb(\"Actions\", null, null);\r\n\r\nexport const actionsRoutes = {\r\n actionsTable: new RouteModel(\r\n RoutesPaths.Actions.Table,\r\n ,\r\n \"User Actions - Table View\",\r\n [\r\n supervisionBaseBreadCrumb,\r\n actionsBreadCrumb,\r\n new BreadCrumb(\r\n \"Table\",\r\n RoutesPaths.Actions.Table,\r\n emptyHandlerToShowCursorArrow\r\n ),\r\n ]\r\n ),\r\n};\r\n\r\n/**\r\n * Groups\r\n */\r\nexport const groupsRoutes = {\r\n group: new RouteModel(\r\n RoutesPaths.Supervision.GroupsRoutes.GroupRoute,\r\n ,\r\n \"Groups\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n\r\n add: new RouteModel(\r\n RoutesPaths.Supervision.GroupsRoutes.AddGroup,\r\n ,\r\n \"Groups\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n\r\n jobs: new RouteModel(\r\n RoutesPaths.Supervision.GroupsRoutes.GroupJobsRoute,\r\n ,\r\n \"Group Jobs\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n\r\n editGroup: new RouteModel(\r\n RoutesPaths.Supervision.GroupsRoutes.EditGroup,\r\n ,\r\n \"Edit Group\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n\r\n attachJobs: new RouteModel(\r\n RoutesPaths.Supervision.GroupsRoutes.AttachJobsToGroup,\r\n ,\r\n \"Attach Jobs\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n};\r\n\r\n/**\r\n * VendorManagment\r\n */\r\nexport const vendorManagementRoutes = {\r\n companyVendorManagement: new RouteModel(\r\n RoutesPaths.Supervision.VendorManagementRoutes.CompanyVendorRoute,\r\n ,\r\n \"Account Vendor Management\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n\r\n affiliateVendorManagement: new RouteModel(\r\n RoutesPaths.Supervision.VendorManagementRoutes.AffiliateVendorRoute,\r\n ,\r\n \"Affiliate Vendor Management\",\r\n [supervisionBaseBreadCrumb, affiliatesBreadCrumb] \r\n ),\r\n\r\n campaignVendorManagement: new RouteModel(\r\n RoutesPaths.Supervision.VendorManagementRoutes.CampaignVendorRoute,\r\n ,\r\n \"Campaign Vendor\",\r\n [supervisionBaseBreadCrumb, campaignsBreadCrumb]\r\n ),\r\n\r\n groupVendorManagement: new RouteModel(\r\n RoutesPaths.Supervision.VendorManagementRoutes.GroupVendorRoute,\r\n ,\r\n \"Group Vendor\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n};\r\n\r\n/**\r\n * Explainability\r\n */\r\nexport const explainabilityRoute = new RouteModel(\r\n RoutesPaths.Explainability.JobExplainabilityRoute,\r\n ,\r\n \"Explainability Page\",\r\n []\r\n);\r\n\r\n/**\r\n * AttributesManagement\r\n */\r\nexport const AttributesManagementRoutes = {\r\n companyAttributesManagement : new RouteModel(\r\n RoutesPaths.Supervision.AttributesManagementRoutes.CompanyAttributesRoute,\r\n ,\r\n \"Company Attributes Page\",\r\n [supervisionBaseBreadCrumb, companiesBreadCrumb]\r\n ),\r\n}\r\n\r\n\r\n\r\n\r\n/**\r\n * Routes\r\n */\r\nexport const routes: RouteModel[] = [\r\n // Post refactor\r\n supervisionCampaignsRoute,\r\n supervisionCompaniesRoute,\r\n supervisionAffiliatesRoute,\r\n loginRoute,\r\n logoutRoute,\r\n accessDeniedRoute,\r\n ...Object.values(linkedinRoutes),\r\n ...Object.values(indeedRoutes),\r\n ...Object.values(CompanyTrackSystemRoutes),\r\n ...Object.values(CampaignTrackSystemRoutes),\r\n ...Object.values(actionsRoutes),\r\n ...Object.values(groupsRoutes),\r\n ...Object.values(vendorManagementRoutes),\r\n ...Object.values(AttributesManagementRoutes),\r\n //\r\n rootRoute,\r\n publisherSelectionPageRoute,\r\n shortcutManualsRoute,\r\n explainabilityRoute,\r\n];\r\n","import { PageNotFoundexception } from \"../exceptions/AlgoSupervisionExceptions\";\r\nimport { RouteModel } from \"../models/RouteModel\";\r\nimport { routes } from \"../routes/routes\";\r\n\r\nexport class RouteManager {\r\n /**\r\n * ctor\r\n */\r\n constructor() { }\r\n\r\n public GetCurrentRoute(pathName: string): RouteModel {\r\n const routePath: RouteModel | undefined = routes.find(x => {\r\n return this.ConvertNumbersOrGuidInRouteToColons(pathName) == this.ConvertPathParametersToColons(x.routePath);\r\n });\r\n if (!routePath) {\r\n throw new PageNotFoundexception(`${pathName} route is not configured in routes file`);\r\n }\r\n return routePath;\r\n }\r\n\r\n private ConvertNumbersOrGuidInRouteToColons(pathName: string): string {\r\n // A path can also be a GUID (contain partially numbers) like: da4dc430dcf1627f\r\n\r\n // return pathName.replace(/\\d+/g, \":\");\r\n return pathName.replace(/(\\w*\\d+\\w*)/g, \":\");\r\n }\r\n\r\n private ConvertPathParametersToColons(routePath: string): string {\r\n return routePath.replace(/(:\\w*)/g, \":\");\r\n }\r\n}","import { action, makeObservable, observable } from \"mobx\";\r\n\r\nimport { BreadCrumb } from \"../models/BreadCrumb\";\r\nimport { PopUp } from \"../models/Popup\";\r\nimport { RouteModel } from \"../models/RouteModel\";\r\nimport { routes } from \"../routes/routes\";\r\nimport { RouteManager } from \"../services/RouteManager\";\r\n\r\nexport enum Page {\r\n InputPage,\r\n PredictionPage,\r\n AdminPreload\r\n}\r\n\r\n\r\nexport class UIStore {\r\n\r\n /**\r\n * Fields\r\n */\r\n private _routeManager: RouteManager;\r\n\r\n /**\r\n * Ctor\r\n */\r\n constructor() {\r\n this._routeManager = new RouteManager();\r\n makeObservable(this);\r\n }\r\n\r\n /**\r\n * Props\r\n */\r\n @observable\r\n public CurrentRoute: RouteModel = {} as RouteModel; //Initialized at root\r\n\r\n @observable\r\n public BreadCrumbs: BreadCrumb[] = []; // Initialized at root\r\n\r\n @observable\r\n public IsWebsiteLoading: boolean = false;\r\n\r\n @observable\r\n public PopUp?: PopUp;\r\n\r\n\r\n /**\r\n * Methods\r\n */\r\n\r\n @action\r\n AddBreadCrumbs(...breadCrumb: BreadCrumb[]): void {\r\n this.BreadCrumbs = [...this.BreadCrumbs, ...breadCrumb];\r\n }\r\n\r\n @action\r\n PopLatestBreadcrumb(): void {\r\n this.BreadCrumbs.pop();\r\n }\r\n\r\n @action\r\n RemoveBreadCrumbsUntil(breadCrumb: string | BreadCrumb) {\r\n const breadCrumbText: string = breadCrumb instanceof BreadCrumb ? breadCrumb.breadCrumbText : breadCrumb;\r\n this.BreadCrumbs = this.BreadCrumbs.slice(0, this.BreadCrumbs.findIndex(x => x.breadCrumbText == breadCrumbText) + 1);\r\n }\r\n\r\n @action\r\n SetCurrentRoute(pathName: string): void {\r\n const currentRoute: RouteModel = this._routeManager.GetCurrentRoute(pathName);\r\n\r\n this.CurrentRoute = currentRoute;\r\n this.BreadCrumbs = [...currentRoute.breadCrumbsPrefix];\r\n }\r\n\r\n @action\r\n SetPageTitle(title: string) {\r\n this.CurrentRoute.mainTitle = title;\r\n }\r\n\r\n @action\r\n SetIsWebsiteLoading(state: boolean) {\r\n this.IsWebsiteLoading = state;\r\n }\r\n\r\n @action\r\n SetPopUp(popUp: PopUp) {\r\n this.PopUp = popUp;\r\n }\r\n\r\n ClearPopUp() {\r\n this.PopUp = undefined;\r\n }\r\n\r\n}","\r\nimport { action, makeObservable, observable } from \"mobx\";\r\n\r\nimport { UnauthorizedError } from \"../exceptions/AlgoSupervisionExceptions\";\r\nimport { User } from \"../models/users/User\";\r\nimport { userService } from \"../services/users/UserService\";\r\n\r\nexport class UserStore {\r\n\r\n @observable\r\n public User?: User;\r\n\r\n constructor() {\r\n makeObservable(this);\r\n }\r\n\r\n\r\n @action\r\n public async SetUser(user: User) {\r\n this.User = user;\r\n }\r\n}","import { action, makeObservable, observable } from \"mobx\";\r\nimport { LocalStorageKeys } from \"../constants/LocalStorageKeys\";\r\nimport { ClassificationType } from \"../models/vendor-management/ClassificationType\";\r\nimport { EntityVendorRequest } from \"../models/vendor-management/EntityVendorRequest\";\r\nimport { EntityVendorResponse } from \"../models/vendor-management/EntityVendorResponse\";\r\nimport LocalStorageService from \"../services/LocalStorageService\";\r\nimport { EntityDistributionSettings } from \"../models/vendor-management/settings/EntityDistributionSettings\";\r\nimport { EntityDistributionSettingsRequest } from \"../models/vendor-management/settings/EntityDistributionSettingsRequest\";\r\n\r\nexport class VendorManagementStore {\r\n\r\n @observable\r\n public Vendors: EntityVendorResponse[] = [];\r\n\r\n @observable\r\n public SearchedVendors: EntityVendorResponse[] = [];\r\n\r\n @observable\r\n public rowsEffected: EntityVendorResponse[] = [];\r\n\r\n @observable\r\n public SelectedClassificationType: ClassificationType = ClassificationType.Excluded;\r\n\r\n @observable\r\n public EntitySettings! : EntityDistributionSettings;\r\n\r\n public SelectedVendorsToApply: EntityVendorRequest[] = [];\r\n\r\n /**\r\n * ctor\r\n */\r\n constructor() {\r\n makeObservable(this);\r\n }\r\n\r\n\r\n @action\r\n public async SetVendors(vendors: EntityVendorResponse[]) {\r\n this.Vendors = vendors;\r\n }\r\n\r\n @action\r\n public async SetEntityState(entitySettings: EntityDistributionSettings) {\r\n this.EntitySettings = entitySettings;\r\n this.SetClassificationType(this.EntitySettings.classificationType);\r\n }\r\n\r\n @action\r\n public async SetVendorsToApply(selectedVendorsToApply: any[]) {\r\n this.SelectedVendorsToApply = selectedVendorsToApply.map((v) => {\r\n\r\n return {\r\n vendorId: v.vendorId,\r\n vendorName: v.vendorName,\r\n inclusionEnforcement: v.inclusionEnforcement,\r\n classificationType: v.classificationType,\r\n comment: v.comment\r\n }\r\n });\r\n }\r\n\r\n @action\r\n public async SetSearchedVendors(vendorsIds: number[]) {\r\n this.SearchedVendors = this.Vendors.filter(vendor => vendorsIds.includes(vendor.vendorId))\r\n // LocalStorageService.SetItemObject(LocalStorageKeys.SearchedVendors, this.SearchedVendors);\r\n }\r\n\r\n\r\n @action\r\n public async SetClassificationType(classificationType: ClassificationType) {\r\n this.SelectedClassificationType = classificationType;\r\n this.EntitySettings.classificationType = classificationType;\r\n }\r\n\r\n @action\r\n public async SetEntityStateIsInheritable(isInheritable: boolean) {\r\n this.EntitySettings.isInheritable = isInheritable;\r\n }\r\n\r\n\r\n public AddToEffectedRows(record: EntityVendorResponse) {\r\n try {\r\n const index = this.rowsEffected.findIndex(x => x.vendorId == record.vendorId);\r\n if (index > -1)\r\n {\r\n this.rowsEffected[index] = record;\r\n }\r\n else\r\n {\r\n this.rowsEffected.push(record);\r\n }\r\n \r\n } catch (error) {\r\n // console.log(error)\r\n }\r\n \r\n\r\n }\r\n\r\n}","import { action, makeObservable, observable } from \"mobx\";\r\nimport { JobState } from \"../models/explainability/JobState\";\r\nimport explainabilityService from \"../services/explainability/ExplainabilityService\";\r\nimport { Company } from \"../models/operation/Company\";\r\nimport { Vendor } from \"../models/explainability/Vendor\";\r\nimport companyService from \"../services/operation/CompanyService\";\r\nimport LocalStorageService from \"../services/LocalStorageService\";\r\nimport { LocalStorageKeys } from \"../constants/LocalStorageKeys\";\r\nimport { Job } from \"../models/operation/Job\";\r\nimport { JobSerachingType } from \"../models/explainability/JobSerachingType\";\r\nimport { JobBase } from \"../models/explainability/JobBase\";\r\n\r\n\r\n\r\nexport class ExplainabilityStore {\r\n\r\n /**\r\n * Props\r\n */\r\n @observable\r\n public SearchedJobs: number[] = [];\r\n\r\n @observable\r\n public AllJobs: Job[] = [];\r\n\r\n @observable\r\n public JobsState: JobBase[] = [];\r\n \r\n @observable\r\n public SelectedCompany?: Company;\r\n\r\n @observable\r\n public SearchedVendors: Vendor[] = [];\r\n\r\n @observable\r\n public AllVendors: Vendor[] = [];\r\n\r\n @observable\r\n public SelectedJobSerachingType: JobSerachingType = JobSerachingType.JobState;\r\n \r\n\r\n\r\n constructor()\r\n {\r\n const company = LocalStorageService.GetItemObject(LocalStorageKeys.SearchedCompanyExplainability)\r\n if (company != undefined) {\r\n this.SelectedCompany = company;\r\n }\r\n makeObservable(this);\r\n }\r\n\r\n @action\r\n public async SetSearchedJobsIds(ids: number[]) {\r\n // const jobs = await explainabilityService.getJobStateByIds({ ids });\r\n this.SearchedJobs = ids;\r\n }\r\n\r\n @action\r\n public async SetSearchedVendors(vendorsIds: number[]) {\r\n this.SearchedVendors = this.AllVendors.filter(vendor => vendorsIds.includes(vendor.vendor_id))\r\n // LocalStorageService.SetItemObject(LocalStorageKeys.SearchedVendors, this.SearchedVendors);\r\n }\r\n\r\n @action\r\n public async SetSearchedCompany(id: number) {\r\n const company = await companyService.GetCompanyById(id);\r\n this.SelectedCompany = company;\r\n LocalStorageService.SetItemObject(LocalStorageKeys.SearchedCompanyExplainability, company);\r\n }\r\n\r\n\r\n}","import { action, computed, makeObservable, observable } from \"mobx\";\r\nimport { CompanyAttributesAggregation } from \"../models/company-attributes/CompanyAttributesAggregation\";\r\nimport { BaseAttribute } from \"../models/company-attributes/attributes-types/BaseAttribute\";\r\nimport { CompanyPreferenceDto } from \"../models/company-attributes/CompanyPreferenceDto\";\r\nimport { CompanyProfile } from \"../models/company-attributes/CompanyProfile\";\r\nimport { CustomerCampaignAttributesAggregation } from \"../models/company-attributes/CustomerCampaignAttributesAggregation\";\r\n\r\n\r\n\r\nexport class AttributesManagementStore {\r\n\r\n @observable\r\n CompanyAttributesAggregation: CompanyAttributesAggregation = {};\r\n\r\n @observable\r\n CustomerCampaignAttributesAggregation: CustomerCampaignAttributesAggregation = {};\r\n\r\n @observable\r\n CompanyPreference: CompanyPreferenceDto = {};\r\n\r\n @observable\r\n CompanyProfile: CompanyProfile = {};\r\n\r\n constructor() {\r\n makeObservable(this);\r\n }\r\n\r\n\r\n @action\r\n public onChangeAttribute = (baseAttribute: BaseAttribute) => {\r\n baseAttribute.isEdited = true;\r\n }\r\n\r\n @action\r\n public async SetAttributes(attributes: CompanyAttributesAggregation) {\r\n this.CompanyAttributesAggregation = attributes;\r\n }\r\n\r\n @action\r\n public async SetCustomerRequest(customerRequest: CustomerCampaignAttributesAggregation) {\r\n this.CustomerCampaignAttributesAggregation = customerRequest;\r\n }\r\n\r\n @action\r\n public async SetCompanyPreference(companyPreferenceDto: CompanyPreferenceDto) {\r\n this.CompanyPreference = companyPreferenceDto;\r\n }\r\n\r\n @action\r\n public async SetCompanyProfile(companyProfile: CompanyProfile) {\r\n this.CompanyProfile = companyProfile;\r\n }\r\n\r\n @action\r\n public getCompanyPreference(): CompanyPreferenceDto {\r\n return this.CompanyPreference;\r\n }\r\n\r\n @action\r\n public getEditedAttributes(userId: number |undefined): Partial {\r\n\r\n const editedAttributes: Partial = {};\r\n editedAttributes.userId = userId;\r\n editedAttributes.companyId = this.CompanyAttributesAggregation.companyId;\r\n\r\n for (const key in this.CompanyAttributesAggregation) {\r\n const attribute = this.CompanyAttributesAggregation[key];\r\n if (attribute && attribute.isEdited == true) {\r\n editedAttributes[key] = attribute\r\n }\r\n }\r\n\r\n return editedAttributes;\r\n }\r\n\r\n public resetIsEdited = () => {\r\n for (const key in this.CompanyAttributesAggregation) {\r\n const attribute = this.CompanyAttributesAggregation[key];\r\n if (attribute && attribute.isEdited !== undefined) {\r\n attribute.isEdited = false;\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import { action, makeObservable, observable, toJS } from \"mobx\";\r\n\r\nimport { LinkedInChildApplicationResponse } from \"../models/linkedin-manager/LinkedInChildApplicationResponse\";\r\n\r\nexport class LinkedInStore {\r\n \r\n @observable\r\n linkedInChildApplication? : LinkedInChildApplicationResponse;\r\n \r\n @observable\r\n public IsDataLoading: boolean = false;\r\n\r\n /**\r\n * Ctor\r\n */\r\n constructor() {\r\n makeObservable(this);\r\n }\r\n\r\n @action\r\n public async SetIsDataLoading(state: boolean) {\r\n this.IsDataLoading = state;\r\n }\r\n\r\n \r\n @action\r\n public async SetLinkedInChildApplication(linkedInChildApplication: LinkedInChildApplicationResponse) {\r\n this.linkedInChildApplication = linkedInChildApplication;\r\n }\r\n}\r\n","import { AffiliateStore } from \"./AffiliateStore\";\r\nimport { CampaignSettingStore } from \"./CampaignSettingStore\";\r\nimport { CampaignStore } from \"./CampaignStore\";\r\nimport { CompanyStore } from \"./CompanyStore\";\r\nimport { CompanySettingStore } from \"./CompanySettingStore\";\r\nimport { GroupStore } from \"./GroupStore\";\r\nimport { IndeedStore } from \"./IndeedStore\";\r\nimport { NotificationStore } from \"./NotificationStore\";\r\nimport { PublisherSelectionStore } from \"./PublisherSelectionStore\";\r\nimport { UIStore } from \"./UIStore\";\r\nimport { UserStore } from \"./UserStore\";\r\nimport { VendorManagementStore } from \"./VendorManagementStore\";\r\nimport { ExplainabilityStore } from \"./ExplainabilityStore\";\r\nimport { AttributesManagementStore } from \"./AttributesManagementStore\";\r\nimport { LinkedInStore } from \"./LinkedInStore\";\r\n\r\nexport class RootStore {\r\n /**\r\n * Props\r\n */\r\n\r\n public uiStore: UIStore;\r\n public publisherSelectionStore: PublisherSelectionStore;\r\n public companyStore: CompanyStore;\r\n public campaignStore: CampaignStore;\r\n public indeedStore: IndeedStore;\r\n public userStore: UserStore;\r\n public notificationStore: NotificationStore;\r\n public campaignSettingStore: CampaignSettingStore;\r\n public companySettingStore: CompanySettingStore;\r\n public groupStore: GroupStore;\r\n public vendorManagementStore: VendorManagementStore;\r\n public affiliateStore: AffiliateStore;\r\n public explainabilityStore : ExplainabilityStore;\r\n public attributesManagementStore: AttributesManagementStore;\r\n public linkedinStore: LinkedInStore;\r\n\r\n constructor() {\r\n this.uiStore = new UIStore();\r\n this.publisherSelectionStore = new PublisherSelectionStore();\r\n this.companyStore = new CompanyStore();\r\n this.campaignStore = new CampaignStore();\r\n this.indeedStore = new IndeedStore();\r\n this.userStore = new UserStore();\r\n this.notificationStore = new NotificationStore();\r\n this.campaignSettingStore = new CampaignSettingStore();\r\n this.companySettingStore = new CompanySettingStore();\r\n this.groupStore = new GroupStore();\r\n this.vendorManagementStore = new VendorManagementStore();\r\n this.affiliateStore = new AffiliateStore();\r\n this.explainabilityStore = new ExplainabilityStore();\r\n this.attributesManagementStore = new AttributesManagementStore();\r\n this.linkedinStore = new LinkedInStore();\r\n }\r\n}\r\n","import React, { FC, createContext, ReactNode, ReactElement } from \"react\";\r\nimport { RootStore } from \"./RootStore\";\r\n\r\nexport const RootStoreContext = createContext({} as RootStore);\r\n\r\nexport type StoreComponent = FC<{\r\n children: ReactNode;\r\n}>;\r\n\r\nexport const RootStoreProvider: StoreComponent = ({\r\n children,\r\n}): ReactElement => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n","import { v4 as uuidv4 } from 'uuid';\r\n\r\nexport class Guid {\r\n public static NewGuid(): string {\r\n return uuidv4();\r\n }\r\n}","import \"./AppBreadcrumbs.scss\";\r\n\r\nimport { Breadcrumb } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { CSSProperties, useContext } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nimport { blue } from \"@ant-design/colors\";\r\n\r\nimport { BreadCrumb } from \"../../../models/BreadCrumb\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\n\r\ninterface Props {}\r\n\r\nconst AppBreadCrumbs = (props: Props) => {\r\n const { uiStore } = useContext(RootStoreContext);\r\n\r\n const CreateBreadcrumbStyles = (breadCrumb: BreadCrumb): CSSProperties => {\r\n // The last bread crumb should not be clickable\r\n const doesBreadcrumbContainPathOrAction =\r\n breadCrumb.clickHandler || breadCrumb.path;\r\n const isLastBreadcrumbInUi =\r\n uiStore.BreadCrumbs[uiStore.BreadCrumbs.length - 1]\r\n .breadCrumbText == breadCrumb.breadCrumbText;\r\n\r\n let styles: CSSProperties = {};\r\n \r\n\r\n if(doesBreadcrumbContainPathOrAction && !isLastBreadcrumbInUi) {\r\n styles[\"cursor\"] = \"pointer\";\r\n styles[\"color\"] = blue[6];\r\n }\r\n else {\r\n styles[\"cursor\"] = \"default\";\r\n }\r\n return styles;\r\n };\r\n\r\n return (\r\n \r\n {uiStore.BreadCrumbs.map((breadCrumb) =>\r\n breadCrumb.path ? (\r\n \r\n breadCrumb.clickHandler && breadCrumb.clickHandler()\r\n }>\r\n \r\n {breadCrumb.breadCrumbText}\r\n \r\n \r\n ) : (\r\n \r\n breadCrumb.clickHandler && breadCrumb.clickHandler()\r\n }>\r\n \r\n {breadCrumb.breadCrumbText}\r\n \r\n \r\n )\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default observer(AppBreadCrumbs);\r\n","import Sider from \"antd/lib/layout/Sider\";\r\nimport styled from \"styled-components\";\r\n\r\nimport { makeStyles } from \"@material-ui/core\";\r\n\r\n// Material UI\r\n\r\nexport const useStyles = makeStyles((theme) => ({\r\n pageHeader: {\r\n transition: '250ms all ease-in-out',\r\n overflow: \"hidden\"\r\n },\r\n pageHeaderOn: {\r\n height: '95px',\r\n opacity: 1\r\n },\r\n pageHeaderOff: {\r\n height: '0px',\r\n opacity: 0\r\n },\r\n}))\r\n","import { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\n\r\nimport { Box, Paper, Typography } from \"@material-ui/core\";\r\n\r\nimport useKeyboardListener from \"../../../hooks/useKeyboardListener\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { Guid } from \"../../../utils/Guid\";\r\nimport AppBreadCrumbs from \"../app-bread-crumbs/AppBreadCrumbs\";\r\nimport Loader from \"../loader/Loader\";\r\nimport { useStyles } from \"./PageHeader.styles\";\r\n\r\ninterface Props { }\r\n\r\nconst PageHeader = (props: Props) => {\r\n const { uiStore } = useContext(RootStoreContext);\r\n const [isPageHeaderActive, setIsPageHeaderActive] = useState(true);\r\n\r\n const classes = useStyles();\r\n\r\n /**\r\n * Functions\r\n */\r\n const GetHeaderClassName = (): string => {\r\n let className = classes.pageHeader;\r\n className += \" \"; //space\r\n className += isPageHeaderActive\r\n ? classes.pageHeaderOn\r\n : classes.pageHeaderOff;\r\n return className;\r\n };\r\n\r\n /**\r\n * Short cuts\r\n */\r\n useKeyboardListener(Guid.NewGuid(), [\"Alt\", \"h\"], () => {\r\n setIsPageHeaderActive(!isPageHeaderActive);\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n

{uiStore.CurrentRoute.mainTitle}

\r\n
\r\n\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default observer(PageHeader);\r\n","import \"./SupervisionPopUp.scss\";\r\n\r\nimport { Button, Form, FormInstance, Modal, Select } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext } from \"react\";\r\n\r\n\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { ManualActionRequestSource } from \"../../../models/manual-actions/ManualActionRequestSource\";\r\n\r\ntype Props = {};\r\nconst { Option } = Select;\r\n\r\nconst SupervisionPopUp = (props: Props) => {\r\n const { uiStore } = useContext(RootStoreContext);\r\n\r\n const formRef = React.createRef();\r\n\r\n const okClickHandler = () => {\r\n if (uiStore.PopUp != undefined && uiStore.PopUp.validationHandler) {\r\n uiStore.PopUp.validationHandler()\r\n .then((isValid) => {\r\n console.log(\"Validation result: \" + isValid);\r\n if (isValid) {\r\n popUpOkClickHandler();\r\n }\r\n })\r\n }\r\n else {\r\n console.log(\"Without validation\");\r\n popUpOkClickHandler();\r\n }\r\n };\r\n\r\n const popUpOkClickHandler = ()=>{\r\n if (uiStore.PopUp != undefined && uiStore.PopUp.okClickHandler) {\r\n uiStore.PopUp?.okClickHandler();\r\n }\r\n formRef.current?.resetFields();\r\n uiStore.ClearPopUp();\r\n }\r\n\r\n const cancelClickHandler = () => {\r\n if (\r\n uiStore.PopUp != undefined &&\r\n uiStore.PopUp?.cancelClickHandler != undefined\r\n ) {\r\n uiStore.PopUp.cancelClickHandler();\r\n }\r\n\r\n formRef.current?.resetFields();\r\n uiStore.ClearPopUp();\r\n };\r\n\r\n const handleSelectChange = (value: ManualActionRequestSource) => {\r\n if (uiStore.PopUp != undefined) {\r\n uiStore.PopUp.selectedValue = value\r\n }\r\n\r\n };\r\n\r\n const onRequired = () => {\r\n if (uiStore.PopUp?.hideSelectButton != undefined)\r\n return !uiStore.PopUp?.hideSelectButton;\r\n return false;\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default observer(SupervisionPopUp);\r\n","import React from \"react\";\r\nimport { CSSProperties } from \"styled-components\";\r\n\r\nimport miniLogo from \"../../assets/images/pandologic-logo-mini.png\";\r\nimport logoDefault from \"../../assets/images/pandologic-logo.png\";\r\nimport logoWhite from \"../../assets/images/plogic_Logo_W.png\";\r\n\r\ntype LogoType = \"default\" | \"white\" | \"mini\";\r\n\r\ninterface Props {\r\n logoType: LogoType;\r\n style?: CSSProperties;\r\n}\r\n\r\nconst PandoLogicLogo = (props: Props) => {\r\n const { logoType, style } = props;\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst getLogoSrc = (logoType: LogoType) => {\r\n switch (logoType) {\r\n case \"default\":\r\n return logoDefault;\r\n case \"mini\":\r\n return miniLogo;\r\n case \"white\":\r\n return logoWhite;\r\n }\r\n};\r\n\r\nexport default PandoLogicLogo;\r\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAfCAYAAAASsGZ+AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAGaADAAQAAAABAAAAHwAAAADXs2L+AAAEbElEQVRIDbVWX2wURRifb3evfRBKDVBaUzBGeZDzyVy8Vgu28WqtsXdPJUQtPpDURB/wxVwFgw1Bog/qkxKbNETqE/cgiEIIh1b+hCtpNESLBPBBUqw0XNT2bG3vdsfft3tz2dubNTbGSTbzzW++PzPf95uZJRHSnj595Z7FhYV3HCG2CxJFEjTWsnn1W5lodDnEJBS2wmYQ4EMEeMmdl0JIIYdmbs4ZGKcZ+2j8yV4ScoRlKWjwlc5vTrGsa2xU0wYnJyOSxI6aCUk7FcYBpJSt/Klgai7Ya4Ncv033Synqg8pYcqkG+xeANkhJ2A/pbJE1Nz08xykiomn+WNbpK4yUoPrekzfq55bzZ4SUWxmDkz/R/YQAY92p+PvDRCjVypobZOux3BY46cLyNqMWKfT3GYZ8zWxoGBvvihaCLo9O9dfdnb2zn0i4NUJqj6xr2rBvezSjZZ7V8VluAMU7jCCm6wwCKHvwfKr90BOfX+rFvMcgUw5eTLa7DOIASFgazlVLA2N5SMc6Q5A8UAlQNjHJPM0i2TQC6rbyx3J5Gin0dqDGrm4Z07HOQNFqWORIe8nv4L/KBiJ/oHESZ0wiRTjp0/yxrPS4BkpWvcJ0rCsXfqIHLhNIy4NS0jakQ5Jp9Zzvi32rnPj7lRa+hsKJM5Nr/ioUj0uibXB8Bd8vULqJoJ+EBfUvQCe7QZhFqrCcFkuYd0u2fdlvgN2VDMPoOZeMf/XxhcQmu7Q0Cmq0IQM506rf9XJH9lYY7p74IIua1rX84A/AMnJuOY7zBstuACkSAFfhTCW8gOG49lrJPL5xkYvNDv0NRW30xrwDf1Nj1as5b+wG0bOIjipV1RuSMp4scwqrHutx9z0pn+SNfkOrsWmvPXfHcBz5PD9ayP9oc+qx91iHaxCsyT/hfr//m0z9U1N1v16fH8bF+CJHwVkZi7ZGhkdisWLHiclNwi6OAmzDbnLCjOy60Be7xTf1fDH/NvAXoO+QMPA0r9qX+G13c3CHzDpr5kZhPxTTMFBtz9Vpmy/LIQ4AViXcCfTEAYXonl/Kvwub3cpACieNp5nsNUuPwg/0XWeKdd0GaFh5UpVRBeMd+Ft5DBfurv1TwqEB79z40TK7JGGtgYZVtvDJd1Pkn0PKOr+83IyVrvXDLHt+9OzCBWkcDhrweHGx9DDXACc9i2uhwD2PS0V6RKfPfph1WFgWb0GBe3cMZer8Wlr2HxN7HCEHSIoHsC338YLTs/eakeSJvtiCcpo8fm113vkdb41s9zByoPcz0nvEamw7MN5F2h+NqguyX0ozf/K71uXi8ut4LV/Fam7jwcnC0ywUNwB7Bs6bgB+M1NGh9b3xmQyRrRYR1lcF8St1HLuURbWe8mOeTJ/uXP/mXh1Va3U9RHt3uVOStH+EJskv3ABM1cAFueIguM+u6oxwSX4fRlWdPmOhO2mw6CLmZ6sMSVw7l4r/iMKHXJBV2pVBaJBTz7bNWab5HH7uJsoUPmualMRYhlG14jUg/A0C5yd1cYFRdgAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,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\"","import \"./NotificationsList.scss\";\r\n\r\nimport { Badge, Empty, List, message, Popover } from \"antd\";\r\nimport _ from \"lodash\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { IoMdNotificationsOutline } from \"react-icons/io\";\r\nimport { io } from \"socket.io-client\";\r\n\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport settings from \"../../../../../config/AppSettings/SettingsFactory\";\r\nimport { FetchError } from \"../../../../../exceptions/AlgoSupervisionExceptions\";\r\nimport useOnInitAsync from \"../../../../../hooks/useOnInitAsync\";\r\nimport { Notification } from \"../../../../../models/notifications/Notification\";\r\nimport NotificationService from \"../../../../../services/notifications/NotificationService\";\r\nimport { RootStoreContext } from \"../../../../../stores/RootStoreContext\";\r\nimport Loader from \"../../../loader/Loader\";\r\n\r\ntype Props = {\r\n collapsed: boolean;\r\n};\r\n\r\nconst NotificationsList = (props: Props) => {\r\n const { collapsed } = props;\r\n const { userStore, notificationStore } = useContext(RootStoreContext);\r\n\r\n useOnInitAsync(async () => {\r\n /*\r\n if (!userStore.User) return;\r\n try {\r\n const webSocketUri = `${settings.notificationServerUrl}?userId=${userStore.User?.id}`;\r\n const socket = io(webSocketUri);\r\n\r\n socket.on(\"notifications\", (event: Notification) => {\r\n notificationStore.Notifications &&\r\n notificationStore.Notifications.push(event);\r\n });\r\n\r\n await notificationStore.SetNotificationStateForUser();\r\n } catch (error) {\r\n // We should be able to continue even if notification service is down\r\n console.error(error);\r\n \r\n // if (error instanceof FetchError) {\r\n // return message.error(error.apiError.errorMessage);\r\n // }\r\n // if (error instanceof Error) {\r\n // return message.error(error.message);\r\n // }\r\n }\r\n */\r\n }, [userStore.User]);\r\n\r\n const notifications = notificationStore.Notifications;\r\n\r\n if (!notifications || !userStore.User) {\r\n return ;\r\n }\r\n\r\n return (\r\n {\r\n if (!isOpen) return;\r\n\r\n const notificationsToUpdateAsSeen = notifications!\r\n .filter((x) => !x.seen)\r\n .map((notification) => ({\r\n ...notification,\r\n seen: true,\r\n }));\r\n\r\n await Promise.all(\r\n notificationsToUpdateAsSeen.map((notification) =>\r\n NotificationService.Update(\r\n notification.id,\r\n _.omit(notification, [\"createdAt\", \"id\"])\r\n )\r\n )\r\n );\r\n\r\n notificationStore.Notifications = notifications.map(\r\n (notification) => ({\r\n ...notification,\r\n seen: true,\r\n })\r\n );\r\n }}\r\n placement=\"rightTop\"\r\n title=\"Notifications\"\r\n content={\r\n (\r\n \r\n \r\n {item.message}\r\n \r\n )}\r\n />\r\n }\r\n trigger=\"click\">\r\n \r\n !x.seen).length}>\r\n \r\n \r\n\r\n \r\n Notifications\r\n

\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default observer(NotificationsList);\r\n","import \"./UserInformation.scss\";\r\n\r\nimport Avatar from \"antd/lib/avatar/avatar\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext } from \"react\";\r\n\r\nimport { UserOutlined } from \"@ant-design/icons\";\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport { RootStoreContext } from \"../../../../../stores/RootStoreContext\";\r\n\r\ntype Props = {\r\n collapsed: boolean;\r\n};\r\n\r\nconst UserInformation = (props: Props) => {\r\n const { collapsed } = props;\r\n const { userStore } = useContext(RootStoreContext);\r\n\r\n return (\r\n \r\n } />\r\n\r\n \r\n

{userStore.User?.name}

\r\n \r\n {userStore.User?.email}\r\n

\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default observer(UserInformation);\r\n","import Sider from \"antd/lib/layout/Sider\";\r\nimport styled from \"styled-components\";\r\n\r\nimport { makeStyles } from \"@material-ui/core\";\r\n\r\nexport const SiderStyled = styled(Sider)`\r\n \r\n`;\r\n\r\n\r\n// Material UI\r\n\r\nexport const useStyles = makeStyles((theme) => ({\r\n logo: {\r\n marginTop: theme.spacing(2),\r\n marginBottom: theme.spacing(4),\r\n display: 'flex',\r\n justifyContent: 'center',\r\n margin: '0 auto'\r\n }\r\n}))\r\n","import { CgData } from \"react-icons/cg\";\r\nimport { FiSettings } from \"react-icons/fi\";\r\nimport { GiMoneyStack } from \"react-icons/gi\";\r\nimport { GoLinkExternal } from \"react-icons/go\";\r\nimport { IconType } from \"react-icons/lib\";\r\nimport {SiLinkedin, SiSmartthings} from \"react-icons/si\";\r\n\r\n\r\nimport {\r\n actionsRoutes,\r\n explainabilityRoute,\r\n logoutRoute,\r\n shortcutManualsRoute,\r\n supervisionAffiliatesRoute,\r\n supervisionCampaignsRoute,\r\n supervisionCompaniesRoute,\r\n} from \"../../../routes/routes\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { RoutesPaths } from \"../../../constants/RoutePaths\";\r\nimport { Company } from \"../../../models/operation/Company\";\r\n\r\nimport { IoMdCut } from \"react-icons/io\";\r\nimport { SiIndeed } from \"react-icons/si\";\r\nimport { MdGroupWork } from \"react-icons/md\";\r\nimport { FiLayers } from \"react-icons/fi\";\r\nimport { Affiliate } from \"../../../models/operation/Affiliate\";\r\n\r\n\r\n\r\nexport type sideMenuSectionOptionType = {\r\n optionTitle?: string;\r\n route: string;\r\n itemKey?: string;\r\n children?: sideMenuSectionOptionType[];\r\n sectionIcon?: IconType;\r\n action?: () => void;\r\n}\r\n\r\nexport type sideMenuSectionType = {\r\n sectionTitle: string;\r\n sectionIcon: IconType;\r\n itemKey: string;\r\n sectionOptions: sideMenuSectionOptionType[];\r\n}\r\n\r\nconst LinkRoute = (link: string) => {\r\n return `link:${link}`;\r\n}\r\n\r\n\r\nexport const getSideMenuData = (company?: Company, affiliate?: Affiliate): sideMenuSectionType[] => {\r\n const sections: sideMenuSectionType[] = [\r\n {\r\n sectionTitle: \"Supervision\",\r\n sectionIcon: GiMoneyStack,\r\n itemKey: 'supervision',\r\n sectionOptions: [\r\n {\r\n optionTitle: \"Affiliates\",\r\n route: supervisionAffiliatesRoute.routePath,\r\n itemKey: supervisionAffiliatesRoute.id\r\n },\r\n {\r\n optionTitle: \"Accounts\",\r\n route: supervisionCompaniesRoute.routePath,\r\n itemKey: supervisionCompaniesRoute.id,\r\n children: [],\r\n },\r\n ]\r\n },\r\n {\r\n sectionTitle: \"Explainability\",\r\n sectionIcon: SiSmartthings,\r\n itemKey: 'explainability',\r\n sectionOptions: [\r\n {\r\n optionTitle: \"Job Explainability View\",\r\n route: explainabilityRoute.routePath,\r\n itemKey: explainabilityRoute.id,\r\n },\r\n ],\r\n },\r\n {\r\n sectionTitle: \"User Actions\",\r\n sectionIcon: CgData,\r\n itemKey: 'sub2',\r\n sectionOptions: [\r\n {\r\n optionTitle: \"Table View\",\r\n route: actionsRoutes.actionsTable.routePath,\r\n itemKey: actionsRoutes.actionsTable.id,\r\n },\r\n // {\r\n // optionTitle: \"Calendar\",\r\n // route: \"TODO\",\r\n // itemKey: \"TODO\",\r\n // },\r\n ],\r\n },\r\n {\r\n sectionTitle: \"External Links\",\r\n sectionIcon: GoLinkExternal,\r\n itemKey: 'external-links',\r\n sectionOptions: [\r\n {\r\n optionTitle: \"PandoIQ\",\r\n route: LinkRoute(\"https://pandoiq.com\"),\r\n itemKey: \"pandoiq\"\r\n },\r\n {\r\n optionTitle: \"Old Campaign Manager\",\r\n route: LinkRoute(\"http://campaignmanager.pandoiq.com/PandoIQmanager/Dashboard\"),\r\n itemKey: \"old-campaign-manager\"\r\n },\r\n {\r\n optionTitle: \"PPR\",\r\n route: LinkRoute(\"https://ppr.pandoiq.com\"),\r\n itemKey: \"ppr\"\r\n },\r\n ],\r\n },\r\n {\r\n sectionTitle: \"Settings\",\r\n sectionIcon: FiSettings,\r\n itemKey: 'sub3',\r\n sectionOptions: [\r\n {\r\n optionTitle: \"Shortcuts\",\r\n route: shortcutManualsRoute.routePath,\r\n itemKey: shortcutManualsRoute.id,\r\n },\r\n {\r\n optionTitle: \"Log Out\",\r\n route: logoutRoute.routePath,\r\n itemKey: logoutRoute.id,\r\n },\r\n ],\r\n },\r\n ];\r\n\r\n // Update \"Affiliates\" and \"Accounts\" sections based on company and affiliate selection\r\n if (company) {\r\n const accountsSection = sections.find(section => section.itemKey === 'supervision')\r\n ?.sectionOptions.find(option => option.itemKey === supervisionCompaniesRoute.id);\r\n if (accountsSection) {\r\n accountsSection.optionTitle = `Accounts (${company.companyName})`;\r\n accountsSection.children = [\r\n {\r\n sectionIcon: CgData,\r\n optionTitle: \"Account Settings\",\r\n route: RoutesPaths.Supervision.CompanyTrackSystemRoutes.BuildCompanyRoute(company.companyId)\r\n },\r\n {\r\n sectionIcon: IoMdCut,\r\n optionTitle: \"Vendor Management\",\r\n route: RoutesPaths.Supervision.VendorManagementRoutes.BuildCompanyVendorManagementRoute(company.companyId)\r\n },\r\n {\r\n sectionIcon: FiLayers,\r\n optionTitle: \"Account Attributes\",\r\n route: RoutesPaths.Supervision.AttributesManagementRoutes.BuildCompanyAttributesRouteManagementRoute(company.companyId)\r\n },\r\n {\r\n sectionIcon: SiIndeed,\r\n optionTitle: \"Indeed Management\",\r\n route: RoutesPaths.Supervision.IndeedRoutes.BuildCampaignRoute(company.campaign.campaignID)\r\n },\r\n // {\r\n // sectionIcon: SiLinkedin,\r\n // optionTitle: \"LinkedIn Management\",\r\n // route: RoutesPaths.Supervision.LinkedInRoutes.BuildStrategyRoute(company.companyId)\r\n // },\r\n {\r\n sectionIcon: MdGroupWork,\r\n optionTitle: \"Groups\",\r\n route: RoutesPaths.Supervision.GroupsRoutes.BuildGroupRoute(company.campaign.campaignID)\r\n },\r\n ];\r\n }\r\n }\r\n if (affiliate) {\r\n const affiliatesSection = sections.find(section => section.itemKey === 'supervision')\r\n ?.sectionOptions.find(option => option.itemKey === supervisionAffiliatesRoute.id);\r\n if (affiliatesSection) {\r\n affiliatesSection.optionTitle = `Affiliates (${affiliate.affiliateName})`;\r\n affiliatesSection.children = [\r\n {\r\n sectionIcon: IoMdCut,\r\n optionTitle: \"Vendor Management\",\r\n route: RoutesPaths.Supervision.VendorManagementRoutes.BuildAffiliateVendorManagementRoute(affiliate.affiliateId)\r\n },\r\n ];\r\n }\r\n }\r\n\r\n return sections;\r\n};\r\n","import \"./SideMenu.scss\";\r\n\r\nimport { Badge, Layout, Menu, Popover, Tooltip } from \"antd\";\r\nimport Avatar from \"antd/lib/avatar/avatar\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport { Link, useLocation } from \"react-router-dom\";\r\n\r\nimport { UserOutlined } from \"@ant-design/icons\";\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport useKeyboardListener from \"../../../hooks/useKeyboardListener\";\r\nimport { RouteManager } from \"../../../services/RouteManager\";\r\nimport { RootStoreContext } from \"../../../stores/RootStoreContext\";\r\nimport { Guid } from \"../../../utils/Guid\";\r\nimport PandoLogicLogo from \"../../theme/PandoLogicLogo\";\r\nimport NotificationsList from \"./components/NotificationsList/NotificationsList\";\r\nimport UserInformation from \"./components/UserInformation/UserInformation\";\r\nimport { useStyles } from \"./SideMenu.styles\";\r\nimport { getSideMenuData, sideMenuSectionOptionType, sideMenuSectionType } from \"./SideMenuData\";\r\nimport { supervisionCompaniesRoute } from \"../../../routes/routes\";\r\n\r\nconst { Sider } = Layout;\r\nconst { SubMenu } = Menu;\r\n\r\n\r\n\r\nconst isRouteALink = (route: string) => {\r\n return route.includes(\"link:\");\r\n};\r\n\r\nconst GetLinkFromRoute = (route: string) => {\r\n return route.substring(\"link:\".length);\r\n};\r\n\r\ninterface Props { }\r\nconst SideMenu = (props: Props) => {\r\n const [collapsed, setCollapsed] = useState(false);\r\n const { userStore, companyStore,affiliateStore } = useContext(RootStoreContext);\r\n const { SelectedCompany } = companyStore;\r\n const { SelectedAffiliate} = affiliateStore;\r\n const [sideNavigationData, setSideNavigationData] = useState(getSideMenuData());\r\n\r\n\r\n const location = useLocation();\r\n const classes = useStyles();\r\n\r\n const routeService = new RouteManager();\r\n const currentRoute = routeService.GetCurrentRoute(location.pathname);\r\n\r\n useEffect(() => {\r\n if (SelectedCompany && SelectedCompany.campaign) {\r\n const sideMenuDataUpdated = getSideMenuData(SelectedCompany, SelectedAffiliate);\r\n setSideNavigationData(sideMenuDataUpdated);\r\n }\r\n }, [SelectedCompany]);\r\n\r\n useEffect(() => {\r\n if (SelectedAffiliate) {\r\n const sideMenuDataUpdated = getSideMenuData(SelectedCompany, SelectedAffiliate);\r\n setSideNavigationData(sideMenuDataUpdated);\r\n }\r\n }, [SelectedAffiliate]);\r\n \r\n /**\r\n * Short cuts\r\n */\r\n useKeyboardListener(Guid.NewGuid(), [\"Control\", \"b\"], () => {\r\n setCollapsed(!collapsed);\r\n });\r\n\r\n useKeyboardListener(Guid.NewGuid(), [\"Alt\", \"b\"], () => {\r\n setCollapsed(!collapsed);\r\n });\r\n\r\n const handleMenuItemClick = () => {\r\n console.log(\"handleMenuItemClick\")\r\n\r\n };\r\n\r\n const renderMenuItem = (menuItem: sideMenuSectionOptionType) => {\r\n if (menuItem.children && menuItem.children.length > 0 && SelectedCompany != null) {\r\n // If the menu item has children, render a SubMenu\r\n return (\r\n \r\n {menuItem.optionTitle}\r\n \r\n )}>\r\n {menuItem.children.map((child) => renderMenuItem(child))}\r\n \r\n );\r\n } else {\r\n // If the menu item has no children, render a regular Menu.Item\r\n return (\r\n : null}\r\n style={{ padding: '0 0.8rem' }}\r\n >\r\n {isRouteALink(menuItem.route) ? (\r\n \r\n {menuItem.optionTitle}\r\n \r\n ) : (\r\n {menuItem.optionTitle}\r\n )}\r\n \r\n );\r\n }\r\n };\r\n\r\n\r\n\r\n return (\r\n setCollapsed(!collapsed)}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {sideNavigationData.map((sideMenuSection) => (\r\n \r\n }\r\n title={sideMenuSection.sectionTitle}\r\n >\r\n {sideMenuSection.sectionOptions.map((sideMenuSectionOption) =>\r\n renderMenuItem(sideMenuSectionOption)\r\n )}\r\n \r\n ))}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default observer(SideMenu);\r\n","import { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { Redirect, Route, RouteProps } from \"react-router\";\r\n\r\nimport { RoutesPaths } from \"../constants/RoutePaths\";\r\nimport { RootStoreContext } from \"../stores/RootStoreContext\";\r\n\r\nexport type ProtectedRouteProps = {} & RouteProps;\r\n\r\nconst PrivateRoute = ({ ...routeProps }: ProtectedRouteProps) => {\r\n const { userStore } = useContext(RootStoreContext);\r\n if (userStore.User) {\r\n return ;\r\n } else {\r\n return ;\r\n }\r\n};\r\n\r\nexport default observer(PrivateRoute);\r\n","import React from \"react\";\r\nimport { Route, Switch } from \"react-router-dom\";\r\n\r\nimport PrivateRoute from \"../hoc/PrivateRoute\";\r\nimport useSetCurrentRoute from \"../hooks/useSetCurrentRoute\";\r\nimport { routes } from \"./routes\";\r\n\r\ninterface RouteWrapperProps {\r\n children: React.ReactNode;\r\n}\r\nconst RouteWrapper = (props: RouteWrapperProps) => {\r\n useSetCurrentRoute();\r\n\r\n return <>{props.children};\r\n};\r\n\r\n\r\ninterface RouterComponentProps {}\r\nconst RouterComponent = (props: RouterComponentProps) => {\r\n return (\r\n \r\n {routes\r\n .sort((a, b) => b.routePath.length - a.routePath.length) // otherwise route params will match concrete routes\r\n .map((route) => (\r\n \r\n {route.isAutoRouteSetup ? (\r\n {route.renderComponent}\r\n ) : (\r\n route.renderComponent\r\n )}\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default RouterComponent;\r\n","import Cookies from \"js-cookie\";\r\nimport jwt from \"jsonwebtoken\";\r\n\r\nimport { User } from \"../models/users/User\";\r\nimport { UserStore } from \"../stores/UserStore\";\r\n\r\ntype UserIdentityJwtSchema = {\r\n aud: string;\r\n email: string;\r\n exp: number;\r\n iat: number;\r\n iss: string;\r\n nbf: number;\r\n policies: string;\r\n role_id: string;\r\n user_id: string;\r\n user_name: string;\r\n};\r\n\r\nconst SeedUserData = (userStore: UserStore) => {\r\n const userIdentityJwt = Cookies.get(\"User.Identity\");\r\n if (!userIdentityJwt) {\r\n return;\r\n }\r\n\r\n const decodedJwt = jwt.decode(userIdentityJwt) as UserIdentityJwtSchema;\r\n\r\n const user: User = {\r\n id: Number(decodedJwt.user_id),\r\n email: decodedJwt.email,\r\n name: decodedJwt.user_name,\r\n roleId: Number(decodedJwt.role_id),\r\n };\r\n userStore.SetUser(user);\r\n};\r\n\r\nexport default SeedUserData;\r\n","import \"./App.scss\";\r\n\r\nimport { Layout } from \"antd\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { useContext } from \"react\";\r\nimport { Route, Switch, useHistory, useLocation } from \"react-router-dom\";\r\n\r\nimport { Box } from \"@material-ui/core\";\r\n\r\nimport Footer from \"./components/general/footer/Footer\";\r\nimport PageHeader from \"./components/general/page-header/PageHeader\";\r\nimport SupervisionPopUp from \"./components/general/popup/SupervisionPopUp\";\r\nimport SideMenu from \"./components/general/side-menu/SideMenu\";\r\nimport { RoutesPaths } from \"./constants/RoutePaths\";\r\nimport useKeyboardListener from \"./hooks/useKeyboardListener\";\r\nimport RouterComponent from \"./routes\";\r\nimport LoginPage from \"./routes/pages/Login/LoginPage\";\r\nimport { RouteManager } from \"./services/RouteManager\";\r\nimport { RootStoreContext } from \"./stores/RootStoreContext\";\r\nimport { Guid } from \"./utils/Guid\";\r\nimport SeedUserData from \"./utils/SeedUserData\";\r\n\r\n\r\nconst { Content } = Layout;\r\n\r\ninterface Props {}\r\n\r\nconst App = (props: Props) => {\r\n const history = useHistory();\r\n const { userStore } = useContext(RootStoreContext);\r\n\r\n const routeService = new RouteManager();\r\n const location = useLocation();\r\n const _ = routeService.GetCurrentRoute(location.pathname); // Will throw if doesn't exist - for detection purposes\r\n\r\n SeedUserData(userStore);\r\n\r\n useKeyboardListener(Guid.NewGuid(), [\"Alt\", \"q\"], () => {\r\n history.push(RoutesPaths.Settings.ShortCutsManual);\r\n });\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n