{"version":3,"sources":["components/attachment/AttachmentStyles.js","assets/Icons/TokenIconSvg.js","assets/Icons/CheckIconSvg.js","assets/Icons/DashboardIconSvg.js","assets/Icons/BenefitsIconSvg.js","assets/Icons/BenefitLogoSvg.js","assets/Icons/BenefitLogoIconSvg.js","assets/Icons/BLogoSvg.js","assets/Icons/EmployeesIconSvg.js","assets/Icons/EditIconSvg.js","assets/Icons/SettingsIconSvg.js","assets/Icons/HelpIconSvg.js","assets/Icons/HamburgerIconSvg.js","assets/Icons/LogoutIconSvg.js","assets/Icons/DotsIconSvg.js","assets/Icons/LogoIconSvg.js","assets/Icons/AttachmentIconSvg.js","assets/Icons/TrashIconSvg.js","assets/Icons/LeftArrowIconSvg.js","assets/Icons/WatchIcon.js","assets/Icons/InfoIconSvg.js","assets/Icons/ActiveIcon.js","assets/Icons/ImagePlaceholder.js","assets/Icons/EmptyListSvg.js","assets/Icons/ErrorIconSvg.js","assets/Icons/UserDisabledIconSvg.js","assets/Icons/PendingActivationIcon.js","assets/Icons/PendingDeactivationIcon.js","assets/Icons/NotificationBellSvg.js","assets/Icons/SortIconSvg.js","assets/Icons/FilterIconSvg.js","assets/Icons/FilterIconMobileSvg.js","assets/Icons/ChevronIconDownSvg.js","assets/Icons/MicrosoftIconSvg.js","assets/Icons/EnvelopIcon.js","assets/Icons/ClockIcon.js","assets/Icons/GoBackSvg.js","assets/Icons/XCircleSVG.js","assets/Icons/CheckCircleSVG.js","assets/Icons/FullHeartIconSVG.js","assets/Icons/OutlineHeartIconSVG.js","assets/Icons/PendingIconSVG.js","assets/Icons/AcceptedIconSVG.js","assets/Icons/RejectedIconsSVG.js","assets/Icons/FlagCurrency.js","components/locales/Icons/index.js","components/attachment/Attachment.js","components/auth/AuthsSyles.js","components/button/ButtonStyles.js","components/button/Button.js","components/button/index.js","components/auth/Auth.js","components/benefitCard/BenefitCardStyles.js","builders/benefitGroups/benefitGroup.status.js","services/imageHandler.js","services/truncateString.js","services/general.utils.js","builders/benefitGroups/benefitGroup.types.js","constants/roles.constants.js","constants/localStorage.constants.js","services/localStorage.service.js","constants/api.constants.js","services/api/api.service.js","constants/actionTypes/employee/employeeBenefits.constants.js","services/global.entities.js","constants/companyStatus.constants.js","models/domain/Company.entity.js","models/domain/Voucher.entity.js","models/domain/Benefit.entity.js","models/domain/Provider.entity.js","models/domain/City.entity.js","models/domain/Category.entity.js","models/domain/BenefitGroup.entity.js","models/domain/UserBenefit.entity.js","models/domain/Employee.entity.js","constants/companyThemeMode.constants.js","models/domain/CompanyTheme.entity.js","models/domain/BudgetBreakdown.entity.js","models/domain/User.entity.js","models/domain/Tag.entity.js","models/domain/Tier.entity.js","models/domain/DropDown.entity.js","models/domain/DropDownOption.entity.js","models/domain/Activity.entity.js","models/domain/LocalBenefit.entity.js","models/domain/LocalBenefitGroup.entity.js","models/domain/LocalBenefitGroupForm.entity.js","models/domain/LocalBenefitForm.entity.js","models/domain/HrEmployee.entity.js","models/domain/HrEmployeeForm.entity.js","models/domain/HrEmployeeDetails.entity.js","models/domain/TokenWorth.entity.js","models/domain/TierForm.entity.js","models/domain/Budget.entity.js","models/domain/TotalBudget.entity.js","models/domain/BudgetSpending.entity.js","models/domain/CategoryBudget.entity.js","models/domain/CompanyUsage.entity.js","models/domain/SyncedEmployees.entity.js","models/domain/Combination.entity.js","models/domain/TokenValue.entity.js","models/domain/PriceRange.entity.js","constants/systemNotifications.constants.js","models/server/payloads/Employee.payload.js","services/roles.utils.js","models/server/payloads/User.payload.js","models/server/payloads/CreateCompany.payload.js","services/textEditor.utils.js","models/server/payloads/Provider.payload.js","models/server/payloads/BenefitGroup.payload.js","models/server/payloads/Benefit.payload.js","models/server/payloads/AvailableTier.payload.js","models/server/payloads/LocalBenefitGroup.payload.js","models/server/payloads/LocalBenefit.payload.js","models/server/payloads/EmployeeFromCsv.payload.js","models/server/payloads/HrOnboarding.payload.js","models/server/payloads/SubscribeUnsubscribe.payload.js","models/server/payloads/VouchersSubscribeUnsubscribe.payload.js","models/server/payloads/BenefitChangedPriceSystemNotification.payload.js","models/server/payloads/TierChangedBudgetSystemNotification.payload.js","models/server/payloads/EmployeeChangedTierSystemNotification.payload.js","models/server/payloads/BenefitGroupChangedLocation.payload.js","models/server/payloads/EmployeeLocationUpdatedInfo.payload.js","models/server/payloads/BenefitGroupLocationUpdatedInfo.payload.js","models/server/payloads/BenefitChangedExpirationTypeSystemNotification.payload.js","models/server/payloads/EmployeeSubscribedToMcpBenefitSystemNotification.payload.js","models/server/payloads/CompanyBudgetRollover.payload.js","models/server/payloads/CreateBenefitGroupReview.payload.js","services/date.utils.js","models/server/payloads/BonusCreate.payload.js","models/server/payloads/Category.payload.js","models/server/payloads/Tag.payload.js","models/server/payloads/Tier.payload.js","models/server/payloads/CompanyTheme.payload.js","models/server/payloads/UploadPDF.payload.js","models/server/payloads/EmployeeChangedLocation.payload.js","models/domain/SystemNotification.entity.js","models/domain/UserRole.entity.js","models/domain/CompanyBudgetRollover.entity.js","models/domain/BenefitGroupReview.entity.js","models/domain/Bonus.entity.js","models/domain/CompanyBranch.entity.js","models/modelMapper.service.js","actions/employee/employeeBenefits.actions.js","utils/helpers/isWithinLastThreeMonths.js","utils/transformTokensToRsd.js","components/benefitCard/BenefitCard.js","components/benefitCard/index.js","components/checkboxInput/CheckboxInputStyles.js","components/checkboxInput/CheckboxInput.js","components/checkboxInput/index.js","components/datePickerInput/DatePickerInputStyles.js","components/datePickerInput/DatePickerInput.js","components/fileInput/FileInputStyles.js","components/fileInput/FileInput.js","components/CustomTooltip.js","components/filterInput/FilterInput.js","constants/actionTypes/app.constants.js","actions/app.actions.js","models/server/auth/login.response.js","models/server/responses/Companies.response.js","models/server/responses/Categories.response.js","models/server/responses/Tiers.response.js","models/server/responses/Users.response.js","models/server/responses/TagsResponse.js","models/server/responses/Logs.response.js","models/server/responses/Providers.response.js","models/server/responses/BenefitGroups.response.js","models/server/responses/Employees.response.js","models/server/responses/LocalBenefits.response.js","models/server/responses/HrEmployees.response.js","models/server/responses/HrOnboarding.response.js","models/server/responses/SubscribedBenefitGroups.response.js","models/server/responses/SystemNotifications.response.js","models/server/responses/Roles.response.js","models/server/responses/Benefits.response.js","models/server/responses/Branches.response.js","services/api/auth.service.js","services/getInitals.js","builders/employee/priceRangeOptions.config.js","components/locales/LanguageDropdownStyles.js","components/locales/Icons/PlanetIcon.js","hooks/useClickOutside.js","components/locales/LanguageDropdown.js","components/header/logoutDropdown/LogoutDropdown.js","components/header/switchPlatformsDropdown/switchPlatformsDropdown.styles.js","components/header/switchPlatformsDropdown/SwitchPlatformsDropdown.js","components/header/budgetBreakdownDropdown/BudgetBreakdownDropdown.styles.js","components/header/budgetBreakdownDropdown/BudgetBreakdownDropdown.js","constants/actionTypes/hr/employees.constants.js","actions/hr/employees.actions.js","hooks/useWindowDimensions.js","components/header/HeaderStyles.js","models/server/requests/AvailableTiers.request.js","services/api/admin/users.service.js","constants/monthsInSerbian.constants.js","components/timerForLastDay/TimerForLastDay.js","components/header/Header.js","components/header/index.js","components/ImageUpload/ImageUploadStyles.js","components/ImageUpload/imageUpload.services.js","services/fileReader.js","components/ImageUpload/ImageUpload.js","components/ImageUpload/index.js","components/newFileInput/newFileInput.js","components/newFileInput/index.js","components/InitialsCircleComponent/InitialCircleStyles.js","components/InitialsCircleComponent/IntitialsCircle.js","components/InitialsCircleComponent/index.js","components/timer/countDown.service.js","components/timer/subscribeCountDown.js","components/input/InputStyles.js","components/input/Input.js","components/input/index.js","components/inputLabel/InputLabel.js","components/inputLabel/index.js","components/phoneNumberInput/PhoneNumberInputStyles.js","components/phoneNumberInput/PhoneNumberInput.js","components/phoneNumberInput/index.js","components/selectInput/itemRendered.js","components/selectInput/SelectInputStyles.js","components/selectInput/selectInput.services.js","components/selectInput/SelectInput.js","components/selectInput/index.js","components/locationsMultiselectInput/LocationsMultiselectInputStyles.js","components/locationsMultiselectInput/LocationsMultiselectInput.js","components/locationsMultiselectInput/index.js","components/typesMultiselectInput/TypesMultiselectInput.styles.js","components/typesMultiselectInput/TypesMultiselectInput.js","components/typesMultiselectInput/index.js","components/multiselectInput/MultiselectInputStyles.js","utils/helpers/debounce.js","components/multiselectInput/MultiselectInput.js","components/multiselectInput/index.js","components/searchInput/SearchInputStyles.js","components/searchInput/SearchInput.js","components/searchInput/index.js","components/sidebarMenu/SidebarMenuStyles.js","components/sidebarMenu/sidebarMenuTab/SidebarMenuTab.js","components/sidebarMenu/sidebarMenuTab/index.js","config/navigation.config.js","components/sidebarMenu/SidebarMenu.js","components/sidebarMenu/index.js","components/textAndLineComponent/TextAndLineStyles.js","components/textAndLineComponent/TextAndLine.js","components/textAndLineComponent/index.js","components/wrapperCardComponent/WrapperCardComponent.js","components/wrapperCardComponent/index.js","components/listPlaceholder/ListPlaceholder.js","components/sortSelectInput/itemRenderer.js","components/sortSelectInput/SortSelectInput.styles.js","components/sortSelectInput/SortSelectInput.js","components/sortSelectInput/index.js","utils/translateSort.js","components/disableUserModal/DisableUserModal.js","components/disableUserModal/index.js","components/disableUsersModal/DisableUsersModalStyles.js","components/disableUsersModal/DisableUsersModal.js","components/disableUsersModal/index.js","components/listItem/ListItemStyles.js","components/listItem/ListItemExpandedStyles.js","components/listItem/ListItem.js","components/companiesListItem/CompaniesListItemStyles.js","components/companiesListItem/CompaniesListItemExpandedStyles.js","components/companiesListItem/CompaniesListItem.js","pages/HrPages/EmployeePages/userBenefits.tableHeader.js","components/employeeListItem/employeeActiveBenefits/EmployeeActiveBenefitsStyles.js","components/employeeListItem/employeeActiveBenefits/EmployeeActiveBenefits.js","components/employeeListItem/employeeActiveBenefits/index.js","components/employeeListItem/EmployeeListItemStyles.js","components/employeeListItem/EmployeeListItemExpandedStyles.js","models/server/responses/Cities.response.js","utils/queryBuilder.js","services/api/hr/employees.service.js","services/loadingOverride.styles.js","components/employeeListItem/EmployeeListItem.js","components/modal/ModalStyles.js","components/modal/Modal.js","components/modal/modal.services.js","components/tableComponent/TableComponent.js","components/tableComponent/tableRow/TableRowStyles.js","components/tableComponent/tableRow/TableRowActionsStyles.js","components/tableComponent/tableRow/TableRowActions.js","components/tableComponent/tableRow/TableRow.js","components/tableComponent/tableHead/TableHeadColumnStyles.js","components/tableComponent/tableHead/TableHeadColumn.js","components/tableComponent/settingsTableRow/SettingsTableRow.js","components/companyThemeLogo/CompanyThemeLogo.styles.js","components/companyThemeLogo/CompanyThemeLogo.js","components/companyThemeLogo/index.js","pages/NotFound.js","components/CustomBudgets/CustomBudgetsStyles.js","components/CustomBudgets/March8/March8Header.js","components/CustomBudgets/March8/March8Cards.js","components/CustomBudgets/March8/March8Body.js","components/CustomBudgets/March8/March8Styles.js","components/CustomBudgets/March8/March8.js","components/CustomBudgets/CustomBudgets.js","Router.js","pages/Login/LoginStyles.js","utils/helpers/findLocales.js","services/validations/publicPages/loginFormValidation.js","components/forms/login/LoginFormStyles.js","components/ChristmasAnimation/TreeAnimationStyles.js","components/ChristmasAnimation/ChristmasAnimation.js","components/forms/login/LoginForm.js","config/azureAuth.config.js","pages/Login/AzureLogin.styles.js","pages/Login/AzureLogin.js","services/errors/login/AzureLoginError.js","pages/Login/Login.js","services/validations/publicPages/forgotPassword.validation.js","components/forms/forgotPassword/ForgotPassowrdForm.js","pages/Login/ForgotPassword.js","services/validations/publicPages/resetPassword.validation.js","components/forms/resetPassword/resetPassword.form.js","pages/Login/ResetPassword.js","pages/Login/PresentationPage.js","pages/Login/SetPassword.styles.js","services/validations/publicPages/setPassword.validations.js","pages/Login/SetPassword.js","components/privacyPolicyModal/privacyPolicy.styles.js","components/privacyPolicyModal/PrivacyPolicy.js","components/privacyPolicyModal/index.js","pages/EmployeePages/EmployeeBenefits/buttonsContainer/buttonsContainer.styles.js","pages/EmployeePages/EmployeeBenefits/buttonsContainer/ButtonsContainer.js","pages/EmployeePages/EmployeeBenefits/benefitGroupsFilters/benefitGroupsFilters.styles.js","pages/EmployeePages/EmployeeBenefits/benefitGroupsFilters/priceFilter/PriceFilter.styles.js","constants/benefit.constants.js","constants/locales.constants.js","constants/filter.constants.js","components/range/TwoThumbs.styles.js","components/range/TwoThumbs.js","pages/EmployeePages/EmployeeBenefits/benefitGroupsFilters/priceFilter/PriceFilter.js","pages/EmployeePages/EmployeeBenefits/benefitGroupsFilters/priceFilter/index.js","pages/EmployeePages/EmployeeBenefits/benefitGroupsFilters/categoriesFilter.js","utils/supabaseUtils/supabaseClient.js","utils/supabaseUtils/createSupaBaseStorageFolder.js","utils/supabaseUtils/sendImageToSupabase.js","services/api/employee/employeeBenefits.services.js","pages/EmployeePages/EmployeeBenefits/benefitGroupsFilters/BenefitGroupsFilters.js","services/api/admin/benefitGroups.service.js","pages/EmployeePages/EmployeeBenefits/BrowseBenefitGroups/BrowseBenefitGroups.js","pages/EmployeePages/EmployeeBenefits/SubscribedBenefitGroups/NextMonthDropDown/nextMonthDropDown.styles.js","pages/EmployeePages/EmployeeBenefits/SubscribedBenefitGroups/NextMonthDropDown/NextMonthDropDown.js","pages/EmployeePages/EmployeeBenefits/SubscribedBenefitGroups/subscribedBenefitGroups.styles.js","pages/EmployeePages/EmployeeBenefits/SubscribedBenefitGroups/SubscribedBenefitGroups.js","builders/benefitGroups/mobileBenefitsType.js","components/forms/review/LeaveReviewFormStyles.js","components/forms/review/LeaveReviewForm.js","pages/EmployeePages/EmployeeBenefits/benefitSubscribe/BenefitSubscribeStyles.js","renderers/locations.renderer.js","services/benefit.utils.js","pages/EmployeePages/EmployeeBenefits/benefitSubscribe/BenefitSubscribeButtons/benefitSubscribeButtonsContainer.styles.js","pages/EmployeePages/EmployeeBenefits/benefitSubscribe/BenefitSubscribeButtons/BenefitSubscribeQuantity/BenefitSubscribeQuantity.styles.js","pages/EmployeePages/EmployeeBenefits/benefitSubscribe/BenefitSubscribeButtons/BenefitSubscribeQuantity/BenefitSubscribeQuantity.js","pages/EmployeePages/EmployeeBenefits/benefitSubscribe/BenefitSubscribeButtons/BenefitsSubscribeButton.js","services/sort.utils.js","utils/calculateValueWithVAT.js","pages/EmployeePages/EmployeeBenefits/benefitSubscribe/BenefitSubscribeButtons/VoucherSubscribeButton.js","builders/benefits/tokenValue.js","pages/EmployeePages/EmployeeBenefits/benefitSubscribe/BenefitSubscribeButtons/BenefitSubscribeButtonsContainer.js","pages/EmployeePages/EmployeeBenefits/benefitSubscribe/BenefitSubscribeItem.js","pages/EmployeePages/EmployeeBenefits/benefitSubscribe/BenefitSubscribe.js","pages/EmployeePages/EmployeeBenefits/benefitSubscribe/index.js","renderers/categories.renderer.js","pages/EmployeePages/EmployeeBenefits/voucherReimbursement/VoucherReimbursementStyles.js","services/dateFormater.js","pages/EmployeePages/EmployeeBenefits/voucherReimbursement/VoucherReimbursement.js","pages/EmployeePages/EmployeeBenefits/voucherReimbursement/index.js","pages/EmployeePages/EmployeeBenefits/employeeOnboarding/onboarding.styles.js","pages/EmployeePages/EmployeeBenefits/employeeOnboarding/Onboarding.js","pages/EmployeePages/EmployeeBenefits/employeeOnboarding/index.js","pages/EmployeePages/EmployeeBenefits/employeeNotifications/notifications.styles.js","pages/EmployeePages/EmployeeBenefits/employeeNotifications/BenefitChangedExpirationType.js","pages/EmployeePages/EmployeeBenefits/employeeNotifications/BenefitChangedPrice.js","pages/EmployeePages/EmployeeBenefits/employeeNotifications/BenefitGroupChangedLocation.js","pages/EmployeePages/EmployeeBenefits/employeeNotifications/BenefitGroupLocationUpdatedInfo.js","pages/EmployeePages/EmployeeBenefits/employeeNotifications/EmployeeChangedLocation.js","pages/EmployeePages/EmployeeBenefits/employeeNotifications/EmployeeLocationUpdatedInfo.js","pages/EmployeePages/EmployeeBenefits/employeeNotifications/EmployeeReassignedTier.js","pages/EmployeePages/EmployeeBenefits/employeeNotifications/EmployeeSubscribedToMcpBenefit.js","pages/EmployeePages/EmployeeBenefits/employeeNotifications/TierBudgetDecreased.js","pages/EmployeePages/EmployeeBenefits/employeeNotifications/NotificationPayloadRender.js","pages/EmployeePages/EmployeeBenefits/employeeNotifications/NotificationsContent.js","pages/EmployeePages/EmployeeBenefits/employeeNotifications/Notification.js","pages/EmployeePages/EmployeeBenefits/employeeNotifications/index.js","pages/EmployeePages/EmployeeBenefits/SyncModal.js","pages/EmployeePages/EmployeeBenefits/EmployeeBenefitsStyles.js","hooks/useDisableBodyScroll.js","pages/EmployeePages/EmployeeBenefits/FavoriteBenefits/LoadingFavoriteBenefits.js","pages/EmployeePages/EmployeeBenefits/FavoriteBenefits/EmptyFavoriteBenefits.js","pages/EmployeePages/EmployeeBenefits/FavoriteBenefits/BenefitCard.js","pages/EmployeePages/EmployeeBenefits/FavoriteBenefits/ListOfFavoriteBenefits.js","pages/EmployeePages/EmployeeBenefits/FavoriteBenefits/FavoriteBenefits.js","pages/EmployeePages/EmployeeBenefits/SocialProofNotifications/SocialProofNotificationsStyles.js","pages/EmployeePages/EmployeeBenefits/SocialProofNotifications/SocialProofNotifications.js","pages/EmployeePages/EmployeeBenefits/EmployeeBenefits.js","pages/EmployeePages/EmployeeBenefits/index.js","pages/SuperAdminPages/Activity/ActivityStyles.js","pages/UserPages/HistoryList/EmptyHistory.js","pages/UserPages/HistoryList/ListOfHistoryItems.js","pages/UserPages/HistoryList/LoadingHistoryItems.js","pages/UserPages/History.js","pages/HrPages/HrDashboard/UsedTokens/UsedTokensStyles.js","pages/HrPages/HrDashboard/UsedTokens/spentTokens.config.js","pages/HrPages/HrDashboard/UsedTokens/budgetLeft.config.js","pages/HrPages/HrDashboard/dashboad.services.js","utils/supabaseUtils/downloadAllFiles.js","utils/supabaseUtils/generatePublicUrlOfImage.js","utils/supabaseUtils/generatePublicURls.js","utils/helpers/chunk.js","utils/helpers/throttle.js","utils/supabaseUtils/processDelegation.js","utils/supabaseUtils/processTransform.js","utils/supabaseUtils/downloadZip.js","utils/supabaseUtils/regulateNumberOfDownloads.js","utils/supabaseUtils/downloadImages.js","services/api/hr/dashboard.service.js","utils/createRefundStatisticsDownloadDate.js","pages/HrPages/HrDashboard/UsedTokens/UsedTokens.js","pages/HrPages/HrDashboard/TotalBudget/totalBudget.config.js","pages/HrPages/HrDashboard/TotalBudget/TotalBudgetStyles.js","pages/HrPages/HrDashboard/TotalBudget/TotalBudget.js","pages/HrPages/HrDashboard/TotalBudget/index.js","pages/HrPages/HrDashboard/CategoryBudget/CategoryBudgetStyles.js","pages/HrPages/HrDashboard/CategoryBudget/categoryBudget.config.js","pages/HrPages/HrDashboard/CategoryBudget/CategoryBudget.js","pages/HrPages/HrDashboard/CategoryBudget/index.js","pages/HrPages/HrDashboard/TierBudget/TierBudgetStyles.js","pages/HrPages/HrDashboard/TierBudget/tierBudget.config.js","pages/HrPages/HrDashboard/TierBudget/TierBudget.js","pages/HrPages/HrDashboard/TierBudget/index.js","pages/HrPages/HrDashboard/BudgetUtilization/BudgetUtilizationStyles.js","pages/HrPages/HrDashboard/BudgetUtilization/budgetUtilization.config.js","pages/HrPages/HrDashboard/BudgetUtilization/BudgetUtilization.js","pages/HrPages/HrDashboard/BudgetUtilization/index.js","pages/HrPages/HrDashboard/TopBenefits/TopBenefitsStyles.js","pages/HrPages/HrDashboard/TopBenefits/bar.config.js","pages/HrPages/HrDashboard/TopBenefits/pie.config.js","pages/HrPages/HrDashboard/TopBenefits/TopBenefits.js","pages/HrPages/HrDashboard/TopBenefits/index.js","pages/HrPages/HrDashboard/UsageWidget/UsageWidgetStyles.js","pages/HrPages/HrDashboard/UsageWidget/UsageWidget.js","pages/HrPages/HrDashboard/combinationsWidget/config.js","pages/HrPages/HrDashboard/combinationsWidget/CombinationsWidget.js","services/files.utils.js","pages/SuperAdminPages/Dashboard/reportTypeDropdownOptions.js","pages/HrPages/HrDashboard/UsageReport/UsageReportGenerator.js","pages/HrPages/HrDashboard/RefundReport/RefundReportGenerator.js","pages/HrPages/HrDashboard/SyncWidget/SyncWidget.js","pages/HrPages/HrDashboard/HrDashboardStyles.js","pages/HrPages/HrDashboard/HrDashboard.js","pages/HrPages/HrDashboard/index.js","pages/HrPages/HrBenefits/HrBenefitsStyles.js","constants/actionTypes/hr/benefits.constants.js","actions/hr/benefits.actions.js","services/api/hr/benefits.service.js","services/api/admin/benefitTags.service.js","pages/HrPages/HrBenefits/HrBenefits.js","pages/HrPages/HrBenefits/index.js","pages/HrPages/EditHrBenefit/BasicInfo/BasicInfoStyles.js","pages/HrPages/EditHrBenefit/BasicInfo/BasicInfo.js","pages/HrPages/EditHrBenefit/EditBenefitOptions/EditBenefitOptionsStyles.js","pages/HrPages/EditHrBenefit/EditBenefitOptions/EditBenefitOptions.js","pages/HrPages/EditHrBenefit/BenefitActivitySection/toggleButton/ToggleButtonStyles.js","pages/HrPages/EditHrBenefit/BenefitActivitySection/toggleButton/ToggleButton.js","pages/HrPages/EditHrBenefit/BenefitActivitySection/toggleButton/index.js","pages/HrPages/EditHrBenefit/BenefitActivitySection/activitySection.styles.js","pages/HrPages/EditHrBenefit/BenefitActivitySection/BenefitActivitySection.js","pages/HrPages/EditHrBenefit/BenefitGroupUsersTable/benefitGroupUsersTable.styles.js","components/InfoPopUp/InfoPopUp.js","pages/HrPages/EditHrBenefit/BenefitGroupUsersTable/builder/table.builder.js","pages/HrPages/EditHrBenefit/BenefitGroupUsersTable/builder/tableHeadReducer.js","pages/HrPages/EditHrBenefit/BenefitGroupUsersTable/UserBenefitsCount/UserBenefitsCount.js","services/getOrderColumns.js","pages/HrPages/EditHrBenefit/BenefitGroupUsersTable/BenefitGroupUsersTable.js","pages/SuperAdminPages/Providers/PreviewModal/PreviewModalStyles.js","pages/SuperAdminPages/Providers/PreviewModal/PreviewModal.js","pages/HrPages/EditHrBenefit/BenefitGroupInstalmentsSection/toggleButton/ToggleButtonComponentStyles.js","pages/HrPages/EditHrBenefit/BenefitGroupInstalmentsSection/toggleButton/ToggleButton.js","pages/HrPages/EditHrBenefit/BenefitGroupInstalmentsSection/toggleButton/index.js","pages/HrPages/EditHrBenefit/BenefitGroupInstalmentsSection/BenefitGroupInstalmentsSection.styles.js","pages/HrPages/EditHrBenefit/BenefitGroupInstalmentsSection/BenefitGroupInstalmentsSection.js","pages/HrPages/EditHrBenefit/EditHrBenefitsStyles.js","pages/HrPages/EditHrBenefit/BenefitGroupBenefitPreview/BenefitGroupBenefitPreviewStyles.js","pages/HrPages/EditHrBenefit/BenefitGroupBenefitPreview/BenefitGroupBenefitPreviewList/BenefitGroupBenefitPreviewListStyles.js","pages/HrPages/EditHrBenefit/BenefitGroupBenefitPreview/BenefitGroupBenefitPreviewList/BenefitGroupBenefitPreviewItem.js","pages/HrPages/EditHrBenefit/BenefitGroupBenefitPreview/BenefitGroupBenefitPreviewList/BenefitGroupBenefitPreviewList.js","pages/HrPages/EditHrBenefit/BenefitGroupBenefitPreview/BenefitGroupBenefitPreview.js","pages/HrPages/EditHrBenefit/EditHrBenefit.js","pages/HrPages/EditHrBenefit/index.js","pages/HrPages/EmployeePages/BasicInfoSection/genderOptions.js","pages/HrPages/EmployeePages/BasicInfoSection/BasicInfoStyles.js","pages/HrPages/EmployeePages/BasicInfoSection/BasicInfo.js","pages/HrPages/EmployeePages/BasicInfoSection/index.js","pages/HrPages/EmployeePages/DetailsSection/relationshipOptions.js","pages/HrPages/EmployeePages/DetailsSection/DetailsStyles.js","pages/HrPages/EmployeePages/DetailsSection/Details.js","pages/HrPages/EmployeePages/DetailsSection/index.js","pages/HrPages/EmployeePages/RankSection/RankStyles.js","pages/HrPages/EmployeePages/RankSection/Rank.js","pages/HrPages/EmployeePages/RankSection/index.js","pages/HrPages/EmployeePages/EmployeeDetails/EmployeeDetailsStyles.js","modules/user/user.entity.js","modules/user/context/user.reducer.js","modules/user/context/user.context.js","modules/user/context/user.actions.js","pages/HrPages/EmployeePages/EmployeeDetails/EmployeeDetails.js","pages/HrPages/EmployeePages/EmployeeDetails/index.js","pages/HrPages/EmployeePages/EditEmployee/EditEmployeeStyles.js","services/validations/hr/hrEmployeeValidations.js","pages/HrPages/EmployeePages/EditEmployee/EditEmployee.js","pages/HrPages/EmployeePages/EditEmployee/index.js","pages/HrPages/EmployeePages/Employees/AddEmployee.js","pages/HrPages/EmployeePages/Employees/AddEmployeeWthCSV/AddEmployeeWithCSVStyles.js","services/validations/hr/addEmployeesWithCSV.js","pages/HrPages/EmployeePages/Employees/AddEmployeeWthCSV/addEmployeesCSV.services.js","pages/HrPages/EmployeePages/Employees/AddEmployeeWthCSV/AddEmployeeWithCSV.js","pages/HrPages/EmployeePages/Employees/AddEmployeeWthCSV/index.js","pages/HrPages/EmployeePages/Employees/UpdateEmployeeWithCSV/UpdateEmployeesWithCSV.styles.js","pages/HrPages/EmployeePages/Employees/UpdateEmployeeWithCSV/UpdateEmployeesWithCSV.js","pages/HrPages/EmployeePages/Employees/UpdateEmployeeWithCSV/index.js","pages/HrPages/EmployeePages/Employees/errorPopup/AddEmployeeWithCSVErrorStyles.js","pages/HrPages/EmployeePages/Employees/errorPopup/AddEmployeeWithCSVError.js","pages/HrPages/EmployeePages/Employees/Form/BonusBudgetDateInput.js","pages/HrPages/EmployeePages/Employees/Form/DateInput.js","pages/HrPages/EmployeePages/Employees/Form/FormStyles.js","pages/HrPages/EmployeePages/Employees/Form/Form.js","pages/HrPages/EmployeePages/Employees/Form/index.js","services/api/hr/settings.service.js","services/validations/hr/bonusFormValidation.js","pages/HrPages/EmployeePages/Employees/AddBonusStyles.js","pages/HrPages/EmployeePages/Employees/AddBonus.js","services/errors/hr/AddBonusError.js","pages/HrPages/EmployeePages/Employees/EmployeesStyles.js","pages/HrPages/EmployeePages/Employees/builderResponsive/tableHeadBuilder.js","services/getTableHead.util.js","pages/HrPages/EmployeePages/Employees/builderResponsive/tableHeadReducer.js","pages/HrPages/EmployeePages/Employees/errorPopup/UploadUpdateCSVFailed.js","pages/HrPages/EmployeePages/Employees/Employees.js","pages/HrPages/EmployeePages/Employees/index.js","pages/HrPages/Settings/TierItem/TierItemStyles.js","constants/actionTypes/hr/settings.constants.js","actions/hr/settings.actions.js","pages/HrPages/Settings/TierItem/TierItem.js","pages/HrPages/Settings/TierItem/index.js","pages/HrPages/Settings/Form/FormStyles.js","pages/HrPages/Settings/Form/Form.js","pages/HrPages/Settings/Form/index.js","services/validations/hr/tierFormValidation.js","pages/HrPages/Settings/AddTier.js","pages/HrPages/Settings/EditTier.js","pages/HrPages/Settings/FormRenderer.js","pages/HrPages/Settings/budgetRolloverToggle/BudgetRolloverToggle.styles.js","pages/HrPages/Settings/budgetRolloverToggle/BudgetRolloverToggle.js","pages/HrPages/Settings/budgetRolloverToggle/index.js","pages/HrPages/Settings/companyTheme/detailsSection/DetailsSection.styles.js","pages/HrPages/Settings/companyTheme/detailsSection/DetailsSection.js","pages/HrPages/Settings/companyTheme/detailsSection/index.js","services/errors/hr/CompanyThemeFormError.js","services/validations/hr/companyThemeFormValidation.js","pages/HrPages/Settings/companyTheme/CompanyThemeForm.styles.js","pages/HrPages/Settings/companyTheme/CompanyThemeForm.js","pages/HrPages/Settings/companyTheme/index.js","pages/HrPages/Settings/SettingsStyles.js","pages/HrPages/Settings/budgetRolloverToggle/CurrencyToggle.js","pages/HrPages/Settings/Settings.js","pages/HrPages/Settings/index.js","pages/HrPages/Onboarding/TierForm/TierItem.js","pages/HrPages/Onboarding/TierForm/CurrencyField.js","pages/HrPages/Onboarding/TierForm/TierFormStyles.js","services/api/hr/onboarding.service.js","pages/HrPages/Onboarding/TierForm/TierForm.js","pages/HrPages/Onboarding/EmployeesForm/addEmployeeWithCSV.services.js","pages/HrPages/Onboarding/EmployeesForm/AddEmployeeWithCSVStyles.js","pages/HrPages/Onboarding/EmployeesForm/AddEmployeesWithCSV.js","pages/HrPages/Onboarding/EmployeesForm/index.js","pages/HrPages/Onboarding/FinishStep/FinishStepStyles.js","pages/HrPages/Onboarding/FinishStep/FinishStep.js","pages/HrPages/Onboarding/FinishStep/index.js","pages/HrPages/Onboarding/OnboardingStyles.js","services/validations/hr/onboardingValidation.js","pages/HrPages/Onboarding/Onboarding.js","pages/HrPages/Onboarding/index.js","pages/HrPages/Onboarding/onboarding.services.js","pages/HrPages/LocalBenefits/shared/FormModal/FormModalStyles.js","pages/HrPages/LocalBenefits/shared/FormModal/FormModal.js","pages/HrPages/LocalBenefits/shared/FormModal/index.js","pages/HrPages/LocalBenefits/shared/FormModal/formModalAnimation.services.js","services/api/admin/categories.service.js","actions/admin/categories.actions.js","constants/actionTypes/admin/categories.constants.js","pages/HrPages/LocalBenefits/shared/BenefitGroup/BenefitGroupForm.js","services/validations/hr/hrLocalBenefitValidation.js","pages/HrPages/LocalBenefits/shared/BenefitGroup/AddLocalBenefitGroup.js","services/api/hr/localBenefits.service.js","pages/HrPages/LocalBenefits/shared/BenefitGroup/EditBenefitGroup.js","actions/hr/localBenefits.actions.js","constants/actionTypes/hr/localBenefits.constants.js","pages/SuperAdminPages/Providers/shared/Benefit/BenefitForm/voucher.styles.js","pages/SuperAdminPages/Providers/shared/Benefit/BenefitForm/Vouchers.js","pages/HrPages/LocalBenefits/shared/Benefit/BenefitFormStyles.js","services/api/admin/providers.service.js","constants/benefitExpiration.constants.js","pages/HrPages/LocalBenefits/shared/Benefit/BenefitForm.js","pages/HrPages/LocalBenefits/shared/Benefit/AddBenefit.js","pages/HrPages/LocalBenefits/shared/Benefit/EditBenefit.js","pages/HrPages/LocalBenefits/shared/FormRenderer/FormRenderer.js","pages/HrPages/LocalBenefits/shared/FormRenderer/index.js","pages/HrPages/LocalBenefits/BenefitGropRow/BenefitGroupRowStyles.js","pages/HrPages/LocalBenefits/BenefitGropRow/benefitGroupRowAnimation.services.js","pages/HrPages/LocalBenefits/BenefitGropRow/BenefitGroupRow.js","pages/HrPages/LocalBenefits/BenefitGropRow/index.js","assets/Icons/StarIcon.js","pages/HrPages/LocalBenefits/BenefitGroupSubRow/BenefitsList/BenefitsListStyles.js","pages/HrPages/LocalBenefits/BenefitGroupSubRow/BenefitsList/BenefitsList.js","pages/HrPages/LocalBenefits/BenefitGroupSubRow/BenefitsList/index.js","pages/SuperAdminPages/Providers/shared/BenefitDetails/BenefitDetailsActions/BenefitDetailsActionsStyles.js","pages/SuperAdminPages/Providers/shared/BenefitDetails/BenefitDetailsActions/BenefitDetailsActions.js","pages/HrPages/LocalBenefits/BenefitGroupSubRow/BenefitDetails/BenefitDetailsStyles.js","pages/HrPages/LocalBenefits/BenefitGroupSubRow/BenefitDetails/BenefitDetails.js","pages/HrPages/LocalBenefits/BenefitGroupSubRow/BenefitDetails/index.js","pages/HrPages/LocalBenefits/BenefitGroupSubRow/BenefitGroupSubRow.js","pages/HrPages/LocalBenefits/BenefitGroupSubRow/index.js","pages/HrPages/LocalBenefits/LocalBenefitStyles.js","modules/hr/hrLocalBenefits/context/localBenefits.reducer.js","modules/hr/hrLocalBenefits/localBenefits.entity.js","modules/hr/hrLocalBenefits/context/localBenefits.context.js","pages/HrPages/LocalBenefits/LocalBenefit.js","pages/HrPages/LocalBenefits/index.js","services/api/admin/activity.service.js","pages/SuperAdminPages/Activity/Activity.js","pages/SuperAdminPages/Providers/ProviderRow/ProviderRowStyles.js","constants/actionTypes/admin/providers.constants.js","pages/SuperAdminPages/Providers/providersAnimations.js","pages/SuperAdminPages/Providers/ProviderRow/ProviderRow.js","actions/admin/providers.actions.js","pages/SuperAdminPages/Providers/shared/Provider/ProviderForm/toggleButton/ProviderToggleButton.styles.js","pages/SuperAdminPages/Providers/shared/Provider/ProviderForm/toggleButton/ToggleButton.js","pages/SuperAdminPages/Providers/shared/Provider/ProviderForm/toggleButton/index.js","pages/SuperAdminPages/Providers/shared/Provider/ProviderForm/ProviderFormStyles.js","pages/SuperAdminPages/Providers/shared/Provider/ProviderForm/ProviderForm.js","pages/SuperAdminPages/Providers/shared/Provider/AddProvider/AddProviderStyles.js","services/validations/addProviderFormValidation.js","services/http/axiosConfig.js","pages/SuperAdminPages/Providers/shared/Provider/AddProvider/AddProvider.js","pages/SuperAdminPages/Providers/shared/Provider/AddProvider/index.js","pages/SuperAdminPages/Providers/shared/Provider/EditProvider/EditProviderStyles.js","pages/SuperAdminPages/Providers/shared/Provider/EditProvider/EditProvider.js","pages/SuperAdminPages/Providers/shared/Provider/EditProvider/index.js","pages/SuperAdminPages/Providers/shared/BenefitGroup/BenefitGroupForm/BenefitGroupFormStyles.js","pages/SuperAdminPages/Providers/shared/BenefitGroup/BenefitGroupForm/BenefitGroupForm.js","pages/SuperAdminPages/Providers/shared/BenefitGroup/BenefitGroupForm/index.js","pages/SuperAdminPages/Providers/shared/BenefitGroup/AddBenefitGroup/AddBenefitGroupStyles.js","services/validations/benefitGroupFormValidation.js","pages/SuperAdminPages/Providers/shared/BenefitGroup/AddBenefitGroup/AddBenefitGroup.js","pages/SuperAdminPages/Providers/shared/BenefitGroup/AddBenefitGroup/index.js","pages/SuperAdminPages/Providers/shared/BenefitGroup/EditBenefitGroup/EditBenefitGroupStyles.js","pages/SuperAdminPages/Providers/shared/BenefitGroup/EditBenefitGroup/EditBenefitGroup.js","pages/SuperAdminPages/Providers/shared/BenefitGroup/EditBenefitGroup/index.js","pages/SuperAdminPages/Providers/shared/Benefit/BenefitForm/BenefitFormStyles.js","constants/actionTypes/admin/benefitTags.constants.js","actions/admin/benefitTags.actions.js","pages/SuperAdminPages/Providers/shared/Benefit/BenefitForm/BenefitForm.js","pages/SuperAdminPages/Providers/shared/Benefit/BenefitForm/index.js","pages/SuperAdminPages/Providers/shared/Benefit/AddBenefit/AddBenefitStyles.js","services/validations/benefitFormValidation.js","pages/SuperAdminPages/Providers/shared/Benefit/AddBenefit/AddBenefit.js","pages/SuperAdminPages/Providers/shared/Benefit/AddBenefit/index.js","pages/SuperAdminPages/Providers/shared/Benefit/EditBenefit/EditBenefitStyles.js","modules/superAdmin/providers/context/providers.reducer.js","modules/superAdmin/providers/context/providers.context.js","pages/SuperAdminPages/Providers/shared/Benefit/EditBenefit/EditBenefit.js","pages/SuperAdminPages/Providers/shared/Benefit/EditBenefit/index.js","pages/SuperAdminPages/Providers/shared/FormRenderer/FormRenderer.js","pages/SuperAdminPages/Providers/shared/FormRenderer/index.js","pages/SuperAdminPages/Providers/shared/FormModals/ModalStyles.js","pages/SuperAdminPages/Providers/shared/FormModals/Modal.js","pages/SuperAdminPages/Providers/List/Item.js","pages/SuperAdminPages/Providers/List/List.js","pages/SuperAdminPages/Providers/shared/BenefitDetails/BenefitDetails.js","pages/SuperAdminPages/Providers/SubRow/SubRowStyles.js","pages/SuperAdminPages/Providers/SubRow/SubRow.js","pages/SuperAdminPages/Providers/ProvidersStyles.js","pages/SuperAdminPages/Providers/Providers.js","pages/SuperAdminPages/Providers/shared/FormModals/modalAnimation.services.js","constants/actionTypes/admin/companies.constants.js","actions/admin/companies.actions.js","pages/SuperAdminPages/Dashboard/DashboardStatistics/DashboardStatisticsStyles.js","utils/helpers/adminDashboardStatisticAlgorithm.js","constants/actionTypes/admin/dashboard.constants.js","actions/admin/dashboard.actions.js","pages/SuperAdminPages/Dashboard/DashboardStatistics/helpers/handleChartOptions.js","pages/SuperAdminPages/Dashboard/DashboardStatistics/DashboardStatisticsNavbar/DashboardStatisticsNavbarStyles.js","pages/SuperAdminPages/Dashboard/DashboardStatistics/helpers/calculateCompanySubscriptions.js","services/api/admin/companies.service.js","pages/SuperAdminPages/Dashboard/DashboardStatistics/DashboardStatisticsNavbar/SelectCompaniesComponent.js","pages/SuperAdminPages/Dashboard/DashboardStatistics/DashboardStatisticsNavbar/DashboardStatisticsNavbar.js","utils/helpers/timeHelpers.js","pages/SuperAdminPages/Dashboard/DashboardStatistics/DashboardStatistics.js","pages/SuperAdminPages/Dashboard/ResetDates/ResetDates.js","services/api/admin/dashboard.service.js","pages/SuperAdminPages/Dashboard/UserReport/UserReport.js","pages/SuperAdminPages/Dashboard/Dashboard.js","pages/SuperAdminPages/Companies/BasicInfoSection/BasicInfoSectionStyles.js","pages/SuperAdminPages/Companies/BasicInfoSection/dropdown.options.js","pages/SuperAdminPages/Companies/BasicInfoSection/BasicInfoSection.js","pages/SuperAdminPages/Companies/BasicInfoSection/index.js","pages/SuperAdminPages/Companies/CompanyTagsSection/companyTagsSectionReducer.js","pages/SuperAdminPages/Companies/CompanyTagsSection/CompanyTagsSectionStyles.js","modules/superAdmin/companies/companies.services.js","actions/admin/companyTags.actions.js","constants/actionTypes/admin/companyTags.constants.js","services/api/admin/companyTags.service.js","modules/superAdmin/companies/companies.entity.js","modules/superAdmin/companies/context/companies.reducer.js","modules/superAdmin/companies/context/companies.context.js","pages/SuperAdminPages/Companies/CompanyTagsSection/CompanyTagsSection.js","pages/SuperAdminPages/Companies/CompanyTagsSection/companyTags.actions.js","pages/SuperAdminPages/Companies/CompanyTagsSection/index.js","pages/SuperAdminPages/Companies/DetailsSection/DetailsSectionStyles.js","pages/SuperAdminPages/Companies/DetailsSection/DetailsSection.js","pages/SuperAdminPages/Companies/DetailsSection/index.js","pages/SuperAdminPages/Companies/AddCompany/AddCompanyStyles.js","services/validations/superAdmin/company.validations.js","pages/SuperAdminPages/Companies/companies.services.js","pages/SuperAdminPages/Companies/AddCompany/AddCompany.js","pages/SuperAdminPages/Companies/AddCompany/index.js","pages/SuperAdminPages/Companies/Companies/builder/tableHeadBuilder.js","pages/SuperAdminPages/Companies/Companies/builder/tableHeaderReducer.js","pages/SuperAdminPages/Companies/Companies/CompaniesStyles.js","pages/SuperAdminPages/Companies/Companies/Companies.js","pages/SuperAdminPages/Companies/Companies/index.js","pages/SuperAdminPages/Companies/CompanyDetails/CompanyDetailsStyles.js","pages/SuperAdminPages/Companies/CompanyDetails/CompanyDetails.js","pages/SuperAdminPages/Companies/EditCompany/EditCompanyStyles.js","pages/SuperAdminPages/Companies/EditCompany/EditCompany.js","pages/SuperAdminPages/Settings/shared/List/ItemStyles.js","pages/SuperAdminPages/Settings/shared/List/Item.js","pages/SuperAdminPages/Settings/shared/List/List.js","pages/SuperAdminPages/Settings/shared/List/index.js","pages/SuperAdminPages/Settings/shared/FormRenderer/CompanyTags/Form.js","modules/superAdmin/settings/settings.entity.js","services/validations/superAdmin/companyTag.validations.js","pages/SuperAdminPages/Settings/shared/FormRenderer/CompanyTags/AddCompanyTag.js","modules/superAdmin/settings/context/reducers/benefitTag.reducer.js","modules/superAdmin/settings/context/reducers/companyTag.reducer.js","modules/superAdmin/settings/context/reducers/categories.reducer.js","modules/superAdmin/settings/context/settings.context.js","pages/SuperAdminPages/Settings/shared/FormRenderer/CompanyTags/EditCompanyTag.js","pages/SuperAdminPages/Settings/shared/FormRenderer/BenefitTags/Form.js","services/validations/superAdmin/benefitTag.validations.js","pages/SuperAdminPages/Settings/shared/FormRenderer/BenefitTags/AddBenefitTag.js","pages/SuperAdminPages/Settings/shared/FormRenderer/BenefitTags/EditBenefitTag.js","pages/SuperAdminPages/Settings/shared/FormRenderer/Categories/Form.js","services/validations/superAdmin/category.validations.js","pages/SuperAdminPages/Settings/shared/FormRenderer/Categories/AddCategory.js","pages/SuperAdminPages/Settings/shared/FormRenderer/Categories/EditCategory.js","services/validations/superAdmin/city.validation.js","pages/SuperAdminPages/Settings/shared/FormRenderer/Cities/AddCities.js","pages/SuperAdminPages/Settings/shared/FormRenderer/FormRenderer.js","pages/SuperAdminPages/Settings/shared/FormRenderer/index.js","pages/SuperAdminPages/Settings/shared/Section.js","pages/SuperAdminPages/Settings/SettingsStyles.js","pages/SuperAdminPages/Settings/settings.services.js","pages/SuperAdminPages/Settings/Settings.js","pages/SuperAdminPages/Notifications/notifications.entity.js","services/validations/notificationFormValidation.js","pages/SuperAdminPages/Notifications/NotificationsStyles.js","pages/SuperAdminPages/Notifications/Notifications.js","pages/SuperAdminPages/Notifications/index.js","services/api/admin/notification.service.js","pages/SuperAdminPages/Users/users.services.js","components/forms/user/AddUserFormStyles.js","services/validations/addUserFormValidation.js","modules/superAdmin/users/users.entity.js","components/forms/user/MemberFields.js","components/forms/user/AddUserForm.js","pages/SuperAdminPages/Users/AddUser/AddUser.js","pages/SuperAdminPages/Users/UsersList/UsersListStyles.js","pages/SuperAdminPages/Users/UsersList/builder/tableHeadBuilder.js","pages/SuperAdminPages/Users/UsersList/builder/tableHeadReducer.js","pages/SuperAdminPages/Users/UsersList/UsersList.js","actions/admin/users.actions.js","constants/actionTypes/admin/users.constants.js","pages/SuperAdminPages/Users/Form/FormStyles.js","pages/SuperAdminPages/Users/Form/FormAndDetails.js","pages/SuperAdminPages/Users/UserDetails/UserDetailsStyles.js","modules/superAdmin/users/context/users.reducer.js","modules/superAdmin/users/context/users.context.js","pages/SuperAdminPages/Users/UserDetails/UserDetails.js","modules/superAdmin/users/users.services.js","components/forms/user/editUserForm.services.js","services/validations/superAdmin/editUserForm.validations.js","components/forms/user/EditUserForm.js","pages/SuperAdminPages/Users/EditUser/EditUser.js","pages/HrPages/Refunds/EmptyRefunds.js","constants/actionTypes/hr/refunds.constants.js","actions/hr/refunds.actions.js","pages/HrPages/Refunds/RefundStyles.js","pages/HrPages/Refunds/RefundModal/RefundModalStyles.js","pages/HrPages/Refunds/RefundModal/LeftModalSection.js","pages/HrPages/Refunds/RefundModal/RightModalSection.js","pages/HrPages/Refunds/RefundModal/ShowRefundStatus.js","utils/supabaseUtils/BucketsSwap/bucketsSwap.js","pages/HrPages/Refunds/RefundModal/RefundModalActions.js","pages/HrPages/Refunds/RefundModal/RefundModal.js","pages/HrPages/Refunds/RefundModal/ShowRefundModal.js","pages/HrPages/Refunds/RefundPagination.js","pages/HrPages/Refunds/RefundsList/Desktop/ListOfRefundsDesktopBody.js","pages/HrPages/Refunds/RefundsList/Desktop/ListOfRefundsDesktop.js","pages/HrPages/Refunds/RefundsList/Mobile/ListOfRefundsMobileStyles.js","pages/HrPages/Refunds/RefundBranchCodeFilter.js","pages/HrPages/Refunds/RefundStatusFilter.js","pages/HrPages/Refunds/RefundsList/Mobile/ListOfItemsRefundsMobile.js","pages/HrPages/Refunds/RefundsList/Mobile/ListOfRefundsMobile.js","pages/HrPages/Refunds/RefundsList/RefundListIndex.js","hooks/useMediaQuery.js","components/ToggleSlider/ToggleSliderStyles.js","components/ToggleSlider/ToggleSlider.js","pages/HrPages/Refunds/RefundsList/Desktop/RefundListSecondLayer.js","pages/HrPages/Refunds/RefundsList/Desktop/ListOfRefundsDesktopHeader.js","pages/HrPages/Refunds/RefundsList/Mobile/RefundMobileHeader/RefundMobileHeader.js","pages/HrPages/Refunds/Refunds.js","pages/SuperAdminPages/AdminUserHistory/AdminUserHistoryStyles.js","pages/SuperAdminPages/AdminUserHistory/EmptyHistory.js","constants/actionTypes/admin/admin.constants.js","actions/admin/admin.actions.js","pages/SuperAdminPages/AdminUserHistory/AdminUserHistoryContent/AdminUserHistoryContentStyles.js","pages/SuperAdminPages/AdminUserHistory/AdminUserHistoryContent/AdminUserHistoryHeader.js","pages/SuperAdminPages/AdminUserHistory/AdminUserHistoryContent/AdminUserHistoryBody.js","pages/SuperAdminPages/AdminUserHistory/AdminUserHistoryContent/AdminUserHistoryContent.js","pages/SuperAdminPages/AdminUserHistory/AdminUserHistory.js","utils/helpers/isEmpty.js","pages/HrPages/PreviewHRBenefit/PreviewHRBenefitStyles.js","pages/HrPages/PreviewHRBenefit/PreviewHRBenefitBody/PreviewHRBenefitBodyStyles.js","pages/HrPages/PreviewHRBenefit/PreviewHRBenefitBody/PreviewHRBenefitBody.js","pages/HrPages/PreviewHRBenefit/PreviewProviders.js","config/router.config.js","pages/HrPages/PreviewHRBenefit/PreviewHRBenefit.js","services/updateObject.js","reducers/app.reducer.js","reducers/admin/users.reducer.js","reducers/admin/benefitTags.reducer.js","reducers/admin/companyTags.reducer.js","reducers/admin/categories.reducer.js","reducers/admin/companies.reducer.js","reducers/admin/providers.reducer.js","reducers/hr/benefits.reducer.js","reducers/hr/localBenefits.reducer.js","reducers/hr/employees.reducer.js","reducers/hr/tiers.reducer.js","reducers/employee/employeeBenefits.reducer.js","reducers/hr/refunds.reducer.js","reducers/admin/adminDashboard.reducer.js","reducers/admin/admin.reducer.js","reducers/root.reducer.js","store/store.js","components/ErrorBoundary/ErrorBoundary.js","components/ErrorBoundary/GlobalErrorBoundaryFallbackStyles.js","components/ErrorBoundary/GlobalErrorBoundaryFallback.js","utils/language/index.js","utils/i18n.js","index.js","assets/images/categoryFilters/rectangle.png","assets/images/activity-log.png","assets/images/002-visibility.png","assets/images/003-visibility-1.png","assets/images/capacity-left.svg","components/locales/Icons/rs.png","components/locales/Icons/gb.png","assets/images/pdf-logo.jpg"],"names":["styled","div","_templateObject","_taggedTemplateLiteral","TokenIcon","_ref","height","width","margin","isCardToken","React","createElement","xmlns","xmlnsXlink","style","viewBox","id","x","y","filterUnits","dy","in","result","in2","operator","values","radius","k2","k3","d","cx","cy","r","fx","fy","offset","stopColor","fill","fillRule","filter","xlinkHref","stroke","strokeLinejoin","transform","CheckIconSvg","DashboardIconSvgStyles","DashboardIconSvg","BenefitsIconSvgStyles","BenefitsIconSvg","BenefitLogoSvgStyles","BenefitLogoSvg","color","opacity","fillOpacity","mask","BenefitLogoIconSvg","rx","BLogoSvg","clipRule","EmployeesIconSvgStyles","EmployeesIconSvg","fillColor","EditIconSvgStyle","EditIconSvg","SettingsIconSvgStyles","SettingsIconSvg","HamburgerIconSvg","LogoutIconSvgStyles","LogoutIconSvg","DotsIconSvgStyles","_ref2","_ref3","_ref4","_ref5","transformOrigin","DotsIconSvg","_ref6","enableBackground","version","xmlSpace","className","LogoIconSvg","AttachmentIconWrapper","props","cursor","AttachmentIcon","strokeLinecap","strokeWidth","TrashContainer","TrashIcon","LeftArrowIconSvgStyles","LeftArrowIconSvg","WatchIcon","InfoIconSvgStyles","InfoIconSvg","ActiveIcon","strokeOpacity","ImagePlaceholer","EmptyListIcon","ErrorIconSvgStyles","ErrorIconSvg","UserDisabledIconSvg","PendingActivationIcon","strokeDasharray","PendingDeactivationIcon","NotificationBellSvgStyles","NotificationBellSvg","SortIconSvg","FilterIconSvg","FilterIconMobileSvg","ChevronIconDownSvgStyles","ChevronIconDownSvg","isOpen","transition","MicrosoftIconSvgStyles","MicrosoftIconSvg","EnvelopIconSvgStyles","EnvelopIconSvg","xml","ClockIcon","GoBackSvg","XCircleSVG","CheckCircleSVG","FullHeartIconSVG","OutlineHeartIconSVG","PendingIconSVG","AcceptedIconSVG","RejectedIconsSVG","FlagCurrencyStyles","FlagCurrency","locales","rs","src","RSFlag","en","GBFlag","Fragment","AttachedFile","AuthStyles","section","ButtonHolder","button","gap","padding","outline","disabled","transparent","borderRadius","_ref7","_ref8","_ref9","_ref10","_ref11","borderRight","_ref12","mobileMargin","_ref13","mobileWidth","Button","children","type","onClick","customId","customClass","Auth","BenefitCardStyles","status","imageSize","imageFormat","getUrl","photo","requiredImage","url","url2x","url3x","url4x","url5x","url6x","url7x","url8x","url9x","findSize","key","sizeArray","find","size","Error","concat","findType","format","typeArray","chosenType","createUrl","base","name","path","truncate","string","maxLength","arguments","length","undefined","substring","isEmpty","value","Array","isArray","removeSpacesAndHTML","replace","trim","uniqueArrayOfObjects","array","index","arr","findIndex","value1","filterArrayByValueOfKey","e","PUBLIC","UserRolesKeysEnum","BENEFIT_ROLE","getItem","JSON","parse","localStorage","setItem","stringify","BASE_API_URL","process","apiService","constructor","handleReqInterceptorError","error","console","log","response","Promise","reject","handleResInterceptorError","async","originalRequest","config","includes","_retry","this","isIssuingRefreshToken","waitForRefreshToken","service","refreshAccessToken","axios","create","baseURL","interceptors","request","use","handleReqInterceptorSuccess","handleResInterceptorSuccess","headers","Authorization","token","resolve","setTimeout","logout","removeItem","window","location","href","reload","isStatusSuccess","refreshToken","post","newToken","data","auth","access_token","newRefreshToken","refresh_token","apiCall","_error$response","_error$response$data","hasError","errorMessage","message","handleApiCall","get","payload","method","delete","SET_INITAL_STATE","PngPhoto","JpgPhoto","CompanyStatusEnum","Company","company","pib","address","idNumber","id_number","Photo","contact","invoiceEmail","invoice_email","paymentDeadline","payment_deadline","vatEnabled","vat_enabled","tags","Tags","map","tag","Tag","tiers","Tiers","tier","Tier","isRolloverEnabled","is_rollover_enabled","companyBudgetRollover","CompanyBudgetRollover","bonusBudgetEnabled","bonus_budget_enabled","onlySSOLoginEnabled","only_sso_login_enabled","hasReimbursement","viewInRsd","Voucher","voucherData","price","isSubscribed","is_subscribed","predefinedValuesOnly","isReimbursement","vatIncluded","vat_included","Benefit","benefitData","title","description","summary","tokenPrice","token_price","expiration","split","join","vouchers","BenefitVoucher","voucher","shouldBeIndicatedAsActive","subscribed_benefit_id","minimumContractPeriod","minimum_contract_period","vat","shortName","short_name","isActive","is_active","isDraft","subscribedPrice","subscribed_price","quantity","takenQuantity","taken_quantity","instalments","totalQuantityRemaining","benefitGroupId","usageInstructions","usage_instructions","Provider","providerData","benefitGroups","BenefitGroup","benefitGroup","City","cityData","Category","benefitCategoryData","_benefitGroupData$Sta","_benefitGroupData$Sta2","_benefitGroupData$Sta3","benefitGroupData","categories","category","categoryIds","companyId","capacity","taxes","isRemote","is_remote","hasCapacity","takenBenefits","taken_benefits","provider","benefits","benefit","availableTiers","AvailableBenefits","blockedBenefit","tierId","Status","statusPreview","shouldBeInAllBenefits","cities","city","availableCitiesCount","available_cities_count","doesBenefitGroupHaveMcp","does_benefit_group_have_mcp","doesBenefitGroupHaveInstalments","does_benefit_group_have_instalments","doesBenefitGroupHaveQuantity","does_benefit_group_have_quantity","isBenefitGroupNew","is_benefit_group_new","benefitGroupAvailable","benefit_group_available","enableInstalments","sumRatings","numberReviews","rating","priceRange","createdAt","UserBenefit","userBenefitData","splitStringByDelimiter","stringToBeSplit","delimiter","subscribed","unsubscribe","startDate","start_date","endDate","end_date","benefitId","benefitPrice","benefit_price","Employee","_employeeData$User","_employeeData$User2","_employeeData$User3","_employeeData$User4","_employeeData$User5","employeeData","firstName","first_name","User","lastName","last_name","formalEmail","email","bornDate","Date","firstDayAtWork","team","relationship","gender","uniqueId","CompanyBranch","branchCode","companyBranchId","roleIds","role_ids","roles","availableTokens","parseInt","available_tokens","usedToken","used_token","remainingTokens","remaining_tokens","userBenefits","UserBenefits","activeBenefitsCount","active_benefits_count","user","rolloverTokens","rollover_tokens","totalTokens","total_tokens","CompanyThemeModeEnum","CompanyTheme","themeData","mode","BudgetBreakdown","budgetBreakdownData","monthlySpent","monthly_spent","oneTimeSpent","one_time_spent","instalmentsSpent","instalments_spent","mcpSpent","mcp_spent","vouchersSpent","vouchers_spent","userData","authenticatedUserRoleId","authenticatedRole","vocativeName","companyName","companyVatEnabled","usedTokens","used_tokens","isOnboardingDone","onboarding","hasAcceptedPrivacyPolicy","privacyPolicyAccepted","privacy_policy_accepted","isDisabled","is_disabled","employeeOnboarding","employee_onboarding","employee","themes","theme","serverOnboarding","isSync","sync","employeeId","company_id","userHash","user_hash","budgetBreakdown","formal_email","emailConfirmed","tagData","tierData","tokens","countEmployee","DropDown","DropDownOption","userId","_class","createOptions","dataArray","Activity","activityData","action","capitalizeFirstLetters","chosenString","splitDelimiter","joinDelimiter","i","toUpperCase","substr","model","created_at","LocalBenefit","benefit_group_id","LocalBenefitGroup","LocalBenefitGroupForm","benefitGroupFormData","LocalBenefitForm","localBenefitFormData","is_draft","HrEmployee","tokensUsed","budgetSpentPercentage","budget_spent_percentage","bonusAmount","bonus_amount","isVerified","HrEmployeeForm","_employeeData$Company","code","shouldEmployeeHaveHRRole","HrEmployeeDetails","born_date","TokenWorth","tokenWorthData","worth","TierForm","currency","Budget","budgetData","actualBudget","actual_budget","lastBudget","last_budget","TotalBudget","budget","budgetLastMonth","budget_last_month","BudgetSpending","actualSpentBudget","actual_spent_budget","lastSpentBudget","last_spent_budget","CategoryBudget","actualCategoryBudget","actual_category_budget","lastCategoryBudget","last_category_budget","CompanyUsage","usage","employeeNotOnPlatform","employee_not_on_platform","employeeOnPlatform","employee_on_platform","totalEmployee","total_employee","totalHr","total_hr","totalUsers","total_users","SyncedEmployees","employeesData","employees","Combination","combinationData","combinations","TokenValue","PriceRange","min","max","SYSTEM_NOTIFICAITON_TYPES","EmployeePayload","employeePayload","toLowerCase","moment","first_day_at_work","should_employee_have_hr_role","tier_id","city_ids","doesRoleExist","roleForComparison","some","role","isAuthenticatedRole","roleKeyForComparison","UserPayload","userPayload","vocative_name","password","_userPayload$relation","_userPayload$gender","employee_id","enroll_date","CreateCompanyPayload","newCompany","FormData","paymentDeadlineDaysNumber","indexOf","append","forEach","convertStringToEditorState","content","EditorState","blocksFromHtml","htmlToDraft","contentBlocks","entityMap","contentState","ContentState","createFromBlockArray","createWithContent","convertEditorStateToString","draftToHtml","convertToRaw","getCurrentContent","doesDescriptionExist","ProviderPayload","newProvider","BenefitGroupPayload","providerId","_benefitGroup$categor","BenefitPayload","AvailableTierPayload","LocalBenefitGroupPayload","LocalBenefitPayload","EmployeeFromCsvPayload","csvFile","HrOnboardingPayload","SubscribeUnsubscribePayload","benefit_id","subscribe","VoucherSubscribeUnsubscribePayload","voucher_id","voucherId","voucher_custom_price","voucherCustomPrice","voucher_is_reimbursement","voucherIsReimbursement","BenefitChangedPriceSystemNotificationPayload","systemNotificationPayloadData","TierChangedBudgetSystemNotificationPayload","EmployeeChangedTierSystemNotificationPayload","BenefitGroupChangedLocationPayload","EmployeeLocationUpdatedInfoPayload","removed_cities","BenefitGroupLocationUpdatedInfoPayload","benefit_group_name","BenefitChangedExpirationTypeSystemNotificationPayload","benefitName","benefit_name","oldType","old_type","newType","new_type","EmployeeSubscribedToMcpBenefitSystemNotificationPayload","minimumContractPeriodExpiration","minimum_contract_period_expiration","CompanyBudgetRolloverPayload","rolloverData","rollover_enabled","rolloverEnabled","rollover_duration","rolloverDuration","CreateBenefitGroupReviewPayload","comment","formatDateForPlaceholder","date","year","getFullYear","month","getMonth","slice","day","getDate","formatDateForSearch","startFutureMonthFromDate","forward","utc","add","startOf","toDate","formatToStartOfDay","BonusCreatePayload","subject","recurring","recurring_type","recurringType","CategoryPayload","TagPayload","TierPayload","CompanyThemePayload","newTheme","UploadPDFPayload","pdfFile","EmployeeChangedLocationPayload","SystemNotification","systemNotificationData","user_id","notificationType","notification_type","EmployeeSubscribedToMcpBenefitPayload","isRead","is_read","UserRole","userRoleData","companyid","rolloverEndDate","rolloverStartDate","scheduleDeleteAt","BenefitGroupReview","reviewData","reviewStatus","Bonus","bonusData","branchData","mapOneToDomain","variable","DomainClass","mapManyToDomain","iterable","employeeBenefitsSetInitialState","benefitGroupsCount","benefitGroupsTotalPages","benefitGroupsPage","domainBenefitGroups","modelMapperService","domainCategories","actionTypes","setListOfFavorites","setUsedBenefitsRedux","checkIfInFavorites","setListOfCompanyBenefits","updateBenefitGroup","setIsSubscribedBenefitGroupsVisible","isVisible","setBenefitGroupType","benefitGroupType","setIsInitialStateSet","flag","setChosenCategoryIds","chosenCategoryIds","setFiltersPriceRange","updatedPriceRangeOptions","chosenPriceRange","setCitiesFilter","cityIds","setRemoteFilter","openBenefitGroupModal","chosenBenefitGroup","setChosenBenefitGroup","setBenefitGroupsAndSubscribedBenefitGroups","subscribedBenefitGroups","setSubscribedBenefitGroups","require","isWithinLastMonth","dateString","dateToCheck","oneMonthAgo","subtract","currentDate","isBetween","checkIfTheValueIsInRsdOrToken","shouldShowInRsd","transformTokensToRsd","valueInTokens","debug","isValueInRsd","transformPriceRangeTokensToPriceRangeRsd","priceRangeInTokens","String","isWithInstallments","item","transformTokenCurrencyIcons","outerFill","lineFill","connect","BenefitCard","state","app","benefitDetails","isMyBenefits","isHr","isPreview","t","useTranslation","dispatch","useDispatch","isCardNew","listOfFavoriteBenefitsInObject","useSelector","employeeBenefitsPage","favoriteBenefits","renderStatusIcon","quantityRemaining","useMemo","reduce","total","refetchFavoriteBenefits","_response$data","listOfFavorite","items","group","toast","base64SVG","btoa","query","background","position","top","left","backgroundSize","fontSize","zIndex","alt","crossOrigin","toFixed","StarRatings","numberOfStars","starDimension","starSpacing","starEmptyColor","starRatedColor","_user$authenticatedRo","_user$authenticatedRo2","_user$authenticatedRo3","_user$employee","_user$employee$cities","employeeCity","ct","renderCities","display","alignItems","data-tip","data-for","ReactTooltip","place","effect","backgroundColor","borderColor","arrowColor","overridePosition","overrideTooltipPosition","currentEvent","currentTarget","node","document","documentElement","Math","clientWidth","clientHeight","marginLeft","Capacity","stopPropagation","removeFromBenefitsResponse","success","CheckboxHolder","isChecked","CheckboxInput","onChange","onBlur","readOnly","checked","CheckIcon","DatePickerInput","InputFileButton","CustomTooltip","login","setCities","setEmployeeTokens","employeeTokens","setSystemNotifications","systemNotifications","LoginResponse","accessToken","CompaniesResponse","_response$data$compan","companies","pages","count","CategoriesResponse","TiersResponse","UsersResponse","users","TagsResponse","LogsResponse","logs","ProvidersResponse","providers","BenefitGroupsResponse","groups","EmployeesResponse","LocalBenefitsResponse","page","HrEmployeesResponse","_response$data$employ","HrOnboardingResponse","newEmployees","newTiers","SubscribedBenefitGroupsResponse","SystemNotificationsResponse","_response$data$items","notifications","notification","RolesResponse","_response$data$roles","BenefitsResponse","BranchesResponse","branches","branch","resetPassword","getUnreadNotifications","getInitals","isFirstLetter","charAt","_initials$shift2","_initials$pop2","rgx","RegExp","initials","matchAll","splitName","_initials$pop","pop","_initials$shift","shift","priceRangeOptions","LanguageDropdownStyles","PlanetIcon","isTarget","ref","event","current","contains","target","useClickOutside","onclick","handleClick","useCallback","click","condition","conditionAlreadyMet","trueForAny","useEffect","addEventListener","removeEventListener","LanguageDropdown","tooltip","useRef","isDropdownOpen","setIsDropdownOpen","useState","i18n","language","handleLanguageChange","changeLanguage","handleDropdownOpen","resetBenefitGroupFiltersToDefault","employeeActionCreators","setRemoteFilterToStore","history","useHistory","instance","useMsal","isAuthenticated","useIsAuthenticated","isLocalesInRS","handleLogout","Intercom","userService","logoutPopup","resetFilters","SwitchPlatformsDropdownStyles","switchUserRole","roleObject","actionCreators","_user$roles","handleSwitchUserRole","userRole","patch","roleKey","api","preventDefault","ArrowDown","BudgetBreakdownDropdownStyles","header","BudgetBreakdownDropdown","setIsBreakdownOpen","budgetBreakdownTooltip","totalSpent","toggleSidebarMenu","isSidebarOpen","setListOfFailedToBulkUpdateUsers","setListOfDropdownEmployees","setDropdownEmployeesFilter","setDropdownEmployeesMeta","getWindowDimensions","innerWidth","innerHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize","StyledHeader","wrap","AvailableTiersRequest","available","enable_instalments","getUsers","limit","searchText","orderColumns","companyIds","queryParams","companiesQuery","rolesQuery","acc","column","field","isSortedUp","getRolesForDropdown","getCompanyOptions","getTierOptions","resendVerificationLink","enableUser","getCompanyBranches","monthsInSerbian","January","February","March","April","May","June","July","August","September","October","November","December","calculateTime","now","currentMonth","currentYear","targetDate","isAfter","duration","diff","days","floor","asDays","time","asMinutes","asHours","TimerForLastDay","timeLeft","setTimeLeft","interval","setInterval","clearInterval","Number","Header","isSidebarMenuOpen","headerTitle","svgIcon","isTokenVisable","openSyncModal","shouldRedirectToOriginal","isDropDownOpen","setIsDropDownOpen","isBreakdownOpen","pathname","useLocation","avatar","getElementById","handleHistory","push","isInSerbianLanguage","match","ArrowBackIcons","CompanyThemeLogo","colorTheme","marginRight","marginBottom","SwitchPlatformsDropdown","LogoutDropdown","ImageUploadStyles","hideOverlay","overlay","classList","remove","charge","setIsDialogOpen","body","onfocus","checkOnCancel","readURL","file","tagID","reader","FileReader","onload","imageEl","readAsDataURL","ImageUpload","handleChange","setFieldError","isDialogOpen","hideText","setHideText","onMouseEnter","showOverlay","onMouseLeave","File","files","DropZoneStyles","MyDropzone","MyDropZone","setIsDelete","onDrop","acceptedFiles","getRootProps","getInputProps","useDropzone","multiple","removeImage","Object","assign","InitialsCircleStyles","InitialsCircle","calculateTimeLeft","difference","hours","minutes","seconds","keys","SubscribeCountDownStyles","SubscribeCountDown","timer","setTimer","countDown","clearTimeout","InputStyles","shouldHaveHight","inputWidth","customHeight","Input","styles","placeholder","customCssClass","pattern","rows","Infinity","onKeyDown","InputLabelStyles","p","InputLabel","label","shouldHaveColon","PhoneNumberInputStyles","PhoneNumberInput","defaultCountry","PhoneInput","country","itemRenderer","itemIndex","valueField","labelField","methods","addItem","isSelected","SelectInputStyles","containerShouldHaveFullWidth","shouldHaveFullWidth","shouldHaveFullHeight","minWidth","customValuePosition","_ref14","getSelectedValue","selectedValues","sv","SelectInput","getNameValue","defaultOption","options","clearable","shouldHaveMinWidth","fetchMoreData","isClearable","menuPlacement","searchable","getValues","Select","defaultValue","classNamePrefix","onMenuScrollToBottom","handleOnScroll","getOptionLabel","getOptionValue","isSearchable","searchBy","dropdownPosition","LocationsMultiselectInputStyles","customInputFieldHeight","LocationsMultiselectInput","handleInputChange","isMulti","onInputChange","TypesMultiselectInputStyles","TypesMultiselectInput","MultiselectInputStyles","dropdownMenuHeight","debounce","func","wait","immediate","timeout","context","args","apply","MultiselectInput","shouldHaveHeight","shouldHaveFullHeigth","hasMore","debounceInputChange","SearchInputStyles","searchWrapperWidth","placeholderColor","searchTimer","SearchInput","fetchData","setSearch","search","setPagginationPage","maxWidth","useTimeout","searchInputRef","SearchBar","closeIcon","searchIcon","onCancelSearch","onRequestSearch","SidebarMenuStyles","SidebarMenuTabStyles","paraIconLeftMargin","SidebarMenuTab","linkName","Icon","active","navLogos","Dashboard","DashboardIcon","Benefits","BenefitsIcon","Providers","Companies","Users","EmployeesIcon","Settings","SettingsIcon","Notifications","Employees","Refunds","navigationConfig","admin","icon","hr","SidebarMenu","actionHRCreators","_user$authenticatedRo5","listOfLinks","setLitOfLinks","pathForEmployeeAndRefund","isShowSidebar","refundPage","_user$authenticatedRo4","links","getListOfCompaniesThatHaveRefunds","link","NavLink","exact","to","textDecoration","activeClassName","LogoutIcon","TextAndLineStyles","TextAndLine","WrapperCardComponentStyles","boxShadow","paddingMobile","WrapperCardComponent","ListPlaceHolderStyles","ListPlaceHolder","text","SortSelectInputStyles","SortSelectInput","sortKey","sortOrder","onChangeParam","contentRenderer","order","DESC","ASC","translateSort","DisableUserModalStyles","initalDate","DisableUserModal","closeModal","setDate","disableUser","payloadData","schedule_delete_at","errors","handleDisableUserError","DatePicker","selected","chosenDate","handleDateChange","minDate","DisableUsersModalStyles","DisableUsersModal","userIdsMap","setSelectedNumber","userIds","disableUsers","user_ids","handleDisableUsersError","clear","ListItemStyles","border","ListItemExpandedStyles","backgroundOpen","ListItem","fullName","isRowDisabled","isActionsEnabled","isEditActionVisable","isResendVerificationEnabled","shouldShowDeletePopup","isDeleteActionVisable","openDisableUserPopup","checkedMap","setCheckedMap","redirectToUserHistoryPage","setIsActive","setIsOpen","init","has","setIsChecked","myTooltip","handleExpand","handleCheckedOnChange","Map","set","toString","data-event","data-event-off","rebuild","DotsIcon","getContent","dataTip","isDisabledParam","usersService","handleUserEnable","handleDisableUserPopupOpen","clickable","l","CompaniesListItemStyles","CompaniesListItemExpandedStyles","CompaniesListItem","paymendDeadline","confirm","employeeActiveBenefitsTableHead","headName","justifyContent","EmployeeActiveBenefitsStyles","EmployeeActiveBenefits","singleEmployee","Table","TableHead","tableHeadColName","colWidth","EmployeeListItemStyles","EmployeeListItemExpandedStyles","CitiesResponse","queryBuilder","baseQuery","queryObject","URL","entries","searchParams","decodeURIComponent","getCompanyEmployees","tierIds","chosenBudgetRanges","budgetsPercents","range","from","sortColumns","queryBuild","getChosenCompanyEmployee","getCities","override","css","_templateObject2","EmployeeListItem","userEmail","openAddBonusModal","isLoading","setIsLoading","setSingleEmployee","employeesService","fetchEmployee","selectName","BeatLoader","loading","ModalStyles","Modal","isCloseVisable","disableClose","close","openModalAnim","getEl","closeModalAnim","TableComponentStyles","TableComponent","TableRowStyles","findItem","tableStylings","firstColWidth","firstColJustifyContent","firstColMargin","firstColPadding","secondColWidth","secondColJustifyContent","secondColMargin","secondColPadding","thirdColWidth","thirdColJustifyContent","thirdColMargin","thirdColPadding","_ref15","forthColWidth","_ref16","forthColJustifyContent","_ref17","forthColMargin","_ref18","forthColPadding","_ref19","fifthColWidth","_ref20","fifthColJustifyContent","_ref21","fifthColMargin","_ref22","fifthColPadding","_ref23","sixthColWidth","_ref24","sixthColJustifyContent","_ref25","sixthColMargin","_ref26","sixthColPadding","_ref27","actionsColWidth","_ref28","actionsColJustifyContent","_ref29","actionsColMargin","_ref30","actionsColPadding","TableRowActionsStyles","urlLink","baseUrl","deleteLink","resendVerificationLinkParam","removeRow","hideTooltip","additionalLinkParams","deleteConfirmMessage","isShowActionVisable","deleteParam","TableRow","columnOne","columnTwo","columnThree","columnFour","columnFive","columnSix","isLinkEnabled","isShowActionsVisable","isEditActionsVisable","isDeleteActionsVisable","showTooltip","urlLinkId","removeLink","additionalParams","deleteParamId","isRowDisabledParam","TableRowActions","tooltipRef","hide","TableHeadColumnStyles","textAlign","isSortable","TableHeadColumn","toggleSortFunc","Component","SettingsTableRow","CompanyThemeLogoStyles","BenefitLogo","NotFoundStyles","NotFound","removeSideBar","showSideBar","isMounted","CustomBudgetsStyles","March8Header","companyInfo","March8Cards","_budgetRef$current","card","handleSelect","selectedDataBudget","priceless","getDataForUnsubscribe","budgetRef","inputValue","setInputValue","handleSelectCard","deadline","cardId","cardDescription","customProvider","selectedIds","selectedBudgetCard","handleUnsubScribe","image","totalValue","parseFloat","totalBudget","spentBudget","March8Body","customBudgetData","getCustomBudgetInfo","shouldShowMorePerks","setBudgetData","setSelectedDataBudget","staticCardData","morePerksStaticData","subscribeToCustomBenefit","providerDescription","spentCardData","customBudgetItem","subscribedId","customBudgetId","someItem","March8Styles","March8","showContent","footer","CustomBudgets","setCompanyInfo","setCustomBudgetData","companyPhoto","companyLogo","logo","getCompanyInfo","handleClose","AppRoute","component","fullLayout","rest","showCustomBudgets","setShowCustomBudgets","URLSearchParams","isCustomBudgets","isUserInCustomBudgetData","Boolean","Route","render","routes","setUser","fetchUser","api_base","app_id","Olvy","organisation","view","showSearch","compact","showHeader","showUnreadIndicator","unreadIndicatorColor","unreadIndicatorPosition","identifier","teardown","fetchCompanyTokensInfo","Router","Switch","LoginStyles","findLocales","validateLogin","isInLanguage","validator","isEmail","LoginFormStyles","TreeAnimationStyles","SnowAnimation","setIsBenefitLogin","maskedNewPassword","setMaskedNewPassword","formik","useFormik","initialValues","remember","validate","onSubmit","metadata","touched","handleSubmit","handleBlur","autoComplete","htmlFor","Masked","Unmasked","right","Link","ua","navigator","userAgent","msie","msie11","msedge","firefox","msalConfig","clientId","authority","redirectUri","postLogoutRedirectUri","cache","cacheLocation","storeAuthStateInCookie","system","allowNativeBroker","loggerOptions","loggerCallback","level","containsPii","LogLevel","Info","info","Verbose","Warning","warn","loginRequest","scopes","AzureLoginStyles","azureLogin","loginPopup","origin","BrowserAuthError","errorCode","handleAzureLoginError","Login","isBenefitLogin","LoginForm","AzureLogin","validateForgotPassword","ForgotPasswordForm","resetForm","authService","ForgotPassword","Form","resetPasswordValidation","passwordConfirmation","ResetPassword","hash","maskedNewPasswordConfirm","setMaskedNewPasswordConfirm","getUrlParameter","results","exec","Styles","PresentationPage","setData","unique","then","catch","alert","fontWeight","SetPasswordStyles","setPasswordValidation","termsAndPolicy","SetPassword","Card","BenefitLogoIcon","PrivacyPolicyStyles","PrivacyPolicy","acceptPrivacyPolicy","hasAcceptedTerms","setHasAcceptedTerms","handleAcceptPrivacyPolicy","put","aria-level","ButtonContainerStyles","isSubscribedBenefitGroupsVisible","pageFrontEndStates","isFavoritePageOpen","isFavoriteTab","setIsFavoritePageOpen","listOfFavoriteBenefits","navigateToBrowseBenefits","benefitGroupTypes","navigateToCompanyBenefits","navigateToMyBenefits","navigateToFavoriteBenefits","showFilters","filters","filterWrapper","getElementsByTagName","overflow","BenefitGroupFiltersStyles","PriceFilterStyles","BenefitExpirationTypeEnum","ONE_TIME","MONTH","VOUCHER","LOCALES","newest","best_rated","one_time","monthly","married","single","divorced","male","female","other","provider_name","three_months","six_months","yearly","BENEFIT_EXPIRATION_TYPES","SORT_OPTIONS","TwoThumbsStyles","TwoThumbs","onRangeChange","rtl","Range","step","renderTrack","onMouseDown","onTouchStart","getTrackBackground","colors","renderThumb","PriceFilter","PriceFilters","handlePriceChange","CategoryFilterStyles","CategoryFilters","eventProtectClass","chosenCategories","supabaseClient","createClient","createSupaBaseStorageFolder","formattedMonth","sendImageToSupabase","fileName","folderName","storage","upload","LIMIT","getBenefitGroups","chosenCities","chosenBenefitExpirationTypes","remoteFilter","categoriesQuery","citiesQuery","benefitExpirationTypesQuery","benefitExpirationType","getCategories","getCategoriesForEmployeePlatform","getSubscribedBenefits","getAlreadyUsedBenefits","subscribeOrUnsubscribeToBenefit","subscribeOrUnsubscribeToVoucher","getEmployeeTokenCount","benefitBrowseGroupsCount","benefitsBrowse","benefitCompanyGroupsCount","benefitsCompany","isInitialStateSet","setBenefitExpirationTypesFilter","expirations","setSearchFilter","setOrderSort","setKeySort","applyBenefitGroupsFilters","resetBenefitGroupFilters","setIsPageLoading","citiesPage","setCitiesPage","totalPages","setTotalPages","citiesSearchQuery","setCitiesSearchQuery","chosenCityIds","setChosenCityIds","setChosenCities","chosenBenefitExpirationTypeKeys","setChosenBenefitExpirationTypeKeys","setChosenBenefitExpirationTypes","numberOfProvidersRender","setNumberOfProvidersRender","setPage","setOrder","setKey","keywordSearch","setKeywordSearch","setPriceRange","isFilter","setIsFilter","handleSelectingSortOption","option","hideFilters","employeeService","fetchCities","applyFilters","handleResetFilters","public","local","favorite","searchQuery","transformedValue","selectedCityIds","removedValue","newValue","currentPage","newPage","newCities","handleSelectTypes","selectedExpirationTypes","newChosenCategoryIds","cat","refreshBenefitGroup","markNewBenefitGroupAsSeen","getBenefitGroupForPreview","BrowseBenefitGroupsStyles","benefitBrowseGroups","benefitBrowseGroupsTotalPages","benefitBrowseGroupsPage","benefitCompanyGroups","benefitCompanyGroupsTotalPages","benefitCompanyGroupsPage","appliedChosenCategoryIds","appliedCityIds","appliedRemoteFilter","appliedChosenPriceRange","appliedBenefitExpirationTypes","appliedSearchFilter","appliedOrderSort","appliedKeySort","isApplyFilterClicked","isPageLoading","setAditionalBenefitGroups","newBenefitGroups","setBenefitGroupsPage","fetchAlreadyUsedBenefits","fetchMoreBenefitGroups","openModal","_response$data$favori","benefitGroupService","checkIfInFavoritesPayload","favorites","InfiniteScroll","dataLength","next","loader","NextMonthDropDownStyles","isConditionAllBenefits","subscribedBenefits","isNextMonthTooltipOpen","setIsConditionAllBenefits","setIsNextMonthTooltipOpen","SubscribedBenefitGroupsStyles","isDesktop","setIsDesktop","mobileBenefitsType","setMobileBenefitsTypes","thisMonthBenefitGroups","nextMonthBenefitGroups","defaultBenefitGroups","nextMonthCondition","splitBenefitGroups","resizeListener","subscribedBenefitGroupsResponse","fetchInitialData","NextMonthDropDown","LeaveReviewFormStyles","usedBenefits","setUsedBenefits","setRating","setFieldValue","benefitGroupResponse","usedBenefitsResponse","all","starHoverColor","changeRating","newRating","fadeInDown","keyframes","BenefitSubscribeStyles","maxHeight","renderLocations","locations","employeeLocations","groupLocations","calculatePriceWithVat","vatRate","vatAmount","BenefitSubscribeButtonsContainerStyles","doesHaveMinimumContractPeriod","BenefitSubscribeQuantityStyles","BenefitSubscribeQuantity","setQuantity","handleSetQuantity","handleKeyDown","closeBenefitGroupModal","benefitGroupsPages","setEmployeeTokenCount","appActionCreators","isSubscribedButtonHovered","setIsSubscribedButtonHovered","IsButtonsDisabled","setIsButtonsDisabled","calculateBenefitPrice","calculatedPrice","fetchLocalBenefits","updatePublicBenefits","updatedBenefitFromPublicListOfBenefits","fetchFavoritesData","fetchNewBenefits","objectForFetching","subscribeToBenefit","notificationsResponse","userApiService","marginTop","validity","valid","replacedValue","isNaN","sortNumbersByKey","list","sort","a","b","calculateValueWithVAT","vatInCompanyIsOn","setShowPDFBill","setVoucherReimbursementData","setVoucher","customVoucherPrice","setCustomVoucherPrice","customVoucherPriceTokens","setCustomVoucherPriceTokens","nearestValueError","setNearestValueError","uploadedPDF","setUploadedPDF","convertedCustomVoucherPriceTokens","convertedVoucherPrice","calculatedPriceBasedOnQuantity","handleSubmitFile","pdfValues","handleNumberInput","handleSetVoucher","listOfVouchers","findSubscribedVoucher","accept","test","uploadPDF","handleUpload","voucherReimbursementData","BenefitSubscribeButtonsContainer","data-tooltip-place","VoucherSubscribeButton","BenefitSubscribeButton","BenefitSubscribeItem","getBenefitPrice","getVoucherPrices","renderBenefitStatus","getClassNameForBenefitCard","ReactHtmlParser","BenefitSubscribe","isOpenRatingModal","setIsOpenRatingModal","setBenefits","subscribedToSingleBenefitGroup","socialProof","isInFavorites","updateStateOfFavorites","benefitListResponse","isItemInListOfBenefits","handleAddOrRemoveFromFavorites","removeFromFavorites","addToFavorites","fetchBenefits","openRatingModalAnim","benefitItemProps","voucherPrices","maxTokenPrice","minTokenPrice","Set","LeaveReviewForm","closeRatingModalAnim","VoucherReimbursementStyles","dateFormater","parts","Jan","Feb","Mar","Apr","Jun","Jul","Aug","Sep","Oct","Nov","Dec","VoucherReimbursement","isUpload","setIsUpload","employeeBenefitsService","OnboardingStyles","Onboarding","finishEmployeeOnboarding","handleFinishOnboarding","rel","NotificationsStyles","BenefitChangedExpirationType","BenefitChangedPrice","BenefitGroupChangedLocation","BenefitGroupLocationUpdatedInfo","EmployeeChangedLocation","EmployeeLocationUpdatedInfo","EmployeeReassignedTier","EmployeeSubscribedToMcpBenefit","TierBudgetDecreased","NotificationPayloadRender","NotificationsContent","Notification","popSystemNotifications","handleMarkNotificationAsRead","SyncModalStyles","syncUser","syncEmployee","EmployeeBenefitsStyles","useDisableBodyScroll","open","LoadingFavoriteBenefits","EmptyFavoriteBenefits","textPlaceholder","setIsDisabled","Active","FavoriteBenefitsDisplayStyles","ListOfFavoriteBenefits","FavoriteBenefits","fadeInLeft","fadeOutLeft","SocialProofNotificationsStyles","_templateObject3","SocialProofNotifications","_currentlyPopularBene","notificationRef","currentlyPopularBenefit","showNotification","_notificationRef$curr","_notificationRef$curr2","_notificationRef$curr3","_notificationRef$curr4","intervalId","providerLogo","imageUrl","benefitGroupsResponse","categoriesResponse","fetchInfoForSingleBenefitGroup","EmployeeBenefits","isModalOpen","initialVoucherReimbursementData","showPrivacyPolicyModal","isSyncOpen","setIsSyncOpen","showPDFBill","durationOfCurrentBenefitGroupSubscriptions","fetchMostPopularBenefitGroup","editEmployeeContentCard","fetchNotifications","minHeight","ButtonsContainer","SubscribedBenefitGroups","BrowseBenefitGroups","BenefitGroupsFilter","SyncModal","ActivityStyles","EmptyHistory","flexDirection","ActivityLog","ListOfHistoryItems","showList","historyList","historyItem","_historyItem$Provider","_historyItem$Provider2","borderLeft","paddingLeft","dateObject","formattedDate","formattedTime","formatDate","LoadingHistoryItems","UserHistory","setHistoryList","setShowList","fetchUserHistory","getUserHistory","UsedTokensStyles","bugetSpentConfig","series","chart","animations","enabled","easing","speed","animateGradually","delay","dynamicAnimation","toolbar","show","plotOptions","radialBar","startAngle","endAngle","hollow","imageOffsetX","imageOffsetY","dropShadow","blur","track","dataLabels","offsetY","formatter","val","gradient","shade","shadeIntensity","gradientToColors","inverseColors","opacityFrom","opacityTo","stops","lineCap","labels","budgetLeftConfig","downloadAllFiles","setIsRefundDownloading","allFiles","toastId","autoClose","update","TYPE","ERROR","INFO","generatePublicUrlOfImage","imageName","filePath","getPublicUrl","generatePublicURls","listOfImages","publicUrl","chunk","input","idx","throttle","cb","processDelegation","zip","totalImages","onProgress","downloadFolder","folder","renamedImage","download","binary","processTransform","pauseTime","JSZip","generateAsync","downloadZip","zipBlob","blob","zipFileName","filename","zipNumFile","idOfToast","toastOptions","SUCCESS","blobUrl","createObjectURL","appendChild","removeChild","revokeObjectURL","regulateNumberOfDownloads","listOfTransformedImages","ceil","downloadImages","setDownloadPercentage","totalImagesNum","numOfDownloads","CHUNK_SIZE","totalProcessedItems","throttledFunction","progress","fetchTotalBudget","searchDateString","fetchBudgetSpending","getRefundStatistics","reportType","downloadDate","createRefundStatisticsDownloadDate","downloadResponse","fetchUniqueUsedCombinations","fetchUniqueCombinationsPerTiers","UsedTokens","usedTokensLoading","setUsedTokensLoading","graphs","setGraphsData","setSearchDateString","totalBudegetRes","spentBudgetRes","dashboardService","leftBudgetValue","spentBudgetValue","round","datePicker","setAttribute","dateFormat","showMonthYearPicker","maxDate","ReactApexChart","totalBudgetConfig","legend","horizontalAlign","TotalBudgetStyles","totalBudgetLoading","setTotalBudgetLoading","setTotalBudget","setErrorMessage","CategoryBudgetStyles","isInSerbian","categoryBudgetConfig","tools","selection","zoom","zoomin","zoomout","pan","reset","bar","horizontal","offsetX","xaxis","categoryBudgetLoading","setCategoryBudgetLoading","graphData","setGraphData","chosenCategoriesNames","chosenMonthBudget","previousMonthBudget","TierBudgetStyles","tierBudgetConfig","columnWidth","endingShape","TierBudget","tierBudgetLoading","setTierBudgetLoading","BudgetUtilizationStyles","budgetUtilizationConfig","BudgetUtilization","budgetUtilizationLoading","setBudgetUtilizationLoading","budgetUtilization","setBudgetUtilization","TopBenefitsStyles","barChart","fontFamily","pieChart","responsive","breakpoint","radioBoxResults","TopBenefits","topBenefitsLoading","setTopBenefitsLoading","chosenMonth","setChosenMonth","chosenMonthErrorMsg","setChosenMonthErrorMessage","previouseMonth","setPreviouseMonth","previousMonthErrorMsg","setPreviousMonthErrorMessage","chooseCurretOrLastMonth","setChooseCurrentOrLastMonth","pieChosenBenefitsLabels","pieChosenBenefitsData","barChosenSeries","pieLastMonthBenefitsLabel","pieLastMonthBenefitsData","barLastMonthSeries","UsageWidgetStyles","UsageWidget","setUsageLoading","setValues","handleFetchCompanyUsage","configUniqueCombinations","random","PosibleCombinationsStyles","PosibleCombinations","numberOfCombinations","setNumberOfCombinations","numberOfUniqueCombinations","setNumberOfUniqueCombinations","usedCombinationsRes","uniqueCOmbinationsPerTiersRes","fectchWidgetData","downloadBlob","contentType","Blob","downloadLink","downloadCsvFromBase64EncodedString","element","reportTypeDropdownOptions","UsageReportGeneratorStyles","UsageReport","setReportType","getStatistics","isDownloading","downloadPercent","debouncedGetStatistic","SyncStyles","SyncWidget","setSyncLoading","handleFetchSyncedEmployees","HrDashboardStyles","HrDashboard","usageLoading","syncLoading","dashboarsContainer","flexWrap","UsageReportGenerator","RefundReportGenerator","CombinationsWidget","HrBenefitsStyles","setHrBenefitGroupCities","getBenefitGroup","getTiers","getBenefitTags","HrBenefits","benefitsPage","benefitTags","enabledBenefitGroup","chosenBenefitTags","chosenBenefitTagIds","setBenefitGroups","setCategories","setBenefitTags","setEnabledBenefitGroup","setChosenCategories","setChosenBenefitTags","chosenTags","chosenTagIds","setChosenTags","resetBenefitFiltersToDefault","isCardClicked","areFiltersLoaded","isRemoteLoc","setIsRemoteLoc","benefitGroupAvailabilityStatusOptions","fetchCategories","fetchBenefitTags","benefitTagsData","benefitTagService","tagIds","benefitTagsQuery","cityId","fetchFilters","handleFetchAfterSearch","selectedCategoryIds","handleSetChosenCategories","selectedBenefitTagIds","handleSetChosenBenefitTags","handleBenefitGroupAvailabilityFilterChange","handleBenefitCardClick","Pagination","totalSize","sizePerPage","changeCurrentPage","scrollTo","behavior","handleSetPage","BasicInfoStyles","_state$benefits$editP","benefitGroupName","editPageState","providerPhoto","benefitGroupLogo","benefitGroupSummary","benefitGroupDescription","benefitGroupLocations","disableTiersComponent","urlSizeCover","EditBenefitOptionsStyles","isBenefitGroupActive","handleCheckUncheckAll","isSomeTierChecked","ToggleButtonStyles","ToggleButton","onToggle","ActivitySectionStyles","ActivitySection","BenefitGroupUsersTableStyles","InfoPopUp","tableHead","priorityCounter","tableHeaderReducer","tableHeaders","tableHeader","orderPriority","UserBenefitsCount","propTypes","PropTypes","number","getOrderColumns","tHeader","setHrBenefitGroupUsers","setHrBenefitGroupUsersPage","useReducer","getBenefitGroupUsers","orderQuery","tableColumn","activeUser","PreviewModalStyles","downloadImage","canvas","fakeLink","previewCanvas","html2canvas","allowTaint","useCORS","windowHeight","outerHeight","scale","toDataURL","downloadPreview","ToggleButtonComponentStyles","BenefitGroupInstalmentsSectionStyles","BenefitGroupInstalmentsSection","EditHrBenefitStyles","BenefitGroupBenefitPreviewStyles","BenefitGroupBenefitPreviewListStyles","BenefitGroupBenefitPreviewItem","BenefitGroupBenefitPreviewList","listOfBenefitsForPreview","BenefitGroupBenefitPreview","params","EditHrBenefit","setEditHrBenfitsInitialState","domainTiers","toggleBenefitGroup","toggleBenefitGroupInstalments","setAvailableTiers","didDisableTier","setDidDisableTier","canFindAvailableTiers","setCanFindAvailableTiers","previewModal","setPreviewModal","findAvailableTiers","chosenAvailableTiers","tiersResponse","fetchAllInitialData","swal","buttons","dangerMode","BasicInfo","BenefitActivitySection","EditBenefitOptions","listOfTierIds","isSomeChecked","handleToggleBenefitGroupInstalments","enabledStatus","BenefitGroupUsersTable","PreviewModal","genderOptions","isFormDisplay","isEditEmployee","branchCodeOptions","setBranchCodeOptions","fetchCompanyBranches","hrEmployeeServices","branchOptions","translatedGenderOptions","IntitialsCircle","selectedDate","parseISO","showYearDropdown","placeholderText","phone","textTransform","relationshipOptions","DetailsStyles","haveChildren","isMarried","Details","refetchCities","translatedRelationshipOptions","RankStyles","Rank","companyTiers","setCompanyTiers","fetchTiers","displayInfo","desc","chosenTier","singleTier","EmployeeDetailsStyles","setOnboarding","maximumTokens","userInitalState","userReducer","benefitTokenPrice","UserContext","createContext","UserProvider","dispatchUser","userActions","setIsOnboardingDoneToTrue","logoutUser","Clarity","EmployeeDetails","setEmployee","employeeContentCard","enrollDate","disableHrCheckbox","goBack","EditEmployeeStyles","hrEmployeeValidations","EditEmployee","disableButton","setDisableButton","enableReinitialize","handleEditEmployeeError","AddEmployee","closeForm","fetchEmployees","closeAddEmployee","addEmployeeForm","employeesList","handleCreateEmployeeError","AddEmployeeWithCSVStyles","steps","step1Status","step2Status","step3Status","SUPPORTED_FORMATS","AddEmployeesWithCSVValidations","addHeightOnClick","sectionHeight","scrollHeight","expandSection","AddEmployeeWithCSV","AddEmployeesWithCSV","openErrorPopup","setStep1Status","setStep2Status","setStep3Status","csv","uploadCSV","UpdateEmployeeWithCSVStyles","UpdateEmployeesWithCSV","failedBonusUsers","handleUpdateEmployeeError","UpdateEmployeesWithCSVStyles","AddEmployeeWithCSVErrorStyles","AddEmployeeWithCSVError","errorsToRender","getErrorsForRender","BonusBudgetDateInput","recurrenceTypeOptions","handleStartDateChange","setHours","getTimezoneOffset","filterDate","DateInput","isNotCompanyBonusBudget","FormStyles","tokenWorth","buttonText","inputName","textareaName","selectOptions","handleSearchEmployees","paddingRight","getCompanyTiers","getTokenWorth","onboardingFinish","addBonusFormValidation","AddBonusStyles","finishOnboarding","modalType","listOfEmployees","meta","dropdownEmployees","setTokenWorth","setIsNotCompanyBonusBudget","fetchCompanyBonusBudgetData","fetchToken","responseTokenWorth","settingsService","setSubmitting","handleAddBonusError","onboardingDone","getEmployees","isSubmitting","handlePageChange","searchValue","EmployeesStyles","selectedColor","tableHeaderListHREmployees","between","getTableHeadHREmployees","UploadUpdateCSVFailed","firstSetTimeOut","secondSetTimeOut","setHrEmployees","setHrEmployeePage","setHrEmployeeSearch","reduxDispatch","setIsModalOpen","isUpdateModalOpen","setIsUpdateModalOpen","isAddEmployeeOpen","setIsAddEmployeeOpen","errorPopup","setErrorPopup","setErrors","setTiers","chosenTiers","setChosenTiers","chosenTierIds","setChosenTierIds","setChosenBudgetRanges","disableUserPopup","setDisableUserPopup","disableUsersPopup","setDisableUsersPopup","selectedUserId","setSelectedUserId","selectedEmployeeId","setSelectedEmployeeId","setModalType","isMobileSortWrapperOpen","setIsMobileSortWrapperOpen","selectedNumber","setHeaderTitle","failedToUpdateUserList","tooltipActionsSortWrapper","budgetRangesOptions","closeUpdateModal","closeAddBonusModal","openAddEmployee","handleSetChosenBudgetRanges","handleSetChosenTiers","selectedTierIds","handleOpenErrorPopup","handleCloseModal","sortedUpTableHeader","numberOfSelectedOnPage","getDropdownEmployees","SearchIcon","openUpdateModal","handleCheckboxOnChange","openDisableUsersPopup","TrashIconSvg","AddBonus","TierItemStyles","removeTier","TierItem","setSelectedTier","isInRSD","selectedTierId","tierFormValidation","addTier","handleAddTierError","editTier","selectedTier","updatedSelectedTier","handleEditTierError","FormRenderer","AddTier","EditTier","BudgetRolloverToggleStyles","enableRollover","BudgetRolloverToggle","DetailsSectionStyles","DetailsSection","setFieldTouched","handleCompanyThemeFormError","validateCompanyThemeForm","CompanyThemeFormStyles","CompanyThemeForm","setUserThemes","isDelete","handleSubmitForm","addCompanyThemeSubmit","updateCompanyThemeSubmit","selectedCompanyThemeId","removeCompanyThemeSubmit","handleOnSubmit","encType","handleCancel","el","SettingsStyles","CurrencyToggle","enableCurrency","setModalTypes","setRolloverDuration","setRolloverEnabled","scheduledDeleteAt","setScheduleDeleteAt","rolloverInfo","setRolloverInfo","tokensIntoCurrency","setTokensIntoCurrency","fetchCompanyBudgetRolloverData","settingsCard","companyRollover","getIfCompanyHasRollover","getCompanyCurrency","handleRolloverToggle","budgetRolloverData","form","cssClass","containerWidth","currencyValueName","tokenValue","labelName","getIn","touchedInput","previousValue","CurrencyField","tokenValueName","TiersFormStyles","TiersForm","setTokenValue","fetchTokenValue","FieldArray","Field","tiersContainer","scrollTop","AddEmployeesWithCSVStyles","stepStatusState","setStepStatusState","downloadCSV","warning","FinishStepStyles","FinishStep","newTiersAndEmployees","submitOnboarding","yup","mapper","onboardingValidationsSchema","shape","of","required","formSteps","formStep","setFormStep","setNewTiersAndEmployees","keyCode","which","container","changeFormSteps","submitForm","Formik","actions","validationSchema","LeftArrowIcon","FormModalStyles","FormModal","focus","tabIndex","modal","closeButton","BenefitGroupFormStyles","categoriesActionCreators","categoriesService","Editor","editorState","editorStyle","stripPastedStyles","onEditorStateChange","validateHrLocalBenefitGroupCreate","validateHrLocalBenefitCreate","AddLocalBenefitGroupStyles","AddLocalBenefitGroup","setCurrentPage","fetchLocalBenefitGroups","localBenefitsService","handleCreateBenefitGroupError","BenefitGroupForm","EditLocalBenefitGroupStyles","localBenefitGroups","localBenefits","editLocalBenefitGroup","chosenBenefitGroupId","handleUpdateBenefitGroupError","VouchersStyles","Vouchers","isAdmin","handleBenefitPredefinedValuesChange","updatedVouchers","handleNameChange","removeVoucher","addNewVoucher","BenefitFormStyles","getInitProviders","publishBenefit","EXPIRATION_OPTIONS","BenefitForm","isEdit","o","onBur","handleBenefitPublishedStatus","draft","providersService","AddBenefitStyles","addNewBenefitToBenefitGroup","restrict","handleCreateBenefitError","EditBenefitStyles","editLocalBenefit","chosenBenefitId","refetchData","handleUpdateLocalBenefitError","FormRender","modalFormType","EditLocalBenefitGroup","AddBenefit","EditBenefit","BenefitGroupRowStyles","allElemements","getElementsByClassName","borderTop","removeHeightOnClick","elementTransition","requestAnimationFrame","collapseSection","BenefitGroupRow","setChosenBenefitGroupId","setChosenBenefitId","row","addCardView","hasEror","StarIconStyles","StarIcon","x1","x2","y1","y2","gradientTransform","gradientUnits","stopOpacity","BenefitsListStyles","BenefitsList","removeLocalBenefit","setBenefit","BenefitDetailsActionsStyles","BenefitDetailsActions","openEditBenefit","BenefitDetailsStyles","BenefitDetails","BenefitGroupSubRowStyles","BenefitGroupSubRow","chosenBenefit","setChosenBenefit","findChosenBenefit","removeCardView","LocalBenefitsStyles","initialState","localBenefitGroupForm","localBenefit","setLocalBenefitGroups","setLocalBenefitGroupPage","isFormModalOpen","setIsFormModalOpen","setModalFormType","localBenefitsList","getLogs","dateQuery","initalSearchDateString","setLogs","pageNumber","setPageNumber","isNextDayDisabled","setIsNextDayDisabled","setCompanies","chosenCompanies","setChosenCompanies","chosenCompanyIds","setChosenCompanyIds","companiesPage","setCompaniesPage","totalCompaniesPages","setTotalCompaniesPages","setRoles","chosenRoles","setChosenRoles","chosenRoleIds","setChosenRoleIds","observer","lastActivityLogRef","disconnect","IntersectionObserver","isIntersecting","prevPageNumber","observe","fetchCompanies","fetchRoles","fetchLogs","debouncedSearch","activityService","logsCard","renderLog","dto","prevLogs","fetchAditionalLogs","toggleDisableNextDayButton","selectedCompanyIds","handleSetChosenCompanies","newCompanies","selectedRoleIds","handleSetChosenRoles","prevDay","decrementedDate","nextDay","incrementedDay","getHours","getMinutes","ProviderRowStyles","removeProvider","setChosenProvider","providerService","messagee","ProviderToggleButtonComponentStyles","ProviderFormStyles","ProviderForm","toggleIsActive","AddProviderStyles","validateProviderForm","REACT_APP_DEV_API_URL","defaults","withCredentials","axiosInstance","AddProvider","fetchProviders","handleCreateProviderError","EditProviderStyles","EditProvider","handleEditProviderError","selectedCompany","setSelectedCompany","publishBenefitGroup","handleCompanySelect","c","handleBenefitGroupPublishedStatus","AddBenefitGroupStyles","validateBenefitGroupForm","str","AddBenefitGroup","addBenefitGroup","EditBenefitGroupStyles","EditBenefitGroup","editBenefitGroup","setBenfitGroup","fetchBenefitGroup","benefitGroupsService","handleEditBenefitGroupError","benefitTagActionCreators","showBenefitTagInput","setShowBenefitTagInput","benefitTagObj","setBenefitTagObj","selectedTag","setSelectedTag","benefitTagsService","filteredTags","getChosenIds","inputContainer","handleTagChange","chosenTag","addTag","sortTagsByChosenOrder","removeTag","filteredArray","validateBenefitForm","usageTagRegex","formattedUsageInstructions","addBenefit","initProvidersState","editBenefit","fetchBenefit","handleEditBenefitError","ItemStyles","Item","onCardClick","editButton","removeButton","selectedItem","openModalPreviewModalAction","isBenefitGroup","ListStyles","List","itemOnClick","animationId","animationClassName","chosenItem","generatePrice","priceString","SubRowStyles","deleteBenefitGroup","deleteBenefit","chosenBenefits","setChosenBenefits","setBenefitDetails","bg","choisenBenefirGroup","ProvidersStyles","setInitProviders","setProvidersPage","setProvidersSearch","chosenProviderId","setChosenProviderId","sortOptions","openModalAnimForm","providersList","getVendorReport","providerBuffer","benefitGroupBuffer","benefitBuffer","onresize","allProviderRows","allSubrows","ProviderRow","SubRow","closeModalForm","closeModalAnimForm","DashboardStatisticsStyles","adminDashboardStatisticAlgorithm","lenght","newData","isBefore","toISOString","filteredData","uniqueItem","sortedDates","statistic","dates","adminDashboardActionTypes","SET_ADMIN_DASHBOARD_FILTERS","SET_ADMIN_DASHBOARD_STATISTICS","SET_ADMIN_DASHBOARD_USER_BENEFITS","setAdminDashboardFilters","handleChartOptions","dataForSeries","DashboardStatisticsNavbarStyles","getCompanies","getSelectedCompany","SelectCompaniesComponent","onSelect","setCompany","companiesService","formattedResponse","DashboardStatisticsNavbar","listOfUserBenefits","adminDashboard","dropdownRef","showDropdown","setShowDropdown","showDatePicker","setShowDatePicker","companySubscriptions","companyAnagram","sub","calculateCompanySubscriptions","setStartDate","setEndDate","selectionComplete","toggleSelectionComplete","sameDay","d1","d2","isSame","ReactDatePicker","selectsEnd","inline","startOfTheCurrentMonth","DashboardStatistics","statistics","fetchDashboardStatistics","uniqueUsers","setAdminDashboardUserBenefits","setAdminDashboardStatistics","ResetDates","showRollover","setShowRollover","UserReport","showReport","setShowReport","DashboardStyles","BasicInfoSectionStyles","paymentDeadlineOptions","BasicInfoSection","handleIdNumberInput","handleToggleVat","handleToggleBonusBudget","handleToggleOnlySSOLogin","handleChangeStatus","handleToggleReimbursement","handleToggleTokensToRSD","initialCompanyTagsSectionState","isAddTagOpen","tagObj","companyTagsSectionActionsTypes","companyTagsSectionReducer","CompanyTagsSectionStyles","setCompanyTags","companyTags","getCompanyTags","NewCompany","newCompanyData","identificationNumber","identification_number","setTags","companyData","ein","companiesInitalState","allTags","_values$tags","companyTagService","fetchTags","openAddTagInput","chosenIds","useCompanyTagInternActions","CompanyTagsSection","objectFit","AddCompanyStyles","validateCompanyForm","closeAddCompany","setIsAddCompanyOpen","addCompanyForm","AddCompany","addNewCompany","handleCreateCompanyError","tableHeadConfig","CompaniesStyles","deleteCompany","onSearchChange","isAddCompanyOpen","companiesList","handleGoBack","openAddCompany","CompanyDetailsStyles","CompanyDetails","companyDetails","fetchSingleCompany","EditCompanyStyles","EditCompany","isYourCompanyId","editCompany","fetchCompany","handleUpdateCompanyError","CompanyTags","editItem","BenefitTag","benefitTagData","CompanyTag","companyTagData","companyTagValidations","AddCompanyTagStyles","addCompanyTag","companyTag","companyTagsService","handleCreateBenefitTagError","initalBenefitTagState","initialCompanyTagsState","initalCategoriesState","EditCompanyTagStyles","editCompanyTag","chosenId","setChosenTag","fetchCompanyTag","handleEditBenefitTagError","benefitTagValidations","AddBenefitTagStyles","addBenefitTag","benefitTag","EditBenefitTagStyles","editBenefitTag","setBenefitTag","fetchBenefitTag","categoryValidations","AddCategoryStyles","addCategory","handleCreateCategoryError","EditCategoryStyles","editCategory","handleEditCategoryError","cityValidations","AddCitiesStyles","AddCity","_citiesResponse$data","citiesData","handleCreateCityError","AddCompanyTag","EditCompanyTag","AddBenefitTag","EditBenefitTag","AddCategory","EditCategory","SectionStyles","Section","textAndLineTitle","buttonOnCLick","listItems","mountedState","cardOpacity","deleteBenefitTag","companyTagActionCreators","deleteCompanyTag","deleteCategory","setChosenID","companyTagsData","categoriesData","notificationData","subejct","validateNotificationForm","serverErrorMsg","setServerErrorMsg","handleSendBudgetReminders","notificationService","handleSendUsageInstructions","closeAddUser","setIsAddUserVisible","AddUserFormStyles","addUserFormValidation","NewUser","newUserData","roleId","MemberFieldsStyles","MemberFields","isEditUserForm","resetTierInput","setResetTierInput","relationshipOption","AddUserForm","backButtonFunc","fetchUsers","companyOptions","setCompanyOptions","AddUser","UsersListStyles","tableHeadBuilder","usersPage","setUsers","isAddUserVisible","openAddUserForm","chosenCompaniesFilters","chosenCompaniesFiltersIds","removeCompanyFilter","chosenRolesFilters","chosenRolesFiltersIds","removeRoleFilter","removeAllFilters","FormAndDetails","userRoles","buttonFunc","FormAndDetailsStyles","UserDetailsStyles","initalUsersState","newUser","selectedUser","UsersContext","UserDetails","usersState","usersActions","setSingleUser","useContext","getSingleUser","userFirstName","userLastName","editUserFormValidations","EditUserForm","_chosenUser$employee","_chosenUser$employee2","_chosenUser$employee3","_chosenUser$employee4","_chosenUser$employee5","_chosenUser$employee6","_chosenUser$employee7","_chosenUser$employee8","_chosenUser$employee9","_chosenUser$employee10","_chosenUser$employee11","_chosenUser$employee12","routeParams","chosenUser","setChosenUser","bottom","EditUserStyles","EditUser","EmptyRefunds","refundActions","SET_REFUNDS_LIST","SET_REFUND","SET_TOTAL_COUNT","SET_FILTERS","SET_CHECKED_PENDING_ITEMS","SET_BRANCH_CODES","SET_TOGGLE_REIMBURSEMENT","setRefunds","setRefund","setFilters","setCheckedPendingItems","setToggleReimbursement","RefundStyles","RefundModalStyles","LeftModalSection","singleRefund","RightModalSection","aria-label","imageSrc","ShowRefundStatus","handleStatus","aria-live","bucketsSwap","oldStatus","folderRefundPending","acceptedRefundFolder","moveError","move","RefundModalActions","refundsReducer","acceptOrRejectRefund","newStatus","refund","_refundsResponse$data","refundsResponse","perPage","refunds","fetchRefunds","RefundModal","onClose","setImage","modalRef","aria-labelledby","PdfLogo","handleImage","ShowRefundModal","RefundPagination","totalCount","ListOfRefundsDesktopBody","listOfRefunds","handleRefundOpen","checkedPendingItems","refundItem","_refundItem$UserBenef","_refundItem$UserBenef2","UserEmployee","ListOfRefundsDesktop","listOfRefundsDesktopBodyProps","ListOfRefundsMobileStyles","RefundBranchCodeFilter","branchCodes","handleOnClickBranchCode","branchCodeId","RefundStatusFilter","handleOnClickStatus","classNAme","ListOfItemsRefundsMobile","statusRef","branchRef","isStatusOpen","setIsStatusOpen","isBranchOpen","setIsBranchOpen","aria-haspopup","aria-expanded","ListOfRefundsMobile","RefundListIndex","isMobileView","initializeWithValue","getMatches","matchMedia","matches","setMatches","useLayoutEffect","addListener","removeListener","useMediaQuery","ToggleSliderStyles","ToggleSlider","RefundListSecondLayer","handleCheckAll","handleBulkAcceptOrDecline","toggleReimbursement","fetchCompanyReimbursementState","ListOfRefundsDesktopHeader","RefundMobileHeader","setLoading","_refundsResponse$data2","getAllBranchesInCompany","listOfCompanyBranchCodes","null","true","false","refundId","ids","acceptOrDecline","refundListSecondLayerProps","handleHamburger","AdminUserHistoryStyles","adminActionTypes","SET_ADMIN_USER_FILTERS","SET_ADMIN_USER_DATA","setAdminFilters","AdminUserHistoryContentStyles","listOfOptions","AdminUserHistoryHeader","AdminUserHistoryBody","listOfData","adminHistoryItem","dateInIsoString","AdminUserHistoryContent","adminSingleUserData","infoData","AdminUserHistory","foundUser","setFoundUser","useParams","getUserInfo","getAdminHistoryInfo","formattedOptionsFilter","ShownContent","obj","PreviewHRBenefitStyles","PreviewHRBenefitBodyStyles","PreviewHRBenefitBody","routesConfig","member","PreviewHRBenefit","LocalBenefits","SuperAdminDashboard","PreviewProviders","UsersList","SuperAdminSettings","updateObject","oldObject","updatedValues","lang","finishUserOnboarding","appReducer","usersReducer","initalState","benefitTagsReducer","companyTagsReducer","categoriesReducer","singleCompany","companiesReducer","editProvider","prov","ben","providersReducer","setHrBenefitGroupChosenCities","setHrBenefitGroupChosenCityIds","benefitsReducer","filteredBenefitGroups","newBenefitGroup","newBenefit","localBenefitsReducer","employeesFiltered","hrEmployeesReducer","domainTier","foundTier","tiersReducer","setCurrentlyPopularBenefit","setSocialProofForSingleBenefit","setIsFavoriteTabOpen","setListOfFavoriteBenefits","favoritesAnagram","setListOfBrowseBenefits","employeeBenefitsSetInitalState","_ref31","_ref32","employeeBenefitsReducer","setBranchCodes","setTotalCount","adminDashboardReducer","setAdminUserData","adminReducer","rootReducer","combineReducers","employeesReducer","useStore","initStore","middlewares","thunk","enhancer","applyMiddleware","createStore","ErrorBoundary","super","componentDidCatch","componentStack","fallback","GlobalErrorBoundaryFallbackStyles","GlobalErrorBoundaryFallback","handleRedirect","RESOURCES","ENG","LWE","LWM","Password","remember_me","forgot_password","go_back","submit_1","required_field","privacy_policy","terms","hi","choose_benefits_message","rt_tt_ratio","BTD","user_did_not_choose","time_to_pick","time_to_pick_locked","Member","available_prov","Search","Price","SBG","sort_by","filter_by","SL","FBT","reset_filter","open_filters","Browse_Benefits","Company_Benefits","My_Benefits","Favorite_Benefits","NFB","TM","NM","DEF","SAB","SOC","NABTM","NABNM","NADB","add_favorites","remove_favorites","rate_the_benefit","Price_includes_VAT","remaining","enter_the_value","Subscribe","Unsubscribe","Redeem","Return_voucher","Subscribed","Resubscribe","min_voucher_price","tokens_shortage_sub","tokens_shortage","benefit_group_management","save","cancel","preview","disable_benefit_warning","tiers_info","on","off","bg_disabled","bg_enabled","access","uncheck_all","check_all","disable_installments_warning","installments_enabled","installments_disabled","active_users","filter_by_group_category","filter_by_benefit_tags","filter_by_status","budget_spent_tiers","chosen_month_budget","previous_month_budget","total_budget","chosen_month","previous_month","budget_spent","budget_spent_by_category","tokens_used","spent_budget","budget_unused","usage_statistics","employees_using_the_system","employees_not_using_the_system","gen_usr_rep","select_report_type","chosen_for_this_month","chosen_for_next_month","downloading","gen_ref_rep","sync_widget","sync_title","top_benefits","combination_statistics","uniquely_chosen_combinations_title","over_2_mil","Logout","benefit_has_installments","decline_unsub_warning","unsub_explain","company_benefit_groups","add_local_benefit_groups","edit_local_benefit_group","please_wait","basic_info","company_name","Name","Description","Summary","Taxes","Update","add_benefit","edit_local_benefit","expiration_type","min_contract_period","ben_price_in_tokens","save_as_draft","publish_benefit","Create","select_categories","Options","Tokens","only_predefined_values","refund_voucher","Publish","Edit","duration_type","add_local_benefit","search_employees","add_employee","add_employees_csv","add_employees","update_employees_csv","add_bonus","filter_by_tiers","filter_by_budget_percentage","Sort","Selected","Delete","no_result_found","Verified","download_template","download_template_info","submit_the_file","upload_the_file","step2_title_employees","step2_text_1","step2_text_2","required_fields_employees","step2_title_bonuses","step2_text_3","bonus_type_info","bonus_start_date_info","bonus_end_date_info","bonus_type_default_info","required_fields_bonuses","update_employees","update_employees_info","of_tokens","resend_ver_link","add_bonus_budget","enable_user","Gender","Relationship","Team","Bonuses","Contact","Surname","Birthday","disabled_user_info","Position","Family","Expiration","choose_disabling_date","immediate_delete","Disable","delete_employees","to_be_deleted","turned_on_rollover_info","max_budget_info","Remove","upload_logo_info","benefiti_welcome","first_time_setup","add_tiers_info","empty_refunds","Rejected","Accepted","Pending","Branch","Accept","or","Decline","Type","Image","show_rollover_dates","rollover_resets","no_rollover","show_usage_report","unique_user_sub","Subscriptions","filter_by_companies","filter_by_roles","prev_day","next_day","no_activity_logs","benefit_group_cat","add_benefit_group_cat","add_cities","Cities","edit_company_tag","add_benefit_tag","edit_benefit_tag","add_category","edit_category","send_budget_remainders","send_usage_instructions","custom_email_notif","send_message_to_other_usr","choose_comp_as_receivers","send_message","add_provider","download_vendor_report","provider_enabled","provider_disabled","edit_provider","add_benefit_group","Remote","publish_ben_group","save_ben_gr_as_draft","Draft","vouch_price","edit_bg","Quantity","short_name_info","num_of_installments","VAT","usg_instr","add_tag","submit_tag","edit_benefit","sub_monthly","sub_one_time","sub_vouchers","Installments","MCP","total_spent","benefit_preview","NEW","choosen_ben","price_in","dinars","global_company_settings","Hr","HEALTH","FAMILY","HOME","LEISURE","COWORKING","PETS","MOBILITY","DISCOUNTS","SAVINGS","TRAVEL","GIFT","REFUNDACIJA","dnd_or","click_to_upload","supported_formats","delete_benefit_group_alert","delete_benefit_alert","delete_tier_alert","Show","delete_company_alert","failed_to_get_favorite_benefits","failed_to_remove_from_favorites","failed_to_add_to_favorites","failed_to_delete_company","failed_to_send_ver_link","failed_to_enable_user","failed_to_login","failed_to_reset_password","add_rating","failed_to_leave_rating","failed_to_get_benefit_groups","failed_to_get_used_benefits","failed_to_get_sub_benefit_groups","success_review","failed_to_create_user","success_user_create","failed_to_get_companies","failed_to_get_roles","failed_to_edit_user","failed_to_get_users","failed_to_accept_policy","failed_to_delete_user","failed_to_get_popular_benefit","failed_to_get_notifications","failed_to_get_categories","failed_to_benefit_subscribe","failed_to_get_employees_tokens","failed_to_redeem_voucher","failed_to_set_valid_file_format","failed_to_mark_as_read","failed_to_onboard","failed_to_get_single_benefit_info","failed_to_get_tiers","select_tiers_warning","failed_to_update_benefit_group","failed_to_get_benefit_group_users","success_employee_edit","success_add_bonus","success_add_employee","select_users_warning","success_employees_add","success_employees_edit","failed_to_get_benefit_tags","failed_to_get_budget_spending","failed_to_get_budget_per_categories","failed_to_get_synced_employees","failed_to_get_tier_budgets","failed_to_get_top_benefits","failed_to_get_total_budgets","failed_to_get_statistics","failed_to_get_company_usage","delete_benefit_group_info","success_add_benefit","failed_to_publish_benefit","success_publish_benefit","success_edit_benefit","success_add_company_benefit_group","success_edit_company_benefit_group","success_onboarding_finish","fill_form_warning","step_1_must_be_filled_warning","failed_to_finish_onboarding","failed_to_get_token_value","failed_to_get_refund_list","failed_to_accept_refund","failed_to_get_company_reimbursement_state","success_tier_create","success_tier_edit","failed_to_currency_change","failed_to_get_additional_logs","failed_to_get_user_info","the_company_is_not_in_bonus_budget_warning","the_company_is_not_in_sso_mode_warning","failed_to_get_admin_statistics","failed_to_send_emails","failed_to_get_providers","failed_to_get_report","provider_delete_info","proved_delete_question","success_add_benefit_group","success_edit_benefit_group","success_create_provider","success_update_provider","select_benefit_group_warning","delete_benefit_group_question","delete_benefit_group_description","delete_company_tag_question","failed_to_delete_company_tag","success_delete_company_tag","failed_to_delete_benefit_tag","success_delete_benefit_tag","delete_benefit_group_category_question","failed_to_delete_benefit_group_category","success_delete_benefit_group_category","delete_city_question","failed_to_delete_city","success_add_tag","success_update_tag","success_add_category","success_update_category","success_add_benefit_category","success_update_company_tag","failed_to_get_user_history","bonus_start_date_disclaimer","bonus_end_date_disclaimer","mcp_period_info","mcp_take_warning","mcp_take_info","add_company","id_num","inv_email","Address","enable_vat","vat_enable_desc","only_bonus_budget","bonus_budget_desc","only_sso_login","sso_login_desc","test_phase","test_phase_desc","enable_reimbursement","enable_reimbursement_desc","enable_currency","enable_currency_desc","company_tags","tag_name","upload_logo","no_image","upload_image","edit_company","search_users","add_user","clear_all","user_info","Roles","formal_mail_flag","additional_members_fields","Enroll","Phone","Locations","user_disabled","Role","edit_user","voc_name","disabled_usr_desc","remaining_tokens_total_tokens","number_of_different_benefits","subscribed_success_to_mcp_title","subscribed_success_to_mcp_info","subscribed_success_to_mcp_info2","Male","Female","Other","Married","Single","Divorced","ben_group_no_ben","empty_list","RS","Redeemed","success_add_city","success_update_city","delete_country_question","failed_to_delete_country","success_add_country","success_update_country","failed_to_get_companies_benefit_statistics","failed_to_upload_csv_file","resources","translation","initReactI18next","fallbackLng","interpolation","escapeValue","Application","pca","store","MsalProvider","ToastContainer","hideProgressBar","newestOnTop","closeOnClick","pauseOnFocusLoss","draggable","pauseOnHover","AppRouter","msalInstance","PublicClientApplication","initialize","getActiveAccount","getAllAccounts","setActiveAccount","enableAccountStorageEvents","addEventCallback","eventType","EventType","LOGIN_SUCCESS","account","ReactDOM","module","exports"],"mappings":"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","file":"static/js/main.437e8902.chunk.js","sourcesContent":["import styled from 'styled-components'\n\nconst AttachedFileWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0 26px;\n border: solid 1px #979797;\n border-radius: 4px;\n\tmargin: 0 0 0 30px;\n\theight: 40px;\n\twidth: 516px;\n\n .iconContentContainer {\n display: flex;\n align-items: center;\n\n .content {\n margin: 0 0 0 17px;\n .name {\n line-height: 24px;\n margin: 0 0 -4px 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\t\t\t\twidth: 320px;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tfont-weight: 600;\n\t\t\t\tfont-stretch: normal;\n\t\t\t\tfont-style: normal;\n\t\t\t\tletter-spacing: normal;\n\t\t\t\tcolor: #979797;\n }\n\n .size {\n font-size: 12px;\n\t\t\t\tfont-weight: 600;\n\t\t\t\tfont-stretch: normal;\n\t\t\t\tfont-style: normal;\n\t\t\t\tcolor: #979797;\n line-height: 22px;\n letter-spacing: 0.46px;\n margin: 0 0 0 0;\n }\n }\n }\n`\n\nexport default AttachedFileWrapper\n","import React from 'react'\nimport PropTypes from 'prop-types'\n// import styled from 'styled-components'\n\n// const TokenIconStyles = styled.div`\n// \theight: 24px;\n\n// \t@media only screen and (max-width: 430px) {\n// \t\t${({ isCardToken }) => isCardToken && 'height: 20px;'}\n\n// \t\tsvg {\n// \t\t\t${({ isCardToken }) => isCardToken && 'height: 20px;'}\n// \t\t\t${({ isCardToken }) => isCardToken && 'width: 20px;'}\n// \t\t}\n// \t}\n// `\n\nconst TokenIcon = ({ height = '24', width = '24', margin = '0', isCardToken = false }) => (\n\t// \n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t// \n)\n\nTokenIcon.propTypes = {\n\tisCardToken: PropTypes.bool,\n\theight: PropTypes.string,\n\twidth: PropTypes.string,\n\tmargin: PropTypes.string\n}\n\nexport default TokenIcon\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\n\nconst CheckIconSvg = ({ width = '20px', height = '13px', fill = '#fff' }) => (\n\t\n\t\t\n\t\n)\n\nCheckIconSvg.propTypes = {\n\twidth: PropTypes.string,\n\theight: PropTypes.string,\n\tfill: PropTypes.string\n}\n\nexport default CheckIconSvg\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst DashboardIconSvgStyles = styled.div`\n height: 100%;\n display: flex;\n align-items: center;\n`\n\nconst DashboardIconSvg = () => (\n\t\n\t\t\n\t\t\t\n\t\t\n\t\n)\n\nexport default DashboardIconSvg\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst BenefitsIconSvgStyles = styled.div`\n height: 100%;\n\twidth: 16px;\n display: flex;\n\talign-items: center;\n`\n\nconst BenefitsIconSvg = () => (\n\t\n\t\t\n\t\t\t\n\t\t\n\t\n)\n\nexport default BenefitsIconSvg\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nconst BenefitLogoSvgStyles = styled.div``\n\nconst BenefitLogoSvg = ({ color = '#fff', width = \"100\", height = \"24\", opacity = \"1\" }) => (\n\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n)\n\nBenefitLogoSvg.propTypes = {\n\tcolor: PropTypes.string\n}\n\nexport default BenefitLogoSvg\n","import React from 'react'\n\nconst BenefitLogoIconSvg = () => (\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n)\n\nexport default BenefitLogoIconSvg\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst BLogoSvg = ({ color = \"#1D1D1D99\", width = \"13\", height = \"12\", opacity = \"0.6\" }) => (\n \n \n \n);\n\nBLogoSvg.propTypes = {\n\tcolor: PropTypes.string,\n width: PropTypes.string,\n height: PropTypes.string,\n opacity: PropTypes.string,\n};\n\nexport default BLogoSvg;\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst EmployeesIconSvgStyles = styled.div`\n height: 100%;\n display: flex;\n align-items: center;\n`\n\nconst EmployeesIconSvg = ({ fillColor = \"#FFF\", width = '16', height = '13' }) => (\n\t\n\t\t\n\t\t\t\n\t\t\n\t\n)\n\nexport default EmployeesIconSvg\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst EditIconSvgStyle = styled.div`\n\tsvg {\n\t\tfill: #8f8f8f;\n\t\theight: 16px;\n\t\twidth: 16px;\n\t}\n`\n\nconst EditIconSvg = () => (\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\n)\n\nexport default EditIconSvg\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst SettingsIconSvgStyles = styled.div`\n height: 100%;\n\twidth: 16px;\n display: flex;\n align-items: center;\n`\n\nconst SettingsIconSvg = () => (\n\t\n\t\t\n\t\t\t\n\t\t\n\t\n)\n\nexport default SettingsIconSvg\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst HelpIconSvgStyles = styled.div`\n height: 100%;\n display: flex;\n align-items: center;\n`\n\nconst HelpIconSvg = () => (\n\t\n\t\t\n\t\t\t\n\t\t\n\t\n)\n\nexport default HelpIconSvg\n","import React from 'react';\n\nconst HamburgerIconSvg = () => (\n \n \n \n);\n\nexport default HamburgerIconSvg;","import React from 'react'\nimport styled from 'styled-components'\n\nconst LogoutIconSvgStyles = styled.div`\n height: 100%;\n\twidth: 16px;\n display: flex;\n align-items: center;\n`\n\nconst LogoutIconSvg = () => (\n\t\n\t\t\n\t\t\t\n\t\t\n\t\n)\n\nexport default LogoutIconSvg\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nconst DotsIconSvgStyles = styled.div`\n height: 100%;\n display: flex;\n align-items: center;\n\n svg {\n width: ${({ width }) => width};\n height: ${({ height }) => height};\n fill: ${({ fill }) => fill};\n transform: ${({transform}) => transform};\n transform-origin: ${({transformOrigin}) => transformOrigin} ;\n }\n`\n\nconst DotsIconSvg = ({ width = '17px', height = '19px', fill = '#8f8f8f', transform, transformOrigin }) => (\n \n \n \n \n \n)\n\nDotsIconSvg.propTypes = {\n width: PropTypes.string,\n height: PropTypes.string,\n fill: PropTypes.string,\n transform: PropTypes.string,\n transformOrigin: PropTypes.string,\n}\n\nexport default DotsIconSvg\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst LogoIconSvgStyles = styled.div``\n\nconst LogoIconSvg = () => (\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n)\n\nexport default LogoIconSvg\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nconst AttachmentIconWrapper = styled.div`\n display: flex;\n align-items: center;\n cursor: ${props => props.cursor};\n`\n\nconst AttachmentIcon = ({\n\twidth = '16px',\n\tstroke = '#fff',\n\tcursor = 'pointer'\n}) => (\n\t\n\t\t\n\t\t\t\n\t\t\n\t\n)\n\nAttachmentIcon.propTypes = {\n\twidth: PropTypes.string,\n\tstroke: PropTypes.string,\n\tcursor: PropTypes.string\n}\n\nexport default AttachmentIcon\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nconst TrashContainer = styled.div`\n /* align-items: center; */\n cursor: pointer;\n /* display: flex; */\n\n svg {\n stroke: ${({ stroke }) => stroke};\n }\n`\n\nconst TrashIcon = ({ width = '14px', stroke = '#1568bf', cursor = 'pointer' }) => (\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n)\n\nTrashIcon.propTypes = {\n\twidth: PropTypes.string,\n\tstroke: PropTypes.string,\n\tcursor: PropTypes.string,\n\tstyles: PropTypes.shape({})\n}\n\nexport default TrashIcon\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst LeftArrowIconSvgStyles = styled.div`\n\nsvg {\n\twidth: 16px;\n\theight: 16px;\n}\n`\nconst LeftArrowIconSvg = () => (\n\t\n\t\t\n\t\t\t\n\t\t\n\t\n\n)\n\nexport default LeftArrowIconSvg\n","/* eslint-disable */\nimport React from \"react\";\n\nconst WatchIcon = () => {\n return (\n \n \n \n );\n}\n\nexport default WatchIcon;\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst InfoIconSvgStyles = styled.div`\n\twidth: 12px;\n\theight: 12px;\n\tmargin-left: 8px;\t\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tsvg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tfill: #a1a3a7;\n\t}\n`\n\nconst InfoIconSvg = () => (\n\t\n\t\t\n\t\t\t\n\t\t\n\t\n)\n\nexport default InfoIconSvg\n","import React from 'react'\n\nconst ActiveIcon = ({\n\topacity = \"0.1\",\n\tfill = \"#FFF\",\n\tstroke = \"#FFF\"\n}) => (\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n)\n\nexport default ActiveIcon\n","import React from 'react'\n\nconst ImagePlaceholer = () => (\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n)\n\nexport default ImagePlaceholer\n","import React from \"react\";\n\nconst EmptyListIcon = () => {\n return (\n \n \n \n );\n};\n\nexport default EmptyListIcon;\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nconst ErrorIconSvgStyles = styled.div``\n\nconst ErrorIconSvg = ({ color = '#fff' }) => (\n \n \n \n \n \n)\n\nErrorIconSvg.propTypes = {\n color: PropTypes.string\n}\n\nexport default ErrorIconSvg;\n","import React from 'react'\n\nconst UserDisabledIconSvg = ({\n width = '14',\n height = '14'\n}) => (\n \n \n \n \n)\n\nexport default UserDisabledIconSvg;\n","import React from 'react'\n\nconst PendingActivationIcon = ({\n opacity = \"0.1\",\n fill = \"#FFF\",\n stroke = \"#FFF\"\n}) => (\n \n \n \n \n \n \n \n)\n\nexport default PendingActivationIcon;\n","import React from 'react'\n\nconst PendingDeactivationIcon = ({\n opacity = \"0.1\",\n fill = \"#FFF\",\n stroke = \"#FFF\"\n}) => (\n \n \n \n \n \n \n)\n\nexport default PendingDeactivationIcon;\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst NotificationBellSvgStyles = styled.div`\n svg {\n\t\tmargin: 5px 12px 0px 12px;\n }\t\n\t@media screen and (max-width:356px) {\n\t\tsvg {\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t}\n\t}\n`;\n\nconst NotificationBellSvg = () => (\n \n\t\t\n\t\t\t\n\t\t\n \n)\n\nexport default NotificationBellSvg;","import React from \"react\";\n\nconst SortIconSvg = () => (\n \n \n \n);\n\nexport default SortIconSvg;","import React from 'react';\n\nconst FilterIconSvg = () => (\n \n \n \n)\n\nexport default FilterIconSvg;","import React from \"react\";\n\nconst FilterIconMobileSvg = () => (\n \n \n \n \n);\n\nexport default FilterIconMobileSvg;","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nconst ChevronIconDownSvgStyles = styled.div`\n height: 100%;\n display: flex;\n align-items: center;\n cursor: pointer;\n\n svg {\n width: ${({ width }) => width};\n height: ${({ height }) => height};\n fill: ${({ fill }) => fill};\n }\n`\n\nconst ChevronIconDownSvg = ({\n width = '20px',\n height = '13px',\n fill = '#8f8f8f',\n isOpen\n}) => (\n \n \n \n \n \n\n)\n\nChevronIconDownSvg.propTypes = {\n width: PropTypes.string,\n height: PropTypes.string,\n fill: PropTypes.string\n}\n\nexport default ChevronIconDownSvg;\n\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst MicrosoftIconSvgStyles = styled.div`\n svg {\n\t\tmargin: 5px 12px 0px 12px;\n }\t\n\t@media screen and (max-width:356px) {\n\t\tsvg {\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t}\n\t}\n`;\n\nconst MicrosoftIconSvg = () => (\n \n \n \n \n \n \n \n \n);\n\nexport default MicrosoftIconSvg;","import React from \"react\";\nimport styled from 'styled-components';\n\nconst EnvelopIconSvgStyles = styled.div`\n svg {\n\t\tmargin-top: 5px;\n }\t\n\t@media screen and (max-width:356px) {\n\t\tsvg {\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t}\n\t}\n`;\n \nconst EnvelopIconSvg = () => (\n \n \n \n \n \n);\n\nexport default EnvelopIconSvg;","import React from \"react\";\n\nexport const ClockIcon = () => {\n return (\n \n \n \n );\n};\n","import React from \"react\";\n\nexport const GoBackSvg = () => {\n return (\n \n \n \n );\n};\n","import React from \"react\";\n\nexport const XCircleSVG = () => {\n return (\n \n \n \n );\n};\n","import React from \"react\";\n\nexport const CheckCircleSVG = () => {\n return (\n \n \n \n );\n};\n","import React from \"react\";\n\nexport const FullHeartIconSVG = () => {\n return (\n \n \n \n );\n};\n","import React from \"react\";\n\nexport const OutlineHeartIconSVG = () => {\n return (\n \n \n \n );\n};\n","import React from \"react\";\n\nexport const PendingIconSVG = () => {\n return (\n \n \n \n );\n};\n","import React from \"react\";\n\nexport const AcceptedIconSVG = () => {\n return (\n \n \n \n );\n};\n","import React from \"react\";\n\nexport const RejectedIconsSVG = () => {\n return (\n \n \n \n );\n};\n","import React from \"react\";\n\nimport styled from \"styled-components\";\nimport { CountryFlags } from \"../../components/locales/Icons\";\n\nconst FlagCurrencyStyles = styled.div`\n height: 20px;\n\n img {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n box-shadow: 0px 0px 5px 1px #888;\n }\n`;\n\nexport const FlagCurrency = () => {\n return {CountryFlags(\"rs\")};\n};\n","import React from \"react\";\nimport RSFlag from \"../Icons/rs.png\";\nimport GBFlag from \"../Icons/gb.png\";\n\nexport const CountryFlags = locales => {\n const flagObjects = {\n rs: ,\n en: \n };\n return flagObjects[locales] || <>No Flag;\n};\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport AttachedFileWrapper from './AttachmentStyles'\n\nimport { AttachmentIcon, TrashIcon } from '../../assets/Icons'\n\nconst AttachedFile = ({ name, size, removeFile }) => (\n\t\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t
{name}
\n\t\t\t\t

{size} KB

\n\t\t\t
\n\t\t
\n\t\t
removeFile()}>\n\t\t\t\n\t\t
\n\t
\n)\n\nAttachedFile.propTypes = {\n\tremoveFile: PropTypes.func,\n\tname: PropTypes.string,\n\tsize: PropTypes.number\n}\n\nexport default AttachedFile\n","import styled from 'styled-components'\n\nconst AuthStyles = styled.section`\n display: flex;\n width: 71.25%;\n height: 71.3%;\n min-width: 420px;\n min-height: 420px;\n border-radius: 4px;\n overflow: hidden;\n box-shadow: 2px 5px 10px 2px #888;\n\n .authWindow {\n overflow: hidden;\n position: relative;\n width: 530px;\n min-width: 420px;\n padding: 40px;\n\n .logo {\n font-size: 32px;\n }\n\n .formContainer {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n\n .form {\n width: 66.04%;\n\n .label {\n width: 100%;\n\n .inputs {\n margin: 0 0 30px 0;\n font-size: 16px;\n padding: 5px 10px 2px 10px;\n line-height: 24px;\n width: 100%;\n border-top: none;\n border-left: none;\n border-right: none;\n border-bottom: 1px solid #1568bf;\n }\n\n .inputs:focus {\n outline: none;\n border-bottom: 1px solid #1568bf;\n }\n\n input[type='number']::-webkit-inner-spin-button,\n input[type='number']::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n\n .label:focus-within {\n color: #1568bf;\n }\n\n .buttonContainer {\n display: flex;\n justify-content: flex-end;\n\n .submitButton {\n padding: 5px 20px;\n color: #fff;\n cursor: pointer;\n background: darkblue;\n font-weight: bold;\n font-size: 16px;\n border-radius: 4px;\n border: 1px solid darkblue;\n }\n\n .submitButton:focus {\n outline: none;\n }\n }\n }\n }\n }\n\n .bannerWindow {\n position: relative;\n width: 838px;\n background-image: linear-gradient(to bottom, #1488cc 3%, #1e3c72);\n }\n\n @media only screen and (max-width: 1279px) {\n\n .authWindow {\n width: 100%;\n } \n\n .bannerWindow {\n display: none;\n }\n }\n\n @media only screen and (max-width: 420px) {\n width: 100%;\n height: 100%;\n box-shadow: none;\n min-width: 0;\n\n .authWindow {\n width: 100%;\n min-width: unset;\n padding: 20px;\n } \n }\n\n @media only screen and (max-height: 420px) {\n min-height: 360px;\n \n .authWindow {\n padding: 20px;\n }\n }\n\n`\n\nexport default AuthStyles\n","import styled from \"styled-components\";\n\nexport const ButtonHolder = styled.button`\n display: flex;\n justify-content: center;\n align-items: center;\n gap: ${({ gap }) => gap};\n padding: ${({ padding }) => padding};\n background: ${({ outline, disabled, transparent }) => {\n if (disabled) {\n return \"#d8d8d8\";\n }\n if (outline) {\n return \"#fff\";\n }\n if (transparent) {\n return \"transparent\";\n }\n return \"#1568bf\";\n }};\n border-radius: ${({ borderRadius }) => borderRadius};\n border: ${({ outline }) =>\n outline ? \"solid 1px #1568bf\" : \"solid 1px transparent\"};\n outline: none;\n color: ${({ outline, disabled, color }) => {\n if (disabled) {\n return \"#989898\";\n }\n if (outline) {\n return \"#1568bf\";\n }\n if (color) {\n return color;\n }\n return \"#fff\";\n }};\n cursor: pointer;\n pointer-events: ${({ disabled }) => disabled && \"none\"};\n font-size: 14px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n margin: ${({ margin }) => margin};\n height: ${({ height }) => height};\n width: ${({ width }) => width};\n border-right: ${({ borderRight }) => borderRight};\n\n &:hover {\n background: #1568bf;\n color: #fff;\n outline: unset;\n }\n\n @media only screen and (max-width: 600px) {\n margin: ${({ mobileMargin }) => mobileMargin};\n width: ${({ mobileWidth }) => mobileWidth};\n }\n`;\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { ButtonHolder } from './ButtonStyles'\n\nconst Button = ({\n\tchildren,\n\ttype = 'button',\n\tonClick,\n\tpadding = '12px',\n\tmargin = '30px',\n\tmobileMargin,\n\toutline = false,\n\theight,\n\tdisabled = false,\n\twidth,\n\tmobileWidth,\n\tcustomId,\n\tcustomClass,\n\tborderRadius = \"4px\",\n\tborderRight,\n\ttransparent = false,\n\tcolor,\n\tgap, \n}) => (\n\t\n\t\t{children}\n\t\n)\n\nButton.propTypes = {\n\tchildren: PropTypes.oneOfType([\n\t\tPropTypes.string,\n\t\tPropTypes.elementType,\n\t\tPropTypes.array,\n\t\tPropTypes.element\n\t]),\n\tpadding: PropTypes.string,\n\tmargin: PropTypes.string,\n\tmobileMargin: PropTypes.string,\n\tonClick: PropTypes.func,\n\ttype: PropTypes.string,\n\toutline: PropTypes.bool,\n\tdisabled: PropTypes.bool,\n\theight: PropTypes.string,\n\twidth: PropTypes.string,\n\tmobileWidth: PropTypes.string,\n\tcustomId: PropTypes.string,\n\tcustomClass: PropTypes.string,\n\tborderRadius: PropTypes.string,\n\tborderRight: PropTypes.string,\n\ttransparent: PropTypes.bool,\n\tcolor: PropTypes.string,\n\tgap: PropTypes.string,\n}\n\nexport default Button\n","import Button from './Button'\n\nexport default Button\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport AuthStyles from \"./AuthsSyles\";\nimport { BenefitLogo } from \"../../assets/Icons\";\nimport Button from \"../button\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Auth = ({\n isRegistration = false,\n onChange,\n onSubmit,\n credentials: { email, password },\n invitationCode\n}) => {\n const { t } = useTranslation();\n return (\n \n
\n \n
\n
\n \n \n {isRegistration && (\n \n )}\n\n
\n \n
\n
\n
\n
\n
\n \n );\n};\n\nAuth.propTypes = {\n isRegistration: PropTypes.bool,\n onChange: PropTypes.func,\n onSubmit: PropTypes.func,\n credentials: PropTypes.shape({\n email: PropTypes.string,\n password: PropTypes.string\n }),\n invitationCode: PropTypes.string\n};\n\nexport default Auth;\n","import styled from \"styled-components\";\nimport {\n ACTIVE,\n PENDING_ACTIVATION,\n PENDING_DEACTIVATION\n} from \"../../builders/benefitGroups/benefitGroup.status\";\n\nconst BenefitCardStyles = styled.div`\n width: 290px;\n margin: 0 30px 40px 0;\n border-radius: 4px;\n box-shadow: 0 3px 12px 0 rgba(0, 0, 0, 0.11);\n border: solid 1px #e6eaee;\n background-color: #ffffff;\n cursor: pointer;\n position: relative;\n transition: background-color 0.5s ease-in;\n\n &:hover {\n background-color: #a1d8f280;\n }\n\n .favoriteButton {\n border: none;\n background: transparent;\n cursor: pointer;\n }\n\n .benefitCardWrapper {\n width: 290px;\n height: 418px;\n border-radius: 4px;\n border: ${({ status }) => {\n if (status) {\n if (status === ACTIVE) {\n return \"2px solid #3DBE52\";\n } else if (status === PENDING_ACTIVATION) {\n return \"2px solid #84988E\";\n } else if (status === PENDING_DEACTIVATION) {\n return \"2px solid #C53C3C\";\n }\n } else {\n return \"2px solid transparent\";\n }\n }};\n transition: border 0.5s ease-in;\n\n &:hover {\n border: ${({ status }) => {\n const haveStatus =\n status === ACTIVE ||\n status === PENDING_ACTIVATION ||\n status === PENDING_DEACTIVATION;\n\n if (!haveStatus) {\n return \"2px solid #0b75a6\";\n }\n }};\n }\n }\n\n .mcpTooltip {\n width: 370px;\n }\n\n .imgContainer {\n width: 100%;\n height: 140px;\n overflow: hidden;\n position: relative;\n\n .benefitImage {\n position: relative;\n height: 100%;\n width: 100%;\n }\n\n .newIndicator {\n position: absolute;\n left: 10px;\n top: 10px;\n background: linear-gradient(\n 256.87deg,\n #f4c51d 7.21%,\n #ffee97 28.6%,\n #f4c51d 92.79%\n );\n border-radius: 4px;\n font-size: 13px;\n line-height: 13px;\n letter-spacing: -0.2px;\n color: #2f68b9;\n padding: 5px;\n font-weight: 600;\n }\n }\n\n .topContent {\n height: 120px;\n position: relative;\n padding-top: 5px;\n\n .providerImageOuterCircle {\n width: 66px;\n height: 66px;\n border-radius: 50%;\n position: absolute;\n background: #fff;\n left: 8px;\n top: -30px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .providerImageInnerCircle {\n width: 60px;\n height: 60px;\n border-radius: 50%;\n overflow: hidden;\n display: flex;\n justify-content: center;\n align-items: center;\n\n .providerLogo {\n position: relative;\n height: 100%;\n object-fit: cover;\n width: 100%;\n }\n }\n }\n\n .ratingContainer {\n margin-top: 4px;\n margin-left: 10px;\n padding-right: 10px;\n\n .starContainer {\n font-size: 14px;\n letter-spacing: -0.2px;\n line-height: 15px;\n font-weight: 500;\n color: #87919e;\n\n .total {\n width: 18px;\n }\n }\n }\n\n .titleAndTokensContainer {\n margin-left: 10px;\n padding-right: 10px;\n margin-top: 30px;\n\n .title {\n height: 42px;\n font-size: 17px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: 21px;\n letter-spacing: normal;\n color: #354052;\n word-break: break-word;\n }\n }\n }\n\n .descriptionContainer {\n height: 70px;\n margin: 10px;\n position: relative;\n\n .providerDescription {\n width: 100%;\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.36;\n letter-spacing: normal;\n color: #354052;\n word-wrap: break-word;\n }\n\n .taxes {\n width: 100%;\n margin-bottom: 10px;\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: italic;\n line-height: 1.36;\n letter-spacing: normal;\n color: #354052;\n word-wrap: break-word;\n }\n }\n\n .hrDescriptionContainer {\n height: 100px;\n margin: 20px 12px 11px 9px;\n position: relative;\n\n .providerDescription {\n width: 100%;\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.36;\n letter-spacing: normal;\n color: #354052;\n word-wrap: break-word;\n }\n\n .taxes {\n width: 100%;\n margin-bottom: 6px;\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: italic;\n line-height: 1.36;\n letter-spacing: normal;\n color: #354052;\n word-wrap: break-word;\n }\n }\n\n .locations-container {\n margin: 5px 10px;\n position: relative;\n min-height: 24px;\n\n .cities {\n font-weight: 500;\n display: inline;\n font-size: 12px;\n font-stretch: normal;\n font-style: normal;\n line-height: 2;\n letter-spacing: -0.2px;\n color: #5f5f5f;\n }\n }\n\n .hr-locations-container {\n position: absolute;\n margin-left: 10px;\n bottom: 44px;\n\n .cities {\n font-weight: 500;\n display: inline;\n font-size: 12px;\n font-stretch: normal;\n font-style: normal;\n line-height: 2;\n letter-spacing: -0.2px;\n color: #5f5f5f;\n }\n }\n\n .categoryTag {\n display: inline-block;\n .categoryText {\n font-family: \"Montserrat\";\n font-style: normal;\n font-weight: 500;\n font-size: 11px;\n line-height: 13px;\n color: #2f68b9;\n }\n }\n\n .priceAncCapacityContainer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: 0 10px 6px 10px;\n position: relative;\n\n .tokensContainer {\n margin-top: -9px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n\n svg {\n width: 25px;\n height: 25px;\n\n &:hover {\n fill: red;\n }\n }\n\n .mcpContainer {\n margin-left: 5px;\n display: flex;\n align-items: center;\n border: 1px solid #e6eaee;\n box-sizing: border-box;\n border-radius: 4px;\n padding: 4px;\n & > span {\n font-family: \"Montserrat\";\n font-style: normal;\n font-weight: 500;\n font-size: 11px;\n line-height: 13px;\n color: #87919e;\n }\n }\n .tokensContent {\n display: flex;\n align-items: center;\n\n .price {\n opacity: 0.8;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 2;\n letter-spacing: -0.2px;\n color: #373737;\n margin-left: 4px;\n }\n }\n }\n .capacityContainer {\n display: flex;\n align-items: center;\n .price {\n opacity: 0.8;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 2;\n letter-spacing: -0.2px;\n color: #373737;\n margin-left: 4px;\n }\n }\n }\n\n .enabledStatus {\n position: absolute;\n right: 11px;\n bottom: 12px;\n display: flex;\n\n .enabled {\n display: flex;\n align-items: center;\n gap: 5px;\n color: #41c264;\n font-size: 14px;\n\n .green-dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: #41c264;\n }\n }\n .disabled {\n display: flex;\n align-items: center;\n gap: 5px;\n color: #ce1212;\n font-size: 14px;\n\n .red-dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: #ce1212;\n }\n }\n }\n\n .activeContainer {\n height: 30px;\n min-width: 290px;\n margin: 0 -2px;\n width: 100%;\n border-radius: 0px 0px 4px 4px;\n\n background: ${({ status }) => {\n if (status) {\n if (status === ACTIVE) {\n return \"#3DBE52\";\n } else if (status === PENDING_ACTIVATION) {\n return \"#84988E\";\n } else if (status === PENDING_DEACTIVATION) {\n return \"#C53C3C\";\n }\n }\n }};\n display: flex;\n align-items: center;\n padding: 0 12px;\n\n .activeText {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 2;\n letter-spacing: -0.2px;\n color: #ffffff;\n margin-left: 4px;\n }\n }\n\n @media only screen and (max-width: 767px) {\n margin: 0 0 30px 0;\n }\n\n @media only screen and (max-width: 500px) {\n width: 100%;\n margin: 0 0 30px 0;\n\n .benefitCardWrapper {\n width: 100%;\n }\n }\n\n @media screen and (max-width: 320px) {\n .activeContainer {\n min-width: 248px;\n }\n\n .mcpTooltip {\n width: 280px;\n font-size: 11px;\n }\n }\n`;\n\nexport default BenefitCardStyles;\n","export const PENDING_ACTIVATION = \"Pending Activation\";\nexport const ACTIVE = \"Active\";\nexport const PENDING_DEACTIVATION = \"Pending Deactivation\";\n","const imageSize = {\n original: \"URL\",\n image2X: \"URL@2X\",\n image3X: \"URL@3X\",\n image4X: \"URL@4X\",\n image5X: \"URL@5X\",\n image6X: \"URL@6X\",\n image7X: \"URL@7X\",\n image8X: \"URL@8X\",\n image9X: \"URL@9X\"\n};\n\nconst imageFormat = {\n png: \"png\",\n jpg: \"jpeg\"\n};\n\nconst getUrl = (photo, requiredImage) => {\n if (photo && requiredImage && photo[requiredImage]) {\n return photo[requiredImage];\n }\n\n if (photo && photo.url) {\n return photo.url;\n }\n\n if (photo && photo.url2x) {\n return photo.url2x;\n }\n\n if (photo && photo.url3x) {\n return photo.url3x;\n }\n\n if (photo && photo.url4x) {\n return photo.url4x;\n }\n\n if (photo && photo.url5x) {\n return photo.url5x;\n }\n\n if (photo && photo.url6x) {\n return photo.url6x;\n }\n\n if (photo && photo.url7x) {\n return photo.url7x;\n }\n\n if (photo && photo.url8x) {\n return photo.url8x;\n }\n\n if (photo && photo.url9x) {\n return photo.url9x;\n }\n\n return \"\";\n};\n\nconst findSize = (key, sizeArray) => {\n switch (key) {\n case imageSize.original:\n return sizeArray.find(size => size === 1440);\n case imageSize.image2X:\n return sizeArray.find(size => size === 1080);\n case imageSize.image3X:\n return sizeArray.find(size => size === 720);\n case imageSize.image4X:\n return sizeArray.find(size => size === 540);\n case imageSize.image5X:\n return sizeArray.find(size => size === 360);\n case imageSize.image6X:\n return sizeArray.find(size => size === 240);\n case imageSize.image7X:\n return sizeArray.find(size => size === 180);\n case imageSize.image8X:\n return sizeArray.find(size => size === 120);\n case imageSize.image9X:\n return sizeArray.find(size => size === 90);\n default:\n throw new Error(`Unknow action type: ${key}`);\n }\n};\n\nconst findType = (format, typeArray) => {\n const chosenType = typeArray.find(type => type === format);\n if (chosenType) {\n return chosenType;\n }\n if (typeArray) {\n return typeArray[0];\n }\n\n return \"\";\n};\n\nconst createUrl = (key, format, photo) => {\n if (photo.base && photo.name && photo.size && photo.type && photo.path) {\n if (findSize(key, photo.size) && findType(format, photo.type)) {\n return `${photo.base}${photo.path}/${photo.name}@${findSize(\n key,\n photo.size\n )}.${findType(format, photo.type)}`;\n }\n return \"\";\n }\n\n return \"\";\n};\n\nexport { getUrl, createUrl, imageFormat, imageSize };\n","export const truncate = (string, maxLength = 50) => {\n\tif (!string) return null\n\tif (string.length <= maxLength) return string\n\treturn `${string.substring(0, maxLength)}...`\n}\n","/**\n * Checks is value empty, null or undefined.\n * If value is array, checks if the length of the array is greater than zero.\n * @param value - Value to be checked.\n * @returns Is value empty boolean.\n */\nexport const isEmpty = value => {\n if (\n value === null ||\n value === undefined ||\n value === \"\" ||\n value === \"null\" ||\n value === \"undefined\"\n ) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n\n return false;\n};\n\n/**\n * Splits passed string, loops through array of split words,\n * capitalizes first letters and returns joined string.\n * @param {chosenString} string - chosen string to be capitalized\n * @param {splitDelimiter} string - split delimiter\n * @param {joinDelimiter} string - join delimiter\n * @returns {string} - formatted string\n */\nexport const capitalizeFirstLetters = (\n chosenString,\n splitDelimiter,\n joinDelimiter\n) => {\n const split = chosenString.split(splitDelimiter);\n for (let i = 0; i < split.length; i++) {\n split[i] = split[i][0].toUpperCase() + split[i].substr(1);\n }\n const joined = split.join(joinDelimiter);\n\n return joined;\n};\n\n/**\n * Checks if passed string contains all capital letters.\n * @param {string} str\n * @returns {boolean}\n */\nexport const isStringAllCaps = str => {\n return !/[a-z]/.test(str) && /[A-Z]/.test(str);\n};\n\n/**\n *\n * @param {string} stringToBeSplit\n * @param {string} delimiter\n * @returns {string}\n */\nexport const splitStringByDelimiter = (stringToBeSplit, delimiter) => {\n return stringToBeSplit.split(delimiter).join(\" \");\n};\n\n/**\n * Checks if passed string is valid email.\n * @param {string} email\n * @returns {boolean}\n */\nexport const isValidEmail = email => {\n const re = /^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i;\n\n return email.match(re);\n};\n\n/**\n * Trim spaces and remove more than one space from a string,\n * Remove HTML tags from string\n * @param {string} string\n * @returns {string}\n */\nexport const removeSpacesAndHTML = string => {\n const reSpace = /\\s+/g;\n const reTag = /<.+?>/g;\n\n return string\n .replace(reTag, \"\")\n .replace(reSpace, \" \")\n .trim();\n};\n\n/**\n * Remove style from HTML string\n * @param {string} htmlString\n * @returns {string}\n */\nexport const removeStyleFromHtmlString = htmlString => {\n const reStyle = /style=\".*?\"/gm;\n\n return htmlString.replace(reStyle, \"\");\n};\n\n/**\n * Sorts given array by given key.\n * @param {Array} array\n * @param {string} key\n * @returns {Array}\n */\nexport const sortByKey = (array, key) => {\n return array.sort((a, b) => {\n const x = a[key];\n const y = b[key];\n return x < y ? -1 : x > y ? 1 : 0;\n });\n};\n\n/**\n * Get array of unique objects, remove duplicate objects by id.\n * @param {Array} array\n * @returns {Array}\n */\nexport const uniqueArrayOfObjects = array => {\n return array.filter(\n (value, index, arr) =>\n arr.findIndex(value1 => value1.id === value.id) === index\n );\n};\n\n/**Filter an array by a value of a key.\n * @param {Array} array - The array to filter.\n * @param {String} key - The key of the object you want to filter by.\n * @param {String} value - The value to filter by.\n * @returns {Array} - An array of filtered objects.\n */\nexport const filterArrayByValueOfKey = (array, key, value) => {\n return array.filter(e => e[key] === value);\n};\n","export const PUBLIC = \"public\";\nexport const LOCAL = \"local\";\nexport const FAVORITE = \"favorite\";\n","export const UserRolesKeysEnum = {\n ADMIN: \"admin\",\n MEMBER: \"member\",\n HR: \"hr\"\n}\n","export const BENEFIT_ROLE = \"BENEFITI_USER_ROLE\";\nexport const BENEFIT_TOKEN = \"BENEFIT_TOKEN\";\nexport const BENEFIT_REFRESH_TOKEN = \"BENEFIT_REFRESH_TOKEN\";\n","import {\n BENEFIT_REFRESH_TOKEN,\n BENEFIT_ROLE,\n BENEFIT_TOKEN\n} from \"../constants/localStorage.constants\";\n\nexport const getItem = key => {\n return JSON.parse(localStorage.getItem(key));\n};\n\nexport const setItem = (key, value) => {\n return localStorage.setItem(key, JSON.stringify(value));\n};\n\nexport const removeItem = key => {\n return localStorage.removeItem(key);\n};\n\nexport const removeAuthItemsFromLocalStorage = () => {\n localStorage.removeItem(BENEFIT_REFRESH_TOKEN);\n localStorage.removeItem(BENEFIT_TOKEN);\n localStorage.removeItem(BENEFIT_ROLE);\n};\n","// TODO: rename env variable to REACT_APP_API_URL\nexport const BASE_API_URL = process.env.REACT_APP_DEV_API_URL;\nexport const BASE_CONTENT_URL = process.env.REACT_APP_CONTENT_URL;\nexport const INTERCOM_API_KEY = process.env.REACT_APP_INTERCOM_API_KEY;\nexport const OLVY_ORGANISATION = process.env.REACT_APP_OLVY_ORGANISATION;\n","import axios from \"axios\";\nimport {\n getItem,\n removeAuthItemsFromLocalStorage,\n setItem\n} from \"../localStorage.service\";\nimport { BASE_API_URL } from \"../../constants/api.constants\";\nimport {\n BENEFIT_REFRESH_TOKEN,\n BENEFIT_TOKEN\n} from \"../../constants/localStorage.constants\";\n\nclass ApiService {\n constructor() {\n let service = axios.create({\n baseURL: BASE_API_URL\n });\n service.interceptors.request.use(\n this.handleReqInterceptorSuccess,\n this.handleReqInterceptorError\n );\n service.interceptors.response.use(\n this.handleResInterceptorSuccess,\n this.handleResInterceptorError\n );\n this.service = service;\n this.isIssuingRefreshToken = false;\n }\n\n handleReqInterceptorSuccess(request) {\n if (request.baseURL === BASE_API_URL && !request.headers.Authorization) {\n const token = getItem(BENEFIT_TOKEN);\n\n if (token) {\n request.headers.Authorization = `Bearer ${token}`;\n }\n }\n return request;\n }\n\n handleReqInterceptorError = error => {\n console.log(\"request interceptor error\", error.response);\n return Promise.reject(error);\n };\n\n handleResInterceptorSuccess(response) {\n return response;\n }\n\n handleResInterceptorError = async error => {\n const originalRequest = error.config;\n\n if ([401].includes(error.response.status) && !originalRequest._retry) {\n originalRequest._retry = true;\n\n if (this.isIssuingRefreshToken) {\n await this.waitForRefreshToken();\n return this.service(originalRequest);\n }\n\n await this.refreshAccessToken(originalRequest);\n return this.service(originalRequest);\n }\n return Promise.reject(error);\n };\n\n // Function for pausing code until refresh token is resolved in another api instance\n async waitForRefreshToken() {\n if (!this.isIssuingRefreshToken) return;\n await new Promise(resolve => setTimeout(resolve, 1000));\n await this.waitForRefreshToken();\n }\n\n logout() {\n // First, we remove everything auth related from local storage.\n removeAuthItemsFromLocalStorage();\n // Then we redirect to / route because login page is on it, in the public routes array.\n // We use the # here in between the slashes because we use the hash router on the app\n // so we have to include it in the redirect to be sure we went to the right page\n window.location.href = \"/#/\";\n // Finally we reload the page for the redux state to reset itself to initial state.\n window.location.reload(true);\n }\n\n /**\n * Checks if response status is a success (between 200 and 299).\n * @param {number} status\n * @returns {boolean}\n */\n isStatusSuccess(status) {\n return status >= 200 && status < 300;\n }\n\n async refreshAccessToken(request) {\n this.isIssuingRefreshToken = true;\n const refreshToken = getItem(BENEFIT_REFRESH_TOKEN);\n\n if (!refreshToken) {\n this.logout();\n }\n\n try {\n const response = await axios.post(\n `${BASE_API_URL}/users/refresh-tokens`,\n { refreshToken }\n );\n\n if (!this.isStatusSuccess(response.status)) {\n this.logout();\n }\n\n const newToken = response.data.auth.access_token;\n const newRefreshToken = response.data.auth.refresh_token;\n request.headers.Authorization = `Bearer ${newToken}`;\n setItem(BENEFIT_TOKEN, newToken);\n setItem(BENEFIT_REFRESH_TOKEN, newRefreshToken);\n } catch (error) {\n this.logout();\n }\n this.isIssuingRefreshToken = false;\n }\n\n async handleApiCall(apiCall) {\n try {\n const response = await apiCall();\n return response;\n } catch (error) {\n return {\n hasError: true,\n error: error.response,\n errorMessage: error.response?.data?.error.message\n };\n }\n }\n\n async get(path) {\n return this.handleApiCall(() => this.service.get(path));\n }\n\n async post(path, payload) {\n return this.handleApiCall(() =>\n this.service.request({\n method: \"POST\",\n url: path,\n data: payload\n })\n );\n }\n\n async put(path, payload) {\n return this.handleApiCall(() =>\n this.service.request({\n method: \"PUT\",\n url: path,\n data: payload\n })\n );\n }\n\n async patch(path, payload) {\n return this.handleApiCall(() =>\n this.service.request({\n method: \"PATCH\",\n url: path,\n data: payload\n })\n );\n }\n\n async delete(path) {\n return this.handleApiCall(() => this.service.delete(path));\n }\n}\n\nexport const apiService = new ApiService();\n","export const SET_INITAL_STATE = \"EMPLOYEE_BENEFITS_SET_INITAL_STATE\";\nexport const UPDATE_BENEFIT_GROUP = \"EMPLOYEE_UPDATE_BENEFIT_GROUP\";\nexport const SET_IS_SUBSCRIBED_BENEFIT_GROUPS_VISIBLE =\n \"EMPLOYEE_BENEFITS_SET_IS_SUBSCRIBED_BENEFIT_GROUPS_VISIBLE\";\n\nexport const SET_BENEFIT_GROUP_TYPE = \"SET_BENEFIT_GROUP_TYPE\";\nexport const SET_IS_INITIAL_STATE_SET = \"SET_IS_INITIAL_STATE_SET\";\nexport const SET_IS_PAGE_LOADING = \"SET_IS_PAGE_LOADING\";\nexport const SET_CHOSEN_CATEGORY_IDS =\n \"EMPLOYEE_BENEFITS_SET_CHOSEN_CATEGORY_IDS\";\nexport const SET_CITY_IDS_FILTERS = \"SET_CITY_IDS_FILTERS\";\nexport const SET_REMOTE_FILTER = \"SET_REMOTE_FILTER\";\nexport const SET_FILTERS_PRICE_RANGE =\n \"EMPLOYEE_BENEFITS_SET_FILTERS_PRICE_RANGE\";\nexport const SET_BENEFIT_EXPIRATION_TYPES_FILTERS =\n \"SET_BENEFIT_EXPIRATION_TYPES_FILTERS\";\nexport const SET_SEARCH_FILTERS = \"SET_SEARCH_FILTERS\";\nexport const SET_ORDER_SORT = \"SET_ORDER_SORT\";\nexport const SET_KEY_SORT = \"SET_KEY_SORT\";\nexport const SET_ADITIONAL_BENEFIT_GROUPS =\n \"EMPLOYEE_BENEFITS_SET_ADITIONAL_BENEFIT_GROUPS\";\nexport const SET_BENEFIT_GROUPS_PAGE =\n \"EMPLOYEE_BENEFITS_SET_BENEFIT_GROUPS_PAGE\";\nexport const APPLY_BENEFIT_GROUPS_FILTERS =\n \"EMPLOYEE_BENEFITS_APPLY_BENEFIT_GROUPS_FILTERS\";\nexport const RESET_BENEFIT_GROUPS_FILTERS =\n \"EMPLOYEE_BENEFITS_RESET_BENEFIT_GROUPS_FILTERS\";\nexport const RESET_BENEFIT_GROUPS_FILTERS_TO_DEFAULT =\n \"RESET_BENEFIT_GROUPS_FILTERS_TO_DEFAULT\";\nexport const OPEN_BENEFIT_GROUP_MODAL =\n \"EMPLOYEE_BENEFITS_OPEN_BENEFIT_GROUP_MODAL\";\nexport const SET_CHOSEN_BENEFIT_GROUP = \"SET_CHOSEN_BENEFIT_GROUP\";\nexport const CLOSE_BENEFIT_GROUP_MODAL =\n \"EMPLOYEE_BENEFITS_CLOSE_BENEFIT_GROUP_MODAL\";\nexport const SET_BENEFIT_GROUPS_AND_SUBSCRIBED_BENEFIT_GROUPS =\n \"EMPLOYEE_BENEFITS_SET_BENEFIT_GROUPS_AND_SUBSCRIBED_BENEFIT_GROUPS\";\nexport const SET_SUBSCRIBED_BENEFIT_GROUPS =\n \"EMPLOYEE_SET_SUBSCRIBED_BENEFIT_GROUPS\";\nexport const SET_NEXT_MONTH_FILTER_CONDITION =\n \"EMPLOYEE_BENEFITS_SET_NEXT_MONTH_FILTER_CONDITION\";\nexport const SET_NEXT_MONTH_TOOLTIP_IS_OPEN =\n \"EMPLOYEE_BENEFITS_SET_NEXT_MONTH_TOOLTIP_IS_OPEN \";\nexport const SET_LIST_OF_BROWSE_BENEFITS = \"SET_LIST_OF_BROWSE_BENEFITS\";\nexport const SET_LIST_OF_COMPANY_BENEFITS = \"SET_LIST_OF_COMPANY_BENEFITS\";\nexport const SET_FAVORITE_TAB_OPEN = \"SET_FAVORITE_TAB_OPEN\";\nexport const SET_LIST_OF_FAVORITES = \"SET_LIST_OF_FAVORITES\";\nexport const CHECK_IF_IN_FAVORITES = \"CHECK_IF_IN_FAVORITES\";\nexport const SET_USED_BENEFITS = \"SET_USED_BENEFITS\";\nexport const SET_SOCIAL_PROOF_FOR_SINGLE_BENEFIT_GROUP =\n \"SET_SOCIAL_PROOF_FOR_SINGLE_BENEFIT_GROUP\";\nexport const SET_CURRENTLY_POPULAR_BENEFIT = \"SET_CURRENTLY_POPULAR_BENEFIT\";\n","import { imageSize, createUrl, imageFormat } from './imageHandler'\n\nclass PngPhoto {\n\tconstructor(photo = {}) {\n\t\tthis.id = photo.id || null\n\t\tthis.url = createUrl(imageSize.original, imageFormat.png, photo)\n\t\tthis.url2x = createUrl(imageSize.image2X, imageFormat.png, photo)\n\t\tthis.url3x = createUrl(imageSize.image3X, imageFormat.png, photo)\n\t\tthis.url4x = createUrl(imageSize.image4X, imageFormat.png, photo)\n\t\tthis.url5x = createUrl(imageSize.image5X, imageFormat.png, photo)\n\t\tthis.url6x = createUrl(imageSize.image6X, imageFormat.png, photo)\n\t\tthis.url7x = createUrl(imageSize.image7X, imageFormat.png, photo)\n\t\tthis.url8x = createUrl(imageSize.image8X, imageFormat.png, photo)\n\t\tthis.url9x = createUrl(imageSize.image9X, imageFormat.png, photo)\n\t}\n}\n\nclass JpgPhoto {\n\tconstructor(photo = {}) {\n\t\tthis.id = photo.id || null\n\t\tthis.url = createUrl(imageSize.original, imageFormat.jpg, photo)\n\t\tthis.url2x = createUrl(imageSize.image2X, imageFormat.jpg, photo)\n\t\tthis.url3x = createUrl(imageSize.image3X, imageFormat.jpg, photo)\n\t\tthis.url4x = createUrl(imageSize.image4X, imageFormat.jpg, photo)\n\t\tthis.url5x = createUrl(imageSize.image5X, imageFormat.jpg, photo)\n\t\tthis.url6x = createUrl(imageSize.image6X, imageFormat.jpg, photo)\n\t\tthis.url7x = createUrl(imageSize.image7X, imageFormat.jpg, photo)\n\t\tthis.url8x = createUrl(imageSize.image8X, imageFormat.jpg, photo)\n\t\tthis.url9x = createUrl(imageSize.image9X, imageFormat.jpg, photo)\n\t}\n}\n\nexport { PngPhoto, JpgPhoto }\n","export const CompanyStatusEnum = {\n LIVE: \"live\",\n TEST_PHASE: \"test_phase\",\n}","// entity\nimport { Tag, Tier, CompanyBudgetRollover } from \".\";\n// services\nimport { isEmpty } from \"../../services/general.utils\";\nimport { PngPhoto } from \"../../services/global.entities\";\n// constants\nimport { CompanyStatusEnum } from \"../../constants/companyStatus.constants\";\n\nclass Company {\n constructor(company = {}) {\n this.id = company.id || null;\n this.name = company.name || \"\";\n this.pib = company.pib || \"\";\n this.address = company.address || \"\";\n this.idNumber = company.idNumber || company.id_number || \"\";\n this.photo = company.Photo ? new PngPhoto(company.Photo) : undefined;\n this.contact = company.contact || \"\";\n this.invoiceEmail = company.invoiceEmail || company.invoice_email || \"\";\n this.status = company.status || CompanyStatusEnum.LIVE;\n this.paymentDeadline =\n company.paymentDeadline || company.payment_deadline\n ? `${company.paymentDeadline || company.payment_deadline} days`\n : \"\";\n this.vatEnabled = company.vatEnabled || company.vat_enabled || false;\n this.tags = !isEmpty(company.Tags)\n ? company.Tags.map(tag => new Tag(tag))\n : [];\n this.tiers = !isEmpty(company.Tiers)\n ? company.Tiers.map(tier => new Tier(tier))\n : [];\n this.isRolloverEnabled =\n company.isRolloverEnabled || company.is_rollover_enabled || false;\n this.companyBudgetRollover = company.CompanyBudgetRollover\n ? new CompanyBudgetRollover(company.CompanyBudgetRollover)\n : undefined;\n this.bonusBudgetEnabled =\n company.bonusBudgetEnabled || company.bonus_budget_enabled || false;\n this.onlySSOLoginEnabled =\n company.onlySSOLoginEnabled || company.only_sso_login_enabled || false;\n this.hasReimbursement = company.hasReimbursement || false;\n this.viewInRsd = company.viewInRsd || false;\n }\n}\n\nexport default Company;\n","import { isEmpty } from \"../../services/general.utils\";\n\nclass Voucher {\n constructor(voucherData = {}) {\n this.id = voucherData.id || null;\n this.name = voucherData.name || \"\";\n this.price = voucherData.price || 0;\n this.isSubscribed =\n voucherData.isSubscribed || voucherData.is_subscribed || false;\n this.predefinedValuesOnly = !isEmpty(voucherData.predefinedValuesOnly)\n ? voucherData.predefinedValuesOnly\n : true;\n this.isReimbursement = !isEmpty(voucherData.isReimbursement)\n ? voucherData.isReimbursement\n : false;\n this.vatIncluded = !isEmpty(voucherData.vat_included)\n ? voucherData.vat_included\n : null;\n }\n}\n\nexport default Voucher;\n","// Entities\nimport Voucher from \"./Voucher.entity\";\n\n// Utils\nimport { isEmpty } from \"../../services/general.utils\";\n\nclass Benefit {\n constructor(benefitData = {}) {\n this.id = benefitData.id || null;\n this.title = benefitData.title || \"\";\n this.description = benefitData.description || \"\";\n this.summary = benefitData.summary || \"\";\n this.tokenPrice = benefitData.tokenPrice || benefitData.token_price || \"\";\n this.expiration = benefitData.expiration\n ? benefitData.expiration.split(\"_\").join(\" \")\n : \"\" || \"\";\n this.vouchers = benefitData.BenefitVoucher\n ? benefitData.BenefitVoucher.map(voucher => new Voucher(voucher))\n : [];\n this.tags = benefitData.Tags ? benefitData.Tags.map(tag => tag.id) : [];\n this.isSubscribed =\n benefitData.isSubscribed || benefitData.is_subscribed || false;\n this.shouldBeIndicatedAsActive =\n benefitData.shouldBeIndicatedAsActive ||\n benefitData.subscribed_benefit_id ||\n null;\n this.minimumContractPeriod =\n benefitData.minimumContractPeriod ||\n benefitData.minimum_contract_period ||\n \"\";\n this.vat = benefitData.vat || \"\";\n this.shortName = benefitData.shortName || benefitData.short_name || \"\";\n this.isActive = benefitData.isActive || benefitData.is_active || false;\n this.isDraft = !isEmpty(benefitData.isDraft) ? benefitData.isDraft : false;\n this.subscribedPrice =\n benefitData.subscribedPrice || benefitData.subscribed_price || null;\n this.quantity = benefitData.quantity || \"\";\n this.takenQuantity =\n benefitData.takenQuantity || benefitData.taken_quantity || null;\n this.instalments = benefitData.instalments || null;\n this.totalQuantityRemaining = !isEmpty(benefitData.totalQuantityRemaining)\n ? benefitData.totalQuantityRemaining\n : null;\n this.benefitGroupId = benefitData.benefitGroupId;\n this.name = benefitData.name;\n this.usageInstructions =\n benefitData.usageInstructions || benefitData.usage_instructions || \"\";\n // this.photo = benefitData.Photo ? new JpgPhoto(benefitData.Photo) : new JpgPhoto()\n }\n}\n\nexport default Benefit;\n","import BenefitGroup from \"./BenefitGroup.entity\";\nimport { PngPhoto } from \"../../services/global.entities\";\nimport { isEmpty } from \"../../services/general.utils\";\n\nclass Provider {\n constructor(providerData = {}) {\n this.id = providerData.id || null;\n this.name = providerData.name || \"\";\n this.description = providerData.description || \"\";\n this.summary = providerData.summary || \"\";\n this.isActive = !isEmpty(providerData.isActive) ? providerData.isActive : true;\n this.photo = providerData.Photo ? new PngPhoto(providerData.Photo) : null;\n this.benefitGroups = providerData.BenefitGroup\n ? providerData.BenefitGroup.map(\n benefitGroup => new BenefitGroup(benefitGroup)\n )\n : [];\n }\n}\n\nexport default Provider;\n","class City {\n constructor(cityData = {}) {\n this.id = cityData.id || null;\n this.name = cityData.name || \"\";\n }\n}\n\nexport default City;\n","class Category {\n\tconstructor(benefitCategoryData = {}) {\n\t\tthis.id = benefitCategoryData.id || null\n\t\tthis.name = benefitCategoryData.name || ''\n\t\tthis.description = benefitCategoryData.description || ''\n\t}\n}\n\nexport default Category;","// Models\nimport Benefit from \"./Benefit.entity\";\nimport Provider from \"./Provider.entity\";\nimport City from \"./City.entity\";\nimport Category from \"./Category.entity\";\nimport { JpgPhoto } from \"../../services/global.entities\";\n// Utils\nimport { isEmpty } from \"../../services/general.utils\";\nclass BenefitGroup {\n constructor(benefitGroupData = {}) {\n this.id = benefitGroupData.id || null;\n this.name = benefitGroupData.name || \"\";\n this.type = benefitGroupData.type || \"\";\n this.categories = !isEmpty(benefitGroupData.categories)\n ? benefitGroupData.categories.map(category => new Category(category))\n : null;\n this.categoryIds = !isEmpty(benefitGroupData.categories)\n ? benefitGroupData.categories.map(category => category.id)\n : null;\n this.companyId = !isEmpty(benefitGroupData.companyId)\n ? benefitGroupData.companyId\n : null;\n this.capacity = benefitGroupData.capacity || null;\n this.taxes = benefitGroupData.taxes || \"\";\n if (\n typeof benefitGroupData.isRemote !== \"undefined\" ||\n typeof benefitGroupData.is_remote !== \"undefined\"\n ) {\n this.isRemote = benefitGroupData.isRemote || benefitGroupData.is_remote;\n } else {\n this.isRemote = true;\n }\n this.hasCapacity = benefitGroupData.hasCapacity || null;\n this.takenBenefits =\n benefitGroupData.takenBenefits || benefitGroupData.taken_benefits || 0;\n this.description = benefitGroupData.description || \"\";\n this.summary = benefitGroupData.summary || \"\";\n this.photo = benefitGroupData.Photo\n ? new JpgPhoto(benefitGroupData.Photo)\n : null;\n\n let provider = null;\n if (benefitGroupData.Provider)\n provider = new Provider(benefitGroupData.Provider);\n else if (benefitGroupData.Company)\n provider = new Provider(benefitGroupData.Company);\n this.provider = provider;\n\n this.benefits = benefitGroupData.Benefit\n ? benefitGroupData.Benefit.map(benefit => new Benefit(benefit))\n : [];\n this.availableTiers = benefitGroupData.AvailableBenefits\n ? benefitGroupData.AvailableBenefits.map(\n blockedBenefit => blockedBenefit.tierId\n )\n : [];\n this.status = benefitGroupData.Status?.status || null;\n this.statusPreview = benefitGroupData.Status?.statusPreview || null;\n this.shouldBeInAllBenefits =\n benefitGroupData.Status?.shouldBeInAllBenefits || null;\n this.cities = benefitGroupData.cities\n ? benefitGroupData.cities.map(city => new City(city))\n : [];\n this.availableCitiesCount =\n benefitGroupData.availableCitiesCount ||\n benefitGroupData.available_cities_count ||\n null;\n this.doesBenefitGroupHaveMcp =\n benefitGroupData.doesBenefitGroupHaveMcp ||\n benefitGroupData.does_benefit_group_have_mcp ||\n null;\n this.doesBenefitGroupHaveInstalments =\n benefitGroupData.doesBenefitGroupHaveInstalments ||\n benefitGroupData.does_benefit_group_have_instalments ||\n null;\n this.doesBenefitGroupHaveQuantity =\n benefitGroupData.doesBenefitGroupHaveQuantity ||\n benefitGroupData.does_benefit_group_have_quantity ||\n null;\n this.isBenefitGroupNew =\n benefitGroupData.isBenefitGroupNew ||\n benefitGroupData.is_benefit_group_new ||\n null;\n this.benefitGroupAvailable =\n benefitGroupData.benefitGroupAvailable ||\n benefitGroupData.benefit_group_available ||\n null;\n this.isDraft = !isEmpty(benefitGroupData.isDraft)\n ? benefitGroupData.isDraft\n : false;\n this.enableInstalments = !isEmpty(benefitGroupData.enableInstalments)\n ? benefitGroupData.enableInstalments\n : false;\n this.sumRatings = benefitGroupData.sumRatings;\n this.numberReviews = benefitGroupData.numberReviews;\n this.rating = benefitGroupData.rating;\n this.priceRange = benefitGroupData.priceRange || 0;\n this.createdAt = benefitGroupData.createdAt;\n }\n}\n\nexport default BenefitGroup;\n","import { splitStringByDelimiter } from \"../../services/general.utils\";\nimport Benefit from \"./Benefit.entity\";\nimport BenefitGroup from \"./BenefitGroup.entity\";\n\nclass UserBenefit {\n constructor(userBenefitData = {}) {\n this.subscribed = userBenefitData.subscribed || null;\n this.unsubscribe = userBenefitData.unsubscribe || null;\n this.Status = userBenefitData.Status || null;\n this.startDate =\n userBenefitData.startDate || userBenefitData.start_date || null;\n this.endDate = userBenefitData.endDate || userBenefitData.end_date || null;\n this.title = userBenefitData.Benefit ? userBenefitData.Benefit.title : \"\";\n this.benefitId = userBenefitData.benefitId ? userBenefitData.benefitId : \"\";\n this.benefitPrice =\n userBenefitData.benefitPrice || userBenefitData.benefit_price || 0;\n this.expiration = userBenefitData.Benefit\n ? splitStringByDelimiter(userBenefitData.Benefit.expiration, \"_\")\n : \"\";\n this.benefitGroup = userBenefitData.BenefitGroup\n ? new BenefitGroup(userBenefitData.BenefitGroup)\n : null;\n this.benefit = userBenefitData.Benefit\n ? new Benefit(userBenefitData.Benefit)\n : null;\n this.quantity = userBenefitData.quantity || 1;\n }\n}\n\nexport default UserBenefit;\n","import UserBenefit from \"./UserBenefit.entity\";\nimport { City, User, Tier, CompanyBranch } from \".\";\nclass Employee {\n constructor(employeeData = {}) {\n this.id = employeeData.id || null;\n this.firstName =\n employeeData.firstName ||\n employeeData.first_name ||\n employeeData.User?.firstName ||\n employeeData.User?.first_name ||\n \"\";\n this.lastName =\n employeeData.lastName ||\n employeeData.last_name ||\n employeeData.User?.lastName ||\n employeeData.User?.last_name ||\n \"\";\n this.formalEmail = employeeData.formalEmail || false;\n this.email = employeeData.email || employeeData.User?.email || \"\";\n this.companyId = employeeData.companyId || \"\";\n this.children = employeeData.children || false;\n this.bornDate = employeeData.bornDate\n ? new Date(employeeData.bornDate)\n : \"\" || \"\";\n this.firstDayAtWork = employeeData.firstDayAtWork\n ? new Date(employeeData.firstDayAtWork)\n : \"\" || \"\";\n this.team = employeeData.team || \"\";\n this.contact = employeeData.contact || \"\";\n this.description = employeeData.description || \"\";\n this.relationship = employeeData.relationship || \"\";\n this.tier = employeeData.tier || new Tier(employeeData.Tier) || \"\";\n this.gender = employeeData.gender || \"\";\n this.uniqueId = employeeData.uniqueId || \"\";\n this.CompanyBranch = new CompanyBranch(employeeData.CompanyBranch) || \"\";\n this.branchCode = employeeData.companyBranchId || \"\";\n this.roleIds = employeeData.roleIds || employeeData.role_ids || [];\n this.roles = employeeData.roles || null;\n this.availableTokens =\n parseInt(employeeData.availableTokens, 0) ||\n parseInt(employeeData.available_tokens, 0) ||\n 0;\n this.usedToken =\n parseInt(employeeData.usedToken, 0) ||\n parseInt(employeeData.used_token, 0) ||\n 0;\n this.remainingTokens =\n parseInt(employeeData.remainingTokens, 0) ||\n parseInt(employeeData.remaining_tokens, 0) ||\n 0;\n if (this.remainingTokens < 0) {\n this.remainingTokens = 0;\n }\n this.userBenefits = employeeData.UserBenefits\n ? new UserBenefit(employeeData.UserBenefits[0])\n : new UserBenefit();\n this.activeBenefitsCount =\n employeeData.activeBenefitsCount ||\n employeeData.active_benefits_count ||\n 0;\n this.user = employeeData.user ? new User(employeeData.user) : new User();\n this.cities = employeeData.cities\n ? employeeData.cities.map(city => new City(city))\n : [];\n this.rolloverTokens =\n parseInt(employeeData.rolloverTokens, 0) ||\n parseInt(employeeData.rollover_tokens, 0) ||\n 0;\n this.totalTokens =\n parseInt(employeeData.totalTokens, 0) ||\n parseInt(employeeData.total_tokens, 0) ||\n 0;\n }\n}\n\nexport default Employee;\n","export const CompanyThemeModeEnum = {\n LIGHT: \"light\",\n DARK: \"dark\",\n CUSTOM: \"custom\",\n }","//Entities\nimport { PngPhoto } from \"../../services/global.entities\";\n// Constants\nimport { CompanyThemeModeEnum } from \"../../constants/companyThemeMode.constants\";\n\nclass CompanyTheme { \n constructor(themeData = {}) {\n this.id = themeData.id || null;\n this.mode = themeData.mode || CompanyThemeModeEnum.LIGHT;\n this.photo = themeData.Photo ? new PngPhoto(themeData.Photo) : null;\n this.companyId = themeData.companyId || null;\n this.color = themeData.color || null;\n }\n}\n\nexport default CompanyTheme;","class BudgetBreakdown {\n constructor(budgetBreakdownData = {}) {\n this.monthlySpent = budgetBreakdownData.monthlySpent || budgetBreakdownData.monthly_spent || 0;\n this.oneTimeSpent = budgetBreakdownData.oneTimeSpent || budgetBreakdownData.one_time_spent || 0;\n this.instalmentsSpent = budgetBreakdownData.instalmentsSpent || budgetBreakdownData.instalments_spent || 0;\n this.mcpSpent = budgetBreakdownData.mcpSpent || budgetBreakdownData.mcp_spent || 0;\n this.vouchersSpent = budgetBreakdownData.vouchersSpent || budgetBreakdownData.vouchers_spent || 0;\n }\n}\n\nexport default BudgetBreakdown;\n","// Entities\nimport Employee from \"./Employee.entity\";\nimport Company from \"./Company.entity\";\nimport CompanyTheme from \"./CompanyTheme.entity\";\nimport BudgetBreakdown from \"./BudgetBreakdown.entity\";\n// Constants\nimport { CompanyThemeModeEnum } from \"../../constants/companyThemeMode.constants\";\n\nclass User {\n constructor(userData = {}) {\n this.id = userData.id || null;\n this.authenticatedUserRoleId = userData.authenticatedUserRoleId || null;\n this.authenticatedRole = userData.authenticatedRole || \"\";\n this.roles = userData.roles || [];\n this.firstName = userData.firstName || \"\";\n this.lastName = userData.lastName || \"\";\n this.vocativeName = userData.vocativeName || \"\";\n this.email = userData.email || \"\";\n this.companyName = userData.companyName || \"\";\n this.companyVatEnabled = userData.companyVatEnabled || false;\n this.availableTokens =\n userData.availableTokens || userData.available_tokens || 0;\n this.usedTokens = userData.usedTokens || userData.used_tokens || 0;\n this.remainingTokens =\n userData.remainingTokens || userData.remaining_tokens || 0;\n if (this.remainingTokens < 0) {\n this.remainingTokens = 0;\n }\n this.totalTokens = userData.totalTokens | userData.total_tokens || 0;\n this.isOnboardingDone = userData.onboarding || false;\n this.hasAcceptedPrivacyPolicy =\n userData.privacyPolicyAccepted ||\n userData.privacy_policy_accepted ||\n null;\n this.isDisabled = userData.isDisabled || userData.is_disabled || false;\n this.employeeOnboarding =\n userData.employeeOnboarding || userData.employee_onboarding || false;\n this.employee = userData.employee ? new Employee(userData.employee) : null;\n this.themes = userData.themes\n ? userData.themes.map(theme => new CompanyTheme(theme))\n : [];\n this.mode = this.mode || CompanyThemeModeEnum.LIGHT;\n this.serverOnboarding = userData.onboarding || false;\n this.isSync = userData.sync || false;\n this.employeeId = userData.employeeId || null;\n this.company = userData.Company\n ? new Company(userData.Company)\n : new Company();\n this.companyId = userData.companyId || userData.company_id || null;\n this.userHash = userData.userHash || userData.user_hash || null;\n this.budgetBreakdown = userData.budgetBreakdown\n ? new BudgetBreakdown(userData.budgetBreakdown)\n : new BudgetBreakdown();\n this.formalEmail = userData.formalEmail || userData.formal_email || false;\n this.emailConfirmed = userData.emailConfirmed || \"\";\n }\n}\n\nexport default User;\n","class Tag {\n constructor(tagData = {}) {\n this.id = tagData.id || null;\n this.name = tagData.name || \"\";\n this.description = tagData.description || \"\";\n }\n}\n\nexport default Tag;\n","class Tier {\n constructor(tierData = {}) {\n this.id = tierData.id || null;\n this.name = tierData.name || \"\";\n this.description = tierData.description || \"\";\n this.companyId = tierData.companyId || null;\n this.tokens = tierData.tokens || 0;\n this.countEmployee = tierData.countEmployee || 0;\n }\n}\n\nexport default Tier;\n","class DropDown {\n constructor(data = {}) {\n this.id = data.id || null;\n this.name = data.name || \"\";\n }\n}\n\nexport default DropDown;\n","class DropDownOption {\n constructor(data = {}) {\n this.id = data.id || null;\n this.name =\n `${data.user.firstName} ${data.user.lastName} (${data.user.email})` || \"\";\n this.userId = data.user.id || null;\n }\n\n static createOptions = dataArray =>\n dataArray.map(data => new DropDownOption(data));\n}\n\nexport default DropDownOption;\n","import { User } from \".\";\nimport { capitalizeFirstLetters, isEmpty } from \"../../services/general.utils\";\n\nclass Activity {\n constructor(activityData = {}) {\n this.id = activityData.id || null;\n this.action = capitalizeFirstLetters(activityData.action, \"_\", \" \") || \"\";\n this.model =\n activityData.model !== activityData.action\n ? activityData.model\n : \"\" || \"\";\n this.description = activityData.description; \n this.createdAt = activityData.createdAt\n ? new Date(activityData.createdAt)\n : new Date(activityData.created_at) || \"\";\n this.user = !isEmpty(activityData.User) ? new User(activityData.User) : null;\n }\n}\n\nexport default Activity;\n","// Entities\nimport Voucher from \"./Voucher.entity\";\n\n// Utils\nimport { isEmpty } from \"../../services/general.utils\";\n\nclass LocalBenefit {\n constructor(benefit = {}) {\n this.id = benefit.id || null;\n this.title = benefit.title || \"\";\n this.description = benefit.description || \"\";\n this.summary = benefit.summary || \"\";\n this.expiration = benefit.expiration\n ? benefit.expiration.split(\"_\").join(\" \")\n : \"\" || \"\";\n this.tokenPrice = benefit.tokenPrice || benefit.token_price || 0;\n this.minimumContractPeriod =\n benefit.minimumContractPeriod || benefit.minimum_contract_period || \"\";\n this.vouchers = benefit.BenefitVoucher\n ? benefit.BenefitVoucher.map(voucher => new Voucher(voucher))\n : [];\n // this.photo = benefit.Photo ? new JpgPhoto(benefit.Photo) : null;\n this.benefitGroupId =\n benefit.benefitGroupId || benefit.benefit_group_id || null;\n this.isDraft = !isEmpty(benefit.isDraft) ? benefit.isDraft : false;\n this.quantity = benefit.quantity || \"\";\n }\n}\n\nexport default LocalBenefit;\n","import { isEmpty } from \"../../services/general.utils\";\nimport { JpgPhoto } from \"../../services/global.entities\";\nimport Category from \"./Category.entity\";\nimport LocalBenefit from \"./LocalBenefit.entity\";\n\nclass LocalBenefitGroup {\n constructor(benefitGroupData = {}) {\n this.id = benefitGroupData.id || null;\n this.name = benefitGroupData.name || \"\";\n this.description = benefitGroupData.description || \"\";\n this.summary = benefitGroupData.summary || \"\";\n this.categories = !isEmpty(benefitGroupData.categories)\n ? benefitGroupData.categories.map(category => new Category(category))\n : null;\n this.photo = benefitGroupData.Photo\n ? new JpgPhoto(benefitGroupData.Photo)\n : new JpgPhoto();\n this.benefits = benefitGroupData.Benefit\n ? benefitGroupData.Benefit.map(benefit => new LocalBenefit(benefit))\n : [];\n }\n}\n\nexport default LocalBenefitGroup;\n","import { JpgPhoto } from \"../../services/global.entities\";\n\nclass LocalBenefitGroupForm {\n constructor(benefitGroupFormData = {}) {\n this.name = benefitGroupFormData.name || \"\";\n this.categories = benefitGroupFormData.categories || [];\n this.description = benefitGroupFormData.description || \"\";\n this.summary = benefitGroupFormData.summary || \"\";\n this.photo = benefitGroupFormData.Photo\n ? new JpgPhoto(benefitGroupFormData.Photo)\n : undefined;\n }\n}\n\nexport default LocalBenefitGroupForm;\n","import Voucher from \"./Voucher.entity\";\n\nclass LocalBenefitForm {\n constructor(localBenefitFormData = {}) {\n this.id = localBenefitFormData.id || null;\n this.title = localBenefitFormData.title || \"\";\n this.tokenPrice = localBenefitFormData.tokenPrice || \"\";\n this.description = localBenefitFormData.description || \"\";\n this.summary = localBenefitFormData.summary || \"\";\n this.expiration = localBenefitFormData.expiration\n ? localBenefitFormData.expiration.split(\"_\").join(\" \")\n : \"\" || \"\";\n this.minimumContractPeriod =\n localBenefitFormData.minimumContractPeriod ||\n localBenefitFormData.minimum_contract_period ||\n \"\";\n this.vouchers = localBenefitFormData.BenefitVoucher\n ? localBenefitFormData.BenefitVoucher.map(voucher => new Voucher(voucher))\n : [];\n // this.photo = localBenefitFormData.Photo\n // ? new JpgPhoto(localBenefitFormData.Photo)\n // : null;\n this.benefit_group_id = localBenefitFormData.benefitGroupId || null;\n this.is_draft =\n localBenefitFormData.isDraft || localBenefitFormData.is_draft || false;\n this.quantity = localBenefitFormData.quantity || \"\";\n }\n}\n\nexport default LocalBenefitForm;\n","import { User, Tier, City, CompanyBranch } from \".\";\nimport { isEmpty } from \"../../services/general.utils\";\n\nclass HrEmployee {\n constructor(employeeData = {}) {\n this.id = employeeData.id || null;\n this.user = employeeData.User\n ? new User(employeeData.User)\n : new User(employeeData.user);\n this.tier = employeeData.Tier\n ? new Tier(employeeData.Tier)\n : new Tier(employeeData.tier);\n this.availableTokens =\n employeeData.availableTokens || employeeData.available_tokens || 0;\n this.tokensUsed = employeeData.usedToken || employeeData.used_token || 0;\n this.remainingTokens =\n employeeData.remainingTokens || employeeData.remaining_tokens || 0;\n if (this.remainingTokens < 0) {\n this.remainingTokens = 0;\n }\n this.budgetSpentPercentage =\n employeeData.budgetSpentPercentage ||\n employeeData.budget_spent_percentage ||\n 0;\n this.cities = employeeData.cities\n ? employeeData.cities.map(city => new City(city))\n : [];\n this.gender = !isEmpty(employeeData.gender) ? employeeData.gender : \"\";\n this.uniqueId = !isEmpty(employeeData.uniqueId)\n ? employeeData.uniqueId\n : \"\";\n this.CompanyBranch = !isEmpty(employeeData.CompanyBranch)\n ? new CompanyBranch(employeeData.CompanyBranch)\n : \"\";\n this.branchCode = !isEmpty(employeeData.branchCode)\n ? employeeData.branchCode\n : \"\";\n this.contact = employeeData.contact || \"\";\n this.description = employeeData.description || \"\";\n this.relationship = employeeData.relationship || \"\";\n this.bornDate = employeeData.bornDate\n ? new Date(employeeData.bornDate)\n : \"\" || \"\";\n this.firstDayAtWork = employeeData.firstDayAtWork\n ? new Date(employeeData.firstDayAtWork)\n : \"\" || \"\";\n this.team = employeeData.team || \"\";\n this.bonusAmount =\n employeeData.bonusAmount || employeeData.bonus_amount || \"\";\n this.totalTokens = employeeData.totalTokens;\n this.rolloverTokens = employeeData.rolloverTokens;\n this.isVerified = employeeData.isVerified || false;\n }\n}\n\nexport default HrEmployee;\n","// Models\nimport { City } from \".\";\nimport UserBenefit from \"./UserBenefit.entity\";\n// Utils\nimport { isEmpty } from \"../../services/general.utils\";\n\n\nclass HrEmployeeForm {\n constructor(employeeData = {}) {\n this.firstName = employeeData.User\n ? employeeData.User.firstName || employeeData.User.first_name\n : \"\";\n this.lastName = employeeData.User\n ? employeeData.User.lastName || employeeData.User.last_name\n : \"\";\n this.isDisabled = employeeData.User\n ? employeeData.User.isDisabled || employeeData.User.is_disabled\n : false\n this.bornDate = employeeData.bornDate ? new Date(employeeData.bornDate) : \"\" || \"\";\n this.firstDayAtWork = employeeData.firstDayAtWork ? new Date(employeeData.firstDayAtWork) : \"\" || \"\";\n this.email = employeeData.User ? employeeData.User.email : \"\";\n this.relationship = employeeData.relationship || \"\";\n this.team = employeeData.team || \"\";\n this.contact = employeeData.contact || \"\";\n this.description = employeeData.description || \"\";\n this.gender = employeeData.gender || \"\";\n this.uniqueId = employeeData.uniqueId || \"\";\n this.branchCode = employeeData.CompanyBranch?.code || \"\";\n this.children = employeeData.children || false;\n this.tier = employeeData.Tier ? employeeData.Tier.id : \"\";\n this.userBenefits = employeeData.UserBenefits\n ? employeeData.UserBenefits.map(benefit => new UserBenefit(benefit))\n : [];\n this.shouldEmployeeHaveHRRole = !isEmpty(employeeData.shouldEmployeeHaveHRRole) ? employeeData.shouldEmployeeHaveHRRole : false;\n this.cities = employeeData.cities\n ? employeeData.cities.map(city => new City(city))\n : [];\n }\n}\n\nexport default HrEmployeeForm;\n","// Models\nimport { Tier, City } from \".\";\nimport UserBenefit from \"./UserBenefit.entity\";\n// Utils\nimport { isEmpty } from \"../../services/general.utils\";\n\n\nclass HrEmployeeDetails {\n constructor(employeeData = {}) {\n this.firstName = employeeData.User\n ? employeeData.User.firstName || employeeData.User.first_name\n : \"\";\n this.lastName = employeeData.User\n ? employeeData.User.lastName || employeeData.User.last_name\n : \"\";\n this.isDisabled = employeeData.User\n ? employeeData.User.isDisabled || employeeData.User.is_disabled\n : false\n this.born_date = employeeData.bornDate ? new Date(employeeData.bornDate) : \"\" || \"\";\n this.firstDayAtWork = employeeData.firstDayAtWork ? new Date(employeeData.firstDayAtWork) : \"\" || \"\";\n this.email = employeeData.User ? employeeData.User.email : \"\";\n this.relationship = employeeData.relationship || \"\";\n this.team = employeeData.team || \"\";\n this.contact = employeeData.contact || \"\";\n this.description = employeeData.description || \"\";\n this.gender = employeeData.gender || \"\";\n this.uniqueId = employeeData.uniqueId || \"\";\n this.branchCode = employeeData.companyBranchId || \"\";\n this.children = employeeData.children || false;\n this.shouldEmployeeHaveHRRole = !isEmpty(employeeData.shouldEmployeeHaveHRRole) ? employeeData.shouldEmployeeHaveHRRole : false;\n this.tier = employeeData.Tier ? new Tier(employeeData.Tier) : new Tier();\n this.userBenefits = employeeData.UserBenefits\n ? employeeData.UserBenefits.map(benefit => new UserBenefit(benefit))\n : [];\n this.userId = employeeData.User?.id || null;\n this.cities = employeeData.cities\n ? employeeData.cities.map(city => new City(city))\n : [];\n }\n}\n\nexport default HrEmployeeDetails;\n","class TokenWorth {\n constructor(tokenWorthData = {}) {\n this.worth = tokenWorthData.worth || 0;\n }\n}\n\nexport default TokenWorth;\n","import { isEmpty } from \"../../services/general.utils\";\n\nclass TierForm {\n constructor(tierData = {}) {\n this.id = tierData.id || null;\n this.name = tierData.name || \"\";\n this.description = tierData.description || \"\";\n this.tokens = !isEmpty(tierData.tokens) ? tierData.tokens : \"\";\n this.currency = !isEmpty(tierData.currency) ? tierData.currency : \"\";\n }\n}\n\nexport default TierForm;\n","class Budget {\n constructor(budgetData = {}) {\n this.actualBudget =\n budgetData.actualBudget || budgetData.actual_budget || [];\n this.lastBudget = budgetData.lastBudget || budgetData.last_budget || [];\n }\n}\n\nexport default Budget;\n","class TotalBudget {\n constructor(budgetData = {}) {\n this.budget = budgetData.budget || 0;\n this.budgetLastMonth =\n budgetData.budgetLastMonth || budgetData.budget_last_month || 0;\n }\n}\n\nexport default TotalBudget;\n","class BudgetSpending {\n constructor(budgetData = {}) {\n this.actualSpentBudget =\n budgetData.actualSpentBudget || budgetData.actual_spent_budget || 0;\n this.lastSpentBudget =\n budgetData.lastSpentBudget || budgetData.last_spent_budget || 0;\n }\n}\n\nexport default BudgetSpending;\n","class CategoryBudget {\n constructor(budgetData = {}) {\n this.actualCategoryBudget =\n budgetData.actualCategoryBudget ||\n budgetData.actual_category_budget ||\n [];\n this.lastCategoryBudget =\n budgetData.lastCategoryBudget || budgetData.last_category_budget || [];\n }\n}\n\nexport default CategoryBudget;\n","class CompanyUsage {\n constructor(usage = {}) {\n this.employeeNotOnPlatform =\n usage.employeeNotOnPlatform || usage.employee_not_on_platform || 0;\n this.employeeOnPlatform =\n usage.employeeOnPlatform || usage.employee_on_platform || 0;\n this.totalEmployee = usage.totalEmployee || usage.total_employee || 0;\n this.totalHr = usage.totalHr || usage.total_hr || 0;\n this.totalUsers = usage.totalUsers || usage.total_users || 0;\n }\n}\n\nexport default CompanyUsage;\n","class SyncedEmployees {\n constructor(employeesData = {}) {\n this.employees = employeesData.employees || 0;\n this.sync = employeesData.sync || 0;\n }\n}\n\nexport default SyncedEmployees;\n","class Combination {\n constructor(combinationData = {}) {\n this.combinations = combinationData.combinations || 0;\n this.value = combinationData.value || null;\n }\n}\n\nexport default Combination;\n","class TokenValue {\n constructor(data = {}) {\n this.id = data.id || null;\n this.currency = data.currency || \"\";\n this.worth = data.worth || 0;\n }\n}\n\nexport default TokenValue;\n","class PriceRange {\n constructor(priceRange = {}) {\n this.min = priceRange.min || 0;\n this.max = priceRange.max;\n }\n}\n\nexport default PriceRange;\n","export const SYSTEM_NOTIFICAITON_TYPES = {\n BENEFIT_CHANGED_PRICE: \"benefit_changed_price\",\n DECREASED_TIER_BUDGET: \"decreased_tier_budget\",\n CHANGED_TIER_BUDGER: \"changed_tier_budget\",\n EMPLOYEE_REASSIGNED_TIER: \"employee_reassigned_tier\",\n BENEFIT_GROUP_CHANGED_LOCATION: \"benefit_group_changed_location\",\n EMPLOYEE_CHANGED_LOCATION: \"employee_changed_location\",\n EMPLOYEE_LOCATION_UPDATED_INFO: \"employee_locations_updated_info\",\n BENEFIT_GROUP_LOCATION_UPDATED_INFO: \"benefit_group_locations_updated_info\",\n BENEFIT_CHANGED_EXPIRATION_TYPE: \"benefit_changed_expiration_type\",\n EMPLOYEE_SUBSCRIBED_TO_MCP_BENEFIT: \"employee_subscribed_to_mcp_benefit\"\n};\n","import moment from \"moment\";\nimport { isEmpty, removeSpacesAndHTML } from \"../../../services/general.utils\";\n\nclass EmployeePayload {\n constructor(employeePayload = {}) {\n this.id = employeePayload.id || null;\n this.first_name =\n (employeePayload.firstName && removeSpacesAndHTML(employeePayload.firstName)) \n || employeePayload.first_name \n || \"\";\n this.last_name =\n (employeePayload.lastName && removeSpacesAndHTML(employeePayload.lastName)) \n || employeePayload.last_name \n || \"\";\n this.gender = employeePayload.gender.toLowerCase() || \"\";\n this.uniqueId = employeePayload.uniqueId || \"\";\n this.companyBranchId = employeePayload.branchCode || \"\";\n this.relationship = employeePayload.relationship.toLowerCase() || \"\";\n this.team = employeePayload.team ? removeSpacesAndHTML(employeePayload.team) : \"\";\n this.description = employeePayload.description ? removeSpacesAndHTML(employeePayload.description) : \"\";\n this.born_date = employeePayload.born_date ? moment(employeePayload.born_date).format(\"DD.MM.YYYY\") : null;\n this.first_day_at_work = employeePayload.firstDayAtWork ? moment(employeePayload.firstDayAtWork).format(\"DD.MM.YYYY\") : null;\n this.contact = employeePayload.contact || \"\";\n this.email = employeePayload.email || \"\";\n this.should_employee_have_hr_role = !isEmpty(employeePayload.shouldEmployeeHaveHRRole) ? employeePayload.shouldEmployeeHaveHRRole : false;\n this.tier_id =\n typeof employeePayload.tier === \"object\"\n ? employeePayload.tier.id\n : employeePayload.tier || \"\";\n this.company_id = employeePayload.companyId || \"\";\n this.city_ids = employeePayload.cities\n ? employeePayload.cities.map(city => city.id)\n : [];\n }\n}\n\nexport default EmployeePayload;\n","/**\n * Determine if role exists in roles array.\n * @param {array} roles \n * @param {UserRoleKeysEnum} roleForComparison \n * @returns {boolean}\n */\nexport const doesRoleExist = (\n roles,\n roleForComparison\n) => {\n return roles?.some(role => role.key === roleForComparison);\n}\n\n/**\n * Determine if role is authenticated.\n * @param {string} authenticatedRole \n * @param {UserRoleKeysEnum} roleKeyForComparison \n * @returns {boolean}\n */\nexport const isAuthenticatedRole = (\n authenticatedRole,\n roleKeyForComparison\n) => {\n return authenticatedRole.key === roleKeyForComparison;\n}","import { UserRolesKeysEnum } from \"../../../constants/roles.constants\";\nimport { isEmpty, removeSpacesAndHTML } from \"../../../services/general.utils\";\nimport { doesRoleExist } from \"../../../services/roles.utils\";\nimport EmployeePayload from \"./Employee.payload\";\n\nclass UserPayload {\n constructor(userPayload = {}) {\n this.id = userPayload.id || null;\n this.first_name = userPayload.firstName ? removeSpacesAndHTML(userPayload.firstName) : \"\";\n this.last_name = userPayload.lastName ? removeSpacesAndHTML(userPayload.lastName) : \"\";\n this.vocative_name = !isEmpty(userPayload.vocativeName) ? removeSpacesAndHTML(userPayload.vocativeName) : \"\";\n this.formal_email = !isEmpty(userPayload.formalEmail) ? userPayload.formalEmail : null;\n this.email = userPayload.email || \"\";\n this.company_id = userPayload.companyId || \"\";\n this.role_ids = userPayload.roles.map(role => role.id) || [];\n !isEmpty(userPayload.password)\n ? this.password = userPayload.password || \"\"\n : undefined;\n\n if (doesRoleExist(userPayload.roles, UserRolesKeysEnum.MEMBER)) {\n const employee = {\n id: userPayload.employee_id || null,\n born_date: userPayload.bornDate || \"\",\n firstDayAtWork: userPayload.firstDayAtWork ||\n userPayload.enroll_date ||\n userPayload.firstDayAtWork ||\n null,\n companyId: userPayload.companyId || \"\",\n relationship: userPayload.relationship?.toLowerCase() || \"\",\n gender: userPayload.gender?.toLowerCase() || \"\",\n uniqueId: userPayload.uniqueId || \"\",\n branchCode: userPayload.branchCode || \"\",\n description: userPayload.description || \"\",\n team: userPayload.team ? removeSpacesAndHTML(userPayload.team) : \"\",\n contact: userPayload.contact || \"\",\n cities: userPayload.cities,\n tier: userPayload.tier || null\n };\n this.employee =\n employee\n ? new EmployeePayload(employee)\n : null;\n }\n }\n}\n\nexport default UserPayload;\n","import { removeSpacesAndHTML } from \"../../../services/general.utils\";\n\nexport class CreateCompanyPayload {\n payload = new FormData();\n paymentDeadlineDaysNumber;\n\n constructor(newCompany = {}) {\n if (newCompany.paymentDeadline) {\n this.paymentDeadlineDaysNumber = parseInt(\n newCompany.paymentDeadline.substr(\n 0,\n newCompany.paymentDeadline.indexOf(\" \")\n ),\n 0\n );\n }\n\n this.payload.append(\n \"name\",\n newCompany.name && removeSpacesAndHTML(newCompany.name)\n );\n this.payload.append(\n \"address\",\n newCompany.address && removeSpacesAndHTML(newCompany.address)\n );\n this.payload.append(\"pib\", newCompany.pib);\n this.payload.append(\"identification_number\", newCompany.idNumber);\n this.payload.append(\"contact\", newCompany.contact);\n\n this.payload.append(\"invoice_email\", newCompany.invoiceEmail);\n this.payload.append(\"status\", newCompany.status);\n this.payload.append(\"payment_deadline\", this.paymentDeadlineDaysNumber);\n this.payload.append(\"vat_enabled\", newCompany.vatEnabled);\n this.payload.append(\"bonus_budget_enabled\", newCompany.bonusBudgetEnabled);\n this.payload.append(\n \"only_sso_login_enabled\",\n newCompany.onlySSOLoginEnabled\n );\n this.payload.append(\"photo\", newCompany.photo);\n this.payload.append(\"hasReimbursement\", newCompany.hasReimbursement);\n this.payload.append(\"viewInRsd\", newCompany.viewInRsd);\n\n newCompany.tags.forEach(tag => {\n this.payload.append(\"tags\", tag.id);\n });\n }\n}\n\nexport default CreateCompanyPayload;\n","import { EditorState, ContentState, convertToRaw } from \"draft-js\";\nimport htmlToDraft from \"html-to-draftjs\";\nimport draftToHtml from \"draftjs-to-html\";\n\n/**\n * Converts string to rich text editor state.\n * @param {EditorState | undefined | string} content\n * @returns {EditorState | undefined | string}\n */\nexport const convertStringToEditorState = content => {\n if (content instanceof EditorState) {\n return content;\n }\n if (typeof content === \"string\") {\n const blocksFromHtml = htmlToDraft(content);\n const { contentBlocks, entityMap } = blocksFromHtml;\n const contentState = ContentState.createFromBlockArray(\n contentBlocks,\n entityMap\n );\n return EditorState.createWithContent(contentState);\n }\n\n return undefined;\n};\n\n/**\n * Converts editor state to html string.\n * @param {EditorState} content\n * @returns {string}\n */\nexport const convertEditorStateToString = content => {\n if (content instanceof EditorState) {\n return draftToHtml(convertToRaw(content.getCurrentContent()));\n }\n\n return content;\n}\n\n/**\n * Checks if benefit group description exists.\n * If backend returns only empty html tag, returns false.\n * @param {string} benefitGroupDescription \n * @returns {boolean}\n */\nexport const doesDescriptionExist = (description) => {\n const tagRegex = /<.+?>/g;\n const formattedDescription = description.replace(tagRegex, '').trim();\n\n return !!formattedDescription;\n}","// Utils\nimport { isEmpty, removeSpacesAndHTML } from \"../../../services/general.utils\";\nimport { convertEditorStateToString } from '../../../services/textEditor.utils';\n\nexport class ProviderPayload {\n payload = new FormData();\n\n constructor(newProvider = {}) {\n this.payload.append(\"name\", newProvider.name && removeSpacesAndHTML(newProvider.name));\n !isEmpty(newProvider.description)\n ? this.payload.append(\"description\", convertEditorStateToString(newProvider.description))\n : null;\n this.payload.append(\"summary\", newProvider.summary && removeSpacesAndHTML(newProvider.summary));\n this.payload.append(\"photo\", newProvider.photo);\n this.payload.append(\"is_active\", newProvider.isActive);\n }\n}\n\nexport default ProviderPayload;\n","// Utils\nimport { isEmpty, removeSpacesAndHTML } from \"../../../services/general.utils\";\nimport { convertEditorStateToString } from \"../../../services/textEditor.utils\";\n\nexport class BenefitGroupPayload {\n payload = new FormData();\n\n constructor(providerId, benefitGroup = {}) {\n this.payload.append(\n \"name\",\n benefitGroup.name && removeSpacesAndHTML(benefitGroup.name)\n );\n !isEmpty(benefitGroup.description)\n ? this.payload.append(\n \"description\",\n convertEditorStateToString(benefitGroup.description)\n )\n : null;\n this.payload.append(\n \"summary\",\n benefitGroup.summary && removeSpacesAndHTML(benefitGroup.summary)\n );\n benefitGroup.photo && this.payload.append(\"photo\", benefitGroup.photo);\n this.payload.append(\"provider_id\", providerId);\n !isEmpty(benefitGroup.companyId)\n ? this.payload.append(\"company_id\", benefitGroup.companyId)\n : undefined;\n this.payload.append(\n \"category_ids\",\n JSON.stringify(benefitGroup.categories?.map(category => category.id))\n );\n this.payload.append(\n \"capacity\",\n benefitGroup.capacity === \"\" ? null : benefitGroup.capacity\n );\n !isEmpty(benefitGroup.taxes)\n ? this.payload.append(\"taxes\", removeSpacesAndHTML(benefitGroup.taxes))\n : this.payload.append(\"taxes\", null);\n !isEmpty(benefitGroup.cities)\n ? this.payload.append(\n \"city_ids\",\n JSON.stringify(benefitGroup.cities.map(city => city.id))\n )\n : null;\n this.payload.append(\n \"is_remote\",\n benefitGroup.isRemote ? benefitGroup.isRemote : false\n );\n this.payload.append(\n \"is_draft\",\n benefitGroup.isDraft ? benefitGroup.isDraft : false\n );\n }\n}\n\nexport default BenefitGroupPayload;\n","// Domain models\nimport { Voucher } from \"../../domain\";\n\n// Utils\nimport { isEmpty, removeSpacesAndHTML } from \"../../../services/general.utils\";\nimport { convertEditorStateToString } from \"../../../services/textEditor.utils\";\n\nexport class BenefitPayload {\n payload = new FormData();\n\n constructor(benefitGroupId, benefit = {}) {\n benefitGroupId && this.payload.append(\"id\", benefitGroupId);\n this.payload.append(\n \"title\",\n benefit.title && removeSpacesAndHTML(benefit.title)\n );\n !isEmpty(benefit.description)\n ? this.payload.append(\n \"description\",\n convertEditorStateToString(benefit.description)\n )\n : null;\n this.payload.append(\n \"summary\",\n benefit.summary && removeSpacesAndHTML(benefit.summary)\n );\n this.payload.append(\"expiration\", benefit.expiration);\n if (benefit.expiration !== \"voucher\") {\n this.payload.append(\"token_price\", benefit.tokenPrice);\n }\n if (benefit.expiration === \"voucher\") {\n this.payload.append(\n \"vouchers\",\n JSON.stringify(benefit.vouchers.map(voucher => new Voucher(voucher)))\n );\n }\n if (benefit.expiration === \"month\") {\n benefit.minimumContractPeriod\n ? this.payload.append(\n \"minimum_contract_period\",\n parseInt(benefit.minimumContractPeriod)\n )\n : null;\n }\n benefit.vat ? this.payload.append(\"vat\", parseInt(benefit.vat)) : null;\n !isEmpty(benefit.shortName)\n ? this.payload.append(\n \"short_name\",\n removeSpacesAndHTML(benefit.shortName)\n )\n : null;\n benefit.photo && this.payload.append(\"photo\", benefit.photo);\n this.payload.append(\"benefit_group_id\", benefitGroupId);\n benefit.tags.map(tag => {\n this.payload.append(\"tags\", tag);\n });\n this.payload.append(\"is_draft\", JSON.stringify(benefit.isDraft));\n this.payload.append(\n \"quantity\",\n benefit.quantity === \"\" ? null : benefit.quantity\n );\n this.payload.append(\n \"instalments\",\n benefit.instalments === \"\" ? null : benefit.instalments\n );\n !isEmpty(benefit.usageInstructions)\n ? this.payload.append(\n \"usage_instructions\",\n convertEditorStateToString(benefit.usageInstructions)\n )\n : null;\n }\n}\n\nexport default BenefitPayload;\n","class AvailableTierPayload {\n constructor(id) {\n this.tier_id = id;\n }\n}\n\nexport default AvailableTierPayload;\n","// Utils\nimport { isEmpty, removeSpacesAndHTML} from \"../../../services/general.utils\";\nimport { convertEditorStateToString } from '../../../services/textEditor.utils';\n\nexport class LocalBenefitGroupPayload {\n payload = new FormData();\n\n constructor(benefitGroup = {}) {\n this.payload.append(\"name\", benefitGroup.name && removeSpacesAndHTML(benefitGroup.name));\n !isEmpty(benefitGroup.description)\n ? this.payload.append(\"description\", convertEditorStateToString(benefitGroup.description))\n : null;\n this.payload.append(\"category_ids\", JSON.stringify(benefitGroup.categories?.map(category => category.id)));\n this.payload.append(\"summary\", benefitGroup.summary && removeSpacesAndHTML(benefitGroup.summary));\n benefitGroup.photo && this.payload.append(\"photo\", benefitGroup.photo);\n }\n}\n\nexport default LocalBenefitGroupPayload;\n","// Utils\nimport { isEmpty, removeSpacesAndHTML } from \"../../../services/general.utils\";\nimport { convertEditorStateToString } from \"../../../services/textEditor.utils\";\nimport { Voucher } from \"../../domain\";\n\nexport class LocalBenefitPayload {\n payload = new FormData();\n\n constructor(benefitGroupId, benefit = {}) {\n this.payload.append(\n \"title\",\n benefit.title && removeSpacesAndHTML(benefit.title)\n );\n this.payload.append(\n \"summary\",\n benefit.summary && removeSpacesAndHTML(benefit.summary)\n );\n !isEmpty(benefit.description)\n ? this.payload.append(\n \"description\",\n convertEditorStateToString(benefit.description)\n )\n : null;\n this.payload.append(\"expiration\", benefit.expiration);\n if (benefit.expiration === \"month\") {\n benefit.minimumContractPeriod\n ? this.payload.append(\n \"minimum_contract_period\",\n parseInt(benefit.minimumContractPeriod)\n )\n : null;\n }\n if (benefit.expiration !== \"voucher\") {\n this.payload.append(\"token_price\", benefit.tokenPrice);\n }\n if (benefit.expiration === \"voucher\") {\n this.payload.append(\n \"vouchers\",\n JSON.stringify(benefit.vouchers.map(voucher => new Voucher(voucher)))\n );\n }\n benefit.photo && this.payload.append(\"photo\", benefit.photo);\n this.payload.append(\"benefit_group_id\", benefitGroupId);\n this.payload.append(\"is_draft\", benefit.isDraft);\n this.payload.append(\n \"quantity\",\n benefit.quantity === \"\" ? null : benefit.quantity\n );\n }\n}\n\nexport default LocalBenefitPayload;\n","class EmployeeFromCsvPayload {\n payload = new FormData();\n\n constructor(employeePayload = {}) {\n this.payload.append(\"csv\", employeePayload.csvFile || null);\n }\n}\n\nexport default EmployeeFromCsvPayload;\n","class HrOnboardingPayload {\n payload = new FormData();\n\n constructor(data = {}) {\n data.tiers.forEach(tier => {\n this.payload.append(\"tiers\", JSON.stringify(tier));\n });\n this.payload.append(\"csv\", data.csvFile);\n }\n}\n\nexport default HrOnboardingPayload;\n","class SubscribeUnsubscribePayload {\n constructor(payload = {}) {\n this.benefit_group_id = payload.benefitGroupId || null;\n this.benefit_id = payload.benefitId || null;\n this.subscribe = payload.subscribe || false;\n this.quantity = payload.quantity || 1;\n }\n}\n\nexport default SubscribeUnsubscribePayload;\n","class VoucherSubscribeUnsubscribePayload {\n constructor(payload = {}) {\n this.benefit_group_id = payload.benefitGroupId || null;\n this.benefit_id = payload.benefitId || null;\n this.subscribe = payload.subscribe || false;\n this.voucher_id = payload.voucherId || false;\n this.voucher_custom_price = payload.voucherCustomPrice || null;\n this.quantity = payload.quantity || null;\n this.voucher_is_reimbursement = payload.voucherIsReimbursement || false;\n }\n}\n\nexport default VoucherSubscribeUnsubscribePayload;\n","class BenefitChangedPriceSystemNotificationPayload {\n constructor(systemNotificationPayloadData = {}) {\n this.id = systemNotificationPayloadData.id || \"\";\n this.title = systemNotificationPayloadData.title || \"\";\n this.tokenPrice =\n systemNotificationPayloadData.tokenPrice ||\n systemNotificationPayloadData.token_price ||\n \"\";\n }\n}\n\nexport default BenefitChangedPriceSystemNotificationPayload;\n","class TierChangedBudgetSystemNotificationPayload {\n constructor(systemNotificationPayloadData = {}) {\n this.id = systemNotificationPayloadData.id || \"\";\n this.name = systemNotificationPayloadData.tierId || \"\";\n this.tokens = systemNotificationPayloadData.tokens || \"\";\n }\n}\n\nexport default TierChangedBudgetSystemNotificationPayload;\n","class EmployeeChangedTierSystemNotificationPayload {\n constructor(systemNotificationPayloadData = {}) {\n this.id = systemNotificationPayloadData.id || \"\";\n this.tierId =\n systemNotificationPayloadData.tierId ||\n systemNotificationPayloadData.tier_id ||\n \"\";\n }\n}\n\nexport default EmployeeChangedTierSystemNotificationPayload;\n","class BenefitGroupChangedLocationPayload {\n constructor(systemNotificationPayloadData = {}) {\n this.id = systemNotificationPayloadData.id || \"\";\n this.name =\n systemNotificationPayloadData.name || \"\";\n }\n}\n\nexport default BenefitGroupChangedLocationPayload;\n","// Utils\nimport { isEmpty } from \"../../../services/general.utils\";\n// Domain models\nimport { City } from \"../../domain\";\n\nclass EmployeeLocationUpdatedInfoPayload {\n constructor(systemNotificationPayloadData = {}) {\n this.removed_cities = !isEmpty(systemNotificationPayloadData.removed_cities)\n ? systemNotificationPayloadData.removed_cities.map(city => new City(city))\n : []\n }\n}\n\nexport default EmployeeLocationUpdatedInfoPayload;\n","class BenefitGroupLocationUpdatedInfoPayload {\n constructor(systemNotificationPayloadData = {}) {\n this.benefit_group_name = systemNotificationPayloadData.benefit_group_name || '';\n }\n}\n\nexport default BenefitGroupLocationUpdatedInfoPayload;\n","class BenefitChangedExpirationTypeSystemNotificationPayload {\n constructor(systemNotificationPayloadData = {}) {\n this.benefitName = systemNotificationPayloadData.benefit_name || \"\";\n this.oldType = systemNotificationPayloadData.old_type || \"\";\n this.newType = systemNotificationPayloadData.new_type || \"\";\n }\n}\n\nexport default BenefitChangedExpirationTypeSystemNotificationPayload;\n","class EmployeeSubscribedToMcpBenefitSystemNotificationPayload {\n constructor(systemNotificationPayloadData = {}) {\n this.minimumContractPeriod = systemNotificationPayloadData.minimum_contract_period || \"\";\n this.minimumContractPeriodExpiration = systemNotificationPayloadData.minimum_contract_period_expiration || \"\";\n }\n}\n\nexport default EmployeeSubscribedToMcpBenefitSystemNotificationPayload;\n","export class CompanyBudgetRolloverPayload {\n constructor(rolloverData = {}) {\n this.rollover_enabled = rolloverData.rolloverEnabled || false;\n this.company_id = rolloverData.companyId || \"\";\n this.rollover_duration = rolloverData.rolloverDuration || \"\";\n }\n}\n\nexport default CompanyBudgetRolloverPayload;\n","import { removeSpacesAndHTML } from '../../../services/general.utils'\n\nclass CreateBenefitGroupReviewPayload {\n constructor(payload = {}) {\n this.benefitGroupId = payload.benefitGroupId;\n this.benefitId = payload.benefitId;\n this.rating = payload.rating;\n this.comment = payload.comment ? removeSpacesAndHTML(payload.comment) : '';\n }\n } \n export default CreateBenefitGroupReviewPayload;\n","import moment from 'moment';\n\nexport const formatDateForPlaceholder = date => {\n const year = date.getFullYear();\n const month = `0${date.getMonth() + 1}`.slice(-2);\n const day = `0${date.getDate()}`.slice(-2);\n return `${day}/${month}/${year}`;\n};\n\nexport const formatDateForSearch = date => {\n const year = date.getFullYear();\n const month = `0${date.getMonth() + 1}`.slice(-2);\n const day = `0${date.getDate()}`.slice(-2);\n return `${month}/${day}/${year}`;\n};\n\n/**\n * Increments given month by 1 and starts it from the first day.\n * @param {Date} date \n * @param {number} forward \n * @returns {Date}\n */\nexport const startFutureMonthFromDate = (date, forward = 1) => moment\n .utc(date)\n .add(forward, 'months')\n .startOf('month')\n .toDate();\n\n/**\n * Formats date to start of day.\n * @param {Date} date \n * @returns {Date}\n */\nexport const formatToStartOfDay = (date) => moment\n .utc(date)\n .startOf('day')\n .toDate();\n","import { formatToStartOfDay } from '../../../services/date.utils';\nimport { isEmpty, removeSpacesAndHTML } from '../../../services/general.utils';\n\nclass BonusCreatePayload {\n\tconstructor(payload = {}) {\n\t\tthis.id = payload.id || null;\n\t\tthis.employees = payload.employees || [];\n\t\tthis.userId = payload.userId || null;\n\t\tthis.companyId = payload.companyId || null;\n\t\tthis.subject = payload.subject ? removeSpacesAndHTML(payload.subject) : \"\";\n\t\tthis.message = payload.message ? payload.message.replace(/\\n/g, \"\\r\\n\") : \"\";\n\t\tthis.tokens = payload.tokens || \"\";\n\t\tthis.end_date = !isEmpty(payload.endDate) ? formatToStartOfDay(payload.endDate) : \"\";\n\t\tthis.start_date = !isEmpty(payload.startDate) ? formatToStartOfDay(payload.startDate) : \"\";\n\t\tthis.recurring = payload.recurring;\n\t\tthis.recurring_type = payload.recurringType;\n\t}\n}\nexport default BonusCreatePayload;\n","import { removeSpacesAndHTML } from '../../../services//general.utils';\n\nclass CategoryPayload {\n constructor(payload = {}) { \n this.id = payload.id || null;\n this.name = payload.name ? removeSpacesAndHTML(payload.name) : \"\";\n this.description = payload.description ? removeSpacesAndHTML(payload.description) : \"\";\n }\n } \n export default CategoryPayload;\n","import { removeSpacesAndHTML } from '../../../services//general.utils';\n\nclass TagPayload {\n constructor(payload = {}) { \n this.id = payload.id || null;\n this.name = payload.name ? removeSpacesAndHTML(payload.name) : \"\";\n this. description = payload.description ? removeSpacesAndHTML(payload.description) : \"\";\n }\n } \n export default TagPayload;","import { isEmpty, removeSpacesAndHTML } from '../../../services//general.utils';\n\nclass TierPayload {\n constructor(payload = {}) {\n this.id = payload.id || null;\n this.currency = payload.currency || \"\";\n this.description = payload.description ? removeSpacesAndHTML(payload.description) : \"\";\n this.name = payload.name ? removeSpacesAndHTML(payload.name) : \"\";\n this.tokens = !isEmpty(payload.tokens) ? payload.tokens : \"\";\n }\n}\nexport default TierPayload;\n","import { isEmpty } from '../../../services/general.utils';\n\nexport default class CompanyThemePayload {\n payload = new FormData();\n \n constructor(newTheme = {}) {\n this.payload.append(\"mode\", newTheme.mode);\n this.payload.append(\"companyId\", newTheme.companyId);\n this.payload.append(\"photo\", newTheme.photo);\n !isEmpty(newTheme.color)\n ? this.payload.append(\"color\", newTheme.color)\n : null;\n }\n }\n","class UploadPDFPayload {\n payload = new FormData();\n constructor(values = {}) {\n this.payload.append(\"benefit_group_id\", values.benefitGroupId);\n this.payload.append(\"voucher_id\", values.voucherId);\n this.payload.append(\"file\", values.pdfFile);\n }\n}\n\nexport default UploadPDFPayload;\n","class EmployeeChangedLocationPayload {\n constructor(systemNotificationPayloadData = {}) {\n this.id = systemNotificationPayloadData.id || \"\";\n this.name =\n systemNotificationPayloadData.name || \"\";\n }\n}\n\nexport default EmployeeChangedLocationPayload;\n","import { SYSTEM_NOTIFICAITON_TYPES } from \"../../constants/systemNotifications.constants\";\nimport {\n EmployeeChangedTierSystemNotificationPayload,\n BenefitChangedPriceSystemNotificationPayload,\n TierChangedBudgetSystemNotificationPayload,\n BenefitGroupChangedLocationPayload,\n EmployeeLocationUpdatedInfoPayload,\n BenefitGroupLocationUpdatedInfoPayload,\n BenefitChangedExpirationTypeSystemNotificationPayload,\n EmployeeSubscribedToMcpBenefitPayload\n} from \"../server/payloads\";\nimport EmployeeChangedLocationPayload from \"../server/payloads/EmployeeChangedLocation.payload\";\n\nclass SystemNotification {\n constructor(systemNotificationData = {}) {\n this.id = systemNotificationData.id || null;\n this.userId =\n systemNotificationData.userId || systemNotificationData.user_id || null;\n this.notificationType =\n systemNotificationData.notificationType ||\n systemNotificationData.notification_type ||\n \"\";\n switch (this.notificationType) {\n case SYSTEM_NOTIFICAITON_TYPES.BENEFIT_CHANGED_PRICE:\n this.payload = new BenefitChangedPriceSystemNotificationPayload(\n systemNotificationData.payload\n );\n break;\n case SYSTEM_NOTIFICAITON_TYPES.DECREASED_TIER_BUDGET:\n this.payload = new TierChangedBudgetSystemNotificationPayload(\n systemNotificationData.payload\n );\n break;\n case SYSTEM_NOTIFICAITON_TYPES.EMPLOYEE_REASSIGNED_TIER:\n this.payload = new EmployeeChangedTierSystemNotificationPayload(\n systemNotificationData.payload\n );\n break;\n case SYSTEM_NOTIFICAITON_TYPES.BENEFIT_GROUP_CHANGED_LOCATION:\n this.payload = new BenefitGroupChangedLocationPayload(\n systemNotificationData.payload\n );\n break;\n case SYSTEM_NOTIFICAITON_TYPES.EMPLOYEE_CHANGED_LOCATION:\n this.payload = new EmployeeChangedLocationPayload(\n systemNotificationData.payload\n );\n break;\n case SYSTEM_NOTIFICAITON_TYPES.EMPLOYEE_LOCATION_UPDATED_INFO:\n this.payload = new EmployeeLocationUpdatedInfoPayload(\n systemNotificationData.payload\n );\n break;\n case SYSTEM_NOTIFICAITON_TYPES.BENEFIT_GROUP_LOCATION_UPDATED_INFO:\n this.payload = new BenefitGroupLocationUpdatedInfoPayload(\n systemNotificationData.payload\n );\n break;\n case SYSTEM_NOTIFICAITON_TYPES.BENEFIT_CHANGED_EXPIRATION_TYPE:\n this.payload = new BenefitChangedExpirationTypeSystemNotificationPayload(\n systemNotificationData.payload\n );\n break;\n case SYSTEM_NOTIFICAITON_TYPES.EMPLOYEE_SUBSCRIBED_TO_MCP_BENEFIT:\n this.payload = new EmployeeSubscribedToMcpBenefitPayload(\n systemNotificationData.payload\n );\n break;\n default:\n return null;\n }\n this.isRead =\n systemNotificationData.isRead || systemNotificationData.is_read || false;\n }\n}\n\nexport default SystemNotification;\n","class UserRole {\n constructor(userRoleData = {}) {\n this.id = userRoleData.id || null;\n this.name = userRoleData.name || \"\";\n this.key = userRoleData.key || \"\";\n }\n}\n\nexport default UserRole;\n","import { formatDateForPlaceholder } from \"../../services/date.utils\";\n\nclass CompanyBudgetRollover {\n constructor(rolloverData = {}) {\n this.companyid = rolloverData.companyId || \"\";\n this.rolloverDuration = rolloverData.rolloverDuration || \"\";\n this.rolloverEndDate = rolloverData.rolloverEndDate || \"\";\n this.rolloverStartDate = rolloverData.rolloverStartDate || \"\";\n this.scheduleDeleteAt = rolloverData.scheduleDeleteAt ? formatDateForPlaceholder(new Date(rolloverData.scheduleDeleteAt)) : \"\";\n }\n}\n\nexport default CompanyBudgetRollover;\n","class BenefitGroupReview {\n constructor(reviewData = {}) {\n this.id = reviewData.id || null;\n this.comment = reviewData.comment || '';\n this.rating = reviewData.rating || 0;\n this.benefitGroupId = reviewData.benefitGroupId || null;\n this.benefitId = reviewData.benefitId || null;\n this.userId = reviewData.userId || null;\n this.reviewStatus = reviewData.reviewStatus;\n }\n }\n\nexport default BenefitGroupReview;","class Bonus {\n constructor(bonusData = {}) {\n this.id = bonusData.id || null;\n this.employees = bonusData.employees || [];\n this.employeeId = bonusData.employeeId || null;\n this.companyId = bonusData.companyId || null;\n this.subject = bonusData.subject || \"\";\n this.message = bonusData.message || \"\";\n this.tokens = bonusData.tokens || \"\";\n this.currency = bonusData.currency || \"\";\n this.endDate = bonusData.endDate || bonusData.end_date || \"\";\n this.startDate = bonusData.startDate || bonusData.start_date || \"\";\n this.recurring = bonusData.recurring;\n }\n}\n\nexport default Bonus;\n","class CompanyBranch {\n constructor(branchData = {}) {\n this.id = branchData.id || null;\n this.branchCode = branchData.code || \"\";\n this.companyId = branchData.companyId || null; \n };\n};\n \nexport default CompanyBranch;\n ","/**\n * Maps plain object to domain model.\n * @param {object} variable - Object to be mapped\n * @param {any} DomainClass - Domain model class\n * @returns {any} - Instace of domain model class\n */\nexport const mapOneToDomain = (variable, DomainClass) => {\n return variable instanceof DomainClass ? variable : new DomainClass(variable);\n};\n\n/**\n * Maps iterable instace of plain objects to domain model.\n * @param {any} iterable - Array, list or any iterable instance of plain objects\n * @param {any} DomainClass - Domain model class\n * @returns {any} - Iterable instance of domain model objects\n */\nexport const mapManyToDomain = (iterable, DomainClass) => {\n return iterable.map(variable =>\n variable instanceof DomainClass ? variable : new DomainClass(variable)\n );\n};\n","import * as actionTypes from \"../../constants/actionTypes/employee/employeeBenefits.constants\";\nimport { BenefitGroup, Category, PriceRange } from \"../../models/domain\";\nimport * as modelMapperService from \"../../models/modelMapper.service\";\n\nexport const employeeBenefitsSetInitialState = (\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage,\n categories\n) => {\n const domainBenefitGroups = modelMapperService.mapManyToDomain(\n benefitGroups,\n BenefitGroup\n );\n\n const domainCategories = modelMapperService.mapManyToDomain(\n categories,\n Category\n );\n\n return {\n type: actionTypes.SET_INITAL_STATE,\n benefitGroups: domainBenefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage,\n categories: domainCategories\n };\n};\n\nexport const setIsFavoritePageOpen = payload => {\n return {\n type: actionTypes.SET_FAVORITE_TAB_OPEN,\n payload\n };\n};\n\nexport const setListOfFavorites = payload => {\n const domainBenefitGroups = modelMapperService.mapManyToDomain(\n payload,\n BenefitGroup\n );\n return {\n type: actionTypes.SET_LIST_OF_FAVORITES,\n payload: domainBenefitGroups\n };\n};\n\nexport const setUsedBenefitsRedux = payload => {\n return {\n type: actionTypes.SET_USED_BENEFITS,\n payload\n };\n};\n\nexport const setCurrentlyPopularBenefit = payload => {\n return {\n type: actionTypes.SET_CURRENTLY_POPULAR_BENEFIT,\n payload\n };\n};\n\nexport const setSocialProofForSingleBenefit = payload => {\n return {\n type: actionTypes.SET_SOCIAL_PROOF_FOR_SINGLE_BENEFIT_GROUP,\n payload\n };\n};\n\nexport const checkIfInFavorites = payload => {\n return {\n type: actionTypes.CHECK_IF_IN_FAVORITES,\n payload\n };\n};\n\nexport const setListOfBrowseBenefits = payload => {\n return {\n type: actionTypes.SET_LIST_OF_BROWSE_BENEFITS,\n payload\n };\n};\n\nexport const setListOfCompanyBenefits = payload => {\n return {\n type: actionTypes.SET_LIST_OF_COMPANY_BENEFITS,\n payload\n };\n};\n\nexport const updateBenefitGroup = benefitGroup => {\n return {\n type: actionTypes.UPDATE_BENEFIT_GROUP,\n benefitGroup\n };\n};\n\nexport const setIsSubscribedBenefitGroupsVisible = isVisible => {\n return {\n type: actionTypes.SET_IS_SUBSCRIBED_BENEFIT_GROUPS_VISIBLE,\n isVisible\n };\n};\n\nexport const setBenefitGroupType = benefitGroupType => {\n return {\n type: actionTypes.SET_BENEFIT_GROUP_TYPE,\n benefitGroupType\n };\n};\n\nexport const setIsInitialStateSet = (flag = true) => {\n return {\n type: actionTypes.SET_IS_INITIAL_STATE_SET,\n flag\n };\n};\n\nexport const setIsPageLoading = isLoading => {\n return {\n type: actionTypes.SET_IS_PAGE_LOADING,\n isLoading\n };\n};\n\nexport const setChosenCategoryIds = chosenCategoryIds => {\n return {\n type: actionTypes.SET_CHOSEN_CATEGORY_IDS,\n chosenCategoryIds\n };\n};\n\nexport const setFiltersPriceRange = (updatedPriceRangeOptions, priceRange) => {\n const domainPriceRange = modelMapperService.mapOneToDomain(\n priceRange,\n PriceRange\n );\n return {\n type: actionTypes.SET_FILTERS_PRICE_RANGE,\n updatedPriceRangeOptions,\n chosenPriceRange: domainPriceRange\n };\n};\n\nexport const setCitiesFilter = cityIds => {\n return {\n type: actionTypes.SET_CITY_IDS_FILTERS,\n cityIds\n };\n};\n\nexport const setRemoteFilter = isRemote => {\n return {\n type: actionTypes.SET_REMOTE_FILTER,\n isRemote\n };\n};\n\nexport const setBenefitExpirationTypesFilter = expirations => {\n return {\n type: actionTypes.SET_BENEFIT_EXPIRATION_TYPES_FILTERS,\n expirations\n };\n};\n\nexport const setSearchFilter = search => {\n return {\n type: actionTypes.SET_SEARCH_FILTERS,\n search\n };\n};\n\nexport const setOrderSort = order => {\n return {\n type: actionTypes.SET_ORDER_SORT,\n order\n };\n};\n\nexport const setKeySort = key => {\n return {\n type: actionTypes.SET_KEY_SORT,\n key\n };\n};\n\nexport const setAditionalBenefitGroups = (\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage,\n benefitGroupType\n) => {\n const domainBenefitGroups = modelMapperService.mapManyToDomain(\n benefitGroups,\n BenefitGroup\n );\n\n return {\n type: actionTypes.SET_ADITIONAL_BENEFIT_GROUPS,\n newBenefitGroups: domainBenefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage,\n benefitGroupType\n };\n};\n\nexport const setBenefitGroupsPage = benefitGroupsPage => {\n return {\n type: actionTypes.SET_BENEFIT_GROUPS_PAGE,\n benefitGroupsPage\n };\n};\n\nexport const applyBenefitGroupsFilters = (\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupType\n) => {\n const domainBenefitGroups = modelMapperService.mapManyToDomain(\n benefitGroups,\n BenefitGroup\n );\n return {\n type: actionTypes.APPLY_BENEFIT_GROUPS_FILTERS,\n benefitGroups: domainBenefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupType\n };\n};\n\nexport const resetBenefitGroupFilters = (\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupType\n) => {\n const domainBenefitGroups = modelMapperService.mapManyToDomain(\n benefitGroups,\n BenefitGroup\n );\n return {\n type: actionTypes.RESET_BENEFIT_GROUPS_FILTERS,\n benefitGroups: domainBenefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupType\n };\n};\n\nexport const resetBenefitGroupFiltersToDefault = () => {\n return {\n type: actionTypes.RESET_BENEFIT_GROUPS_FILTERS_TO_DEFAULT\n };\n};\n\nexport const openBenefitGroupModal = benefitGroup => {\n const domainBenefitGroup = modelMapperService.mapOneToDomain(\n benefitGroup,\n BenefitGroup\n );\n\n return {\n type: actionTypes.OPEN_BENEFIT_GROUP_MODAL,\n chosenBenefitGroup: domainBenefitGroup\n };\n};\n\nexport const setChosenBenefitGroup = benefitGroup => {\n const domainBenefitGroup = modelMapperService.mapOneToDomain(\n benefitGroup,\n BenefitGroup\n );\n return {\n type: actionTypes.SET_CHOSEN_BENEFIT_GROUP,\n chosenBenefitGroup: domainBenefitGroup\n };\n};\n\nexport const closeBenefitGroupModal = () => {\n return {\n type: actionTypes.CLOSE_BENEFIT_GROUP_MODAL\n };\n};\n\nexport const setBenefitGroupsAndSubscribedBenefitGroups = (\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n subscribedBenefitGroups\n) => {\n const domainBenefitGroups = modelMapperService.mapManyToDomain(\n benefitGroups,\n BenefitGroup\n );\n\n const domainSubscribedBenefitGroups = modelMapperService.mapManyToDomain(\n subscribedBenefitGroups,\n BenefitGroup\n );\n\n return {\n type: actionTypes.SET_BENEFIT_GROUPS_AND_SUBSCRIBED_BENEFIT_GROUPS,\n benefitGroups: domainBenefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n subscribedBenefitGroups: domainSubscribedBenefitGroups\n };\n};\n\nexport const setSubscribedBenefitGroups = subscribedBenefitGroups => {\n const domainSubscribedBenefitGroups = modelMapperService.mapManyToDomain(\n subscribedBenefitGroups,\n BenefitGroup\n );\n\n return {\n type: actionTypes.SET_SUBSCRIBED_BENEFIT_GROUPS,\n subscribedBenefitGroups: domainSubscribedBenefitGroups\n };\n};\n\nexport const setIsConditionAllBenefits = isConditionAllBenefits => {\n return {\n type: actionTypes.SET_NEXT_MONTH_FILTER_CONDITION,\n isConditionAllBenefits\n };\n};\n\nexport const setIsNextMonthTooltipOpen = isNextMonthTooltipOpen => {\n return {\n type: actionTypes.SET_NEXT_MONTH_TOOLTIP_IS_OPEN,\n isNextMonthTooltipOpen\n };\n};\n","const moment = require(\"moment\");\n\nfunction isWithinLastMonth(dateString) {\n const dateToCheck = moment(dateString);\n const oneMonthAgo = moment().subtract(1, \"months\");\n const currentDate = moment();\n\n // Check if the date is within the last 1 months\n return dateToCheck.isBetween(oneMonthAgo, currentDate, null, \"[]\");\n}\n\nexport default isWithinLastMonth;\n","import React from \"react\";\n\nimport { FlagCurrency, TokenIcon } from \"../assets/Icons\";\nimport { apiService } from \"../services/api/api.service\";\n\nexport const checkIfTheValueIsInRsdOrToken = async companyId => {\n if (!companyId) return;\n\n try {\n const response = await apiService.get(\n `/company/is-company-tokenized/${companyId}`\n );\n\n const { viewInRsd } = response.data.company;\n return viewInRsd;\n } catch (error) {\n console.error(\"Unable to get the value for the company.view_in_rsd\");\n }\n};\n\nexport const shouldShowInRsd = async companyId => {\n try {\n const viewInRsd = await checkIfTheValueIsInRsdOrToken(companyId);\n\n localStorage.setItem(\"isValueInRsd\", viewInRsd);\n\n return viewInRsd;\n } catch (error) {\n console.error(\"Unable to set the value for the company.view_in_rsd\");\n }\n};\n\nexport const transformTokensToRsd = (valueInTokens, debug) => {\n const isValueInRsd = localStorage.getItem(\"isValueInRsd\");\n\n if (debug) {\n console.log(isValueInRsd, \"isValueInRsd\");\n console.log(valueInTokens, \"valueInTokens\");\n }\n\n return isValueInRsd === \"true\" ? valueInTokens * 20 : valueInTokens;\n};\n\nexport const transformPriceRangeTokensToPriceRangeRsd = priceRangeInTokens => {\n if (String(priceRangeInTokens) === \"0\") return 0;\n\n let priceRange = String(priceRangeInTokens);\n\n const isWithInstallments = priceRange.includes(\"x\");\n\n if (isWithInstallments) {\n priceRange = priceRange.split(\"x\");\n } else if (priceRange.includes(\"-\")) {\n priceRange = priceRange.split(\"-\");\n } else {\n priceRange = [priceRange];\n }\n\n if (priceRange.length === 1) return transformTokensToRsd(priceRange);\n\n const changedPriceRange = isWithInstallments\n ? `${priceRange[0]}x ${transformTokensToRsd(priceRange[1])}`\n : priceRange.map(item => transformTokensToRsd(item)).join(\" - \");\n\n return changedPriceRange;\n};\n\nexport const transformTokenCurrencyIcons = () => {\n const isValueInRsd = localStorage.getItem(\"isValueInRsd\");\n\n return isValueInRsd === \"true\" ? (\n \n ) : (\n \n );\n};\n","import React, { useMemo } from \"react\";\nimport { connect, useDispatch, useSelector } from \"react-redux\";\nimport ReactTooltip from \"react-tooltip\";\nimport PropTypes from \"prop-types\";\nimport StarRatings from \"react-star-ratings\";\n\n// Styles\nimport BenefitCardStyles from \"./BenefitCardStyles\";\n// Assets\nimport Capacity from \"../../assets/images/capacity-left.svg\";\n// Components\nimport {\n ActiveIcon,\n FullHeartIconSVG,\n HearIconSVG,\n InfoIconSvg,\n OutlineHeartIconSVG,\n PendingActivationIcon,\n PendingDeactivationIcon,\n TokenIcon\n} from \"../../assets/Icons\";\n\n// Services\nimport { getUrl } from \"../../services/imageHandler\";\nimport { truncate } from \"../../services/truncateString\";\n// Utils\nimport { isEmpty } from \"../../services/general.utils\";\n// Constants\nimport { LOCAL } from \"../../builders/benefitGroups/benefitGroup.types\";\nimport {\n ACTIVE,\n PENDING_ACTIVATION,\n PENDING_DEACTIVATION\n} from \"../../builders/benefitGroups/benefitGroup.status\";\nimport { UserRolesKeysEnum } from \"../../constants/roles.constants\";\nimport { apiService } from \"../../services/api/api.service\";\nimport {\n setListOfFavorites,\n setSocialProofForSingleBenefit\n} from \"../../actions/employee/employeeBenefits.actions\";\nimport { toast } from \"react-toastify\";\nimport isWithinLastMonth from \"../../utils/helpers/isWithinLastThreeMonths\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n transformPriceRangeTokensToPriceRangeRsd,\n transformTokenCurrencyIcons\n} from \"../../utils/transformTokensToRsd\";\n\nconst BenefitCard = ({\n benefitGroupId,\n benefitDetails,\n benefitDetails: {\n photo,\n provider,\n name,\n benefits = [],\n categories,\n status,\n statusPreview,\n taxes,\n cities,\n isRemote,\n type,\n summary,\n doesBenefitGroupHaveMcp,\n isBenefitGroupNew,\n benefitGroupAvailable,\n doesBenefitGroupHaveInstalments,\n doesBenefitGroupHaveQuantity,\n sumRatings,\n numberReviews,\n priceRange,\n createdAt\n },\n onClick,\n isMyBenefits = false,\n isHr = false,\n user,\n isPreview = false\n}) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n\n const isCardNew = isWithinLastMonth(createdAt);\n\n /**\n * Handles on click event for the benefit card.\n * @returns {Function}\n */\n const handleOnClick = async () => {\n const durationOfCurrentBenefitGroupSubscriptions = 3;\n const query = `/benefit-group/${benefitGroupId}/social-proof?duration=${durationOfCurrentBenefitGroupSubscriptions}`;\n\n const response = await apiService.get(query);\n\n dispatch(setSocialProofForSingleBenefit(response.data.items));\n return onClick();\n };\n\n const { listOfFavoriteBenefitsInObject } = useSelector(\n state => state.employeeBenefitsPage.favoriteBenefits\n );\n\n /**\n * Renders cities on benefit card.\n * If user is hr, and benefit group has more than one city while also being remote, renders remote with no of locations.\n * If user is hr, and benefit group has more than one city, renders first city name and array length - 1.\n * If user is employee and benefit group has remote renders remote and renders first city name and array length - 1.\n * If user is employee, renders first city from his cities and array length - 1.\n * If there is only one city in cities list, render its name.\n * @param {City[]} cities\n */\n const renderCities = cities => {\n if (isEmpty(cities) && type === LOCAL) return [];\n\n if (\n (isHr || user.authenticatedRole?.key !== UserRolesKeysEnum.MEMBER) &&\n cities.length >= 1 &&\n isRemote\n ) {\n return

Remote, + {cities.length}

;\n }\n\n if (\n (isHr || user.authenticatedRole?.key !== UserRolesKeysEnum.MEMBER) &&\n cities.length > 1\n ) {\n return (\n

\n {cities[0].name}, + {cities.length - 1}\n

\n );\n }\n\n if (isEmpty(cities) && isRemote) return

Remote

;\n\n if (\n user.authenticatedRole?.key === UserRolesKeysEnum.MEMBER &&\n !isEmpty(user.employee.cities)\n ) {\n const employeeCity = user.employee?.cities?.find(city =>\n cities.find(ct => ct.id === city.id)\n );\n if (!!employeeCity && cities.length > 1 && !isRemote) {\n return (\n

\n {employeeCity.name}, + {cities.length - 1}\n

\n );\n }\n\n if (!!employeeCity && cities.length > 1 && isRemote) {\n return (\n

\n Remote, {employeeCity.name}, + {cities.length - 1}\n

\n );\n }\n\n if (!!employeeCity && cities.length === 1 && isRemote) {\n return

Remote, {employeeCity.name}

;\n }\n\n if (!isEmpty(cities) && isEmpty(employeeCity) && isRemote) {\n return

Remote, + {cities.length}

;\n }\n\n if (cities.length > 1) {\n return (\n

\n {cities[0].name}, + {cities.length - 1}\n

\n );\n }\n }\n\n return

{cities[0].name}

;\n };\n\n /**\n * Renders benefit group categories to card.\n * @returns {HTMLDivElement}\n */\n const renderCategories = () => {\n if (isEmpty(categories)) return [];\n\n if (!isEmpty(categories) && categories.length > 1) {\n return (\n

\n {categories[0].name}, + {categories.length - 1}\n

\n );\n }\n\n return

{categories[0].name}

;\n };\n\n /**\n * Returns icon component based on status.\n * @param {string} status\n * @returns {import(\"react\").ReactComponentElement}\n */\n const renderStatusIcon = status => {\n if (status === ACTIVE) {\n return ;\n }\n if (status === PENDING_ACTIVATION) {\n return ;\n }\n if (status === PENDING_DEACTIVATION) {\n return ;\n }\n };\n\n /**\n * Calculates & returns total quantity remaining.\n * @returns {number}\n */\n const calculateTotalQuantityRemaining = () => {\n return benefits?.reduce(\n (total, benefit) => total + benefit.totalQuantityRemaining,\n null\n );\n };\n const quantityRemaining = useMemo(() => calculateTotalQuantityRemaining(), [\n benefits\n ]);\n\n /**\n * Calculates & returns tooltip position relative on top left border.\n * @param {number} left\n * @param {number} top\n * @param {HTMLDivElement} node\n * @returns {number, number}\n */\n const overrideTooltipPosition = (\n { top, left },\n currentEvent,\n currentTarget,\n node\n ) => {\n const d = document.documentElement;\n left = Math.min(d.clientWidth - node.clientWidth, left);\n top = Math.min(d.clientHeight - node.clientHeight, top);\n left = Math.max(0, left);\n top = Math.max(0, top);\n return { top, left };\n };\n\n const refetchFavoriteBenefits = async () => {\n try {\n const response = await apiService.get(\"/favorites\");\n const listOfFavorite =\n response.data?.items.length > 0\n ? response.data.items.map(item => item.group)\n : [];\n\n dispatch(setListOfFavorites(listOfFavorite));\n } catch (error) {\n toast.error(t(\"failed_to_get_favorite_benefits\"));\n }\n };\n\n const handleRemoveFromFavorites = async e => {\n e.stopPropagation();\n\n try {\n const removeFromBenefitsResponse = await apiService.delete(\n `/favorites/remove/benefits/${benefitGroupId}`\n );\n refetchFavoriteBenefits();\n toast.success(removeFromBenefitsResponse.data.message);\n } catch (error) {\n toast.error(\"failed_to_remove_from_favorites\");\n }\n };\n\n const handleAddToFavorites = async e => {\n e.stopPropagation();\n\n try {\n const removeFromBenefitsResponse = await apiService.post(\n `/favorites/add/benefits/${benefitGroupId}`\n );\n\n refetchFavoriteBenefits();\n toast.success(removeFromBenefitsResponse.data.message);\n } catch (error) {\n toast.error(\"failed_to_add_to_favorites\");\n }\n };\n\n const svgString = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n`;\n\n // Encode the SVG string in Base64\n const base64SVG = `data:image/svg+xml;base64,${btoa(svgString)}`;\n\n return (\n \n {isCardNew && (\n

\n )}\n
\n
\n \n {isBenefitGroupNew && (\n {t(\"NEW\")}\n )}\n
\n
\n
\n
\n
\n \n
\n
\n
\n

{name}

\n
{renderCategories()}
\n
\n
\n
\n \n {\" \"}\n {numberReviews\n ? (sumRatings / numberReviews).toFixed(1)\n : 0}{\" \"}\n \n \n \n {\" \"}\n ({numberReviews} ratings)\n \n
\n
\n
\n \n {!isEmpty(taxes) &&

{truncate(taxes, 60)}

}\n

{truncate(summary, 89)}

\n
\n \n {cities && renderCities(cities)}\n
\n
\n
\n
\n
\n {transformTokenCurrencyIcons()}\n

\n {transformPriceRangeTokensToPriceRangeRsd(priceRange)}\n

\n
\n {isPreview ||\n (doesBenefitGroupHaveMcp && (\n <>\n \n MCP\n
\n \n \n {t(\"decline_unsub_warning\")}\n \n \n \n ))}\n {doesBenefitGroupHaveInstalments && (\n <>\n \n \n \n \n \n {t(\"benefit_has_installments\")}\n \n \n \n )}\n
\n {!isHr && (\n
\n {!isEmpty(quantityRemaining) && doesBenefitGroupHaveQuantity && (\n \n \n

\n {quantityRemaining} {t(\"left\")}\n

\n
\n )}\n {!isPreview && (\n <>\n {!!listOfFavoriteBenefitsInObject[benefitGroupId] ? (\n \n \n \n ) : (\n \n \n \n )}\n \n )}\n
\n )}\n
\n \n {isHr && (\n
\n {benefitGroupAvailable ? (\n
\n {t(\"enabled\")}
\n
\n ) : (\n
\n {t(\"disabled\")}
\n
\n )}\n
\n )}\n {isMyBenefits\n ? status && (\n
\n {renderStatusIcon(status)}\n

{statusPreview}

\n
\n )\n : status && (\n
\n {renderStatusIcon(status)}\n

{statusPreview}

\n
\n )}\n
\n
\n \n );\n};\n\nBenefitCard.propTypes = {\n benefitDetails: PropTypes.shape({\n name: PropTypes.string,\n description: PropTypes.string,\n status: PropTypes.string,\n photo: PropTypes.shape({\n url: PropTypes.string\n }),\n provider: PropTypes.shape({\n photo: PropTypes.shape({\n url: PropTypes.string\n }),\n description: PropTypes.string\n }),\n benefitMin: PropTypes.number,\n benefitMax: PropTypes.number,\n capacity: PropTypes.number,\n takenBenefits: PropTypes.number,\n benefits: PropTypes.arrayOf(PropTypes.shape({})),\n isPremium: PropTypes.bool,\n sumRatings: PropTypes.number,\n numberReviews: PropTypes.number\n }),\n onClick: PropTypes.func,\n isHr: PropTypes.bool\n};\n\nconst mapStateToProps = state => {\n return {\n user: state.app.user\n };\n};\n\nexport default connect(mapStateToProps, undefined)(BenefitCard);\n","import BenefitCard from './BenefitCard'\n\nexport default BenefitCard\n","import styled from \"styled-components\";\n\nconst CheckboxHolder = styled.div`\n width: ${({ width }) => width || \"20px\"};\n height: ${({ height }) => height || \"21px\"};\n border-radius: 2px;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n border: solid 2px\n ${({ isChecked, disabled }) => {\n if (disabled) {\n return \"#B3B3B3\";\n }\n if (isChecked) {\n return \"#1568bf\";\n }\n return \"#B3B3B3\";\n }};\n cursor: pointer;\n background: ${({ isChecked, disabled }) => {\n if (disabled) {\n return \"#e6e6e6\";\n }\n if (isChecked) {\n return \"#1568bf\";\n }\n return \"#fff\";\n }};\n\n .checkbox {\n width: ${({ width }) => width || \"20px\"};\n height: ${({ height }) => height || \"21px\"};\n opacity: 0;\n cursor: ${({ cursor }) => cursor || \"pointer\"};\n position: absolute;\n\n &:disabled {\n cursor: not-allowed;\n }\n }\n`;\n\nexport default CheckboxHolder;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { CheckIcon } from \"../../assets/Icons\";\n\nimport CheckboxHolder from \"./CheckboxInputStyles\";\n\nconst CheckboxInput = ({\n isChecked = false,\n name,\n onChange,\n disabled,\n onBlur,\n readOnly = false,\n width,\n height,\n cursor\n}) => (\n e.stopPropagation()}\n isChecked={isChecked}\n disabled={disabled}\n width={width}\n height={height}\n cursor={cursor}\n >\n \n {isChecked && }\n \n);\n\nCheckboxInput.propTypes = {\n isChecked: PropTypes.bool,\n name: PropTypes.string,\n onChange: PropTypes.func,\n onBlur: PropTypes.func,\n disabled: PropTypes.bool,\n readOnly: PropTypes.bool,\n width: PropTypes.string,\n height: PropTypes.string,\n cursor: PropTypes.string\n};\n\nexport default CheckboxInput;\n","import CheckboxInput from './CheckboxInput'\n\nexport default CheckboxInput\n","import styled from 'styled-components'\n\nconst DatePickerInputStyles = styled.div`\n\theight: 27px;\n\twidth: 100%;\n\n\t.react-datepicker-wrapper{\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t.react-datepicker__input-container{\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tinput {\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\toutline: none;\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tborder: solid 1px #979797;\n\t\t\t\tpadding: 0 10px;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tfont-weight: 500;\n\t\t\t\tfont-stretch: normal;\n\t\t\t\tfont-style: normal;\n\t\t\t\tline-height: normal;\n\t\t\t\t-webkit-letter-spacing: normal;\n\t\t\t\t-moz-letter-spacing: normal;\n\t\t\t\t-ms-letter-spacing: normal;\n\t\t\t\tletter-spacing: normal;\n\t\t\t\tcolor: #5d5d5d;\n\t\t\t\tposition: relative;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t}\n\t}\t\n`\n\nexport default DatePickerInputStyles\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport DatePicker from 'react-datepicker'\nimport 'react-datepicker/dist/react-datepicker.css'\n\nimport DatePickerInputStyles from './DatePickerInputStyles'\n\nconst DatePickerInput = ({ name, value, onChange, onBlur }) => (\n\t\n\t\t\n\t\n)\n\nDatePickerInput.propTypes = {\n\tname: PropTypes.string,\n\tvalue: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.instanceOf(Date)]),\n\tonChange: PropTypes.func,\n\tonBlur: PropTypes.func\n}\n\nexport default DatePickerInput\n","import styled from 'styled-components'\n\nconst InputFileButtonWrapper = styled.div`\n .fileUpload {\n\t\twidth: ${({ width }) => width};\n\t\theight: 40px;\n\t\tbackground: #1568bf;\n\t\tborder: 1px solid #1568bf;\n\t\tborder-radius: 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpadding: 0 10px;\n\t\tcursor: pointer;\n\t\tposition: relative;\n\n\t\t.text {\n\t\t\twidth: 100%;\n\t\t\ttext-align: center;\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 500;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: normal;\n\t\t\tcolor: #fff;\n\t\t\tmargin-left: 10px;\n\t\t}\n }\n`\n\nexport default InputFileButtonWrapper\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport InputFileButtonWrapper from './FileInputStyles'\n\nimport { AttachmentIcon } from '../../assets/Icons'\n\n\nconst InputFileButton = ({ text, id, handleChange, name, width = '200px' }) => (\n\t\n\t\t document.getElementById(id).click()}\n\t\t>\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t

{text}

\n\t\t\n\t\t\n\t
\n)\n\nInputFileButton.propTypes = {\n\thandleChange: PropTypes.func,\n\tname: PropTypes.string,\n\ttext: PropTypes.string,\n\tid: PropTypes.string,\n\twidth: PropTypes.string\n}\n\nexport default InputFileButton\n","/* eslint-disable */\nimport React from 'react'\nimport styled from 'styled-components'\nimport PropTypes from 'prop-types'\n\nconst CustomTooltipStyles = styled.div`\n position: absolute;\n top:25px;\n right: -25px;\n background: #fff;\n border-radius: 4px;\n border: 1px solid #1568bf !important;\n padding: 8px;\n \n\n .pointerBorder {\n width: 0; \n height: 0; \n border-left: 9px solid transparent;\n border-right: 9px solid transparent;\n border-bottom: 9px solid #1568bf;\n position: absolute;\n border-radius: 2px;\n right: 19px;\n top: -9px;\n }\n\n .pointer {\n width: 0; \n height: 0; \n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n border-bottom: 8px solid #fff;\n position: absolute;\n border-radius: 2px;\n right: 20px;\n top: -8px;\n }\n`\n\n\nconst CustomTooltip = ({children, customClass}) => {\n return (\n \n
\n
\n {children}\n
\n )\n}\n\nCustomTooltip.propTypes = {\n children: PropTypes.node,\n customClass: PropTypes.string\n}\n\nexport default CustomTooltip\n","/* eslint-disable */\nimport React, { useState, Fragment, useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\n\nimport FilterArrowIcon from '../../assets/images/categoryFilters/rectangle.png'\nimport CustomTooltip from '../CustomTooltip'\n\nconst FilterInputStyles = styled.div`\n display: flex;\n align-items: center;\n margin: ${({ margin }) => margin};\n position: relative;\n\n .inputName {\n color: #757575;\n font-size: 16px;\n margin-right: 10px;\n font-weight: 500;\n }\n\n .sortType {\n color: #757575;\n font-size: 16px;\n margin-right: 21px;\n font-weight: 500;\n display: flex;\n min-width: 30px;\n }\n\n .arrow {\n cursor: pointer;\n }\n\n .arrowUp {\n transform: rotate(180deg);\n }\n\n .filterOpener {\n border: none;\n cursor: pointer;\n outline: none;\n background: none;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 19px;\n }\n\n \n\n\n`\nconst FilterInput = ({ margin, inputName, eventProtectClass, isTooltipOpen, openTooltip, filterComponent }) => {\n\n\treturn (\n\t\t\n\t\t\t

{inputName}

\n\n \n {/*

{sortTypeDown}

*/}\n {\n e.stopPropagation()\n openTooltip()\n }}\n >\n \n \"arrowDown\"\n \n \n \n \n
\n {isTooltipOpen && \n \n {filterComponent}\n \n }\n \n \n \n\t\t
\n\t)\n}\n\nFilterInput.propTypes = {\n\tmargin: PropTypes.string,\n\tinputName: PropTypes.string,\n\tsortTypeDown: PropTypes.string,\n sortTypeUp: PropTypes.string,\n filterComponent: PropTypes.node,\n isTooltipOpen: PropTypes.bool\n}\n\nexport default FilterInput\n","export const LOGIN = \"LOGIN\";\nexport const LOGOUT = \"LOGOUT\";\nexport const SET_USER = \"SET_USER\";\nexport const SET_USER_ONBOARDING_DONE = \"SET_USER_ONBOARDING_DONE\";\nexport const FINISH_USER_ONBOARDING = \"SET_USER_ONBOARDING_TO_TRUE\";\nexport const FINISH_EMPLOYEE_ONBOARDING = \"FINISH_EMPLOYEE_ONBOARDING\";\nexport const SET_USER_TOKENS = \"SET_USER_TOKENS\";\nexport const SET_USER_NOTIFICATIONS = \"SET_USER_NOTIFICATIONS\";\nexport const POP_SYSTEM_NOTIFICATIONS = \"POP_SYSTEM_NOTIFICATIONS\";\nexport const USER_ACCEPT_PRIVACY_POLICY = \"USER_ACCEPT_PRIVACY_POLICY\";\nexport const SYNC_USER = \"SYNC_USER\";\nexport const SWITCH_USER_ROLE = \"SWITCH_USER_ROLES\";\nexport const SET_USER_THEMES = \"SET_USER_THEMES\";\nexport const SET_GLOBAL_NOTIFICATION = \"SET_GLOBAL_NOTIFICATION\";\nexport const IS_REFUND_DOWNLOADING = \"IS_REFUND_DOWNLOADING\";\nexport const SET_DOWNLOAD_PERCENTAGE = \"SET_DOWNLOAD_PERCENTAGE\";\nexport const SET_CITIES = \"SET_CITIES\";\n","import * as actionTypes from \"../constants/actionTypes/app.constants\";\n\nexport const login = payload => {\n return { type: actionTypes.LOGIN, payload };\n};\n\nexport const setDownloadPercentage = payload => {\n return { type: actionTypes.SET_DOWNLOAD_PERCENTAGE, payload };\n};\n\nexport const setCities = payload => {\n return { type: actionTypes.SET_CITIES, payload };\n};\n\nexport const setIsRefundDownloading = payload => {\n return { type: actionTypes.IS_REFUND_DOWNLOADING, payload };\n};\n\nexport const switchUserRole = roleObject => {\n return { type: actionTypes.SWITCH_USER_ROLE, roleObject };\n};\n\nexport const setUser = payload => {\n return { type: actionTypes.SET_USER, payload };\n};\n\nexport const logout = () => {\n return { type: actionTypes.LOGOUT };\n};\n\nexport const finishOnboarding = () => {\n return { type: actionTypes.FINISH_USER_ONBOARDING };\n};\n\nexport const finishEmployeeOnboarding = () => {\n return { type: actionTypes.FINISH_EMPLOYEE_ONBOARDING };\n};\n\nexport const acceptPrivacyPolicy = () => {\n return { type: actionTypes.USER_ACCEPT_PRIVACY_POLICY };\n};\n\nexport const setEmployeeTokens = employeeTokens => {\n return {\n type: actionTypes.SET_USER_TOKENS,\n employeeTokens\n };\n};\n\nexport const setSystemNotifications = systemNotifications => {\n return {\n type: actionTypes.SET_USER_NOTIFICATIONS,\n systemNotifications\n };\n};\n\nexport const popSystemNotifications = () => {\n return {\n type: actionTypes.POP_SYSTEM_NOTIFICATIONS\n };\n};\n\nexport const syncUser = () => {\n return {\n type: actionTypes.SYNC_USER\n };\n};\n\nexport const setUserThemes = themes => {\n return {\n type: actionTypes.SET_USER_THEMES,\n themes\n };\n};\n","import User from \"../../domain/User.entity\";\n\nclass LoginResponse {\n constructor(response = {}) {\n this.accessToken = response.data.auth.access_token;\n this.refreshToken = response.data.auth.refresh_token;\n this.user = new User(response.data.user);\n }\n}\n\nexport default LoginResponse;\n","import Company from \"../../domain/Company.entity\";\n\nclass CompaniesResponse {\n constructor(response = {}) {\n this.companies = response.data.companies?.map(\n company => new Company(company)\n );\n this.pages = response.data.pages;\n this.count = response.data.count;\n }\n}\n\nexport default CompaniesResponse;\n","import Category from \"../../domain/Category.entity\";\n\nclass CategoriesResponse {\n constructor(response = {}) {\n this.categories = response.data.categories.map(category => new Category(category));\n this.pages = response.data.pages;\n this.count = response.data.count;\n }\n}\n\nexport default CategoriesResponse;","import Tier from \"../../domain/Tier.entity\";\n\nclass TiersResponse {\n constructor(response = {}) {\n this.tiers = response.data.items.map(tier => new Tier(tier));\n }\n}\n\nexport default TiersResponse;\n","import { User } from \"../../domain\";\n\nclass UsersResponse {\n constructor(response = {}) {\n this.users = response.data.users.map(user => new User(user));\n this.pages = response.data.pages;\n this.count = response.data.count;\n }\n}\n\nexport default UsersResponse;\n","import { Tag } from \"../../domain\";\n\nclass TagsResponse {\n constructor(response = {}) {\n this.tags = response.data.tags.map(tag => new Tag(tag));\n this.pages = response.data.pages;\n this.count = response.data.count;\n }\n}\n\nexport default TagsResponse;\n","import { Activity } from \"../../domain\";\n\nclass LogsResponse {\n constructor(response = {}) {\n this.logs = response.data.logs.map(log => new Activity(log));\n this.count = response.data.count;\n this.pages = response.data.pages;\n }\n}\n\nexport default LogsResponse;\n","import { Provider } from \"../../domain\";\n\nclass ProvidersResponse {\n constructor(response = {}) {\n this.providers = response.data.providers.map(\n provider => new Provider(provider)\n );\n this.pages = response.data.pages;\n this.count = response.data.count;\n }\n}\n\nexport default ProvidersResponse;\n","import { BenefitGroup } from \"../../domain\";\n\nclass BenefitGroupsResponse {\n constructor(response = {}) {\n this.groups = response.data.groups.map(group => new BenefitGroup(group));\n this.pages = response.data.pages;\n this.count = response.data.count;\n }\n}\n\nexport default BenefitGroupsResponse;\n","import { Employee } from \"../../domain\";\n\nclass EmployeesResponse {\n constructor(response = {}) {\n this.employees = response.data.employees.map(\n employee => new Employee(employee)\n );\n this.count = response.data.count;\n this.pages = response.data.pages;\n }\n}\n\nexport default EmployeesResponse;\n","import { LocalBenefitGroup } from \"../../domain\";\n\nclass LocalBenefitsResponse {\n constructor(response = {}) {\n this.groups = response.data.groups.map(\n group => new LocalBenefitGroup(group)\n );\n this.page = response.data.pages;\n this.count = response.data.count;\n }\n}\n\nexport default LocalBenefitsResponse;\n","import HrEmployee from \"../../domain/HrEmployee.entity\";\n\nclass HrEmployeesResponse {\n constructor(response = {}) {\n this.employees = response.data.employees?.map(\n employee => new HrEmployee(employee)\n );\n this.page = response.data.pages;\n this.count = response.data.count;\n }\n}\n\nexport default HrEmployeesResponse;\n","class HrOnboardingResponse {\n constructor(response = {}) {\n this.newEmployees = response.data.employees || 0;\n this.newTiers = response.data.tiers || 0;\n }\n}\n\nexport default HrOnboardingResponse;\n","import { BenefitGroup } from \"../../domain\";\n\nclass SubscribedBenefitGroupsResponse {\n constructor(response = {}) {\n this.groups = response.data.items.map(\n benefitGroup => new BenefitGroup(benefitGroup)\n );\n }\n}\n\nexport default SubscribedBenefitGroupsResponse;\n","import SystemNotification from \"../../domain/SystemNotification.entity\";\n\nclass SystemNotificationsResponse {\n constructor(response = {}) {\n this.notifications = response.data.items?.map(\n notification => new SystemNotification(notification)\n );\n }\n}\n\nexport default SystemNotificationsResponse;\n","import UserRole from \"../../domain/UserRole.entity\";\n\nclass RolesResponse {\n constructor(response = {}) {\n this.roles = response.data.roles?.map(\n role => new UserRole(role)\n );\n }\n}\n\nexport default RolesResponse;\n","import { Benefit } from \"../../domain\";\n\nclass BenefitsResponse {\n constructor(response = {}) {\n this.benefits = response.data.items.map(\n benefit => new Benefit(benefit)\n );\n }\n}\n\nexport default BenefitsResponse;","import CompanyBranch from \"../../domain/CompanyBranch.entity\";\n\nclass BranchesResponse {\n constructor(response = {}) {\n this.branches = response.data.items.map(branch => new CompanyBranch(branch));\n }\n}\n\nexport default BranchesResponse;\n","import { apiService } from \"./api.service\";\nimport { setItem } from \"../localStorage.service\";\nimport {\n BENEFIT_TOKEN,\n BENEFIT_REFRESH_TOKEN,\n BENEFIT_ROLE\n} from \"../../constants/localStorage.constants\";\nimport LoginResponse from \"../../models/server/auth/login.response\";\nimport User from \"../../models/domain/User.entity\";\nimport UserRole from '../../models/domain/UserRole.entity';\nimport { SystemNotificationsResponse } from \"../../models/server/responses\";\n\nexport const login = async payload => {\n let response = await apiService.post(\"/users/login\", payload);\n\n if (response.hasError) return response;\n response = new LoginResponse(response);\n setItem(BENEFIT_TOKEN, response.accessToken);\n setItem(BENEFIT_REFRESH_TOKEN, response.refreshToken);\n setItem(BENEFIT_ROLE, response.user.authenticatedRole.key);\n\n return response;\n};\n\nexport const azureLogin = async payload => {\n let response = await apiService.post(\"/users/login/azure\", payload);\n\n if (response.hasError) return response;\n response = new LoginResponse(response);\n setItem(BENEFIT_TOKEN, response.accessToken);\n setItem(BENEFIT_REFRESH_TOKEN, response.refreshToken);\n setItem(BENEFIT_ROLE, response.user.authenticatedRole.key);\n\n return response;\n}\n\nexport const logout = async () => {\n let response = await apiService.post(\"/users/logout\");\n window.Intercom('shutdown');\n\n return response;\n};\n\nexport const getUser = async () => {\n const response = await apiService.get(\"/users/me\");\n if (response.hasError) return response;\n return new User(response.data);\n};\n\nexport const resetPassword = async values => {\n const response = await apiService.post(\"/users/password/reset\", values);\n\n if (response.hasError) return response;\n\n return response.data;\n};\n\nexport const forgotPassword = async values => {\n const response = await apiService.post(\"/users/password/forgot\", values);\n\n if (response.hasError) return response;\n\n return response.data;\n};\n\n/**\n * Returns unread system notifications.\n * @returns {SystemNotificationsResponse}\n */\nexport const getUnreadNotifications = async () => {\n const response = await apiService.get(\"/notifications\");\n\n if (response.hasError) {\n return response;\n }\n\n return new SystemNotificationsResponse(response);\n};\n\n/**\n * Marks all system notifications for user as read.\n */\nexport const markAllAsRead = async () => {\n return await apiService.put(\"/notifications/mark-all-as-read\");\n};\n\n/**\n * Marks system notification as read.\n * @param {number} id\n */\nexport const markAsRead = async id => {\n return await apiService.put(`/notifications/mark-as-read/${id}`);\n};\n\nexport const acceptPrivacyPolicy = async () => {\n const response = await apiService.put(`/users/privacy-policy`);\n return response;\n};\n\nexport const setAuthenticatedUserRole = async roleKey => {\n const response = await apiService.patch('/users/set-authenticated-role', { key: roleKey });\n if (response.hasError) {\n return response;\n }\n\n return new UserRole(response.data);\n}\n","const getInitals = (name, isFirstLetter) => {\n if (name && name !== \"\" && isFirstLetter) {\n return name.charAt(0);\n }\n\n if (name && name !== undefined && !isFirstLetter) {\n let rgx = new RegExp(/(\\p{L}{1})(\\p{L}{1})+/, \"gu\");\n let initials = [...name.matchAll(rgx)];\n\n const splitName = name.split(\" \");\n\n if (splitName[0].length === 1 && splitName[1].length === 1) {\n return `${splitName[0]}${splitName[1]}`;\n }\n\n if (splitName[0].length === 1 && splitName[1].length > 1) {\n return (initials = (\n splitName[0] + (initials.pop()?.[1] || \"\")\n ).toUpperCase());\n }\n\n if (splitName[0].length > 1 && splitName[1].length === 1) {\n return (initials = (\n (initials.shift()?.[1] || \"\") + splitName[1]\n ).toUpperCase());\n }\n\n return (initials = (\n (initials.shift()?.[1] || \"\") + (initials.pop()?.[1] || \"\")\n ).toUpperCase());\n }\n\n return \"\";\n};\n\nexport default getInitals;\n","export const priceRangeOptions = [\n {\n id: 1,\n min: 0,\n max: 50,\n checked: false\n },\n {\n id: 2,\n min: 51,\n max: 100,\n checked: false\n },\n {\n id: 3,\n min: 101,\n max: 150,\n checked: false\n },\n {\n id: 4,\n min: 151,\n max: 200,\n checked: false\n },\n {\n id: 5,\n min: 201,\n max: 250,\n checked: false\n },\n {\n id: 6,\n min: 251,\n max: 300,\n checked: false\n },\n {\n id: 7,\n min: 301,\n max: 1000,\n checked: false\n }\n];\n","import styled from \"styled-components\";\n\nconst LanguageDropdownStyles = styled.div`\n .flagDropdownWrapper {\n position: relative;\n width: 100px;\n }\n\n .flagDropdown {\n background: white;\n border-radius: 4px;\n position: absolute;\n z-index: 1;\n display: flex;\n flex-direction: column;\n cursor: pointer;\n box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;\n\n img {\n width: 15px;\n height: 15px;\n }\n }\n\n .languageItem {\n cursor: pointer;\n width: 100px;\n display: flex;\n gap: 5px;\n padding: 10px;\n border: none;\n background: transparent;\n }\n\n .shownFlag {\n border-radius: 4px;\n background: white;\n width: 100%;\n display: flex;\n align-items: center;\n gap: 5px;\n cursor: pointer;\n box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;\n padding: 12px;\n border: none;\n border-radius: 8px;\n\n img {\n width: 25px;\n height: 25px;\n }\n\n .shownLanguage {\n font-size: 14px;\n color: #757575;\n font-weight: 600;\n\n svg {\n path {\n fill: #757575;\n }\n }\n }\n }\n`;\n\nexport default LanguageDropdownStyles;\n","import React from \"react\";\n\nexport const PlanetIcon = () => {\n return (\n \n \n \n );\n};\n","import { useEffect, useCallback } from \"react\";\n\nconst isRefArray = r => {\n return \"length\" in r;\n};\n\nconst isTarget = (ref, event) => {\n return ref && ref.current && ref.current.contains(event.target);\n};\n\nconst trueForAny = (array, condition) => {\n return array.reduce((conditionAlreadyMet, value) => {\n return conditionAlreadyMet || condition(value);\n }, false);\n};\n\nconst useClickOutside = (ref, onclick) => {\n const handleClick = useCallback(\n click => {\n if (isRefArray(ref)) {\n if (trueForAny(ref, ref => isTarget(ref, click))) {\n return;\n }\n } else {\n if (isTarget(ref, click)) {\n return;\n }\n }\n onclick();\n },\n [onclick, ref]\n );\n useEffect(() => {\n document.addEventListener(\"click\", handleClick);\n return () => {\n document.removeEventListener(\"click\", handleClick);\n };\n }, [handleClick]);\n return ref;\n};\nexport default useClickOutside;\n","import React, { useRef, useState } from \"react\";\nimport LanguageDropdownStyles from \"./LanguageDropdownStyles\";\nimport { useTranslation } from \"react-i18next\";\nimport { PlanetIcon } from \"./Icons/PlanetIcon\";\nimport useClickOutside from \"../../hooks/useClickOutside\";\n\nexport const LanguageDropdown = () => {\n const tooltip = useRef(null);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n useClickOutside([tooltip], () => setIsDropdownOpen(false));\n\n const { t, i18n } = useTranslation();\n const language = localStorage.getItem(\"locales\");\n\n const handleDropdownOpen = () => setIsDropdownOpen(state => !state);\n\n const handleLanguageChange = language => {\n i18n.changeLanguage(language);\n localStorage.setItem(\"locales\", language);\n };\n\n return (\n \n
\n \n \n {t(language)}\n \n {isDropdownOpen && (\n
\n handleLanguageChange(\"rs\")}\n disabled={language === \"rs\"}\n >\n {/* {CountryFlags(\"rs\")} */}\n Srpski\n \n handleLanguageChange(\"en\")}\n >\n {/* {CountryFlags(\"en\")} */}\n English\n \n
\n )}\n
\n
\n );\n};\n","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\n//Actions\nimport * as actionCreators from \"../../../actions/app.actions\";\nimport * as employeeActionCreators from \"../../../actions/employee/employeeBenefits.actions\";\n//Services\nimport * as userService from \"../../../services/api/auth.service\";\nimport { removeItem } from \"../../../services/localStorage.service\";\nimport getInitals from \"../../../services/getInitals\";\n//Constants\nimport { BENEFIT_ROLE } from \"../../../constants/localStorage.constants\";\nimport { PriceRange } from \"../../../models/domain\";\nimport { priceRangeOptions } from \"../../../builders/employee/priceRangeOptions.config\";\nimport { useIsAuthenticated, useMsal } from \"@azure/msal-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { LanguageDropdown } from \"../../locales/LanguageDropdown\";\n\nconst LogoutDropDown = ({\n user,\n logout,\n setCitiesFilter,\n setRemoteFilterToStore,\n setChosenCategoryIds,\n setFiltersPriceRange,\n resetBenefitGroupFiltersToDefault\n}) => {\n const { t } = useTranslation();\n const history = useHistory();\n const { instance } = useMsal();\n const isAuthenticated = useIsAuthenticated();\n\n const isLocalesInRS = localStorage.getItem(\"locales\") === \"rs\";\n /**\n * Handles logout event.\n * Resets filters to default.\n * Logs out user.\n * Logs out from MSal\n * Removes role from local storage.\n * Reroute user to /.\n * @param {Event} event\n */\n const handleLogout = async event => {\n event.stopPropagation();\n await userService.logout();\n isAuthenticated && instance.logoutPopup();\n resetFilters();\n logout();\n removeItem(BENEFIT_ROLE);\n history.replace(\"/\");\n };\n\n const resetFilters = () => {\n setCitiesFilter([]);\n setRemoteFilterToStore(false);\n setChosenCategoryIds([]);\n setFiltersPriceRange(priceRangeOptions, new PriceRange());\n resetBenefitGroupFiltersToDefault();\n };\n\n return (\n
\n
\n \n
\n
\n
\n

\n {getInitals(`${user.firstName} ${user.lastName}`)}\n

\n
\n
\n {user.firstName} {user.lastName}\n
\n
{user.email}
\n {user.companyName && (\n
{user.companyName}
\n )}\n
\n
\n \n
\n
\n \n {t(\"privacy_policy\")}\n \n \n {t(\"terms\")}\n \n
\n
\n );\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n logout: () => dispatch(actionCreators.logout()),\n resetBenefitGroupFiltersToDefault: () =>\n dispatch(employeeActionCreators.resetBenefitGroupFiltersToDefault()),\n setChosenCategoryIds: chosenCategoryIds =>\n dispatch(employeeActionCreators.setChosenCategoryIds(chosenCategoryIds)),\n setFiltersPriceRange: (updatedPriceRangeOptions, priceRange) =>\n dispatch(\n employeeActionCreators.setFiltersPriceRange(\n updatedPriceRangeOptions,\n priceRange\n )\n ),\n setCitiesFilter: cityIds =>\n dispatch(employeeActionCreators.setCitiesFilter(cityIds)),\n setRemoteFilterToStore: isRemote =>\n dispatch(employeeActionCreators.setRemoteFilter(isRemote)),\n setFiltersPriceRange: (updatedPriceRangeOptions, priceRange) =>\n dispatch(\n employeeActionCreators.setFiltersPriceRange(\n updatedPriceRangeOptions,\n priceRange\n )\n )\n };\n};\n\nexport default connect(null, mapDispatchToProps)(LogoutDropDown);\n","import styled from \"styled-components\";\n\nexport const SwitchPlatformsDropdownStyles = styled.div`\n display: flex;\n align-items: center;\n\n .lngDropdown {\n position: static !important;\n margin-left: 15px;\n\n .flagDropdownWrapper {\n width: unset;\n .shownFlag {\n box-shadow: none;\n background: #f5f5f5;\n }\n }\n }\n\n .roleTooltip {\n display: flex;\n align-items: center;\n }\n\n .roleSwitchContainer {\n font-style: normal;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n color: #757575;\n white-space: nowrap;\n margin-right: 8px;\n }\n\n .tooltipContainer {\n position: relative;\n .arrowButtons {\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n width: 10px;\n }\n\n .tooltip {\n position: absolute;\n background: #757575;\n border-radius: 4px;\n padding: 10px;\n right: -15px;\n top: 21px;\n\n .pointerBorder {\n width: 0;\n height: 0;\n border-left: 9px solid transparent;\n border-right: 9px solid transparent;\n border-bottom: 9px solid #4b4b4b;\n position: absolute;\n border-radius: 2px;\n right: 11px;\n top: -9px;\n }\n\n .pointer {\n width: 0;\n height: 0;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n border-bottom: 8px solid white;\n position: absolute;\n border-radius: 2px;\n right: 12px;\n top: -8px;\n }\n\n .tooltipOption {\n width: 100%;\n font-style: normal;\n font-weight: 600;\n font-size: 14px;\n line-height: 15px;\n white-space: nowrap;\n color: #757575;\n cursor: pointer;\n padding: 6px;\n\n &:hover {\n background: #1568bf;\n color: white;\n opacity: 0.9;\n }\n }\n\n .tooltipOption:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n @media only screen and (max-width: 767px) {\n margin-left: 0;\n margin-right: 85px;\n\n .tooltipContainer {\n z-index: 2;\n }\n }\n\n @media only screen and (max-width: 360px) {\n margin-left: -50px;\n\n .roleSwitchContainer {\n font-size: 12px;\n }\n }\n`;\n","import React, { useRef, useState } from \"react\";\nimport { connect, useSelector } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\nimport ArrowDown from \"../../../assets/images/categoryFilters/rectangle.png\";\nimport { SwitchPlatformsDropdownStyles } from \"./switchPlatformsDropdown.styles\";\n\nimport useClickOutside from \"../../../hooks/useClickOutside\";\n\nimport * as actionCreators from \"../../../actions/app.actions\";\nimport * as api from \"../../../services/api/auth.service\";\nimport { isAuthenticatedRole } from \"../../../services/roles.utils\";\nimport { setItem } from \"../../../services/localStorage.service\";\nimport { BENEFIT_ROLE } from \"../../../constants/localStorage.constants\";\nimport { UserRolesKeysEnum } from \"../../../constants/roles.constants\";\nimport { useTranslation } from \"react-i18next\";\nimport { LanguageDropdown } from \"../../locales/LanguageDropdown\";\n\nconst SwitchPlatformsDropdown = ({ user, switchUserRole }) => {\n const { t } = useTranslation();\n const tooltip = useRef(null);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const history = useHistory();\n\n const { authenticatedRole } = useSelector(state => state.app.user);\n\n /**\n * Handles switching of user roles.\n * Sets selected role to state.\n * If user switches to HR that hasn't completed onboarding process:\n * Replaces current route with /onboarding.\n * In every other case, switches to /.\n * @param {object} role\n */\n const handleSwitchUserRole = async role => {\n const userRole = await api.setAuthenticatedUserRole(role.key);\n setItem(BENEFIT_ROLE, role.key);\n switchUserRole(userRole);\n\n if (\n isAuthenticatedRole(userRole, UserRolesKeysEnum.HR) &&\n !user.isOnboardingDone\n ) {\n history.replace(\"/onboarding\");\n } else {\n history.replace(\"/\");\n }\n };\n\n /**\n * Handle role switch dropdown open/close.\n * @param {Event} event\n */\n const handleDropdownOpen = event => {\n event.preventDefault();\n setIsDropdownOpen(true);\n };\n\n useClickOutside([tooltip], () => setIsDropdownOpen(false));\n\n return (\n \n handleDropdownOpen(e)}\n >\n

\n {t(user?.authenticatedRole?.name)}\n

\n {user?.roles?.length > 1 && (\n
\n \n {isDropdownOpen && (\n
\n
\n
\n {user.roles\n .filter(role => role.key !== user.authenticatedRole.key)\n .map(role => (\n handleSwitchUserRole(role)}\n >\n {t(role.name)}\n

\n ))}\n
\n )}\n
\n )}\n \n {authenticatedRole?.id !== 2 && (\n
\n \n
\n )}\n
\n );\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n switchUserRole: roleObject =>\n dispatch(actionCreators.switchUserRole(roleObject))\n };\n};\n\nSwitchPlatformsDropdown.propTypes = {\n user: PropTypes.shape({}),\n switchUserRole: PropTypes.func\n};\n\nexport default connect(undefined, mapDispatchToProps)(SwitchPlatformsDropdown);\n","import styled from \"styled-components\";\n\nconst BudgetBreakdownDropdownStyles = styled.header`\n .budgetBreakdown {\n position: absolute;\n width: 430px;\n right: 17%;\n top: 80px;\n border-color: rgba(255, 255, 255, 0.7);\n border-radius: 4px;\n box-shadow: 2px 5px 10px 2px #ccc;\n background: white;\n z-index: 9;\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .breakdownContent {\n display: flex;\n align-items: center;\n gap: 5px;\n }\n\n .breakdownLabel {\n font-weight: 600;\n font-size: 16px;\n letter-spacing: -0.2px;\n color: #354052;\n }\n\n .amount {\n font-weight: 600;\n font-size: 16px;\n letter-spacing: -0.2px;\n color: #373737;\n }\n\n .budgetBreakdownHeader {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding: 20px;\n background: #3F7BD0;\n border-radius: 3px 3px 0 0;\n width: 100%;\n\n .budgetLabel {\n font-weight: 600;\n font-size: 16px;\n letter-spacing: -0.2px;\n color: #FFFFFF;\n }\n\n .budget {\n font-weight: 600;\n font-size: 16px;\n letter-spacing: -0.2px;\n color: #FFFFFF;\n display: flex;\n align-items: center;\n gap: 4px;\n }\n }\n \n .budgetBreakdownContent {\n width: 100%;\n display: flex;\n flex-direction: column;\n padding: 10px 0 0 0;\n\n .contentWrapper {\n display: flex;\n justify-content: space-between;\n padding: 10px 20px 10px 20px;\n }\n\n .totalSpentWrapper {\n display: flex;\n justify-content: end;\n padding: 10px 20px 10px 20px;\n \n .totalSpentContent {\n display: flex;\n align-items: center;\n gap: 5px;\n\n .totalSpentLabel {\n font-weight: 600;\n font-size: 14px;\n letter-spacing: -0.2px;\n color: #354052;\n }\n }\n }\n }\n\n .divider {\n width: 90%;\n align-self: center;\n border-top: 1px solid #8c8b8b;\n }\n}\n`;\n\nexport default BudgetBreakdownDropdownStyles;\n","import React, { useMemo, useRef } from \"react\";\n// Components\nimport BudgetBreakdownDropdownStyles from \"./BudgetBreakdownDropdown.styles\";\nimport { TokenIcon } from \"../../../assets/Icons\";\n// Hooks\nimport useClickOutside from \"../../../hooks/useClickOutside\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n transformTokenCurrencyIcons,\n transformTokensToRsd\n} from \"../../../utils/transformTokensToRsd\";\n\nconst BudgetBreakdownDropdown = ({\n user,\n budgetBreakdown,\n setIsBreakdownOpen\n}) => {\n const { t } = useTranslation();\n const budgetBreakdownTooltip = useRef(null);\n useClickOutside([budgetBreakdownTooltip], () => setIsBreakdownOpen(false));\n\n const totalSpent = useMemo(\n () => user.availableTokens - user.remainingTokens,\n [user.remainingTokens]\n );\n\n return (\n \n
\n
\n
{t(\"Budget\")}
\n
\n {transformTokensToRsd(user.remainingTokens)}/\n {transformTokensToRsd(user.totalTokens)}{\" \"}\n {transformTokenCurrencyIcons()}\n
\n
\n
\n
\n
{t(\"sub_monthly\")}
\n
\n \n {transformTokensToRsd(budgetBreakdown.monthlySpent)}\n {\" \"}\n {transformTokenCurrencyIcons()}\n
\n
\n
\n
{t(\"sub_one_time\")}
\n
\n \n {transformTokensToRsd(budgetBreakdown.oneTimeSpent)}\n {\" \"}\n {transformTokenCurrencyIcons()}\n
\n
\n
\n
{t(\"sub_vouchers\")}
\n
\n \n {transformTokensToRsd(budgetBreakdown.vouchersSpent)}\n {\" \"}\n {transformTokenCurrencyIcons()}\n
\n
\n
\n
{t(\"Installments\")}
\n
\n \n {transformTokensToRsd(budgetBreakdown.instalmentsSpent)}\n \n {transformTokenCurrencyIcons()}\n
\n
\n
\n
MCP
\n
\n \n {transformTokensToRsd(budgetBreakdown.mcpSpent)}\n \n {transformTokenCurrencyIcons()}\n
\n
\n
\n
\n
\n {t(\"total_spent\")}{\" \"}\n {transformTokensToRsd(totalSpent)}\n {transformTokenCurrencyIcons()}\n
\n
\n
\n
\n
\n );\n};\n\nexport default BudgetBreakdownDropdown;\n","export const SET_HR_EMPLOYEES = \"SET_HR_EMPLOYEES\";\nexport const SET_PAGE = \"SET_HR_PAGE\";\nexport const SET_SEARCH_CHANGE = \"SET_HR_SEARCH_CHANGE\";\nexport const ADD_HR_EMPLOYEE = \"ADD_HR_EMPLOYEE\";\nexport const TOGGLE_SIDEBAR_MENU = \"TOGGLE_SIDEBAR_MENU\";\nexport const SET_FAILED_TO_BULK_UPDATE_USERS =\n \"SET_FAILED_TO_BULK_UPDATE_USERS\";\nexport const SET_LIST_OF_DROPDOWN_EMPLOYEES = \"SET_LIST_OF_DROPDOWN_EMPLOYEES\";\nexport const SET_DROPDOWN_EMPLOYEES_FILTER = \"SET_DROPDOWN_EMPLOYEES_FILTER\";\nexport const SET_DROPDOWN_EMPLOYEES_META = \"SET_DROPDOWN_EMPLOYEES_META\";\n","import * as actionTypes from \"../../constants/actionTypes/hr/employees.constants\";\n\nexport const setHrEmployees = (employees, count) => {\n return { type: actionTypes.SET_HR_EMPLOYEES, employees, count };\n};\n\nexport const setHrEmployeePage = page => {\n return { type: actionTypes.SET_PAGE, page };\n};\n\nexport const setHrEmployeeSearch = search => {\n return { type: actionTypes.SET_SEARCH_CHANGE, search };\n};\n\nexport const toggleSidebarMenu = isSidebarOpen => {\n return { type: actionTypes.TOGGLE_SIDEBAR_MENU, isSidebarOpen };\n};\n\nexport const setListOfFailedToBulkUpdateUsers = payload => {\n return { type: actionTypes.SET_FAILED_TO_BULK_UPDATE_USERS, payload };\n};\n\nexport const setListOfDropdownEmployees = payload => {\n return { type: actionTypes.SET_LIST_OF_DROPDOWN_EMPLOYEES, payload };\n};\nexport const setDropdownEmployeesFilter = payload => {\n return { type: actionTypes.SET_DROPDOWN_EMPLOYEES_FILTER, payload };\n};\nexport const setDropdownEmployeesMeta = payload => {\n return { type: actionTypes.SET_DROPDOWN_EMPLOYEES_META, payload };\n};\n","import { useState, useEffect } from 'react';\n\nconst getWindowDimensions = () => {\n const { innerWidth: width, innerHeight: height } = window;\n\n return { width, height };\n}\n\nconst useWindowDimensions = () => {\n const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n useEffect(() => {\n const handleResize = () => setWindowDimensions(getWindowDimensions()); \n window.addEventListener('resize', handleResize);\n \n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n useEffect(()=>setWindowDimensions(getWindowDimensions()), []);\n\n return windowDimensions;\n}\n\nexport default useWindowDimensions;\n","import styled from \"styled-components\";\n\nconst StyledHeader = styled.header`\n width: 100%;\n height: 90px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0 30px;\n position: relative;\n z-index: 2;\n\n .mcpTooltip{\n border:solid 0.5px;\n }\n\n .titleContainer {\n display:flex;\n align-items: center;\n\n .titleContainerBack{\n height:24px;\n background:transparent;\n border:none;\n cursor:pointer;\n margin-right:20px;\n\n svg {\n path {\n fill:#1d3468\n }\n }\n }\n }\n\n .lngDropdown{\n position: absolute;\n right: 10px;\n\n .flagDropdownWrapper {\n width: unset;\n .shownFlag {\n box-shadow: none;\n }\n }\n }\n\n .tokenContainerMessage { \n margin-right:10px;\n color: #757575;\n \n b {\n margin-left: 3px;\n }\n }\n\n \n\n .memberHistory {\n display: flex;\n -webkit-box-pack: center;\n -webkit-justify-content: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-align-items: center;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n padding: 10px;\n border-radius: 4px;\n border: solid 1px transparent;\n outline: none;\n cursor: pointer;\n font-size: 14px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n -webkit-letter-spacing: normal;\n -moz-letter-spacing: normal;\n -ms-letter-spacing: normal;\n letter-spacing: normal;\n text-align: center;\n margin: 0;\n margin-right: 10px;\n color: #1568bf;\n border:0.5px solid #1568bf\n background: #fff;\n transition: 0.5s;\n\n svg {\n margin-right: 5px;\n }\n\n &:hover {\n background: #1568bf;\n color: #fff;\n }\n }\n\n .headerTitle {\n font-size: 22px;\n font-weight: 600;\n color: #1d3468;\n letter-spacing: 0px;\n line-height: 26.82px;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .mobileTokens {\n display: none;\n background: #fff;\n box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2),\n 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 4px 5px 0 rgba(0, 0, 0, 0.14);\n padding: 8px 10px 8px 10px;\n border-radius: 16px;\n\n .tooltip {\n /* height: 107px; */\n background: #282a3b !important;\n border: 1px solid #282a3b !important;\n padding: 0;\n border-radius: 4px;\n font-size: 13px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.85;\n letter-spacing: -0.22px;\n color: #ffffff;\n text-align: center;\n padding: 0 8px;\n }\n\n .tooltip:after {\n border-top: 8px solid #1568bf !important;\n margin-left: -3px !important;\n bottom:-7px;\n }\n\n .__react_component_tooltip.show {\n opacity: 0.9 !important;\n margin-top: -10px !important;\n margin-left: 0px !important;\n visibility: visible;\n }\n\n .__react_component_tooltip.show.tokenState {\n left: 299px !important;\n top: 14px !important;\n width: 336px;\n }\n }\n\n .tokenUserContainer {\n display: flex;\n align-items: center;\n cursor: pointer;\n\n .tokenContainer {\n display: flex;\n align-items: center;\n\n .desktopTokens {\n display: flex;\n justify-content: space-evenly;\n align-items: center;\n justify-content: space-evenly;\n border-radius: 16px;\n background: #fff;\n box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2),\n 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 4px 5px 0 rgba(0, 0, 0, 0.14);\n padding: 8px 10px 8px 10px;\n }\n }\n\n .sync {\n margin-left: 30px;\n border-radius: 16px;\n background: #fff;\n box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2),\n 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 4px 5px 0 rgba(0, 0, 0, 0.14);\n padding: 8px 8px 8px 16px;\n margin-right: 25px;\n //cursor: pointer;\n display: flex;\n align-items: center;\n visibility: hidden;\n // Hide Submit button\n //this is temporary until the designer gives us a better solution\n margin: 0;\n padding-left: 0;\n padding-right: 0;\n }\n\n .syncText {\n font-style: normal;\n font-weight: 500;\n font-size: 14px;\n line-height: 17px;\n color: #1568bf;\n margin-right: 13px;\n }\n\n .tokens {\n margin: 0 5px 0 10px;\n font-size: 18px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n }\n }\n\n .avatarStatusContainer {\n position: relative;\n cursor: pointer;\n display: flex;\n align-items: center;\n\n .avatarContainer {\n border-radius: 50%;\n background: #1568bf;\n width: 34px;\n height: 34px;\n overflow: hidden;\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n\n .nameInitials {\n color: #fff;\n text-transform: uppercase;\n font-size: 16px;\n font-weight: 500;\n }\n }\n\n .loginStatus {\n border-radius: 50%;\n background-color: #309282;\n position: absolute;\n border: 2px solid #f7f7f7;\n bottom: 0;\n right: 0;\n width: 9px;\n height: 9px;\n z-index: 5;\n }\n\n .olvyTarget {\n margin: 0 3px;\n }\n\n .logoutDropDown {\n cursor: auto;\n position: absolute;\n width: 380px;\n right: 0;\n top: 45px;\n border: 1px solid #ccc;\n border-color: rgba(255, 255, 255, 0.7);\n border-radius: 4px;\n box-shadow: 2px 5px 10px 2px #ccc;\n background: white;\n padding: 15px 0 15px 0;\n z-index: 9;\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .logoutDropdownHeader {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 10px;\n\n .avatarContainer {\n border-radius: 50%;\n background: #1568bf;\n width: 64px;\n height: 64px;\n overflow: hidden;\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n\n .nameInitials {\n color: #fff;\n text-transform: uppercase;\n font-size: 27px;\n font-weight: 500;\n }\n }\n\n .userFullName {\n margin-top: 10px;\n }\n\n .userEmail {\n margin-top: 10px;\n }\n\n .userCompany {\n margin-top: 10px;\n }\n }\n\n .divider {\n width: 100%;\n margin: 10px 0 10px 0;\n background-color: #eee;\n }\n\n .fillContainer {\n position: relative;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 10px;\n\n .tooltipButton {\n cursor: pointer;\n width: 125px;\n background: white;\n color: black;\n padding: 5px 10px;\n font-size: 14px;\n font-weight: 500;\n padding: 10px 20px 10px 20px;\n border: 1px solid lightgrey;\n border-radius: 4px;\n\n &:hover {\n background: #eee;\n }\n }\n }\n\n .logoutDropdownFooter {\n padding: 10px 0 0 0;\n display: flex;\n flex-direction: row;\n width: 100%;\n justify-content: space-evenly;\n\n a {\n text-decoration: none;\n font-style: normal;\n font-weight: normal;\n font-size: 12px;\n color: #4b4b4b;\n }\n }\n }\n }\n\n @media only screen and (max-width: 767px) {\n padding: 34px 14px;\n height: unset;\n flex-wrap: ${({ wrap }) => wrap};\n\n .titleContainer {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: space-between;\n }\n\n .mobileTokens {\n display: flex;\n align-items: center;\n margin-top: 11px;\n\n .tooltip {\n left: 13px !important;\n }\n\n .tooltip:after {\n margin-left: -22px !important;\n }\n\n .tokens {\n margin: 0 5px 0 10px;\n }\n }\n\n .tokenUserContainer {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n\n .tokenContainer {\n display: flex;\n align-items: center;\n order: 2;\n\n .sync {\n margin-right: 0;\n }\n\n .desktopTokens {\n display: none;\n }\n }\n\n .tooltipContainer {\n margin: 0;\n }\n\n .tokens {\n margin: 0 0 0 10px;\n font-size: 18px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n }\n }\n\n .mobile {\n width: 100%;\n\n .hamburgerIcon {\n position: absolute;\n left: 14px;\n top: 32px;\n cursor: pointer;\n\n svg {\n margin-right: 10px;\n\n &:first-child {\n margin-bottom: 5px;\n }\n }\n }\n }\n\n .switchPlaceholder {\n width: 70px;\n height: 20px;\n }\n\n .avatarStatusContainer {\n order: 1;\n margin: -25px 0px 10px 50px;\n }\n }\n\n @media only screen and (max-width: 356px) {\n padding: 34px 8px;\n\n .tokenUserContainer {\n .tokenContainer {\n .sync {\n margin-left: 0;\n }\n }\n }\n\n .mobileTokens {\n min-height: 41px;\n\n svg {\n width: 13px;\n height: 13px;\n }\n\n div svg {\n width: 9px;\n height: 9px;\n margin-top: 2px;\n }\n\n .tokens {\n margin: 0 -3px 0 5px;\n font-size: 0.7em;\n }\n }\n\n .avatarStatusContainer {\n margin-left: 0;\n\n .logoutDropDown {\n width: 100vw;\n }\n }\n }\n \n .goBack {\n display: flex;\n align-items: center;\n\n .__react_component_tooltip.place-bottom.type-dark#mcpTooltip{\n left: 215px !important;\n top: 47px !important;\n }\n }\n\n .tooltipContainer {\n margin: 0 0 0 0;\n\n .tooltip {\n background: white;\n width: 120px;\n border: 1px solid #1568bf;\n padding: 0;\n border-radius: 4px;\n font-size: 13px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.85;\n letter-spacing: -0.22px;\n color: #757575;\n text-align: center;\n }\n\n .tooltipRole {\n border: 1px solid #1568bf;\n }\n\n .tooltip:after {\n border-top: 8px solid #4b4b4b;\n margin-left: 1px !important;\n bottom:-7px;\n }\n\n .__react_component_tooltip.show {\n opacity: 0.9 !important;\n margin-top: -10px !important;\n margin-left: 0px !important;\n visibility: visible;\n }\n\n .__react_component_tooltip.show.tokenState {\n display: flex;\n justify-content: center;\n width: 336px;\n }\n\n .__react_component_tooltip.place-top:before {\n bottom: -18px;\n left: 50%;\n margin-left: 0px;\n border: 9px solid;\n border-left: 9px solid transparent;\n border-right: 9px solid transparent;\n border-bottom: 9px solid transparent;\n border-top: 9px solid #1568bf;\n }\n }\n`;\n\nexport default StyledHeader;\n","import { AvailableTierPayload } from \"../payloads\";\n\nclass AvailableTiersRequest {\n constructor(payload = {}) {\n this.benefit_group_id = payload.benefitGroupId;\n this.available = payload.availableTiers.map(\n tierId => new AvailableTierPayload(tierId)\n );\n this.enable_instalments = payload.enableInstalments\n }\n}\n\nexport default AvailableTiersRequest;\n","import { apiService } from \"../api.service\";\n\n// Responses\nimport {\n UsersResponse,\n CompaniesResponse,\n TiersResponse,\n EmployeeResponse,\n RolesResponse,\n BranchesResponse\n} from \"../../../models/server/responses\";\n\n// Models\nimport { DropDown, Employee, User, UserRole } from \"../../../models/domain\";\n\n// Payloads\nimport { EmployeePayload, UserPayload } from \"../../../models/server/payloads\";\n\n// Requests\nimport { UserRequest } from \"../../../models/server/requests\";\n\n// Utils\nimport { isEmpty } from \"../../general.utils\";\n\nexport const getUsers = async ({\n limit,\n page,\n searchText,\n orderColumns,\n companyIds,\n roleIds\n}) => {\n let queryParams = \"\";\n let companiesQuery = \"\";\n let rolesQuery = \"\";\n\n if (limit) {\n queryParams += `limit=${limit}`;\n }\n\n if (page) {\n queryParams += `${!isEmpty(queryParams) ? \"&\" : \"\"}page=${page}`;\n }\n\n if (!isEmpty(companyIds) && Array.isArray(companyIds)) {\n companiesQuery = companyIds.reduce(\n (query, company) =>\n `${!isEmpty(query) ? `${query}&` : \"\"}company_id=${company}`,\n \"\"\n );\n }\n\n if (!isEmpty(roleIds) && Array.isArray(roleIds)) {\n rolesQuery = roleIds.reduce(\n (query, role) => `${!isEmpty(query) ? `${query}&` : \"\"}role_id=${role}`,\n \"\"\n );\n }\n\n if (!isEmpty(companiesQuery)) {\n queryParams += `${!isEmpty(queryParams) ? \"&\" : null}${companiesQuery}`;\n }\n\n if (!isEmpty(rolesQuery)) {\n queryParams += `${!isEmpty(queryParams) ? \"&\" : null}${rolesQuery}`;\n }\n\n if (orderColumns.length > 0) {\n queryParams += orderColumns.reduce(\n (acc, column) =>\n `${acc}&order=${column.field} ${column.isSortedUp ? \"ASC\" : \"DESC\"}`,\n \"\"\n );\n }\n\n let response = await apiService.get(\n `/users?${queryParams}&search=${searchText}`\n );\n\n if (response.hasError) return response;\n response = new UsersResponse(response);\n return {\n users: response.users,\n count: response.count,\n pages: response.pages\n };\n};\n\nexport const getUserHistory = async userId => {\n const response = await apiService.get(`/users/${userId}/history`);\n\n return response;\n};\n\n/**\n * Fetch list of roles.\n * @returns {UserRole[]}\n */\nexport const getRolesForDropdown = async () => {\n let response = await apiService.get(\"/users/roles\");\n if (response.hasError) return response;\n\n response = new RolesResponse(response);\n\n return response.roles.map(role => new UserRole(role));\n};\n\nexport const getCompanyOptions = async (page = 1, limit = 20) => {\n let response = await apiService.get(\n `/company/get?page=${page}&limit=${limit}`\n );\n if (response.hasError) return response;\n response = new CompaniesResponse(response);\n return {\n companies: response.companies.map(company => new DropDown(company)),\n pages: response.pages\n };\n};\n\nexport const getTierOptions = async companyId => {\n let response = await apiService.get(`/company/tiers?company_id=${companyId}`);\n if (response.hasError) return response;\n response = new TiersResponse(response);\n return response.tiers.map(tier => new DropDown(tier));\n};\n\nexport const getSingleUser = async ({ id }) => {\n let url = `/users/${id}`;\n let response = await apiService.get(url);\n if (response.hasError) return response;\n\n return new User(response.data);\n};\n\nexport const createUser = async payload => {\n let payloadData = new UserPayload(payload);\n let url = \"/users/register\";\n const response = await apiService.post(url, payloadData);\n return response;\n};\n\nexport const updateUser = async ({ payload, id }) => {\n let payloadData = new UserPayload(payload);\n let url = `/users/edit/${id}`;\n const response = await apiService.put(url, payloadData);\n return response;\n};\n\n/**\n * Disables user.\n * @param {number} userId\n * @param {Date} scheduleDeleteAt\n * @returns {import(\"axios\").AxiosResponse}\n */\nexport const disableUser = async ({ userId, scheduleDeleteAt }) => {\n let payloadData = {\n schedule_delete_at: scheduleDeleteAt\n };\n let url = `/users/disable/${userId}`;\n\n const response = await apiService.patch(url, payloadData);\n\n return response;\n};\n\n/**\n * Disables users.\n * @param {number[]} userIds\n * @param {Date} scheduleDeleteAt\n * @returns {import(\"axios\").AxiosResponse}\n */\nexport const disableUsers = async ({ userIds, scheduleDeleteAt }) => {\n let payloadData = {\n schedule_delete_at: scheduleDeleteAt,\n user_ids: userIds\n };\n let url = `/users/disable-users`;\n\n const response = await apiService.patch(url, payloadData);\n\n return response;\n};\n\n/**\n * Resends email verification link.\n * @param {number} userId\n */\nexport const resendVerificationLink = async userId => {\n const response = await apiService.get(`/users/resend-confirmation/${userId}`);\n\n return response;\n};\n\n/**\n *\n * @param {*} userId\n * @returns\n */\nexport const enableUser = async userId => {\n let url = `/users/enable/${userId}`;\n const response = await apiService.patch(url);\n\n return response;\n};\n\nexport const getCompanyBranches = async companyId => {\n const response = await apiService.get(\n `/company/branches?company_id=${companyId}`\n );\n if (response.hasError) return response;\n\n return new BranchesResponse(response);\n};\n","export const monthsInSerbian = {\n January: \"Januar\",\n February: \"Februar\",\n March: \"Mart\",\n April: \"April\",\n May: \"Maj\",\n June: \"Jun\",\n July: \"Jul\",\n August: \"Avgust\",\n September: \"Septembar\",\n October: \"Oktobar\",\n November: \"Novembar\",\n December: \"Decembar\"\n};\n","import moment from \"moment\";\nimport React from \"react\";\nimport { useEffect } from \"react\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nconst calculateTime = () => {\n const now = moment();\n const currentMonth = now.month();\n const currentYear = now.year();\n\n let targetDate = moment({\n year: currentYear,\n month: currentMonth,\n date: 26\n });\n\n if (now.isAfter(targetDate)) {\n targetDate = moment({\n year: currentYear,\n month: currentMonth + 1,\n date: 26\n });\n }\n\n const duration = moment.duration(targetDate.diff(now));\n const days = Math.floor(duration.asDays());\n\n let time = `${days} d`;\n\n if (duration.asMinutes() <= 60) {\n time = `${Math.floor(duration.asMinutes())} m`;\n } else if (duration.asHours() <= 24) {\n time = `${Math.floor(duration.asHours())} h`;\n }\n\n return time;\n};\n\nexport const TimerForLastDay = () => {\n const { t } = useTranslation();\n const [timeLeft, setTimeLeft] = useState(calculateTime());\n\n useEffect(() => {\n const interval = setInterval(() => {\n setTimeLeft(calculateTime());\n }, 3600 * 1000);\n\n return () => clearInterval(interval);\n }, []);\n\n return (\n \n {timeLeft.includes(\"h\") ||\n Number(timeLeft.replace(\"d\", \"\").trim()) > 25 ? (\n <>\n {t(\"time_to_pick_locked\")}\n \n \n {\" \"}\n {moment()\n .add(1, \"month\")\n .startOf(\"month\")\n .format(\"DD.MM\")}\n \n \n \n ) : (\n <>\n {t(\"time_to_pick\")}:{\" \"}\n \n {timeLeft}\n \n \n )}\n \n );\n};\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { connect, useSelector } from \"react-redux\";\nimport ReactTooltip from \"react-tooltip\";\nimport PropTypes from \"prop-types\";\n//assets\nimport {\n TokenIcon,\n SyncIcon,\n InfoIconSvg,\n NotificationBellSvg,\n HamburgerIconSvg,\n BLogoSvg,\n ClockIcon,\n GoBackSvg,\n FlagCurrency\n} from \"../../assets/Icons\";\n//components\nimport LogoutDropdown from \"./logoutDropdown/LogoutDropdown\";\nimport SwitchPlatformsDropdown from \"./switchPlatformsDropdown/SwitchPlatformsDropdown\";\nimport BudgetBreakdownDropdown from \"./budgetBreakdownDropdown/BudgetBreakdownDropdown\";\nimport { CompanyThemeLogo } from \"../\";\n// actions\nimport * as actionCreators from \"../../actions/hr/employees.actions\";\n//services\nimport getInitals from \"../../services/getInitals\";\nimport { filterArrayByValueOfKey, isEmpty } from \"../../services/general.utils\";\n// hooks\nimport useWindowDimensions from \"../../hooks/useWindowDimensions\";\n//styles\nimport StyledHeader from \"./HeaderStyles\";\nimport { getUserHistory } from \"../../services/api/admin/users.service\";\nimport { useHistory } from \"react-router-dom/cjs/react-router-dom.min\";\nimport moment from \"moment\";\nimport { monthsInSerbian } from \"../../constants/monthsInSerbian.constants\";\nimport { TimerForLastDay } from \"../timerForLastDay/TimerForLastDay\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n transformTokenCurrencyIcons,\n transformTokensToRsd\n} from \"../../utils/transformTokensToRsd\";\nimport ArrowBackIcons from \"@material-ui/icons/ArrowBack\";\n\nconst Header = ({\n headerTitle,\n svgIcon,\n isTokenVisable = false,\n openSyncModal,\n user,\n isSidebarMenuOpen,\n toggleSidebarMenu,\n shouldRedirectToOriginal\n}) => {\n const { t } = useTranslation();\n const history = useHistory();\n const [isDropDownOpen, setIsDropDownOpen] = useState(false);\n const [isBreakdownOpen, setIsBreakdownOpen] = useState(false);\n\n const { pathname } = useLocation();\n const { width } = useWindowDimensions();\n\n const { firstName, vocativeName } = useSelector(state => state.app.user);\n\n const handleClick = e => {\n const avatar = document.getElementById(\"avatar\");\n if (avatar && !avatar.contains(e.target)) {\n setIsDropDownOpen(false);\n }\n };\n\n const handleHistory = async () => {\n history.push(headerTitle === t(\"history\") ? \"/\" : \"/history\");\n };\n\n useEffect(() => {\n document.addEventListener(\"click\", handleClick);\n return () => document.removeEventListener(\"click\", handleClick);\n });\n\n const isInSerbianLanguage = localStorage.getItem(\"locales\");\n\n return (\n \n
\n {shouldRedirectToOriginal && (\n
\n \n \n \n\n \n {t(\"go_back\")}\n \n
\n )}\n {headerTitle ? (\n

\n {svgIcon}\n {headerTitle}\n

\n ) : (\n <>\n {user?.authenticatedRole && (\n \n )}\n {width > 768 && (\n
\n {t(\"choose_benefits_message\", {\n name: vocativeName !== \"\" ? vocativeName : firstName\n })}\n \n {isInSerbianLanguage === \"rs\"\n ? monthsInSerbian[\n moment()\n .add(1, \"month\")\n .format(\"MMMM\")\n ]\n : moment()\n .add(1, \"month\")\n .format(\"MMMM\")}\n \n \n \n \n \n \n \n \n \n
\n )}\n \n )}\n {isTokenVisable && (\n
\n {transformTokenCurrencyIcons()}\n

\n {transformTokensToRsd(\n user.remainingTokens >= 0 ? user.remainingTokens : 0\n )}\n /{transformTokensToRsd(user.totalTokens)}\n

\n
\n \n \n \n \n {t(\"rt_tt_ratio\")}\n \n
\n
\n )}\n
\n\n \n {isTokenVisable && width > 768 && (\n <>\n
\n
\n {\n e.stopPropagation();\n setIsBreakdownOpen(!isBreakdownOpen);\n }}\n >\n {transformTokenCurrencyIcons()}\n

\n {transformTokensToRsd(\n user?.remainingTokens >= 0 ? user?.remainingTokens : 0\n )}\n /{transformTokensToRsd(user?.totalTokens)}\n

\n
\n \n \n \n \n {t(\"rt_tt_ratio\")}\n \n
\n
\n
\n {/*
{}}>\n

Submit

\n \n
*/}\n \n {isBreakdownOpen && (\n \n )}\n \n )}\n {(pathname.match(\"employees\") || pathname.match(\"refunds\")) &&\n width < 767 && (\n toggleSidebarMenu(isSidebarMenuOpen)}\n >\n \n \n \n )}\n {user.authenticatedRole.name === \"Member\" && width >= 768 && (\n \n )}\n {user.authenticatedRole.name === \"Member\" && width < 768 && (\n \n {headerTitle === t(\"history\") ? : }\n {headerTitle === t(\"history\") ? t(\"BTD\") : t(\"history\")}\n \n )}\n {!isEmpty(user?.roles) ? (\n \n ) : (\n
\n )}\n
\n
\n \n
\n {\n e.stopPropagation();\n setIsDropDownOpen(!isDropDownOpen);\n }}\n >\n

\n {getInitals(`${user.firstName} ${user.lastName}`)}\n

\n
\n \n {isDropDownOpen && }\n \n \n \n );\n};\n\nHeader.propTypes = {\n headerTitle: PropTypes.string,\n isTokenVisable: PropTypes.bool,\n openSyncModal: PropTypes.func,\n user: PropTypes.shape(),\n isSidebarMenuOpen: PropTypes.bool,\n toggleSidebarMenu: PropTypes.func\n};\n\nconst mapStateToProps = state => {\n return {\n user: state.app.user,\n isSidebarMenuOpen: state.employees.isSidebarMenuOpen\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n toggleSidebarMenu: isSidebarOpen =>\n dispatch(actionCreators.toggleSidebarMenu(isSidebarOpen))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Header);\n","import Header from './Header'\n\nexport default Header\n","import styled from 'styled-components'\n\nconst ImageUploadStyles = styled.div`\n\twidth: 100%;\n\theight: 100%;\n\tborder-radius: 4px;\n\tposition: relative;\n\toverflow: hidden;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcolor: #373737;\n\tfont-size: 14px;\n\tfont-stretch: normal;\n\tfont-style: normal;\n\tline-height: normal;\n\tletter-spacing: normal;\n\tbackground: #d8d8d8;\n\n\t.fileInputOverlay {\n\t\tposition: absolute;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tbackground: black;\n\t\topacity: 0.7;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tflex-direction: column;\n\t\tcolor: #fff;\n\t\ttransform: translateY(100%);\n\t\ttransition: all 0.3s ease-in-out;\n\t\tcursor: pointer;\n\t}\n\n\t.fileInput {\n\t\topacity: 0;\n\t\tposition: absolute;\n\t\tvisibility: hidden;\n\t\tcursor: pointer;\n\t}\n\n\t.showOverlay {\n\t\ttransform: translateY(0);\n\t}\n\n\t.image {\n\t\t/* width: 100%;\n\t\theight: 100%; */\n\t\tobject-fit: cover;\n\t}\n`\n\nexport default ImageUploadStyles\n","const showOverlay = () => {\n\tconst overlay = document.getElementById('overlay')\n\tif (overlay) {\n\t\toverlay.classList.add('showOverlay')\n\t}\n}\n\nconst hideOverlay = () => {\n\tconst overlay = document.getElementById('overlay')\n\tif (overlay && overlay.classList.contains('showOverlay')) {\n\t\toverlay.classList.remove('showOverlay')\n\t}\n}\n\n\nfunction checkOnCancel(setIsDialogOpen) {\n\tsetIsDialogOpen(false)\n\tdocument.body.onfocus = null\n\thideOverlay()\n}\n\n\nfunction charge(setIsDialogOpen) {\n\tdocument.body.onfocus = () => { setTimeout(checkOnCancel(setIsDialogOpen), 0) }\n}\n\nexport { showOverlay, hideOverlay, checkOnCancel, charge }\n","export const readURL = (file, tagID) => {\n\tif (file) {\n\t\tconst reader = new FileReader()\n\n\t\treader.onload = function t(e) {\n\t\t\tconst imageEl = document.getElementById(tagID)\n\t\t\tif (imageEl) {\n\t\t\t\timageEl.src = e.target.result\n\t\t\t}\n\t\t}\n\n\t\treader.readAsDataURL(file)\n\t}\n}\n","/*eslint-disable*/\nimport React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\n//assets\nimport { AttachmentIcon } from \"../../assets/Icons\";\n//styles\nimport ImageUploadStyles from \"./ImageUploadStyles\";\n//services\nimport { showOverlay, hideOverlay, charge } from \"./imageUpload.services\";\nimport { readURL } from \"../../services/fileReader\";\nimport { getUrl } from \"../../services/imageHandler\";\nimport { isEmpty } from \"../../services/general.utils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ImageUpload = ({ photo, handleChange, name, onBlur, setFieldError }) => {\n const { t } = useTranslation();\n const [isDialogOpen, setIsDialogOpen] = useState(false);\n const [hideText, setHideText] = useState(false);\n\n const handleBlur = () => {\n onBlur(\"photo\", true);\n };\n\n return (\n {\n showOverlay();\n setHideText(true);\n }}\n onMouseLeave={() => {\n setHideText(false);\n if (!isDialogOpen) {\n hideOverlay();\n }\n }}\n >\n {photo &&\n (photo instanceof File ? (\n \n ) : (\n \"photoImage\"\n ))}\n {isEmpty(photo) && !isDialogOpen && !hideText &&

{t(\"no_image\")}

}\n {\n handleBlur();\n setIsDialogOpen(true);\n document.getElementById(\"fileInput\").click();\n }}\n >\n
\n \n
\n {t(\"upload_image\")}\n \n charge(setIsDialogOpen)}\n className=\"fileInput\"\n onChange={e => {\n setIsDialogOpen(false);\n if (e.target.files.length > 0) {\n handleChange(e.target.name, e.target.files[0]);\n }\n hideOverlay();\n }}\n />\n \n );\n};\n\nImageUpload.propTypes = {\n photo: PropTypes.oneOfType([PropTypes.string, PropTypes.shape()]),\n handleChange: PropTypes.func,\n onBlur: PropTypes.func.isRequired,\n name: PropTypes.string\n};\n\nexport default ImageUpload;\n","import ImageUpload from './ImageUpload'\n\nexport default ImageUpload\n","import React, { useCallback } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { useDropzone } from \"react-dropzone\";\nimport styled from \"styled-components\";\n\nimport { ImagePlaceholer, TrashIcon } from \"../../assets/Icons\";\nimport { readURL } from \"../../services/fileReader\";\n\nimport { getUrl } from \"../../services/imageHandler\";\nimport { useTranslation } from \"react-i18next\";\n\nconst DropZoneStyles = styled.div`\n width: 481px;\n height: 190px;\n border: 2px dotted #d5dbdd;\n border-radius: 4px;\n outline: none;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n .text {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n text-align: center;\n color: #afafaf;\n }\n\n .imageContainer {\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n margin: auto;\n position: relative;\n overflow: hidden;\n border-radius: 4px;\n\n .image {\n border-radius: 4px;\n object-fit: cover;\n width: 100%;\n height: 100%;\n }\n\n .trashContainer {\n width: 28px;\n height: 28px;\n position: absolute;\n right: 16px;\n bottom: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n background: #ffffff;\n }\n }\n`;\n\nconst MyDropzone = ({ photo, name, handleChange, onBlur, setIsDelete }) => {\n const { t } = useTranslation();\n\n const onDrop = useCallback(acceptedFiles => {\n // Do something with the files\n if (acceptedFiles[0]) {\n handleChange(name, acceptedFiles[0]);\n }\n }, []);\n const { getRootProps, getInputProps } = useDropzone({\n onDrop,\n multiple: false\n });\n\n const handleBlur = () => {\n onBlur(name, true);\n };\n const removeImage = () => {\n handleChange(name, null);\n setIsDelete && setIsDelete(true);\n };\n\n return (\n \n {!photo && (\n <>\n handleBlur()} />\n \n

\n {t(\"dnd_or\")} \n \n {t(\"click_to_upload\")}\n \n

\n

{t(\"supported_formats\")}

\n \n )}\n {photo && photo instanceof File && (\n
\n \n
removeImage()}>\n \n
\n
\n )}\n {photo && photo instanceof File === false && (\n
\n \n
removeImage()}>\n \n
\n
\n )}\n
\n );\n};\n\nMyDropzone.propTypes = {\n photo: PropTypes.oneOfType([PropTypes.string, PropTypes.shape()]),\n handleChange: PropTypes.func,\n onBlur: PropTypes.func.isRequired,\n name: PropTypes.string,\n setIsDelete: PropTypes.func\n};\n\nexport default MyDropzone;\n","import MyDropZone from './newFileInput'\n\nexport default MyDropZone\n","import styled from 'styled-components'\n\nconst InitialsCircleStyles = styled.div`\n\tmin-width: ${({ size }) => `${size}px`};\n\tmin-height: ${({ size }) => `${size}px`};\n\tbackground: ${({ background }) => background};\n\tcolor: ${({ color }) => color};\n\tborder-radius: ${({ size }) => `${size / 2}px`};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tfont-size: ${({ fontSize }) => `${fontSize}px`};\n\tfont-weight: 500;\n\tfont-stretch: normal;\n\tfont-style: normal;\n\tline-height: normal;\n\tletter-spacing: normal;\n\ttext-transform: uppercase;\n`\n\nexport default InitialsCircleStyles\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport InitialsCircleStyles from './InitialCircleStyles'\n\nimport getInitals from '../../services/getInitals'\n\nconst InitialsCircle = ({\n\tsize = 25,\n\tbackground = '#1568bf',\n\tcolor = '#fff',\n\tfontSize = 48,\n\tvalue,\n\tisFirstLetter = false\n}) => (\n\t\n\t\t{getInitals(value, isFirstLetter)}\n\t\n)\n\nInitialsCircle.propTypes = {\n\tsize: PropTypes.number,\n\tfontSize: PropTypes.number,\n\tvalue: PropTypes.string,\n\tbackground: PropTypes.string,\n\tcolor: PropTypes.string,\n\tisFirstLetter: PropTypes.bool\n}\n\nexport default InitialsCircle\n","import InitialsCircle from './IntitialsCircle'\n\nexport default InitialsCircle\n","/* eslint-disable */\n\nexport const calculateTimeLeft = () => {\n let year = new Date().getFullYear();\n let month = new Date().getMonth() + 1;\n let difference = +new Date(`${month}/26/${year}`) - +new Date();\n let timeLeft = {};\n\n if (difference > 0) {\n timeLeft = {\n days: Math.floor(difference / (1000 * 60 * 60 * 24)),\n hours: Math.floor((difference / (1000 * 60 * 60)) % 24),\n minutes: Math.floor((difference / 1000 / 60) % 60),\n seconds: Math.floor((difference / 1000) % 60)\n };\n }\n\n return Object.keys(timeLeft).length === 0\n ? \"Submit in progress...\"\n : `${timeLeft.days}d ${timeLeft.hours}h ${timeLeft.minutes}m ${timeLeft.seconds}s`;\n};\n","/* eslint-disable */\nimport React, { useState, useEffect } from 'react'\nimport styled from 'styled-components'\nimport {calculateTimeLeft} from './countDown.service'\n\n// const year = new Date().getFullYear();\n// const month = new Date().getMonth() + 1;\n// const date = new Date(`${month}/01/${year}`)\n\nconst SubscribeCountDownStyles = styled.div`\n margin-left: 10px;\n font-style: normal;\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n text-align: center;\n color: #4B4B4B;\n width: 130px;\n display: flex;\n justify-content: space-between;\n`\n\n\nconst SubscribeCountDown = ({isSync}) => {\n const [timer, setTimer] = useState(calculateTimeLeft())\n\n useEffect(() => {\n if (!isSync) {\n const countDown = setTimeout(() => {\n setTimer(calculateTimeLeft());\n }, 1000);\n // Clear timeout if the component is unmounted\n return () => clearTimeout(countDown);\n }\n \n })\n\n \n return (\n \n {isSync ?\n 'Sync in progress...'\n :\n timer\n }\n \n )\n}\n\nexport default SubscribeCountDown\n","import styled from 'styled-components'\n\nconst InputStyles = styled.div`\n\twidth: ${({ width }) => width};\n\theight: ${({ shouldHaveHight }) => shouldHaveHight && '27px'};\n\tmargin: ${({ margin }) => margin};\n\n\t.input {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\twidth: ${({ inputWidth }) => inputWidth};\n\t\tmin-height: ${({ customHeight }) => customHeight};\n\t\toutline: none;\n\t\tborder-radius: 4px;\n\t\tborder: solid 1px #979797;\n\t\tpadding: 0 10px;\n\t\tfont-size: 14px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n -webkit-letter-spacing: normal;\n -moz-letter-spacing: normal;\n -ms-letter-spacing: normal;\n letter-spacing: normal;\n\t\tcolor: #5d5d5d;\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\tinput[type=date] {\n\t\ttext-align: center;\n\t\tfont-family: 'Montserrat', sans-serif;\n\t}\n\n\tinput[type=date]::-webkit-calendar-picker-indicator {\n -webkit-appearance: none;\n\t\tposition: absolute;\n\t\tleft: 5px;\n\t\twidth: 5px;\n\t\tcolor: rgba(0, 0, 0, 0);\n\t\topacity: 0;\n\t\tcursor: pointer;\n\t}\n\n\tinput[type=\"date\"]:before {\n\t\tbackground: none;\n\t\tfont-family: 'FontAwesome';\n\t\tcontent: '\\f073';\n\t\t/* This is the calendar icon in FontAwesome */\n\t\twidth: 15px;\n\t\theight: 100%;\n\t\tposition: absolute;\n\t\tleft: 5px;\n\t\tcursor: pointer;\n\t\tcolor: #999;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\tinput[type=number]::-webkit-clear-button {\n\t\tdisplay: none;\n -webkit-appearance: none;\n\t}\n\n\tinput[type=number]::-webkit-inner-spin-button {\n -webkit-appearance: none;\n display: none;\n\t}\n\n\tinput[type=number] {\n\t\t\t-moz-appearance:textfield;\n\t}\n\n\tinput[type=date]::-webkit-clear-button {\n\t\tdisplay: none;\n -webkit-appearance: none;\n\t}\n\n\tinput[type=date]::-webkit-inner-spin-button {\n -webkit-appearance: none;\n display: none;\n\t}\n`\n\nexport default InputStyles\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport InputStyles from './InputStyles'\n\nconst Input = ({\n\ttype = 'text',\n\tonBlur,\n\tstyles,\n\tshouldHaveHight = true,\n\tplaceholder,\n\tcustomCssClass,\n\tpattern,\n\trows,\n\twidth,\n\tmargin,\n\tvalue,\n\tname,\n\tonChange,\n\tmax = Infinity,\n\tinputWidth = \"100%\",\n\tonKeyDown = () => { { } },\n\tcustomHeight = \"27px\",\n\tmin = 0,\n\tdisabled = false\n}) => (\n\t\n\t\t\n\t\n)\n\nInput.propTypes = {\n\tstyles: PropTypes.shape(),\n\tcustomCssClass: PropTypes.string,\n\ttype: PropTypes.string,\n\tshouldHaveHight: PropTypes.bool,\n\tpattern: PropTypes.string,\n\tplaceholder: PropTypes.string,\n\twidth: PropTypes.string,\n\tmargin: PropTypes.string,\n\tname: PropTypes.string,\n\trows: PropTypes.number,\n\tvalue: PropTypes.oneOfType([\n\t\tPropTypes.string,\n\t\tPropTypes.number\n\t]),\n\tonChange: PropTypes.func,\n\tonBlur: PropTypes.func,\n\tmax: PropTypes.number\n}\n\nexport default Input\n","import Input from './Input'\n\nexport default Input\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nconst InputLabelStyles = styled.p`\n font-size: ${({ fontSize }) => fontSize};\n font-weight: 300;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n\tcolor: #5d5d5d;\n\tmargin: ${({ margin }) => margin};\n`\n\nconst InputLabel = ({ label, margin, fontSize = '12px', customCssClass, shouldHaveColon = true }) => (\n\t\n\t\t{label}{shouldHaveColon ? ':' : ''}\n\t\n)\n\nInputLabel.propTypes = {\n\tlabel: PropTypes.string,\n\tmargin: PropTypes.string,\n\tcustomCssClass: PropTypes.string,\n\tshouldHaveColon: PropTypes.bool,\n\tfontSize: PropTypes.string\n}\n\n\nexport default InputLabel\n","import InputLabel from './InputLabel'\n\nexport default InputLabel\n","import styled from 'styled-components'\n\nconst PhoneNumberInputStyles = styled.div`\n\twidth: 100%;\n\theight: 27px;\n\n\t.react-tel-input{\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t\t input {\n\t\t\twidth: 100% !important;\n\t\t\theight: 100% !important;\n\t\t\toutline: none !important;\n\t\t\tborder-radius: 4px !important;\n\t\t\tborder: solid 1px #979797 !important;\n\t\t\tfont-size: 14px !important;\n\t\t\tfont-weight: 500 !important;\n\t\t\tfont-stretch: normal !important;\n\t\t\tfont-style: normal !important;\n\t\t\tline-height: normal !important;\n\t\t\t-webkit-letter-spacing: normal !important;\n\t\t\t-moz-letter-spacing: normal !important;\n\t\t\t-ms-letter-spacing: normal !important;\n\t\t\tletter-spacing: normal !important;\n\t\t\tcolor: #5d5d5d !important;\n\t\t\tposition: relative !important;\n\t\t }\n\n\t\t .flag-dropdown {\n\t\t\t\tborder: solid 1px #979797 !important;\n\t\t\t\tborder-radius: 4px 0 0 4px !important;\n\n\t\t\t\t.selected-flag {\n\t\t\t\t\tborder-radius: 4px 0 0 4px !important;\n\t\t\t\t}\n\t\t\t}\n\t}\n`\n\nexport default PhoneNumberInputStyles\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport 'react-phone-input-2/lib/style.css'\nimport PhoneInput from 'react-phone-input-2'\n\nimport PhoneNumberInputStyles from './PhoneNumberInputStyles'\n\nconst PhoneNumberInput = ({ defaultCountry = 'rs', value = '', name, onChange, onBlur }) => (\n\t\n\t\t onBlur && onBlur(name)}\n\t\t/>\n\t\n)\n\nPhoneNumberInput.propTypes = {\n\tdefaultCountry: PropTypes.string,\n\tvalue: PropTypes.string,\n\tname: PropTypes.string,\n\tonChange: PropTypes.func,\n\tonBlur: PropTypes.func\n}\n\nexport default PhoneNumberInput\n","import PhoneNumberInput from './PhoneNumberInput'\n\nexport default PhoneNumberInput\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nconst itemRenderer = ({\n item,\n itemIndex,\n props: { valueField, labelField },\n state,\n methods\n}) => (\n methods.addItem(item)}\n >\n \n {item[labelField]}\n \n \n);\n\nitemRenderer.propTypes = {\n item: PropTypes.shape(),\n methods: PropTypes.shape(),\n props: PropTypes.shape({\n valueField: PropTypes.string,\n labelField: PropTypes.string\n }),\n state: PropTypes.shape(),\n itemIndex: PropTypes.string\n};\n\nexport default itemRenderer;\n","import styled from \"styled-components\";\n\nconst SelectInputStyles = styled.div`\n width: ${({ containerShouldHaveFullWidth }) =>\n containerShouldHaveFullWidth ? \"100%\" : \"auto\"};\n height: ${({ shouldHaveHight }) => shouldHaveHight && \"27px\"};\n\n .react-dropdown-select {\n min-height: 27px !important;\n max-width: ${({ shouldHaveFullWidth }) =>\n shouldHaveFullWidth ? \"100%\" : \"202px\"};\n height: ${({ shouldHaveFullHeight }) =>\n shouldHaveFullHeight ? \"100% !important\" : \"auto\"};\n min-width: ${({ minWidth }) => minWidth};\n width: 100%;\n border-radius: 4px;\n border: 1px solid #979797;\n box-shadow: none !important;\n border-color: #979797 !important;\n cursor: pointer;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n display: flex;\n align-items: center;\n\n .react-dropdown__control,\n .react-dropdown__control--is-focused,\n .react-dropdown__control--is-open {\n height: ${({ customHeight }) => customHeight};\n min-height: ${({ customHeight }) => customHeight} !important;\n width: 100%;\n border: 0;\n cursor: pointer;\n\n .react-dropdown__indicators {\n height: ${({ customHeight }) => customHeight};\n min-height: ${({ customHeight }) => customHeight} !important;\n }\n\n .react-dropdown__value-container {\n top: ${({ customValuePosition }) => customValuePosition};\n }\n\n .react-dropdown__value-container\n .react-dropdown__value-container--has-value {\n height: ${({ customHeight }) => customHeight};\n min-height: ${({ customHeight }) => customHeight} !important;\n top: -8%;\n }\n\n .react-dropdown__indicator .react-dropdown__dropdown-indicator {\n height: ${({ customHeight }) => customHeight};\n min-height: ${({ customHeight }) => customHeight} !important;\n }\n }\n /* overflow-x: hidden; */\n\n .react-dropdown-select-content {\n height: 100%;\n flex-wrap: nowrap;\n text-overflow: ellipsis;\n overflow-x: hidden;\n width: 70px;\n white-space: nowrap;\n\n input {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n }\n }\n\n .react-dropdown-select-dropdown {\n max-height: 150px;\n }\n\n .itemContainer {\n &:hover {\n background: #1568bf;\n .dropDownItem {\n color: #fff;\n }\n }\n\n .dropDownItem {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n }\n }\n }\n`;\n\nexport default SelectInputStyles;\n","const onChangeParam = (getNameValue, values) => {\n\tif (getNameValue) {\n\t\tif (values[0]) {\n\t\t\treturn values[0].name\n\t\t}\n\t\treturn undefined\n\t}\n\tif (values[0]) {\n\t\treturn values[0].id\n\t}\n\treturn undefined\n}\n\nconst getSelectedValue = (selectedValues, value) => {\n\tconst selectedValue = selectedValues.find(sv => {\n\t\tif (typeof value === 'number') {\n\t\t\treturn sv.id === value\n\t\t}\n\t\tif (typeof value === 'string') {\n\t\t\tif (sv.name.toLowerCase() === value.toLowerCase()) {\n\t\t\t\treturn sv.name.toLowerCase() === value.toLowerCase()\n\t\t\t}\n\t\t\treturn undefined\n\t\t}\n\t\treturn undefined\n\t})\n\n\treturn selectedValue\n}\n\nexport { onChangeParam, getSelectedValue }\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"react-select\";\n\nimport itemRenderer from \"./itemRendered\";\n\nimport SelectInputStyles from \"./SelectInputStyles\";\n\nimport { getSelectedValue } from \"./selectInput.services\";\nimport { useTranslation } from \"react-i18next\";\n\nconst SelectInput = ({\n value,\n selectedValues,\n disabled = false,\n getNameValue = false,\n onChange = () => {},\n handleChange,\n onBlur,\n name,\n defaultOption,\n customId,\n shouldHaveHight = true,\n options = [],\n clearable = false,\n placeholder = \"Select Item\",\n shouldHaveMinWidth = false,\n customHeight = \"100%\",\n customValuePosition = \"0\",\n fetchMoreData = () => {},\n shouldHaveFullWidth,\n minWidth = \"auto\",\n isClearable = false,\n menuPlacement,\n searchable = true,\n shouldHaveFullHeight = false\n}) => {\n const { t } = useTranslation();\n\n const getValues = () => {\n if (defaultOption) {\n return [options[defaultOption]];\n }\n if (selectedValues && selectedValues.length > 0) {\n return value ? [getSelectedValue(selectedValues, value)] : undefined;\n }\n if (!selectedValues && value) {\n return value;\n }\n return [];\n };\n\n /**\n * Handles on scroll event in multiselect dropdown.\n * Fires when list is scrolled to the end.\n * Fetches more data for the list.\n * Request is debounced.\n */\n const handleOnScroll = () => {\n setTimeout(() => {\n fetchMoreData();\n }, 300);\n };\n\n return (\n \n options[\"name\"]}\n getOptionValue={options => options[\"id\"]}\n isDisabled={disabled}\n isSearchable={searchable}\n searchBy=\"name\"\n dropdownPosition=\"auto\"\n menuPlacement={menuPlacement}\n onChange={values => {\n handleChange(values);\n }}\n onBlur={onBlur}\n itemRenderer={\n itemRenderer\n ? (item, itemIndex, props, state, methods) =>\n itemRenderer(item, itemIndex, props, state, methods)\n : undefined\n }\n isClearable={isClearable}\n />\n \n );\n};\n\nSelectInput.propTypes = {\n value: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.string,\n PropTypes.shape()\n ]),\n selectedValues: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.shape())\n ]),\n onChange: PropTypes.func,\n disabled: PropTypes.bool,\n customId: PropTypes.string,\n handleChange: PropTypes.func,\n defaultOption: PropTypes.number,\n onBlur: PropTypes.func,\n shouldHaveHight: PropTypes.bool,\n name: PropTypes.string,\n getNameValue: PropTypes.bool,\n options: PropTypes.arrayOf(PropTypes.shape()).isRequired\n};\n\nexport default SelectInput;\n","import SelectInput from './SelectInput'\n\nexport default SelectInput\n","import styled from \"styled-components\";\n\nconst LocationsMultiselectInputStyles = styled.div`\n width: 100%;\n height: ${({ shouldHaveHight }) => shouldHaveHight && \"27px\"};\n\n .react-dropdown-select {\n min-height: 27px !important;\n max-width: ${({ shouldHaveFullWidth }) =>\n shouldHaveFullWidth ? \"100%\" : \"202px\"};\n height: 100% !important;\n width: 100%;\n border-radius: 4px;\n border: 1px solid #979797;\n box-shadow: none !important;\n border-color: #979797 !important;\n cursor: pointer;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n display: flex;\n align-items: center;\n\n .react-dropdown__menu {\n position: absolute;\n z-index: 3;\n }\n\n .react-dropdown__control,\n .react-dropdown__control--is-focused,\n .react-dropdown__control--is-open {\n height: ${({ customInputFieldHeight }) => customInputFieldHeight};\n min-height: ${({ customHeight }) => customHeight} !important;\n width: 100%;\n border: 0;\n cursor: pointer;\n\n .react-dropdown__indicators {\n height: ${({ customHeight }) => customHeight};\n min-height: ${({ customHeight }) => customHeight} !important;\n }\n\n .react-dropdown__value-container\n .react-dropdown__value-container--has-value {\n height: ${({ customHeight }) => customHeight};\n min-height: ${({ customHeight }) => customHeight} !important;\n }\n\n .react-dropdown__indicator .react-dropdown__dropdown-indicator {\n height: ${({ customHeight }) => customHeight};\n min-height: ${({ customHeight }) => customHeight} !important;\n }\n }\n\n & > div {\n min-width: ${({ shouldHaveFullWidth }) =>\n shouldHaveFullWidth ? \"100%\" : \"200px\"};\n }\n /* overflow-x: hidden; */\n\n .react-dropdown-select-content {\n height: 100%;\n flex-wrap: nowrap;\n text-overflow: ellipsis;\n overflow-x: hidden;\n width: 70px;\n white-space: nowrap;\n\n input {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n }\n }\n\n .react-dropdown-select-dropdown {\n max-height: 150px;\n }\n\n .itemContainer {\n &:hover {\n background: #1568bf;\n .dropDownItem {\n color: #fff;\n }\n }\n\n .dropDownItem {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n }\n }\n }\n`;\n\nexport default LocationsMultiselectInputStyles;\n","import React from \"react\";\nimport Select from \"react-select\";\nimport PropTypes from \"prop-types\";\n\n// Components\nimport LocationsMultiselectInputStyles from \"./LocationsMultiselectInputStyles\";\nimport itemRenderer from \"../selectInput/itemRendered\";\nimport { useTranslation } from \"react-i18next\";\n\nconst LocationsMultiselectInput = ({\n value,\n name,\n options,\n selectedValues,\n shouldHaveHight = false,\n shouldHaveFullWidth = false,\n handleChange,\n handleInputChange,\n isDisabled = false,\n fetchMoreData,\n customHeight = \"100%\",\n customInputFieldHeight = \"100%\"\n}) => {\n const { t } = useTranslation();\n\n /**\n * Handles on scroll event in multiselect dropdown.\n * Fires when list is scrolled to the end.\n * Fetches more data for the list.\n */\n const handleOnScroll = () => {\n setTimeout(() => {\n fetchMoreData();\n }, 100);\n };\n\n /**\n * Handles input change.\n * Request is debounced.\n * @param {string} searchText\n */\n const debounceInputChange = searchText => {\n setTimeout(() => {\n handleInputChange(searchText);\n }, 500);\n };\n\n return (\n \n options[\"name\"]}\n getOptionValue={options => options[\"id\"]}\n isMulti\n isDisabled={isDisabled}\n name={name}\n options={options}\n searchable\n searchBy=\"name\"\n dropdownPosition=\"auto\"\n onMenuScrollToBottom={handleOnScroll}\n onInputChange={debounceInputChange}\n onChange={(values, action) => handleChange(values, action)}\n itemRenderer={\n itemRenderer\n ? (item, itemIndex, props, state, methods) =>\n itemRenderer(item, itemIndex, props, state, methods)\n : undefined\n }\n />\n \n );\n};\n\nLocationsMultiselectInput.propTypes = {\n name: PropTypes.string,\n options: PropTypes.array,\n selectedValues: PropTypes.array,\n shouldHaveHight: PropTypes.bool,\n shouldHaveFullWidth: PropTypes.bool,\n handleChange: PropTypes.func,\n handleInputChange: PropTypes.func,\n isDisabled: PropTypes.bool,\n fetchMoreData: PropTypes.func\n};\n\nexport default LocationsMultiselectInput;\n","import LocationsMultiselectInput from './LocationsMultiselectInput'\n\nexport default LocationsMultiselectInput\n","import styled from \"styled-components\";\n\nconst TypesMultiselectInputStyles = styled.div`\n width: 100%;\n height: ${({ shouldHaveHight }) => shouldHaveHight && \"27px\"};\n\n .react-dropdown-select {\n min-height: 27px !important;\n max-width: ${({ shouldHaveFullWidth }) =>\n shouldHaveFullWidth ? \"100%\" : \"202px\"};\n height: 100% !important;\n width: 100%;\n border-radius: 4px;\n border: 1px solid #979797;\n box-shadow: none !important;\n border-color: #979797 !important;\n cursor: pointer;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n display: flex;\n align-items: center;\n\n .react-dropdown__control,\n .react-dropdown__control--is-focused,\n .react-dropdown__control--is-open {\n height: ${({ customInputFieldHeight }) => customInputFieldHeight};\n min-height: ${({ customHeight }) => customHeight} !important;\n width: 100%;\n border: 0;\n cursor: pointer;\n\n .react-dropdown__indicators {\n height: ${({ customHeight }) => customHeight};\n min-height: ${({ customHeight }) => customHeight} !important;\n }\n\n .react-dropdown__value-container\n .react-dropdown__value-container--has-value {\n height: ${({ customHeight }) => customHeight};\n min-height: ${({ customHeight }) => customHeight} !important;\n }\n\n .react-dropdown__indicator .react-dropdown__dropdown-indicator {\n height: ${({ customHeight }) => customHeight};\n min-height: ${({ customHeight }) => customHeight} !important;\n }\n }\n\n & > div {\n min-width: ${({ shouldHaveFullWidth }) =>\n shouldHaveFullWidth ? \"100%\" : \"200px\"};\n }\n /* overflow-x: hidden; */\n\n .react-dropdown-select-content {\n height: 100%;\n flex-wrap: nowrap;\n text-overflow: ellipsis;\n overflow-x: hidden;\n width: 70px;\n white-space: nowrap;\n\n input {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n }\n }\n\n .react-dropdown-select-dropdown {\n max-height: 150px;\n }\n\n .itemContainer {\n &:hover {\n background: #1568bf;\n .dropDownItem {\n color: #fff;\n }\n }\n\n .dropDownItem {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n }\n }\n }\n`;\n\nexport default TypesMultiselectInputStyles;\n","import React from \"react\";\nimport Select from \"react-select\";\nimport PropTypes from \"prop-types\";\n// Components\nimport TypesMultiselectInputStyles from \"./TypesMultiselectInput.styles\";\nimport itemRenderer from \"../selectInput/itemRendered\";\nimport { useTranslation } from \"react-i18next\";\n\nconst TypesMultiselectInput = ({\n name,\n options,\n selectedValues,\n shouldHaveHight = false,\n shouldHaveFullWidth = false,\n handleChange,\n isDisabled = false,\n customHeight = \"100%\",\n customInputFieldHeight = \"100%\"\n}) => {\n const { t } = useTranslation();\n return (\n \n options[\"name\"]}\n getOptionValue={options => options[\"key\"]}\n isMulti\n isDisabled={isDisabled}\n name={name}\n options={options}\n searchable\n searchBy=\"name\"\n dropdownPosition=\"auto\"\n onChange={(values, action) => handleChange(values, action)}\n itemRenderer={\n itemRenderer\n ? (item, itemIndex, props, state, methods) =>\n itemRenderer(item, itemIndex, props, state, methods)\n : undefined\n }\n />\n \n );\n};\n\nTypesMultiselectInput.propTypes = {\n name: PropTypes.string,\n options: PropTypes.array,\n selectedValues: PropTypes.array,\n shouldHaveHight: PropTypes.bool,\n shouldHaveFullWidth: PropTypes.bool,\n handleChange: PropTypes.func,\n isDisabled: PropTypes.bool,\n customHeight: PropTypes.string,\n customInputFieldHeight: PropTypes.string\n};\n\nexport default TypesMultiselectInput;\n","import TypesMultiselectInput from './TypesMultiselectInput';\n\nexport default TypesMultiselectInput;","import styled from \"styled-components\";\n\nconst MultiselectInputStyles = styled.div`\n width: ${({ containerShouldHaveFullWidth }) =>\n containerShouldHaveFullWidth ? \"100%\" : \"auto\"};\n height: ${({ shouldHaveHight }) => shouldHaveHight && \"27px\"};\n\n .react-dropdown-select {\n min-height: 27px !important;\n max-width: ${({ shouldHaveFullWidth }) =>\n shouldHaveFullWidth ? \"100%\" : \"202px\"};\n height: ${({ shouldHaveFullHeight }) =>\n shouldHaveFullHeight ? \"100% !important\" : \"auto\"};\n width: 100%;\n border-radius: 4px;\n border: 1px solid #979797;\n box-shadow: none !important;\n border-color: #979797 !important;\n cursor: pointer;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n display: flex;\n align-items: center;\n\n .react-dropdown__control,\n .react-dropdown__control--is-focused,\n .react-dropdown__control--is-open {\n min-height: ${({ customHeight }) => customHeight} !important;\n height: ${({ customInputFieldHeight }) => customInputFieldHeight};\n width: 100%;\n border: 0;\n cursor: pointer;\n\n .react-dropdown__indicators {\n height: ${({ customHeight }) => customHeight};\n min-height: ${({ customHeight }) => customHeight} !important;\n }\n\n .react-dropdown__value-container\n .react-dropdown__value-container--has-value {\n height: ${({ customHeight }) => customHeight};\n min-height: ${({ customHeight }) => customHeight} !important;\n }\n\n .react-dropdown__indicator .react-dropdown__dropdown-indicator {\n height: ${({ customHeight }) => customHeight};\n min-height: ${({ customHeight }) => customHeight} !important;\n }\n }\n\n & > div {\n min-width: ${({ shouldHaveFullWidth }) =>\n shouldHaveFullWidth ? \"100%\" : \"200px\"};\n }\n /* overflow-x: hidden; */\n\n .react-dropdown-select-content {\n height: 100%;\n flex-wrap: nowrap;\n text-overflow: ellipsis;\n overflow-x: hidden;\n width: 70px;\n white-space: nowrap;\n\n input {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n }\n }\n\n .react-dropdown-select-dropdown {\n max-height: 150px;\n }\n\n .react-dropdown__menu-list--is-multi {\n height: ${({ dropdownMenuHeight }) => dropdownMenuHeight || \"100%\"};\n }\n\n .react-dropdown__menu {\n position: absolute;\n z-index: 3;\n }\n\n .itemContainer {\n &:hover {\n background: #1568bf;\n .dropDownItem {\n color: #fff;\n }\n }\n\n .dropDownItem {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n }\n }\n }\n`;\n\nexport default MultiselectInputStyles;\n","function debounce(func, wait, immediate) {\n var timeout;\n return function() {\n var context = this,\n args = arguments;\n clearTimeout(timeout);\n if (immediate && !timeout) func.apply(context, args);\n timeout = setTimeout(function() {\n timeout = null;\n if (!immediate) func.apply(context, args);\n }, wait);\n };\n}\n\nexport default debounce;\n","import React from \"react\";\nimport Select from \"react-select\";\nimport PropTypes from \"prop-types\";\n\n// Components\nimport MultiselectInputStyles from \"./MultiselectInputStyles\";\nimport itemRenderer from \"../selectInput/itemRendered\";\nimport debounce from \"../../utils/helpers/debounce\";\n\nconst MultiselectInput = ({\n value,\n name,\n options,\n selectedValues,\n shouldHaveHeight = false,\n shouldHaveFullWidth = false,\n containerShouldHaveFullWidth = false,\n shouldHaveFullHeigth = false,\n handleChange,\n isDisabled = false,\n placeholder = \"Select items\",\n fetchMoreData = () => {},\n handleInputChange = () => {},\n customHeight = \"100%\",\n customInputFieldHeight = \"100%\",\n dropdownMenuHeight = \"100%\",\n hasMore = false\n}) => {\n /**\n * Handles on scroll event in multiselect dropdown.\n * Fires when list is scrolled to the end.\n * Fetches more data for the list.\n * Request is debounced.\n */\n const handleOnScroll = () => {\n setTimeout(() => {\n fetchMoreData();\n }, 300);\n };\n\n /**\n * Handles input change.\n * Request is debounced.\n * @param {string} searchText\n */\n const debounceInputChange = debounce(handleInputChange, 500);\n\n return (\n \n options[\"name\"]}\n getOptionValue={options => options[\"id\"]}\n isMulti\n isDisabled={isDisabled}\n name={name}\n options={options}\n dropdownPosition=\"auto\"\n onInputChange={debounceInputChange}\n onChange={(values, action) => handleChange(values, action)}\n itemRenderer={\n itemRenderer\n ? (item, itemIndex, props, state, methods) =>\n itemRenderer(item, itemIndex, props, state, methods)\n : undefined\n }\n hasMore={hasMore}\n onMenuScrollToBottom={handleOnScroll}\n />\n \n );\n};\n\nMultiselectInput.propTypes = {\n name: PropTypes.string,\n options: PropTypes.array,\n selectedValues: PropTypes.array,\n shouldHaveHight: PropTypes.bool,\n shouldHaveFullWidth: PropTypes.bool,\n handleChange: PropTypes.func,\n handleInputChange: PropTypes.func,\n isDisabled: PropTypes.bool,\n fetchMoreData: PropTypes.func\n};\n\nexport default MultiselectInput;\n","import MultiselectInput from './MultiselectInput'\n\nexport default MultiselectInput\n","import styled from 'styled-components'\n\nconst SearchInputStyles = styled.div`\n width: ${({ searchWrapperWidth }) => searchWrapperWidth};\n\n .MuiIconButton-root {\n display: none;\n }\n\n .MuiInputBase-root {\n color: ${({ placeholderColor }) => placeholderColor};\n }\n\n .searchEmployees {\n background: #F7F9FC;\n border-radius: 0 8px 8px 0;\n box-shadow: 0 0; \n padding-left: 0;\n }\n`\n\nexport default SearchInputStyles;\n","import React, { useRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport SearchBar from \"material-ui-search-bar\";\nimport SearchIcon from \"@material-ui/icons/Search\";\n\nimport SearchInputStyles from \"./SearchInputStyles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst SHOW_SEARCH_ICON = false;\nconst SEARCH_TIMER_IN_MILISEC = 500;\nlet searchTimer = null;\n\nconst SearchInput = ({\n fetchData,\n setSearch,\n search,\n setPagginationPage,\n customClass = \"\",\n style = { maxWidth: 400 },\n useTimeout = true,\n searchWrapperWidth = \"initial\",\n placeholder = \"Search\",\n placeholderColor = \"\"\n}) => {\n const { t } = useTranslation();\n const searchInputRef = useRef(null);\n\n const onChangeSearch = searchText => {\n setSearch(searchText);\n\n if (useTimeout) {\n if (searchTimer) {\n clearTimeout(searchTimer);\n }\n searchTimer = setTimeout(() => {\n setPagginationPage(1);\n fetchData(searchText, 1);\n }, SEARCH_TIMER_IN_MILISEC);\n }\n };\n\n return (\n \n : <>}\n searchIcon={SHOW_SEARCH_ICON ? : <>}\n onCancelSearch={SHOW_SEARCH_ICON ? () => fetchData() : undefined}\n onRequestSearch={() => fetchData()}\n value={search}\n onChange={onChangeSearch}\n style={style}\n placeholder={t(placeholder)}\n />\n \n );\n};\n\nSearchInput.propTypes = {\n fetchData: PropTypes.func.isRequired,\n setSearch: PropTypes.func.isRequired,\n search: PropTypes.string,\n setPagginationPage: PropTypes.func\n};\n\nexport default SearchInput;\n","import SearchInput from './SearchInput'\n\nexport default SearchInput\n","import styled from \"styled-components\";\n\nconst SidebarMenuStyles = styled.div`\n width: 210px;\n height: 100vh;\n background: #2c2e38;\n position: fixed;\n overflow: hidden;\n background-image: linear-gradient(to bottom, #1568bf, #1e3c72);\n z-index: 100;\n\n .sidebarBanner {\n position: absolute;\n }\n\n .lngDropdown {\n display: flex;\n justify-content: center;\n }\n\n .darkOverlay {\n width: 100%;\n height: 100%;\n position: absolute;\n mix-blend-mode: multiply;\n background-color: rgba(9, 102, 194, 0.25);\n }\n\n .logoContainer {\n width: 100%;\n height: 90px;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n margin-right: 20px;\n\n .closeSidebarMenuButton {\n margin-right: 10px;\n color: white;\n font-weight: 800;\n background: transparent;\n border: transparent;\n outline: none;\n padding: 5px;\n cursor: pointer;\n }\n\n .logo {\n color: #fff;\n font-size: 24px;\n font-weight: 600;\n\n path {\n fill: white;\n }\n }\n }\n .sidebarTabsContainer {\n height: 100%;\n width: 100%;\n position: relative;\n }\n\n .logoutTab {\n position: absolute;\n bottom: 15.416%;\n justify-content: flex-start !important;\n }\n\n .navLink {\n width: 100%;\n height: 50px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .navLink:hover {\n background: #f1f1f426;\n }\n\n .isActive {\n background: #f1f1f426;\n }\n\n @media screen and (max-width: 767px) {\n display: ${({ display }) => display};\n }\n`;\n\nexport default SidebarMenuStyles;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n\nconst SidebarMenuTabStyles = styled.div`\n width: 100%;\n height: 50px;\n display: flex;\n align-items: center;\n padding: 0 10px 0 32px;\n cursor: pointer;\n\n .linkName {\n margin-left: ${({ paraIconLeftMargin }) => paraIconLeftMargin};\n color: #fff;\n font-size: 14px;\n }\n`;\n\nconst SidebarMenuTab = ({\n linkName,\n Icon,\n active = false,\n customCssClass,\n paraIconLeftMargin,\n onClick\n}) => (\n \n {Icon && }\n

{linkName}

\n \n);\n\nSidebarMenuTab.propTypes = {\n linkName: PropTypes.string,\n Icon: PropTypes.elementType,\n active: PropTypes.bool,\n customCssClass: PropTypes.string,\n paraIconLeftMargin: PropTypes.string,\n onClick: PropTypes.func\n};\n\nexport default SidebarMenuTab;\n","import SidebarMenuTab from './SidebarMenuTab'\n\nexport default SidebarMenuTab\n","import {\n DashboardIcon,\n BenefitsIcon,\n EmployeesIcon,\n SettingsIcon\n} from \"../assets/Icons\";\n\nconst admin = [\n {\n path: \"/\",\n title: \"Dashboard\",\n icon: DashboardIcon\n },\n {\n path: \"/providers\",\n title: \"Providers\",\n icon: BenefitsIcon\n },\n {\n path: \"/activity\",\n title: \"Activity\",\n icon: BenefitsIcon\n },\n {\n path: \"/companies\",\n title: \"Companies\",\n icon: BenefitsIcon\n },\n {\n path: \"/users\",\n title: \"Users\",\n icon: EmployeesIcon\n },\n {\n path: \"/settings\",\n title: \"Settings\",\n icon: SettingsIcon\n },\n {\n path: \"/notifications\",\n title: \"Notifications\",\n icon: DashboardIcon\n }\n];\n\nconst hr = [\n {\n path: \"/\",\n title: \"Dashboard\",\n icon: DashboardIcon\n },\n {\n path: \"/benefits\",\n title: \"Benefits\",\n icon: BenefitsIcon\n },\n {\n path: \"/company-benefits\",\n title: \"Company Benefits\",\n icon: BenefitsIcon\n },\n {\n path: \"/employees\",\n title: \"Employees\",\n icon: EmployeesIcon\n },\n {\n path: \"/settings\",\n title: \"Settings\",\n icon: SettingsIcon\n }\n];\n\nexport const navLogos = {\n Dashboard: DashboardIcon,\n Benefits: BenefitsIcon,\n Providers: BenefitsIcon,\n Activity: BenefitsIcon,\n Companies: BenefitsIcon,\n Users: EmployeesIcon,\n Settings: SettingsIcon,\n Notifications: DashboardIcon,\n \"Company Benefits\": BenefitsIcon,\n Employees: EmployeesIcon,\n Refunds: EmployeesIcon\n};\n\nexport const navigationConfig = {\n admin: admin,\n hr: hr\n};\n","import React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { NavLink, useHistory, useLocation } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n// assets\nimport { EmployeesIcon, LogoutIcon } from \"../../assets/Icons\";\n//components\nimport { CompanyThemeLogo } from \"../../components\";\n//styles\nimport SidebarMenuStyles from \"./SidebarMenuStyles\";\nimport SidebarMenuTab from \"./sidebarMenuTab\";\n//constants\nimport { BENEFIT_ROLE } from \"../../constants/localStorage.constants\";\n//config\nimport { navigationConfig, navLogos } from \"../../config/navigation.config\";\n//actions\nimport * as actionCreators from \"../../actions/app.actions\";\nimport * as actionHRCreators from \"../../actions/hr/employees.actions\";\n//services\nimport { filterArrayByValueOfKey, isEmpty } from \"../../services/general.utils\";\n//hooks\nimport useWindowDimensions from \"../../hooks/useWindowDimensions\";\nimport { useIsAuthenticated, useMsal } from \"@azure/msal-react\";\nimport { apiService } from \"../../services/api/api.service\";\nimport { useTranslation } from \"react-i18next\";\nimport { LanguageDropdown } from \"../locales/LanguageDropdown\";\n\nconst SidebarMenu = ({\n logout,\n user,\n isSidebarMenuOpen,\n toggleSidebarMenu\n}) => {\n const { t } = useTranslation();\n const history = useHistory();\n const { pathname } = useLocation();\n const { width } = useWindowDimensions();\n const { instance } = useMsal();\n const isAuthenticated = useIsAuthenticated();\n const location = useLocation();\n\n const [listOfLinks, setLitOfLinks] = useState([]);\n\n const pathForEmployeeAndRefund =\n pathname.match(\"employees\") || pathname.match(\"refunds\");\n\n const isShowSidebar =\n isEmpty(pathForEmployeeAndRefund) ||\n (!isEmpty(pathForEmployeeAndRefund) && (isSidebarMenuOpen || width >= 767));\n\n const refundPage = {\n path: \"/refunds\",\n title: \"Refunds\"\n };\n\n const getListOfCompaniesThatHaveRefunds = async () => {\n if (!user?.authenticatedRole?.key) return;\n if (user?.authenticatedRole?.key === \"member\") return;\n\n try {\n const response = await apiService.get(\n \"/company/get-all-refund-companies\"\n );\n const companyIds = response.data.items.map(company => company.id);\n\n const links = JSON.parse(\n JSON.stringify(navigationConfig[user?.authenticatedRole?.key])\n );\n\n const shouldShowRefundPage =\n user?.authenticatedRole?.key === \"hr\" &&\n companyIds.includes(user.companyId) &&\n !links.includes(refundPage);\n\n if (shouldShowRefundPage) links.push(refundPage);\n\n setLitOfLinks(links);\n } catch (error) {\n console.log(\"Unable to get companies that have refunds\", error);\n }\n };\n\n useEffect(() => {\n getListOfCompaniesThatHaveRefunds();\n }, [user?.authenticatedRole?.key, location]);\n\n return (\n /**\n * SidebarMenu is closed by default when screen size < 767px in the HR/Employees page\n */\n isShowSidebar && (\n \n
\n
\n {user?.authenticatedRole && (\n <>\n {!isEmpty(pathForEmployeeAndRefund) && width < 767 && (\n toggleSidebarMenu(isSidebarMenuOpen)}\n >\n {\" \"}\n X{\" \"}\n \n )}\n history.push(\"/\")}\n style={{ cursor: \"pointer\" }}\n >\n \n
\n \n )}\n
\n {user && user?.authenticatedRole && (\n
\n {listOfLinks.map(link => {\n return (\n \n \n \n );\n })}\n {\n localStorage.removeItem(BENEFIT_ROLE);\n logout();\n isAuthenticated && instance.logoutPopup();\n history.replace(\"/\");\n }}\n />\n
\n )}\n
\n )\n );\n};\n\nSidebarMenu.propTypes = {\n is404: PropTypes.bool,\n isVisible: PropTypes.bool,\n allowedModules: PropTypes.arrayOf(PropTypes.shape()),\n path: PropTypes.string,\n isSidebarMenuOpen: PropTypes.bool,\n toggleSidebarMenu: PropTypes.func,\n logout: PropTypes.func\n};\n\nconst mapStateToProps = state => {\n return {\n user: state.app.user,\n isSidebarMenuOpen: state.employees.isSidebarMenuOpen\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n logout: () => dispatch(actionCreators.logout()),\n toggleSidebarMenu: isSidebarOpen =>\n dispatch(actionHRCreators.toggleSidebarMenu(isSidebarOpen))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SidebarMenu);\n","import SidebarMenu from './SidebarMenu'\n\nexport default SidebarMenu\n","import styled from 'styled-components'\n\nconst TextAndLineStyles = styled.div`\n display: flex;\n align-items: center;\n margin: ${({ margin }) => margin};\n padding: ${({ padding }) => padding};\n\n .text {\n font-size: 16px;\n font-weight: 500;\n margin-right: ${({ title }) => (title ? '30px' : '0')};\n color: #1568bf;\n text-transform: uppercase;\n white-space: nowrap;\n }\n\n .line {\n width: 100%;\n border: 0.5px solid #d8d8d8;\n }\n`\n\nexport default TextAndLineStyles\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport TextAndLineStyles from \"./TextAndLineStyles\";\n\nconst TextAndLine = ({ children, title, margin = \"0\", padding = \"0\" }) => (\n \n

{title}

\n
\n {children}\n
\n);\n\nTextAndLine.propTypes = {\n title: PropTypes.string,\n margin: PropTypes.string,\n padding: PropTypes.string,\n children: PropTypes.oneOfType([\n PropTypes.shape(),\n PropTypes.elementType,\n PropTypes.array\n ])\n};\n\nexport default TextAndLine;\n","import TextAndLine from './TextAndLine'\n\nexport default TextAndLine\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nconst WrapperCardComponentStyles = styled.div`\n padding: ${({ padding }) => padding};\n background: #fff;\n border-radius: 4px;\n\tbox-shadow: ${({ boxShadow }) => (\n\t\tboxShadow || '0 2px 4px -1px rgba(0, 0, 0, 0.2),0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 4px 5px 0 rgba(0, 0, 0, 0.14)'\n\t)};\n\n\twidth: 100%;\n\tmargin: ${({ margin }) => margin};\n\n\n\t@media only screen and (max-width: 600px) {\n\t\tpadding: ${({ paddingMobile }) => paddingMobile};\n\t}\n`\n\nconst WrapperCardComponent = ({\n children, \n boxShadow, \n padding = '30px', \n margin = '0', \n id = '', className, \n paddingMobile = '30px 15px 0 15px' \n}) => (\n\t\n\t\t{children}\n\t\n)\n\nWrapperCardComponent.propTypes = {\n\tchildren: PropTypes.oneOfType([\n\t\tPropTypes.shape(),\n\t\tPropTypes.elementType,\n\t\tPropTypes.array\n\t]),\n\tpadding: PropTypes.string,\n\tmargin: PropTypes.string,\n\tid: PropTypes.string,\n\tclassName: PropTypes.string,\n\tboxShadow: PropTypes.string,\n\tpaddingMobile: PropTypes.string,\n}\n\nexport default WrapperCardComponent\n","import WrapperCardComponent from './WrapperCardComponent'\n\nexport default WrapperCardComponent\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nimport { EmptyListIcon } from \"../../assets/Icons\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ListPlaceHolderStyles = styled.div`\n height: 100%;\n min-height: 300px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n\n .emptyText {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.36;\n -webkit-letter-spacing: normal;\n -moz-letter-spacing: normal;\n -ms-letter-spacing: normal;\n letter-spacing: normal;\n color: #919ba8;\n word-break: break-all;\n }\n`;\n\nconst ListPlaceHolder = ({ text = \"empty_list\" }) => {\n const { t } = useTranslation();\n\n return (\n \n \n

{t(text)}

\n
\n );\n};\n\nexport default ListPlaceHolder;\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nconst itemRenderer = ({ item, itemIndex, props: { valueField, labelField }, state, methods }) => {\n return (\n
methods.addItem(item)}>\n
\n {item[labelField]}\n
\n
\n )\n}\n\nitemRenderer.propTypes = {\n item: PropTypes.shape(),\n methods: PropTypes.shape(),\n props: PropTypes.shape({\n valueField: PropTypes.string,\n labelField: PropTypes.string\n }),\n state: PropTypes.shape(),\n itemIndex: PropTypes.string\n}\n\nexport default itemRenderer\n","import styled from \"styled-components\";\n\nconst SortSelectInputStyles = styled.div`\n width: 100%;\n min-width: 200px;\n height: ${({ shouldHaveHight }) => shouldHaveHight && \"40px\"};\n padding-bottom: 22px;\n border-bottom: 1px solid #e6eaee;\n\n .react-dropdown-select-clear {\n font-size: 13px !important;\n text-transform: capitalize !important;\n font-weight: 700 !important;\n color: hsl(0, 0%, 70%) !important;\n line-height: unset !important;\n font-size: 0 !important; /* Hide the original \"×\" */\n position: relative;\n\n &::before {\n content: \"X\" !important; /* Customize with your desired character or symbol */\n font-size: 13px; /* Set the font size to make the \"X\" visible */\n color: inherit !important; /* Match the color to the current text color */\n position: absolute !important;\n top: -7px !important;\n left: -7px !important;\n }\n }\n\n .react-dropdown-select {\n min-height: 40px !important;\n height: 100% !important;\n width: 100%;\n border-radius: 4px;\n border: 1px solid #979797;\n box-shadow: none !important;\n border-color: #979797 !important;\n cursor: pointer;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n display: flex;\n align-items: center;\n /* overflow-x: hidden; */\n\n .react-dropdown-select-content {\n height: 100%;\n flex-wrap: nowrap;\n text-overflow: ellipsis;\n overflow-x: hidden;\n width: 70px;\n white-space: nowrap;\n\n input {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n }\n }\n\n .react-dropdown-select-dropdown {\n max-height: 150px;\n }\n\n .itemContainer {\n &:hover {\n background: #1568bf;\n\n .dropDownItem {\n color: #fff;\n }\n }\n\n .dropDownItem {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n }\n }\n }\n`;\n\nexport default SortSelectInputStyles;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"react-dropdown-select\";\n\nimport itemRenderer from \"./itemRenderer\";\n\nimport SortSelectInputStyles from \"./SortSelectInput.styles\";\n\nimport {\n onChangeParam,\n getSelectedValue\n} from \"../selectInput/selectInput.services\";\nimport { isEmpty } from \"../../services/general.utils\";\nimport { useTranslation } from \"react-i18next\";\nimport { translateSort } from \"../../utils/translateSort\";\n\nconst SortSelectInput = ({\n value,\n selectedValues,\n disabled = false,\n getNameValue = false,\n onChange = () => {},\n handleChange,\n onBlur,\n name,\n defaultOption,\n customId,\n shouldHaveHight = true,\n options = [],\n placeholder = \"Select Item\",\n sortKey,\n sortOrder\n}) => {\n const { t } = useTranslation();\n\n const getValues = () => {\n if (defaultOption) {\n return [options[defaultOption]];\n }\n if (selectedValues && selectedValues.length > 0) {\n return value ? [getSelectedValue(selectedValues, value)] : undefined;\n }\n return [];\n };\n\n /**\n * Renders custom content for the dropdown selected value.\n * @param {object} props - Props from the dropdown library contentRender handler\n * @param {object} state - Current state of the dropdown content\n * @returns\n */\n const customContentRenderer = ({ props, state }) => {\n return state.values.length > 0 &&\n !isEmpty(sortKey) &&\n !isEmpty(sortOrder) ? (\n
\n {state.values[0].name}: {translateSort(sortOrder)}\n
\n ) : (\n t(\"sort_by\")\n );\n };\n\n return (\n \n {\n onChange(name, onChangeParam(getNameValue, values));\n if (handleChange !== undefined) {\n handleChange(values[0]);\n }\n }}\n onBlur={onBlur}\n contentRenderer={customContentRenderer}\n itemRenderer={\n itemRenderer\n ? (item, itemIndex, props, state, methods) =>\n itemRenderer(\n item,\n itemIndex,\n props,\n state,\n methods,\n sortKey,\n sortOrder\n )\n : undefined\n }\n clearable\n />\n \n );\n};\n\nSortSelectInput.propTypes = {\n value: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.string,\n PropTypes.shape()\n ]),\n selectedValues: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.shape())\n ]),\n onChange: PropTypes.func,\n disabled: PropTypes.bool,\n customId: PropTypes.string,\n handleChange: PropTypes.func,\n defaultOption: PropTypes.number,\n onBlur: PropTypes.func,\n shouldHaveHight: PropTypes.bool,\n name: PropTypes.string,\n getNameValue: PropTypes.bool,\n options: PropTypes.arrayOf(PropTypes.shape()).isRequired,\n sortKey: PropTypes.string,\n sortOrder: PropTypes.string\n};\n\nexport default SortSelectInput;\n","import SortSelectInput from './SortSelectInput'\n\nexport default SortSelectInput\n","export const translateSort = order => {\n if (!order) return;\n\n const ascOrDesc = {\n DESC: {\n rs: \"Opadajuće\",\n en: \"Descending\"\n },\n ASC: {\n rs: \"Rastuće\",\n en: \"Ascending\"\n }\n };\n\n return ascOrDesc[order][localStorage.getItem(\"locales\")];\n};\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport DatePicker from \"react-datepicker\";\nimport { toast } from \"react-toastify\";\n// components\nimport Button from \"../button\";\n// services\nimport * as api from \"../../services/api/admin/users.service\";\n// Utils\nimport {\n startFutureMonthFromDate,\n formatToStartOfDay\n} from \"../../services/date.utils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst DisableUserModalStyles = styled.div`\n .contentWrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n .disableUserTitle {\n font-style: normal;\n font-weight: bold;\n font-size: 26px;\n line-height: 26px;\n text-align: center;\n color: #4b4b4b;\n margin-bottom: 20px;\n }\n\n .datePickerInput {\n height: 32px;\n width: 194px;\n outline: none;\n text-align: center;\n font-size: 16px;\n font-weight: 600;\n border-color: 1px solid #d8d8d8;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n cursor: pointer;\n position: relative;\n margin-top: 20px;\n\n &:hover {\n border: 1px solid #1568bf;\n z-index: 2;\n }\n }\n\n width: 544px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 46px 30px 30px 30px;\n\n @media only screen and (max-width: 767px) {\n width: 100%;\n height: 100vh;\n }\n`;\n\nconst initalDate = startFutureMonthFromDate(new Date());\n\nconst DisableUserModal = ({ userId, closeModal, fetchData = () => {} }) => {\n const { t } = useTranslation();\n const [date, setDate] = useState(initalDate);\n\n const handleDateChange = chosenDate => {\n setDate(formatToStartOfDay(chosenDate));\n };\n\n const handleDisableUserError = ({ error }) => {\n const { data } = error;\n if (data) {\n if (data.errors && data.error) {\n if (data.errors.scheduleDeleteAt) {\n toast.error(`${data.errors.scheduleDeleteAt.keys[0]}`);\n }\n } else {\n toast.error(data.error.message);\n }\n }\n };\n\n /**\n * Sends patch request to disable user.\n * Closes modal.\n * Refetches data from server.\n */\n const disableUser = async () => {\n const response = await api.disableUser({\n userId,\n scheduleDeleteAt: date\n });\n\n if (response.hasError) {\n return handleDisableUserError(response);\n }\n\n toast.success(response.data.message);\n\n setTimeout(() => {\n closeModal();\n fetchData();\n }, 200);\n };\n\n return (\n \n
\n

{t(\"Disable User\")}

\n

{t(\"choose_disabling_date\")}

\n

{t(\"immediate_delete\")}

\n handleDateChange(chosenDate)}\n minDate={new Date()}\n value={date}\n />\n\n disableUser()}\n margin=\"29px 0 0 0\"\n width=\"140px\"\n >\n {t(\"Submit\")}\n \n
\n
\n );\n};\n\nexport default DisableUserModal;\n","import DisableUserModal from './DisableUserModal'\n\nexport default DisableUserModal;\n","import styled from 'styled-components';\n\nconst DisableUsersModalStyles = styled.div`\n .contentWrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n .disableUserTitle {\n font-style: normal;\n font-weight: bold;\n font-size: 26px;\n line-height: 26px;\n text-align: center;\n color: #4b4b4b;\n margin-bottom: 20px;\n }\n\n .datePickerInput {\n height: 32px;\n width: 194px;\n outline: none;\n text-align: center;\n font-size: 16px;\n font-weight: 600;\n border-color: 1px solid #d8d8d8;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n cursor: pointer;\n position: relative;\n margin-top: 20px;\n\n &:hover {\n border: 1px solid #1568bf;\n z-index: 2;\n }\n }\n\n width: 544px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 46px 30px 30px 30px;\n\n @media only screen and (max-width: 767px) {\n width: 100%;\n height: 100vh;\n }\n`;\n\nexport default DisableUsersModalStyles;","import React, { useState } from \"react\";\nimport DatePicker from \"react-datepicker\";\nimport { toast } from \"react-toastify\";\n// components\nimport Button from \"../button\";\n// styles\nimport DisableUsersModalStyles from \"./DisableUsersModalStyles\";\n// services\nimport * as api from \"../../services/api/admin/users.service\";\n// Utils\nimport {\n startFutureMonthFromDate,\n formatToStartOfDay\n} from \"../../services/date.utils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst initalDate = startFutureMonthFromDate(new Date());\n\nconst DisableUsersModal = ({\n userIdsMap,\n closeModal,\n fetchData = () => {},\n text,\n setSelectedNumber\n}) => {\n const { t } = useTranslation();\n const [date, setDate] = useState(initalDate);\n\n let userIds = [];\n\n userIdsMap.forEach((value, key) => {\n if (value) userIds.push(key);\n });\n\n const handleDateChange = chosenDate => {\n setDate(formatToStartOfDay(chosenDate));\n };\n\n const handleDisableUsersError = ({ error }) => {\n const { data } = error;\n\n if (data) {\n if (data.errors && data.error) {\n if (data.errors.scheduleDeleteAt) {\n toast.error(`${data.errors.scheduleDeleteAt.keys[0]}`);\n } else {\n toast.error(data.error.message);\n }\n } else {\n toast.error(data.error.message);\n }\n }\n };\n\n /**\n * Sends patch request to disable user.\n * Closes modal.\n * Refetches data from server.\n */\n const disableUsers = async () => {\n try {\n const response = await api.disableUsers({\n userIds,\n scheduleDeleteAt: date\n });\n\n if (response.hasError) {\n return handleDisableUsersError(response);\n }\n\n userIdsMap.clear();\n setSelectedNumber(0);\n\n toast.success(response.data.message);\n\n setTimeout(() => {\n closeModal();\n fetchData();\n }, 200);\n } catch (error) {\n toast.error(error.message);\n }\n };\n\n return (\n \n
\n

\n {t(\"Disable\")} {t(text)}\n

\n

\n {t(\"delete_employees\")} {t(text)} {t(\"to_be_deleted\")}\n

\n

{t(\"immediate_delete\")}

\n handleDateChange(chosenDate)}\n minDate={new Date()}\n value={date}\n />\n\n disableUsers()}\n margin=\"29px 0 0 0\"\n width=\"140px\"\n >\n {t(\"Submit\")}\n \n
\n
\n );\n};\n\nexport default DisableUsersModal;\n","import DisableUsersModal from './DisableUsersModal';\n\nexport default DisableUsersModal;","import styled from \"styled-components\";\n\nconst ListItemStyles = styled.div`\n border-bottom: ${({ border }) => border || \"1px solid #F0F0F0\"};\n padding: 12px 20px;\n display: flex;\n -moz-box-align: center;\n align-items: center;\n background: ${({ background }) => background || \"transparent\"};\n\n .isVerified {\n width: 20%;\n padding: 16px 0;\n font-size: 14px;\n text-align: center;\n svg {\n width: 35px;\n height: 35px;\n }\n }\n\n .checkboxCol {\n margin-right: 24px;\n width: 18px;\n }\n\n .list {\n display: flex;\n align-items: center;\n width: 100%;\n cursor: pointer;\n }\n\n .nameCol {\n display: flex;\n align-items: center;\n width: 30%;\n padding: 12px;\n font-family: \"Montserrat\";\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #5f5f5f;\n text-transform: capitalize;\n position: relative;\n\n .employeeAvatar {\n margin-left: 10px;\n min-width: 24px;\n min-height: 24px;\n border-radius: 12px;\n background: #1568bf;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 10px;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n text-transform: uppercase;\n }\n }\n\n .roles {\n width: 20%;\n padding: 16px 0;\n margin-left: 1%;\n font-family: \"Montserrat\";\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #777777;\n }\n\n .company {\n width: 20%;\n padding: 16px 0;\n margin-left: 1%;\n font-family: \"Montserrat\";\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #777777;\n }\n\n .email {\n width: 22%;\n padding: 16px 0;\n margin-left: 1%;\n font-family: \"Montserrat\";\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #777777;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .actionsCol {\n width: 4%;\n display: flex;\n -moz-box-align: center;\n align-items: center;\n -moz-box-pack: center;\n justify-content: center;\n background: none;\n border: medium none;\n outline: currentcolor none medium;\n font-size: 16px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: rgb(143, 143, 143);\n cursor: pointer;\n position: relative;\n margin: 0px;\n padding: 0px;\n\n .tooltip {\n width: 180px;\n /* height: 107px; */\n background: #f7f7f7;\n border: 1px solid #1568bf !important;\n padding: 0;\n border-radius: 4px;\n padding: 0;\n }\n }\n\n .tooltipLink {\n text-decoration: none;\n width: 100%;\n height: 34px;\n }\n\n .tooltipContentWrapper {\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .button {\n width: 100%;\n height: 34px;\n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 0 16px;\n font-size: 11px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #8f8f8f;\n text-transform: capitalize;\n\n &:hover {\n background: #1568bf;\n color: #fff;\n }\n }\n\n .list-disabled-tooltip {\n color: black !important;\n text-align: center;\n }\n\n .__react_component_tooltip {\n background: #f7f7f7 !important;\n opacity: 1 !important;\n padding: 0;\n width: 180px;\n border-radius: 4px;\n border: 1px solid rgb(21, 104, 191) !important;\n }\n\n .__react_component_tooltip.show {\n opacity: 1;\n visibility: visible;\n }\n\n .__react_component_tooltip.type-dark.border {\n border: 1px none blue;\n }\n\n .__react_component_tooltip.place-bottom:after {\n top: -7px !important;\n }\n\n .__react_component_tooltip.place-left::after {\n border-left: 8px solid #f7f7f7 !important;\n }\n\n .__react_component_tooltip.place-right::after {\n border-right: 8px solid #f7f7f7 !important;\n }\n\n .__react_component_tooltip.place-top::after {\n border-top: 8px solid #f7f7f7 !important;\n }\n\n .__react_component_tooltip.place-bottom::after {\n border-bottom: 8px solid #f7f7f7 !important;\n }\n\n .__react_component_tooltip.place-bottom:before {\n border-left: 9px solid transparent;\n border-right: 9px solid transparent;\n margin-left: -10px;\n }\n\n .__react_component_tooltip.type-dark.border.place-bottom:before {\n border-bottom: 8px solid #1568bf !important;\n }\n`;\n\nexport default ListItemStyles;\n","import styled from 'styled-components'\n\nconst ListItemExpandedStyles = styled.div`\n max-height: 800px;\n cursor: pointer;\n background: ${({backgroundOpen}) => backgroundOpen || '#FFF'}; \n\n @keyframes expandListItem {\n from {\n transform: translateY(120px);\n height: 120px;\n opacity: 0;\n }\n to {\n transform: translateY(0);\n max-height: 800px;\n opacity: 1;\n }\n }\n\n .listItemExpanded {\n display: flex;\n width: 100%;\n background: rgb(255, 255, 255);\n height: 0;\n z-index: 2;\n max-height: 0;\n transition: max-height 0.15s ease-out;\n overflow: hidden;\n border-bottom: 1px solid #F0F0F0;\n }\n\n\n .listItemExpanded.open {\n display: flex;\n width: 100%;\n background: ${({backgroundOpen}) => backgroundOpen || '#FFF'};\n z-index: 2; \n animation: expandListItem 0.4s ease-in;\n height: 114px;\n max-height: 2000px;\n transition: max-height 0.15s ease-out; \n transition-delay: 1s;\n transform-origin: center;\n padding: 0px 20px 16px 20px;\n }\n\n .genderAndLocation {\n display: flex;\n align-items: flex-start;\n width: 30%;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n line-height: 16px;\n color: #5F5F5F;\n flex-direction: column;\n justify-content: flex-start;\n margin-left: 30px;\n padding-left: 52px;\n }\n\n .expandedListItemLabel {\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 500;\n font-size: 10px;\n line-height: 20px;\n color: #1D1D1D;\n }\n\n .expandedListItemDataContainer {\n display: flex;\n flex-direction: column;\n gap: 7px;\n margin-bottom: 10px;\n }\n\n .genderValue:first-letter {\n text-transform: uppercase;\n }\n\n .contactWrapper {\n width: 20%;\n display: flex;\n align-items: flex-start;\n margin-left: 1.2%;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #5F5F5F;\n flex-direction: column;\n justify-content: flex-start;\n }\n\n .teamAndPositionWrapper {\n width: 19%;\n display: flex;\n align-items: flex-start;\n margin-left: 1%;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #5F5F5F;\n flex-direction: column;\n justify-content: flex-start;\n }\n\n .birthDayAndEnrolldateWrapper {\n width: 19%;\n display: flex;\n align-items: flex-start;\n margin-left: 1%;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #5F5F5F;\n flex-direction: column;\n justify-content: flex-start;\n }\n`\n\nexport default ListItemExpandedStyles;\n","import React, { useState, useRef, useEffect } from \"react\";\nimport ReactTooltip from \"react-tooltip\";\nimport { useHistory } from \"react-router-dom\";\nimport { toast } from \"react-toastify\";\n\n// Components\nimport {\n CheckCircleSVG,\n DotsIcon,\n UserDisabledIconSvg,\n XCircleSVG\n} from \"../../assets/Icons\";\nimport ListItemStyles from \"./ListItemStyles\";\nimport ListItemExpandedStyles from \"./ListItemExpandedStyles\";\nimport ChevronIconDownSvg from \"../../assets/Icons/ChevronIconDownSvg\";\nimport CheckboxInput from \"../checkboxInput\";\n\n// Services\nimport getInitals from \"../../services/getInitals\";\nimport * as usersService from \"../../services/api/admin/users.service\";\nimport { isEmpty } from \"../../services/general.utils\";\nimport { formatDateForPlaceholder } from \"../../services/date.utils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ListItem = ({\n emailConfirmed,\n fullName,\n isRowDisabled,\n isFirstLetter = false,\n roles,\n company,\n email,\n isActionsEnabled = true,\n userId,\n isEditActionVisable = true,\n employeeId,\n isResendVerificationEnabled = true,\n shouldShowDeletePopup = true,\n isDeleteActionVisable = true,\n openDisableUserPopup = () => {},\n employeeData = {},\n fetchData = () => {},\n setSelectedNumber,\n checkedMap,\n setCheckedMap,\n redirectToUserHistoryPage\n}) => {\n const { t } = useTranslation();\n const [isActive, setIsActive] = useState(false);\n const [isOpen, setIsOpen] = useState(false);\n const init = checkedMap.has(userId) ? checkedMap.get(userId) : false;\n const [isChecked, setIsChecked] = useState(init);\n\n const myTooltip = useRef();\n const history = useHistory();\n\n const onClickDots = () => {\n setIsActive(true);\n ReactTooltip.rebuild();\n };\n\n const handleBlur = () => {\n setIsActive(false);\n ReactTooltip.rebuild();\n };\n\n const handleExpand = event => {\n event.preventDefault();\n event.stopPropagation();\n setIsOpen(!isOpen);\n };\n\n const resendVerificationLink = async (e, userId) => {\n e.stopPropagation();\n const response = await usersService.resendVerificationLink(userId);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_send_ver_link\")\n );\n }\n\n toast.success(response.data.message);\n };\n\n const handleDisableUserPopupOpen = (e, userId) => {\n e.stopPropagation();\n openDisableUserPopup(userId);\n };\n\n /**\n * Handles user enabling.\n * Sends request to update user enabled status.\n * Refetches data.\n * @param {Event} e\n */\n const handleUserEnable = async (e, userId) => {\n e.stopPropagation();\n\n const response = await usersService.enableUser(userId);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_enable_user\")\n );\n }\n\n toast.success(response.data.message);\n\n fetchData();\n };\n\n /**\n * Handles the behavior when the checkedMap is changed\n * If user in checkedMap is true, set isChecked to true, otherwise false.\n * Calculate and set total number of selected users\n */\n useEffect(() => {\n let total = 0;\n for (const x of checkedMap.values()) {\n x && total++;\n }\n\n setSelectedNumber(total);\n checkedMap.has(userId) && setIsChecked(checkedMap.get(userId));\n }, [checkedMap]);\n\n const handleCheckedOnChange = () => {\n const checked = new Map(checkedMap);\n checked.set(userId, !isChecked);\n\n setCheckedMap(checked);\n setIsChecked(!isChecked);\n };\n\n return (\n <>\n \n
\n {!isRowDisabled && (\n \n )}\n
\n
handleExpand(e)}>\n redirectToUserHistoryPage(e, userId)}\n >\n \n
\n {getInitals(fullName, isFirstLetter)}\n
\n {fullName !== \"\" ? fullName : \"Unknown\"}\n {isRowDisabled && (\n <>\n \n \n \n \n {t(\"user_disabled\")}\n \n \n )}\n
\n
{roles}
\n
{company}
\n
{email}
\n
\n {emailConfirmed ? : }\n
\n {isActionsEnabled && (\n <>\n {\n e.stopPropagation();\n onClickDots();\n }}\n onBlur={() => handleBlur()}\n >\n \n \n (myTooltip.current = ref)}\n className=\"tooltip\"\n getContent={dataTip => {\n if (!dataTip) {\n return \"\";\n }\n const [userId, isDisabledParam, employeeId] = dataTip.split(\n \"|\"\n );\n\n return (\n
\n {isEditActionVisable && (\n {\n e.stopPropagation();\n history.push(`users/edit/${userId}/${employeeId}`);\n }}\n >\n {t(\"Update\")}\n \n )}\n {isDisabledParam === \"true\" && (\n handleUserEnable(e, userId)}\n >\n {t(\"enable_user\")}\n \n )}\n {isResendVerificationEnabled && (\n resendVerificationLink(e, userId)}\n >\n {t(\"resend_ver_link\")}\n \n )}\n {isDeleteActionVisable &&\n shouldShowDeletePopup &&\n isDisabledParam === \"false\" && (\n \n handleDisableUserPopupOpen(e, userId)\n }\n >\n {t(\"Delete\")}\n \n )}\n
\n );\n }}\n border\n clickable\n />\n \n )}\n \n \n handleExpand(e)}\n backgroundOpen={isChecked && \"#F5FAFF\"}\n >\n {isOpen && (\n
\n
\n
\n {t(\"Gender\")}\n \n {!isEmpty(employeeData) && !isEmpty(employeeData.gender)\n ? employeeData.gender\n : \"-\"}\n \n
\n
\n {t(\"Locations\")}\n \n {!isEmpty(employeeData) && !isEmpty(employeeData.cities)\n ? employeeData.cities.map(l => l.name).join(\", \")\n : \"-\"}\n \n
\n
\n
\n
\n
\n \n {t(\"Birth date\")}\n \n \n {!isEmpty(employeeData) && !isEmpty(employeeData.bornDate)\n ? formatDateForPlaceholder(employeeData.bornDate)\n : \"-\"}\n \n
\n
\n \n {t(\"Enroll date\")}\n \n \n {!isEmpty(employeeData) &&\n !isEmpty(employeeData.firstDayAtWork)\n ? formatDateForPlaceholder(employeeData.firstDayAtWork)\n : \"-\"}\n \n
\n
\n
\n
\n
\n
\n {t(\"Team\")}\n \n {!isEmpty(employeeData) && !isEmpty(employeeData.team)\n ? employeeData.team\n : \"-\"}\n \n
\n
\n \n {t(\"Relationship\")}\n \n \n {!isEmpty(employeeData) &&\n !isEmpty(employeeData.relationship)\n ? employeeData.relationship\n : \"-\"}\n \n
\n
\n
\n
\n
\n {t(\"Contact\")}\n \n {!isEmpty(employeeData) && !isEmpty(employeeData.contact)\n ? employeeData.contact\n : \"-\"}\n \n
\n
\n
\n )}\n \n \n );\n};\n\nexport default ListItem;\n","import styled from 'styled-components'\n\nconst CompaniesListItemStyles = styled.div`\n border-bottom: 1px solid #F0F0F0;\n padding: 12px 20px;\n display: flex;\n -moz-box-align: center;\n align-items: center;\n\n .nameCol {\n display: flex;\n align-items: center;\n width: 28%;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #5F5F5F;\n text-transform: capitalize;\n position: relative;\n \n .employeeAvatar {\n margin-left: 10px;\n min-width: 24px;\n min-height: 24px;\n border-radius: 12px;\n background: #1568bf;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 10px;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n text-transform: uppercase;\n }\n }\n\n .pib {\n width: 20%;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #777777;\n text-align: center;\n }\n\n .paymentDeadline {\n width: 16%;\n text-align: center;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #777777;\n text-align: center;\n }\n\n .email {\n width: 20%;\n margin: 0 0 0 9%;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #777777;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .actionsCol {\n width: 4%;\n display: flex;\n -moz-box-align: center;\n align-items: center;\n -moz-box-pack: center;\n justify-content: center;\n background: none;\n border: medium none;\n outline: currentcolor none medium;\n font-size: 16px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: rgb(143, 143, 143);\n cursor: pointer;\n position: relative;\n margin: 0px;\n padding: 0px;\n\n .tooltip {\n width: 180px;\n /* height: 107px; */\n background: #f7f7f7;\n border: 1px solid #1568bf !important;\n padding: 0;\n border-radius: 4px;\n padding: 0;\n }\n }\n\n .tooltipLink {\n text-decoration: none;\n width: 100%;\n height: 34px;\n }\n\n .tooltipContentWrapper {\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .button {\n width: 100%;\n height: 34px;\n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 0 16px;\n font-size: 11px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #8f8f8f;\n text-transform: capitalize;\n\n &:hover {\n background: #1568bf;\n color: #fff;\n }\n }\n\n .__react_component_tooltip {\n background: #f7f7f7 !important;\n opacity: 1 !important;\n padding: 0;\n width: 180px;\n border-radius: 4px;\n border: 1px solid rgb(21, 104, 191) !important;\n }\n\n .__react_component_tooltip.show {\n opacity: 1;\n visibility: visible;\n }\n\n .__react_component_tooltip.type-dark.border {\n border: 1px none blue;\n }\n\n .__react_component_tooltip.place-bottom:after {\n top: -7px !important;\n }\n\n .__react_component_tooltip.place-left::after {\n border-left: 8px solid #f7f7f7 !important;\n }\n\n .__react_component_tooltip.place-right::after {\n border-right: 8px solid #f7f7f7 !important;\n }\n\n .__react_component_tooltip.place-top::after {\n border-top: 8px solid #f7f7f7 !important;\n }\n\n .__react_component_tooltip.place-bottom::after {\n border-bottom: 8px solid #f7f7f7 !important;\n }\n\n .__react_component_tooltip.place-bottom:before {\n border-left: 9px solid transparent;\n border-right: 9px solid transparent;\n }\n\n .__react_component_tooltip.type-dark.border.place-bottom:before {\n border-bottom: 8px solid #1568bf !important;\n }\n`\n\nexport default CompaniesListItemStyles;\n","import styled from 'styled-components'\n\nconst CompaniesListItemExpandedStyles = styled.div`\n max-height: 800px;\n\n @keyframes expandListItem {\n from {\n transform: translateY(120px);\n height: 120px;\n opacity: 0;\n }\n to {\n transform: translateY(0);\n max-height: 800px;\n opacity: 1;\n }\n }\n\n .listItemExpanded {\n display: flex;\n width: 100%;\n background: rgb(255, 255, 255);\n height: 0;\n z-index: 2;\n max-height: 0;\n transition: max-height 0.15s ease-out;\n overflow: hidden;\n }\n\n\n .listItemExpanded.open {\n display: flex;\n width: 100%;\n background: rgb(255, 255, 255);\n z-index: 2; \n animation: expandListItem 0.4s ease-in;\n height: 180px;\n max-height: 2000px;\n transition: max-height 0.15s ease-out; \n transition-delay: 1s;\n transform-origin: center;\n padding: 12px 20px;\n }\n\n .idNumber {\n display: flex;\n align-items: flex-start;\n width: 25%;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #5F5F5F;\n flex-direction: column;\n justify-content: flex-start;\n margin-left: 30px;\n }\n\n .expandedListItemLabel {\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 500;\n font-size: 12px;\n color: #1D1D1D;\n }\n\n .expandedListItemDataContainer {\n display: flex;\n flex-direction: column;\n gap: 7px;\n margin-bottom: 10px;\n }\n\n .genderValue:first-letter {\n text-transform: uppercase;\n }\n\n .addressWrapper {\n width: 24%;\n display: flex;\n align-items: center;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #5F5F5F;\n flex-direction: column;\n justify-content: flex-start;\n }\n\n .contactWrapper {\n width: 11%;\n display: flex;\n align-items: center;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #5F5F5F;\n flex-direction: column;\n justify-content: flex-start;\n }\n\n .birthDayAndEnrolldateWrapper {\n width: 25%;\n display: flex;\n align-items: center;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #5F5F5F;\n flex-direction: column;\n justify-content: flex-start;\n margin-left: 3%;\n }\n`\n\nexport default CompaniesListItemExpandedStyles;\n","import React, { useState, useRef } from \"react\";\nimport ReactTooltip from \"react-tooltip\";\nimport { useHistory } from \"react-router-dom\";\nimport { toast } from \"react-toastify\";\n\n// Components\nimport { DotsIcon, UserDisabledIconSvg } from \"../../assets/Icons\";\nimport CompaniesListItemStyles from \"./CompaniesListItemStyles\";\nimport CompaniesListItemExpandedStyles from \"./CompaniesListItemExpandedStyles\";\nimport ChevronIconDownSvg from \"../../assets/Icons/ChevronIconDownSvg\";\n\n// Services\nimport getInitals from \"../../services/getInitals\";\nimport { isEmpty } from \"../../services/general.utils\";\nimport { apiService } from \"../../services/api/api.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst CompaniesListItem = ({\n companyId,\n companyName,\n isFirstLetter = false,\n pib,\n paymendDeadline,\n invoiceEmail,\n isActionsEnabled = true,\n isEditActionVisable = true,\n isDeleteActionVisable = true,\n idNumber,\n address,\n contact,\n tags,\n fetchData = () => {}\n}) => {\n const { t } = useTranslation();\n const [isActive, setIsActive] = useState(false);\n const [isOpen, setIsOpen] = useState(false);\n const myTooltip = useRef();\n const history = useHistory();\n\n const onClickDots = () => {\n setIsActive(true);\n ReactTooltip.rebuild();\n };\n\n const handleBlur = () => {\n setIsActive(false);\n ReactTooltip.rebuild();\n };\n\n const handleExpand = event => {\n event.preventDefault();\n event.stopPropagation();\n setIsOpen(!isOpen);\n };\n\n return (\n
handleExpand(e)}>\n \n
\n \n
\n {getInitals(companyName, isFirstLetter)}\n
\n {companyName !== \"\" ? companyName : \"Unknown\"}\n
\n
{pib}
\n
{paymendDeadline}
\n
{invoiceEmail}
\n {isActionsEnabled && (\n <>\n {\n e.stopPropagation();\n onClickDots();\n }}\n onBlur={() => handleBlur()}\n >\n \n \n (myTooltip.current = ref)}\n className=\"tooltip\"\n getContent={dataTip => {\n if (!dataTip) {\n return \"\";\n }\n const [companyId, companyName] = dataTip.split(\"|\");\n\n return (\n
\n {isEditActionVisable && (\n {\n e.stopPropagation();\n history.push(`companies/edit/${companyId}`);\n }}\n >\n {t(\"Update\")}\n \n )}\n {isDeleteActionVisable && (\n {\n e.stopPropagation();\n if (companyId) {\n const result = confirm(t(\"delete_company_alert\"));\n if (result) {\n const response = await apiService.delete(\n `/company/delete/${companyId}`\n );\n if (response.hasError) {\n return toast.error(\n t(\"failed_to_delete_company\")\n );\n }\n\n fetchData();\n }\n }\n }}\n >\n {t(\"Delete\")}\n \n )}\n
\n );\n }}\n border\n clickable\n />\n \n )}\n
\n \n {isOpen && (\n
\n
\n
\n {t(\"id_num\")}\n \n {!isEmpty(idNumber) ? idNumber : \"-\"}\n \n
\n
\n
\n
\n {t(\"Address\")}\n {!isEmpty(address) ? address : \"-\"}\n
\n
\n
\n
\n
\n {t(\"Contact\")}\n {!isEmpty(contact) ? contact : \"-\"}\n
\n
\n
\n
\n
\n
\n {t(\"Tags\")}\n \n {!isEmpty(tags)\n ? tags.map(tag => tag.name).join(\", \")\n : \"-\"}\n \n
\n
\n
\n
\n )}\n
\n
\n );\n};\n\nexport default CompaniesListItem;\n","const employeeActiveBenefitsTableHead = [\n {\n id: 1,\n headName: \"Name\",\n isSortedUp: false,\n width: \"29%\",\n justifyContent: \"flex-start\"\n },\n {\n id: 2,\n headName: \"Provider\",\n isSortedUp: false,\n width: \"23%\",\n justifyContent: \"flex-start\"\n },\n {\n id: 3,\n headName: \"Benefit Group\",\n isSortedUp: false,\n width: \"25%\",\n justifyContent: \"flex-start\"\n },\n {\n id: 4,\n headName: \"Price\",\n isSortedUp: false,\n width: \"10%\",\n justifyContent: \"flex-start\",\n margin: \"0\"\n },\n {\n id: 5,\n headName: \"Expiration\",\n isSortedUp: false,\n width: \"10%\",\n justifyContent: \"flex-start\",\n margin: \"\"\n }\n];\n\nexport default employeeActiveBenefitsTableHead;\n","import styled from \"styled-components\";\n\nconst EmployeeActiveBenefitsStyles = styled.div`\n margin: 12px;\n background: whitesmoke;\n max-height: 350px;\n overflow-y: scroll;\n\n .tableHeadActiveBenefits {\n padding: 12px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-bottom: 1px solid #94abd1;\n border-top: 1px solid #f0f0f0;\n background: ${({ backgroundOpen }) => backgroundOpen || \"#FFF\"};\n }\n\n .employeeActiveBenefitStyle {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: space-between;\n padding: 12px;\n margin-bottom: 2px;\n background: ${({ backgroundOpen }) => backgroundOpen || \"#FFF\"};\n border: 1px solid ${({ backgroundOpen }) => backgroundOpen || \"#FFF\"};\n }\n .name {\n width: 29%;\n }\n\n .provider {\n width: 23%;\n }\n\n .benefitGroup {\n width: 25%;\n }\n\n .tokens {\n width: 10%;\n img {\n width: 16px;\n height: 16px;\n }\n }\n\n .expiration {\n width: 10%;\n }\n\n h4 {\n font-family: Montserrat;\n font-size: 10px;\n font-weight: 500;\n line-height: 12px;\n letter-spacing: 0px;\n text-align: left;\n color: #1d1d1d;\n margin-bottom: 4px;\n display: none;\n }\n\n .content {\n display: flex;\n align-items: center;\n gap: 8px;\n font-family: Montserrat;\n font-size: 14px;\n font-weight: 400;\n line-height: 16px;\n letter-spacing: 0px;\n text-align: left;\n color: #5f5f5f;\n\n span {\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: #3166b9;\n }\n\n p {\n width: calc(100% - 18px);\n }\n }\n\n @media screen and (max-width: 1280px) {\n h4 {\n display: block;\n }\n }\n\n @media screen and (max-width: 1024px) {\n .name {\n width: 36%;\n }\n\n .provider {\n width: 30%;\n }\n\n .benefitGroup {\n width: 30%;\n }\n\n .tokens {\n width: 100%;\n }\n }\n\n @media screen and (max-width: 500px) {\n margin-bottom: 0;\n\n .employeeActiveBenefitStyle {\n padding: 12px 0;\n margin-bottom: 10px;\n }\n\n .content {\n margin-bottom: 12px;\n }\n .name {\n width: 100%;\n }\n\n .provider {\n width: 48%;\n }\n\n .benefitGroup {\n width: 48%;\n }\n\n .tokens {\n width: 30%;\n }\n\n .expiration {\n width: 70%;\n }\n }\n`;\nexport default EmployeeActiveBenefitsStyles;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\n// Components\nimport { Table, TableHead } from \"../..\";\nimport { TokenIcon } from \"../../../assets/Icons\";\n\n// Services\nimport { isEmpty } from \"../../../services/general.utils\";\nimport useWindowDimensions from \"../../../hooks/useWindowDimensions\";\n\n// Config builders\nimport employeeActiveBenefitsTableHead from \"../../../pages/HrPages/EmployeePages/userBenefits.tableHeader\";\n\n// Styles\nimport EmployeeActiveBenefitsStyles from \"./EmployeeActiveBenefitsStyles\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n transformTokenCurrencyIcons,\n transformTokensToRsd\n} from \"../../../utils/transformTokensToRsd\";\n\nconst EmployeeActiveBenefits = ({ singleEmployee, backgroundOpen }) => {\n const { t } = useTranslation();\n const { width } = useWindowDimensions();\n\n return (\n !isEmpty(singleEmployee?.userBenefits) && (\n \n {width > 1280 && (\n \n
\n {employeeActiveBenefitsTableHead.map(\n ({ id, headName, width, justifyContent, margin }) => (\n \n )\n )}\n
\n
\n )}\n {singleEmployee.userBenefits.map(\n ({\n benefitId,\n title,\n benefitGroup,\n benefitPrice,\n expiration,\n quantity\n }) => (\n
\n
\n

{t(\"benefit_name\")}

\n
\n \n

{title}

\n
\n
\n
\n

{t(\"Provider\")}

\n
{benefitGroup.provider.name}
\n
\n
\n

{t(\"Benefit Group\")}

\n
{benefitGroup.name}
\n
\n
\n

{t(\"Price\")}

\n
\n {transformTokenCurrencyIcons()}\n

{transformTokensToRsd(benefitPrice * quantity)}

\n
\n
\n
\n

{t(\"Expiration\")}

\n
{expiration}
\n
\n
\n )\n )}\n
\n )\n );\n};\n\nEmployeeActiveBenefits.propTypes = {\n singleEmployee: PropTypes.shape({}),\n backgroundOpen: PropTypes.oneOfType([PropTypes.string, PropTypes.bool])\n};\n\nexport default EmployeeActiveBenefits;\n","import EmployeeActiveBenefits from \"./EmployeeActiveBenefits\";\n\nexport default EmployeeActiveBenefits ","import styled from \"styled-components\";\n\nconst EmployeeListItemStyles = styled.div`\n border-bottom: ${({ border }) => border || \"1px solid #F0F0F0\"};\n padding: 12px 20px;\n background: ${({ background }) => background || \"white\"};\n\n .listItem {\n width: 100%;\n display: flex;\n -moz-box-align: center;\n align-items: center;\n }\n\n .checkboxCol {\n margin-right: 24px;\n width: 18px;\n }\n\n .list {\n display: flex;\n align-items: center;\n width: 100%;\n cursor: pointer;\n }\n\n .nameCol {\n display: flex;\n align-items: center;\n width: 30%;\n padding: 12px;\n font-family: \"Montserrat\";\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #5f5f5f;\n text-transform: capitalize;\n position: relative;\n\n .employeeAvatar {\n margin-left: 10px;\n min-width: 24px;\n min-height: 24px;\n border-radius: 12px;\n background: #1568bf;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 10px;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n text-transform: uppercase;\n }\n\n .userDisabledIconWrapper {\n position: absolute;\n top: 20px;\n left: 58px;\n }\n }\n\n .tier {\n width: 15%;\n padding: 16px 0;\n margin-left: 2%;\n font-family: \"Montserrat\";\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #777777;\n }\n\n .isVerified {\n width: 15%;\n padding: 16px 0;\n font-size: 14px;\n text-align: center;\n\n svg {\n width: 35px;\n height: 35px;\n }\n }\n\n @media screen and (max-width: 501px) {\n .isVerified {\n opacity: 0;\n }\n }\n\n .tokens {\n display: flex;\n align-items: center;\n gap: 4px;\n width: 15%;\n padding: 16px 0 16px 16px;\n margin-left: 1%;\n font-family: \"Montserrat\";\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #777777;\n }\n\n .budgetPercentage {\n width: 15%;\n padding: 16px 0;\n margin-left: 1%;\n font-family: \"Montserrat\";\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #777777;\n text-align: center;\n }\n\n .email {\n width: 22%;\n padding: 16px;\n margin-left: 1%;\n font-family: \"Montserrat\";\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #777777;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .actionsCol {\n width: 4%;\n display: flex;\n -moz-box-align: center;\n align-items: center;\n -moz-box-pack: center;\n justify-content: center;\n background: none;\n border: medium none;\n outline: currentcolor none medium;\n font-size: 16px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: rgb(143, 143, 143);\n cursor: pointer;\n position: relative;\n margin: 0px;\n padding: 0px;\n\n .tooltip {\n width: 180px;\n /* height: 107px; */\n background: #f7f7f7;\n border: 1px solid #1568bf !important;\n padding: 0;\n border-radius: 4px;\n padding: 0;\n }\n }\n\n .tooltipLink {\n text-decoration: none;\n width: 100%;\n height: 34px;\n }\n\n .tooltipContentWrapper {\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .button {\n width: 100%;\n height: 34px;\n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 0 16px;\n font-size: 11px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #8f8f8f;\n\n &:hover {\n background: #1568bf;\n color: #fff;\n }\n }\n\n .list-disabled-tooltip {\n color: black !important;\n text-align: center;\n }\n\n .__react_component_tooltip {\n background: #f7f7f7 !important;\n opacity: 1 !important;\n padding: 0;\n width: 180px;\n margin-left: -40px;\n border-radius: 4px;\n border: 1px solid rgb(21, 104, 191) !important;\n }\n\n .__react_component_tooltip.show {\n opacity: 1;\n visibility: visible;\n }\n\n .__react_component_tooltip.type-dark.border {\n border: 1px none blue;\n }\n\n .__react_component_tooltip.place-bottom {\n margin-left: -45px;\n }\n\n .__react_component_tooltip.place-bottom:after {\n top: -7px !important;\n left: 75%;\n }\n\n .__react_component_tooltip.place-left::after {\n border-left: 8px solid #f7f7f7 !important;\n }\n\n .__react_component_tooltip.place-right::after {\n border-right: 8px solid #f7f7f7 !important;\n }\n\n .__react_component_tooltip.place-top::after {\n border-top: 8px solid #f7f7f7 !important;\n }\n\n .__react_component_tooltip.place-bottom::after {\n border-bottom: 8px solid #f7f7f7 !important;\n }\n\n .__react_component_tooltip.place-bottom:before {\n border-left: 9px solid transparent;\n border-right: 10px solid transparent;\n left: 75%;\n }\n\n .__react_component_tooltip.type-dark.border.place-bottom:before {\n border-bottom: 8px solid #1568bf !important;\n }\n\n .mobileListContainer {\n display: none;\n }\n\n @media screen and (max-width: 1280px) {\n .nameCol {\n width: 48%;\n }\n\n .tier {\n width: 10%;\n }\n\n .tokens {\n width: 25%;\n }\n\n .budgetPercentage {\n width: 10%;\n }\n\n .email {\n display: none;\n }\n\n .actionsCol {\n width: 6%;\n }\n }\n\n @media screen and (max-width: 960px) {\n .checkboxCol {\n margin-right: 0;\n }\n\n .nameCol {\n width: 55%;\n }\n\n .tier {\n width: 15%;\n }\n\n .tokens {\n width: 30%;\n }\n\n .budgetPercentage {\n display: none;\n }\n\n .__react_component_tooltip.place-bottom {\n margin-left: -50px;\n }\n }\n\n @media screen and (max-width: 767px) {\n margin-top: 8px;\n padding: 12px 16px;\n\n .__react_component_tooltip.place-bottom {\n margin-left: -60px;\n }\n }\n\n @media screen and (max-width: 500px) {\n .nameCol {\n width: 90%;\n padding: 0 8px;\n\n div svg:first-child {\n display: none;\n }\n\n .userDisabledIconWrapper {\n top: 7px;\n left: 35px;\n }\n }\n\n .tier {\n display: none;\n }\n\n .tokens {\n display: none;\n }\n\n .mobileListContainer {\n display: flex;\n align-items: center;\n padding: 12px 0 0 0;\n\n .mobileItem {\n display: flex;\n flex-direction: column;\n\n .mobileTitle {\n font-weight: 500;\n font-size: 10px;\n line-height: 20px;\n color: #1d1d1d;\n }\n\n .mobileToken {\n display: flex;\n align-items: center;\n }\n\n .mobileData {\n line-height: 24px;\n font-size: 14px;\n font-weight: 400;\n color: #777777;\n }\n }\n\n .tierMobile {\n width: 30%;\n }\n\n .tokensMobile {\n width: 33%;\n }\n\n .budgetPercentageMobile {\n width: 12%;\n margin-left: -1%;\n }\n\n .mobileItem.isVerifiedMobile {\n align-items: center;\n }\n\n .isVerifiedMobile {\n width: 26%;\n svg {\n width: 25px;\n height: 25px;\n }\n }\n }\n\n .__react_component_tooltip.place-bottom {\n margin-left: -45px;\n }\n }\n`;\n\nexport default EmployeeListItemStyles;\n","import styled from 'styled-components'\n\nconst EmployeeListItemExpandedStyles = styled.div`\n max-height: 800px;\n cursor: pointer;\n\n @keyframes expandListItem {\n from {\n transform: translateY(120px);\n height: 120px;\n opacity: 0;\n }\n to {\n transform: translateY(0);\n max-height: 800px;\n opacity: 1;\n }\n }\n\n .listItemExpanded {\n width: 100%;\n z-index: 2;\n transition: max-height 0.15s ease-out; \n transition-delay: 1s;\n transform-origin: center;\n overflow: hidden; \n } \n\n .open {\n animation: expandListItem 0.4s ease-in;\n max-height: 2000px;\n border-bottom: 1px solid #F0F0F0;\n }\n\n .employeeDetails {\n display: flex;\n background: ${({backgroundOpen}) => backgroundOpen || '#FFF'};\n padding: 0 20px;\n }\n\n .genderAndLocation {\n display: flex;\n align-items: flex-start;\n width: 30%;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n line-height: 16px;\n color: #5F5F5F;\n flex-direction: column;\n justify-content: flex-start;\n margin-left: 30px;\n padding-left: 52px;\n \n & div:first-child {\n display: none;\n }\n }\n\n .expandedListItemLabel {\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 500;\n font-size: 10px;\n line-height: 20px;\n color: #1D1D1D;\n }\n\n .expandedListItemDataContainer {\n display: flex;\n flex-direction: column;\n gap: 7px;\n margin-bottom: 10px;\n }\n\n .genderValue:first-letter {\n text-transform: uppercase;\n }\n\n .contactWrapper {\n width: 20%;\n display: flex;\n align-items: flex-start;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #5F5F5F;\n flex-direction: column;\n justify-content: flex-start;\n \n & div:first-child {\n display: none;\n }\n\n & div:nth-child(2) {\n display: none;\n }\n\n & div:last-child {\n display: none;\n }\n }\n\n .teamAndPositionWrapper {\n width: 13%;\n display: flex;\n align-items: flex-start;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #5F5F5F;\n flex-direction: column;\n justify-content: flex-start;\n\n & div:last-child {\n display: none;\n }\n }\n\n .birthDayAndEnrolldateWrapper, .bonusesWrapper {\n width: 16%;\n display: flex;\n align-items: flex-start;\n font-family: 'Montserrat';\n font-style: normal;\n font-weight: 400;\n font-size: 14px;\n color: #5F5F5F;\n flex-direction: column;\n justify-content: flex-start;\n }\n\n @media screen and (max-width: 1280px) {\n .genderAndLocation {\n width: 47%;\n\n & div:first-child {\n display: flex;\n }\n }\n\n .birthDayAndEnrolldateWrapper {\n display: none;\n }\n\n .teamAndPositionWrapper {\n & div:last-child {\n display: flex;\n }\n }\n\n .bonusesWrapper {\n width: 21%;\n }\n\n .contactWrapper {\n width: 13%;\n\n & div:last-child {\n display: flex;\n }\n }\n }\n\n @media screen and (max-width: 960px) {\n .genderAndLocation {\n width: 49%;\n padding-left: 0;\n }\n\n .bonusesWrapper {\n display: none;\n }\n\n .teamAndPositionWrapper {\n width: 18%;\n }\n\n .contactWrapper {\n\n & div:first-child {\n display: flex;\n }\n\n & div:nth-child(2) {\n display: flex;\n }\n }\n }\n\n @media screen and (max-width: 767px) {\n .genderAndLocation {\n width: 54%;\n margin-left: 0;\n }\n }\n\n @media screen and (max-width: 500px) { \n .expandedListItemLabel {\n font-size: 8px;\n }\n\n .genderAndLocation {\n width: calc(45%);\n display: inline-block;\n font-size: 10px;\n margin-right: 10px;\n\n span {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden; \n }\n }\n\n .teamAndPositionWrapper {\n width: 35%;\n font-size: 10px;\n }\n\n .contactWrapper {\n font-size: 10px;\n width: 15%;\n\n & div:first-child {\n display: none;\n }\n }\n }\n`\n\nexport default EmployeeListItemExpandedStyles;\n","// Entities\nimport { City } from \"../../domain\";\n\nclass CitiesResponse {\n constructor(response = {}) {\n this.cities = response.data.cities.map(city => new City(city));\n this.pages = response.data.pages;\n this.count = response.data.count;\n }\n}\n\nexport default CitiesResponse;\n","export const queryBuilder = ({ baseQuery, queryObject }) => {\n const query = new URL(baseQuery, \"http://www.example.com\");\n\n if (queryObject) {\n Object.entries(queryObject).forEach(([key, value]) => {\n if (value === undefined || value === null) return;\n query.searchParams.append(key, value);\n });\n }\n\n const decodedPathnameWithQueryParams = decodeURIComponent(query.toString());\n\n return decodedPathnameWithQueryParams.replace(\"http://www.example.com\", \"\");\n};\n","import { apiService } from \"../api.service\";\nimport {\n HrEmployeesResponse,\n TiersResponse,\n BranchesResponse\n} from \"../../../models/server/responses\";\nimport {\n EmployeePayload,\n EmployeeFromCsvPayload,\n BonusCreatePayload\n} from \"../../../models/server/payloads\";\nimport { HrEmployeeDetails } from \"../../../models/domain\";\nimport { isEmpty } from \"../../general.utils\";\nimport CitiesResponse from \"../../../models/server/responses/Cities.response\";\nimport { queryBuilder } from \"../../../utils/queryBuilder\";\n\nexport const getCompanyEmployees = async ({\n limit,\n page,\n searchText,\n orderColumns,\n tierIds,\n chosenBudgetRanges\n}) => {\n const budgetsPercents = chosenBudgetRanges\n ? chosenBudgetRanges.reduce(\n (query, range) =>\n `${!isEmpty(query) ? `${query}&` : \"\"}from=${\n range.from\n }${`&to=${range.to}`}`,\n \"\"\n )\n : \"\";\n\n const tiers = Array.isArray(tierIds)\n ? tierIds.reduce(\n (query, tier) => `${!isEmpty(query) ? `${query}&` : \"\"}tier_id=${tier}`,\n \"\"\n )\n : \"\";\n\n const sortColumns = orderColumns.map(order => {\n return `order=${order.field}&direction=${\n order.isSortedUp ? \"ASC\" : \"DESC\"\n }`;\n });\n\n let queryBuild = queryBuilder({\n baseQuery: \"/hr/employees\",\n queryObject: {\n limit,\n page,\n search: searchText\n }\n });\n\n queryBuild += `&${tiers}`;\n queryBuild += `${tiers ? (sortColumns ? \"&\" : \"\") : \"\"}${sortColumns}`;\n queryBuild += `${\n tiers || sortColumns ? (budgetsPercents ? \"&\" : \"\") : \"\"\n }${budgetsPercents}`;\n\n const response = await apiService.get(queryBuild);\n\n if (response.hasError) return response;\n\n return new HrEmployeesResponse(response);\n};\n\nexport const getCompanyTiers = async () => {\n const response = await apiService.get(\"/company/tiers\");\n\n if (response.hasError) return response;\n\n return new TiersResponse(response);\n};\n\nexport const getCompanyBranches = async () => {\n const response = await apiService.get(\"/company/branches\");\n\n if (response.hasError) return response;\n\n return new BranchesResponse(response);\n};\n\nexport const createEmployee = async values => {\n const payloadData = new EmployeePayload(values);\n\n const response = await apiService.post(\"/hr/create-employee\", payloadData);\n\n return response;\n};\n\nexport const editEmployee = async (values, id) => {\n const payloadData = new EmployeePayload(values);\n\n const response = await apiService.put(\n `/hr/update-employee/${id}`,\n payloadData\n );\n\n return response;\n};\n\nexport const createEmployeesFromCsv = async values => {\n const payloadData = new EmployeeFromCsvPayload(values);\n\n const response = await apiService.post(\n \"/hr/add-employee-from-excel\",\n payloadData.payload\n );\n\n return response;\n};\n\nexport const updateEmployeesFromCsv = async values => {\n const payloadData = new EmployeeFromCsvPayload(values);\n\n const response = await apiService.put(\n \"/hr/update-employee-from-excel\",\n payloadData.payload\n );\n\n return response;\n};\n\nexport const getChosenCompanyEmployee = async id => {\n const response = await apiService.get(`/employee/${id}`);\n\n if (response.hasError) return response;\n\n return new HrEmployeeDetails(response.data);\n};\n\n/**\n * Returns list of cities.\n * @param {number} page\n * @param {number} limit\n * @param {string} search\n * @returns {CitiesResponse}\n */\nexport const getCities = async (search, page = 1, limit = 20) => {\n const response = await apiService.get(\n `/cities?page=${page}&limit=${limit}&search=${search}`\n );\n\n if (response.hasError) return response;\n\n return new CitiesResponse(response);\n};\n\n/**\n * Returns list of cities with no limit, pagination or search.\n * @returns {CitiesResponse}\n */\nexport const getAllCities = async () => {\n const response = await apiService.get(`/cities?page=1&limit=999&search=`);\n\n if (response.hasError) return response;\n\n return new CitiesResponse(response);\n};\n\nexport const addBonus = async values => {\n const payloadData = new BonusCreatePayload(values);\n\n const response = await apiService.post(\"/hr/create-bonuses\", payloadData);\n\n return response;\n};\n\nexport const getCompanyBonusBudget = async () => {\n const response = await apiService.get(\"/company/bonus-budget/\");\n\n if (response.hasError) return response;\n return response;\n};\n","import { css } from '@emotion/core'\n\nconst override = css`\n display: block;\n margin: 0 auto;\n border-color: #1568bf;\n`\n\nconst subscribe = css`\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto;\n border-color: #1568bf;\n background-color:rgba(0, 0, 0, 0.2);\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n`\n\nexport { override, subscribe }\n","import React, { useState, useRef, useEffect } from \"react\";\nimport ReactTooltip from \"react-tooltip\";\nimport { useHistory } from \"react-router-dom\";\nimport { toast } from \"react-toastify\";\nimport { BeatLoader } from \"react-spinners\";\nimport PropTypes from \"prop-types\";\n\n// Components\nimport {\n DotsIcon,\n UserDisabledIconSvg,\n ChevronIconDownSvg,\n TokenIcon,\n CheckCircleSVG,\n XCircleSVG\n} from \"../../assets/Icons\";\nimport EmployeeListItemStyles from \"./EmployeeListItemStyles\";\nimport EmployeeListItemExpandedStyles from \"./EmployeeListItemExpandedStyles\";\nimport EmployeeActiveBenefits from \"./employeeActiveBenefits\";\nimport CheckboxInput from \"../checkboxInput\";\n// Services\nimport getInitals from \"../../services/getInitals\";\nimport * as usersService from \"../../services/api/admin/users.service\";\nimport * as employeesService from \"../../services/api/hr/employees.service\";\nimport { isEmpty } from \"../../services/general.utils\";\nimport { formatDateForPlaceholder } from \"../../services/date.utils\";\nimport { override } from \"../../services/loadingOverride.styles\";\n\n// Entity\nimport { HrEmployeeForm } from \"../../models/domain\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n transformTokenCurrencyIcons,\n transformTokensToRsd\n} from \"../../utils/transformTokensToRsd\";\n\nconst EmployeeListItem = ({\n isVerified,\n fullName,\n isRowDisabled,\n isFirstLetter = false,\n tier,\n tokens,\n remainingTokens,\n userEmail,\n budgetSpentPercentage,\n isActionsEnabled = true,\n userId,\n isEditActionVisable = true,\n employeeId,\n isResendVerificationEnabled = true,\n shouldShowDeletePopup = true,\n isDeleteActionVisable = true,\n openDisableUserPopup = () => {},\n openAddBonusModal = () => {},\n fetchData = () => {},\n gender,\n cities,\n relationship,\n bornDate,\n firstDayAtWork,\n team,\n contact,\n bonusAmount,\n setSelectedNumber,\n checkedMap,\n setCheckedMap\n}) => {\n const { t } = useTranslation();\n const [isActive, setIsActive] = useState(false);\n const [isOpen, setIsOpen] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n const [singleEmployee, setSingleEmployee] = useState(new HrEmployeeForm());\n const init = checkedMap.has(userId) ? checkedMap.get(userId) : false;\n const [isChecked, setIsChecked] = useState(init);\n\n const myTooltip = useRef();\n const history = useHistory();\n\n /**\n * Sends request to get user active subscribed benefits.\n * @param {Number} employeeId\n */\n const fetchEmployee = async employeeId => {\n const response = await employeesService.getChosenCompanyEmployee(\n employeeId\n );\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n setSingleEmployee(response);\n setIsLoading(false);\n };\n\n const onClickDots = () => {\n setIsActive(true);\n ReactTooltip.rebuild();\n };\n\n const handleBlur = () => {\n setIsActive(false);\n ReactTooltip.rebuild();\n };\n\n const handleExpand = event => {\n event.preventDefault();\n event.stopPropagation();\n fetchEmployee(employeeId);\n setIsOpen(!isOpen);\n };\n\n const resendVerificationLink = async (e, userId) => {\n e.stopPropagation();\n const response = await usersService.resendVerificationLink(userId);\n if (response.hasError) {\n return toast.error(t(\"failed_to_send_ver_link\"));\n }\n\n toast.success(response.data.message);\n };\n\n const handleDisableUserPopupOpen = (e, userId) => {\n e.stopPropagation();\n openDisableUserPopup(userId);\n };\n\n /**\n * Handles user enabling.\n * Sends request to update user enabled status.\n * Refetches data.\n * @param {Event} e\n */\n const handleUserEnable = async (e, userId) => {\n e.stopPropagation();\n\n const response = await usersService.enableUser(userId);\n if (response.hasError) {\n return toast.error(t(\"failed_to_enable_user\"));\n }\n\n toast.success(response.data.message);\n\n fetchData();\n };\n\n /**\n * Handles the behavior when the checkedMap is changed\n * If user in checkedMap is true, set isChecked to true, otherwise false.\n * Calculate and set total number of selected users\n */\n useEffect(() => {\n let total = 0;\n for (const x of checkedMap.values()) {\n x && total++;\n }\n\n setSelectedNumber(total);\n checkedMap.has(userId) && setIsChecked(checkedMap.get(userId));\n }, [checkedMap]);\n\n const handleCheckedOnChange = () => {\n const checked = new Map(checkedMap);\n checked.set(userId, !isChecked);\n\n setCheckedMap(checked);\n setIsChecked(!isChecked);\n };\n\n return (\n <>\n \n
\n
\n {!isRowDisabled && (\n \n )}\n
\n
handleExpand(e)}>\n
\n \n
\n {getInitals(fullName, isFirstLetter)}\n
\n {fullName !== \"\" ? fullName : \"Unknown\"}\n {isRowDisabled && (\n <>\n \n \n \n \n {t(\"User is disabled\")}\n \n \n )}\n
\n
{tier}
\n
\n {transformTokenCurrencyIcons()}\n {transformTokensToRsd(remainingTokens)}/\n {transformTokensToRsd(tokens)}\n
\n
{budgetSpentPercentage}
\n
\n {isVerified ? : }\n
\n
{userEmail}
\n {isActionsEnabled && (\n <>\n {\n e.stopPropagation();\n onClickDots();\n }}\n onBlur={() => handleBlur()}\n >\n \n \n (myTooltip.current = ref)}\n className=\"tooltip\"\n getContent={dataTip => {\n if (!dataTip) {\n return \"\";\n }\n const [userId, isDisabledParam, employeeId] = dataTip.split(\n \"|\"\n );\n\n return (\n
\n {isEditActionVisable && (\n {\n e.stopPropagation();\n history.push(`/employees/edit/${employeeId}`);\n }}\n >\n {t(\"Edit\")}\n \n )}\n {\n {\n e.stopPropagation();\n openAddBonusModal(\n {\n title: \"Add Bonuses\",\n selectName: \"employee\"\n },\n Number(employeeId)\n );\n }}\n >\n {t(\"add_bonus_budget\")}\n \n }\n {isDisabledParam === \"true\" && (\n handleUserEnable(e, userId)}\n >\n {t(\"enable_user\")}\n \n )}\n {isResendVerificationEnabled && (\n \n resendVerificationLink(e, userId)\n }\n >\n {t(\"resend_ver_link\")}\n \n )}\n {isDeleteActionVisable &&\n shouldShowDeletePopup &&\n isDisabledParam === \"false\" && (\n \n handleDisableUserPopupOpen(e, userId)\n }\n >\n {t(\"Delete\")}\n \n )}\n
\n );\n }}\n border\n clickable\n />\n \n )}\n
\n
\n
handleExpand(e)}>\n
\n Tier\n {tier}\n
\n
\n Budget\n \n {transformTokenCurrencyIcons()}\n {transformTokensToRsd(remainingTokens)}/\n {transformTokensToRsd(tokens)}\n \n
\n
\n Spent %\n {budgetSpentPercentage}\n
\n
\n {t(\"Verified\")}\n \n {isVerified ? : }\n \n
\n
\n \n\n handleExpand(e)}\n backgroundOpen={isChecked && \"#F5FAFF\"}\n >\n {isOpen && (\n
\n
\n
\n
\n Email\n {!isEmpty(userEmail) ? userEmail : \"-\"}\n
\n
\n {t(\"Gender\")}\n \n {!isEmpty(gender) ? gender : \"-\"}\n \n
\n
\n \n {t(\"locations\")}\n \n \n {!isEmpty(cities)\n ? cities.map(l => l.name).join(\", \")\n : \"-\"}\n \n
\n
\n
\n
\n \n {t(\"Birth date\")}\n \n \n {!isEmpty(bornDate)\n ? formatDateForPlaceholder(bornDate)\n : \"-\"}\n \n
\n
\n \n {t(\"Enroll date\")}\n \n \n {!isEmpty(firstDayAtWork)\n ? formatDateForPlaceholder(firstDayAtWork)\n : \"-\"}\n \n
\n
\n
\n
\n {t(\"Team\")}\n {!isEmpty(team) ? team : \"-\"}\n
\n
\n \n {t(\"Relationship\")}\n \n \n {!isEmpty(relationship) ? relationship : \"-\"}\n \n
\n
\n \n {t(\"Enroll date\")}\n \n \n {!isEmpty(firstDayAtWork)\n ? formatDateForPlaceholder(firstDayAtWork)\n : \"-\"}\n \n
\n
\n
\n
\n {t(\"Bonuses\")}\n {!isEmpty(bonusAmount) ? bonusAmount : \"-\"}\n
\n
\n
\n
\n {t(\"Spent(%)\")}\n \n {!isEmpty(budgetSpentPercentage)\n ? budgetSpentPercentage\n : \"-\"}\n \n
\n
\n {t(\"Bonuses\")}\n {!isEmpty(bonusAmount) ? bonusAmount : \"-\"}\n
\n
\n {t(\"Contact\")}\n {!isEmpty(contact) ? contact : \"-\"}\n
\n
\n \n {t(\"Birth date\")}\n \n \n {!isEmpty(bornDate)\n ? formatDateForPlaceholder(bornDate)\n : \"-\"}\n \n
\n
\n
\n {isLoading ? (\n \n \n
\n ) : (\n \n )}\n \n )}\n \n \n );\n};\n\nEmployeeListItem.propTypes = {\n fullName: PropTypes.string,\n isRowDisabled: PropTypes.bool,\n isFirstLetter: PropTypes.bool,\n tier: PropTypes.string,\n tokens: PropTypes.number,\n remainingTokens: PropTypes.number,\n userEmail: PropTypes.string,\n budgetSpentPercentage: PropTypes.string,\n isActionsEnabled: PropTypes.bool,\n userId: PropTypes.number,\n isEditActionVisable: PropTypes.bool,\n employeeId: PropTypes.number,\n isResendVerificationEnabled: PropTypes.bool,\n shouldShowDeletePopup: PropTypes.bool,\n isDeleteActionVisable: PropTypes.bool,\n openDisableUserPopup: PropTypes.func,\n openAddBonusModal: PropTypes.func,\n fetchData: PropTypes.func,\n gender: PropTypes.string,\n cities: PropTypes.array,\n relationship: PropTypes.string,\n bornDate: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]),\n firstDayAtWork: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.instanceOf(Date)\n ]),\n team: PropTypes.string,\n contact: PropTypes.string,\n bonusAmount: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n checkedMapList: PropTypes.shape({}),\n setSelectedNumber: PropTypes.func\n};\n\nexport default EmployeeListItem;\n","import styled from \"styled-components\";\n\nconst ModalStyles = styled.div`\n height: 100vh;\n width: 100%;\n position: fixed;\n background: rgba(0, 0, 0, 0.2);\n display: flex;\n align-items: center;\n justify-content: center;\n top: 0;\n left: 0;\n z-index: 1000;\n\n .cardContainer {\n position: relative;\n animation: showModal 0.4s ease-in-out;\n border-radius: 4px;\n box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);\n background-color: #ffffff;\n transition: all 0.35s ease-in-out;\n max-height: 80vh;\n overflow: auto;\n }\n\n @keyframes showModal {\n from {\n transform: translateY(50px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n .anim {\n transform: translateY(0);\n opacity: 1;\n }\n\n .closeButton {\n width: 40px;\n height: 40px;\n border: none;\n outline: none;\n font-size: 20px;\n position: absolute;\n z-index: 2;\n right: 20px;\n top: 10px;\n font-weight: 500;\n cursor: pointer;\n background: rgba(255, 255, 255, 0.6);\n border-radius: 50%;\n }\n .closeButton:hover {\n color: #1568bf;\n background: rgba(255, 255, 255, 0.8);\n }\n\n @keyframes showModal {\n from {\n transform: translateY(50px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n @media only screen and (max-width: 767px) {\n .cardContainer {\n overflow-y: scroll;\n -ms-overflow-style: none;\n }\n\n .cardContainer::-webkit-scrollbar {\n display: none;\n }\n }\n`;\n\nexport default ModalStyles;\n","import React, { useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport ModalStyles from \"./ModalStyles\";\n\nconst Modal = ({\n children,\n closeModal,\n isCloseVisable = true,\n disableClose = false\n}) => {\n useEffect(() => {\n const close = e => {\n if (e.key === \"Escape\" && !disableClose) {\n closeModal();\n }\n };\n window.addEventListener(\"keydown\", close);\n return () => window.removeEventListener(\"keydown\", close);\n }, []);\n\n return (\n {}}>\n e.stopPropagation()}\n id=\"modalCard\"\n className=\"cardContainer\"\n >\n {isCloseVisable && (\n \n )}\n\n {children}\n \n \n );\n};\n\nModal.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.shape(),\n PropTypes.elementType,\n PropTypes.array\n ]),\n closeModal: PropTypes.func,\n isCloseVisable: PropTypes.bool\n};\n\nexport default Modal;\n","const openModalAnim = () => {\n\tconst getEl = document.getElementById('modalCard')\n\tif (getEl) {\n\t\tgetEl.classList.add('anim')\n\t}\n}\n\nconst closeModalAnim = () => {\n\tconst getEl = document.getElementById('modalCard')\n\tif (getEl) {\n\t\tgetEl.classList.remove('anim')\n\t}\n}\n\nconst openRatingModalAnim = () => {\n\tconst getEl = document.getElementById('ratingModalCard')\n\tif (getEl) {\n\t\tgetEl.classList.add('anim')\n\t}\n}\n\nconst closeRatingModalAnim = () => {\n\tconst getEl = document.getElementById('ratingModalCard')\n\tif (getEl) {\n\t\tgetEl.classList.remove('anim')\n\t}\n}\n\nexport { openModalAnim, closeModalAnim, openRatingModalAnim, closeRatingModalAnim }\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nconst TableComponentStyles = styled.div`\n margin: ${({margin}) => margin };\n`\n\nconst TableComponent = ({ children, margin = '30px 0 0 0' }) => (\n\t\n\t\t{children}\n\t\n)\n\nTableComponent.propTypes = {\n\tchildren: PropTypes.oneOfType([\n\t\tPropTypes.shape(),\n\t\tPropTypes.elementType,\n\t\tPropTypes.array\n\t]),\n\tmargin: PropTypes.string,\n}\n\nexport default TableComponent\n","import styled from \"styled-components\";\n\nconst TableRowStyles = styled.div`\n display: flex;\n align-items: center;\n padding: 10px 0;\n border-bottom: 0.5px solid #b2b2b2;\n cursor: ${({ findItem }) => (findItem ? \"pointer\" : \"\")};\n\n &:last-child {\n border-bottom: none;\n }\n\n .linkStyles {\n text-decoration: none;\n width: ${({ tableStylings }) => tableStylings.firstColWidth};\n }\n\n .nameCol {\n display: flex;\n align-items: center;\n width: ${({ tableStylings }) => tableStylings.firstColWidth};\n justify-content: ${({ tableStylings }) =>\n tableStylings.firstColJustifyContent};\n font-size: 14px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n margin: ${({ tableStylings }) => tableStylings.firstColMargin};\n padding: ${({ tableStylings }) => tableStylings.firstColPadding};\n text-transform: capitalize;\n position: relative;\n\n .employeeAvatar {\n min-width: 24px;\n min-height: 24px;\n border-radius: 12px;\n background: #1568bf;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 10px;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n text-transform: uppercase;\n }\n }\n\n .tierCol {\n width: ${({ tableStylings }) => tableStylings.secondColWidth};\n display: flex;\n align-items: center;\n justify-content: ${({ tableStylings }) =>\n tableStylings.secondColJustifyContent};\n font-size: 14px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #8f8f8f;\n margin: ${({ tableStylings }) => tableStylings.secondColMargin};\n padding: ${({ tableStylings }) => tableStylings.secondColPadding};\n }\n\n .tokensCol {\n width: ${({ tableStylings }) => tableStylings.thirdColWidth};\n display: flex;\n align-items: center;\n justify-content: ${({ tableStylings }) =>\n tableStylings.thirdColJustifyContent};\n font-size: 14px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #8f8f8f;\n margin: ${({ tableStylings }) => tableStylings.thirdColMargin};\n padding: ${({ tableStylings }) => tableStylings.thirdColPadding};\n }\n\n .emailCol {\n width: ${({ tableStylings }) => tableStylings.forthColWidth};\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: center;\n justify-content: ${({ tableStylings }) =>\n tableStylings.forthColJustifyContent};\n font-size: 14px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #8f8f8f;\n margin: ${({ tableStylings }) => tableStylings.forthColMargin};\n padding: ${({ tableStylings }) => tableStylings.forthColPadding};\n\n p {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n\n .fifthCol {\n width: ${({ tableStylings }) => tableStylings.fifthColWidth};\n display: flex;\n align-items: center;\n justify-content: ${({ tableStylings }) =>\n tableStylings.fifthColJustifyContent};\n font-size: 14px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #8f8f8f;\n margin: ${({ tableStylings }) => tableStylings.fifthColMargin};\n padding: ${({ tableStylings }) => tableStylings.fifthColPadding};\n \n span {\n overflow: hidden;\n text-overflow: ellipsis;\n padding-right: 5px;\n } \n }\n\n .sixthCol {\n width: ${({ tableStylings }) => tableStylings.sixthColWidth};\n display: flex;\n align-items: center;\n justify-content: ${({ tableStylings }) =>\n tableStylings.sixthColJustifyContent};\n font-size: 14px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #8f8f8f;\n margin: ${({ tableStylings }) => tableStylings.sixthColMargin};\n padding: ${({ tableStylings }) => tableStylings.sixthColPadding};\n }\n\n .actionsCol {\n width: ${({ tableStylings }) => tableStylings.actionsColWidth};\n display: flex;\n align-items: center;\n justify-content: ${({ tableStylings }) =>\n tableStylings.actionsColJustifyContent};\n background: none;\n border: none;\n outline: none;\n font-size: 16px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #8f8f8f;\n cursor: pointer;\n position: relative;\n margin: ${({ tableStylings }) => tableStylings.actionsColMargin};\n padding: ${({ tableStylings }) => tableStylings.actionsColPadding};\n }\n\n .tooltip {\n width: 180px;\n /* height: 107px; */\n background: #f7f7f7;\n border: 1px solid #1568bf !important;\n padding: 0;\n border-radius: 4px;\n }\n\n .email-tooltip {\n /* height: 107px; */\n background: #282a3b !important;\n border: 1px solid #282a3b !important;\n padding: 0;\n border-radius: 4px;\n font-size: 13px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.85;\n letter-spacing: -0.22px;\n color: #ffffff;\n text-align: center;\n padding: 0 8px;\n }\n\n .email-tooltip:after {\n border-top: 8px solid #282a3b !important;\n margin-left: -3px !important;\n }\n`;\n\nexport default TableRowStyles;\n","import styled from \"styled-components\";\n\nconst TableRowActionsStyles = styled.div`\n width: 100%;\n height: 100%;\n\n .tooltipLink {\n text-decoration: none;\n width: 100%;\n height: 34px;\n }\n\n .button {\n width: 100%;\n height: 34px;\n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 0 16px;\n font-size: 11px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #8f8f8f;\n text-transform: capitalize;\n\n &:hover {\n background: #1568bf;\n color: #fff;\n }\n }\n\n .hr {\n width: 100%;\n border: 0.25px solid #1568bf;\n }\n`;\n\nexport default TableRowActionsStyles;\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\n\n//styles\nimport TableRowActionsStyles from \"./TableRowActionsStyles\";\n// Constants\nimport { UserRolesKeysEnum } from \"../../../constants/roles.constants\";\n//services\nimport * as usersService from \"../../../services/api/admin/users.service\";\nimport { apiService } from \"../../../services/api/api.service\";\nimport { isAuthenticatedRole } from \"../../../services/roles.utils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst TableRowAction = ({\n urlLink,\n baseUrl,\n deleteLink,\n resendVerificationLinkParam,\n removeRow,\n fetchData,\n hideTooltip,\n additionalLinkParams,\n deleteConfirmMessage,\n isShowActionVisable = true,\n isEditActionVisable = true,\n isDeleteActionVisable = true,\n shouldShowDeletePopup = false,\n openDisableUserPopup = () => {},\n isResendVerificationEnabled,\n deleteParam = null,\n isRowDisabled = false,\n openAddBonusModal,\n user\n}) => {\n const { t } = useTranslation();\n const history = useHistory();\n\n const handleDisableUserPopupOpen = e => {\n e.stopPropagation();\n openDisableUserPopup(deleteParam);\n };\n\n /**\n * Handles user enabling.\n * Sends request to update user enabled status.\n * Refetches data.\n * @param {Event} e\n */\n const handleUserEnable = async e => {\n e.stopPropagation();\n\n const response = await usersService.enableUser(deleteParam);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : toast(\"failed_to_enable_user\")\n );\n }\n\n toast.success(response.data.message);\n\n fetchData();\n };\n\n const resendVerificationLink = async e => {\n e.stopPropagation();\n const response = await usersService.resendVerificationLink(\n resendVerificationLinkParam\n );\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_send_ver_link\")\n );\n }\n\n toast.success(response.data.message);\n };\n\n return (\n \n {isShowActionVisable && (\n {\n e.stopPropagation();\n history.push(`${baseUrl}/${urlLink}`);\n }}\n >\n {t(\"Show\")}\n \n )}\n {isEditActionVisable && (\n {\n e.stopPropagation();\n history.push(`${baseUrl}/edit/${urlLink}${additionalLinkParams}`);\n }}\n >\n Edit\n \n )}\n {isAuthenticatedRole(user.authenticatedRole, UserRolesKeysEnum.HR) && (\n {\n e.stopPropagation();\n openAddBonusModal(\n { title: \"Add Bonus\", selectName: \"employee\" },\n Number(urlLink)\n );\n }}\n >\n Add bonus budget\n \n )}\n {isResendVerificationEnabled && (\n \n Resend verification link\n \n )}\n {isRowDisabled === \"true\" && (\n handleUserEnable(e)}\n >\n Enable user\n \n )}\n {(isShowActionVisable || isEditActionVisable) &&\n isDeleteActionVisable &&
}\n {isDeleteActionVisable &&\n !shouldShowDeletePopup &&\n isRowDisabled === \"false\" && (\n {\n e.stopPropagation();\n hideTooltip();\n if (deleteLink) {\n const result = confirm(deleteConfirmMessage);\n if (result) {\n const response = await apiService.delete(\n `${deleteLink}/${urlLink}`\n );\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_delete_user\")\n );\n }\n\n if (removeRow) {\n removeRow(parseInt(urlLink, 0));\n }\n if (fetchData) {\n fetchData();\n }\n }\n }\n }}\n >\n Delete\n \n )}\n {isDeleteActionVisable &&\n shouldShowDeletePopup &&\n isRowDisabled === \"false\" && (\n handleDisableUserPopupOpen(e)}\n >\n Delete\n \n )}\n
\n );\n};\n\nTableRowAction.propTypes = {\n urlLink: PropTypes.string,\n baseUrl: PropTypes.string,\n deleteLink: PropTypes.string,\n removeRow: PropTypes.func,\n // rebuildTooltip: PropTypes.func,\n additionalLinkParams: PropTypes.string,\n fetchData: PropTypes.func,\n deleteConfirmMessage: PropTypes.string,\n hideTooltip: PropTypes.func,\n isShowActionVisable: PropTypes.bool,\n isEditActionVisable: PropTypes.bool,\n isDeleteActionVisable: PropTypes.bool\n};\nconst mapStateToProps = state => {\n return {\n user: state.app.user\n };\n};\n\nexport default connect(mapStateToProps)(TableRowAction);\n","import React, { useState, useRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport ReactTooltip from \"react-tooltip\";\n// eslint-disable-next-line\nimport TableRowStyles from \"./TableRowStyles\";\nimport TableRowActions from \"./TableRowActions\";\nimport { DotsIcon, UserDisabledIconFillSvg, UserDisabledIconSvg } from \"../../../assets/Icons\";\n\nimport getInitals from \"../../../services/getInitals\";\n\n// let myTooltip = null\n\nconst TableRow = ({\n findItem,\n columnOne = \"Unkown\",\n urlLink,\n deleteLink,\n resendVerificationLinkParam,\n removeRow,\n fetchData,\n columnTwo,\n columnThree,\n baseUrl,\n tokens,\n columnFour = \"Unknown\",\n columnFive,\n columnSix,\n isLinkEnabled = false,\n isFirstLetter = false,\n isActionsEnabled = false,\n isResendVerificationEnabled = false,\n isShowActionsVisable,\n isEditActionsVisable,\n isDeleteActionsVisable,\n shouldShowDeletePopup = false,\n openDisableUserPopup = () => { },\n deleteConfirmMessage,\n additionalLinkParams,\n showTooltip = false,\n deleteParam = null,\n isRowDisabled = false,\n openAddBonusModal,\n tableStylings = {\n firstColWidth: \"20%\",\n firstColJustifyContent: \"flex-start\",\n firstColPadding: \"0\",\n firstColMargin: \"0\",\n secondColWidth: \"20%\",\n secondColJustifyContent: \"center\",\n secondColPadding: \"0\",\n secondColMargin: \"0\",\n thirdColWidth: \"30%\",\n thirdColJustifyContent: \"center\",\n thirdColPadding: \"0\",\n thirdColMargin: \"0\",\n forthColWidth: \"20%\",\n forthColJustifyContent: \"flex-start\",\n forthColPadding: \"0\",\n forthColMargin: \"0 0 0 6%\",\n fifthColWidth: \"20%\",\n fifthColJustifyContent: \"flex-start\",\n fifthColPadding: \"0\",\n fifthColMargin: \"0 0 0 6%\",\n sixthColWidth: \"20%\",\n sixthColJustifyContent: \"flex-start\",\n sixthColPadding: \"0\",\n sixthColMargin: \"0 0 0 6%\",\n actionsColWidth: \"4%\",\n actionsColJustifyContent: \"center\",\n actionsColPadding: \"0\",\n actionsColMargin: \"0\"\n }\n}) => {\n const [isActive, setIsActive] = useState(false);\n const myTooltip = useRef();\n\n const onClickDots = () => {\n setIsActive(true);\n ReactTooltip.rebuild();\n };\n\n const handleBlur = () => {\n setIsActive(false);\n // ReactTooltip.hide()\n ReactTooltip.rebuild();\n };\n\n return (\n findItem && findItem()}\n tableStylings={tableStylings}\n findItem={findItem}\n isLinkEnabled={isLinkEnabled}\n >\n
\n
\n {getInitals(columnOne, isFirstLetter)}\n
\n {columnOne !== \"\" ? columnOne : \"Unknown\"}\n {isRowDisabled && (\n <>\n \n \n \n \n User is disabled\n \n \n )}\n
\n

{columnTwo}

\n

\n {tokens}\n {columnThree !== undefined && tokens !== undefined && \"/\"}\n {columnThree}\n

\n \n {showTooltip && (\n \n {columnFour}\n \n )}\n

{columnFour}

\n \n

{columnFive}

\n

{columnSix}

\n {isActionsEnabled && (\n <>\n {\n e.stopPropagation();\n onClickDots();\n }}\n onBlur={() => handleBlur()}\n >\n \n \n (myTooltip.current = ref)}\n className=\"tooltip\"\n getContent={dataTip => {\n if (!dataTip) {\n return \"\";\n }\n const [\n urlLinkId,\n removeLink,\n additionalParams,\n resendVerificationLinkParam,\n deleteParamId,\n isRowDisabledParam\n ] = dataTip.split(\"|\");\n\n return (\n {\n myTooltip.current.tooltipRef = null;\n ReactTooltip.hide();\n }}\n isShowActionVisable={isShowActionsVisable}\n isEditActionVisable={isEditActionsVisable}\n isDeleteActionVisable={isDeleteActionsVisable}\n isResendVerificationEnabled={isResendVerificationEnabled}\n shouldShowDeletePopup={shouldShowDeletePopup}\n openDisableUserPopup={openDisableUserPopup}\n deleteParam={deleteParamId}\n isRowDisabled={isRowDisabledParam}\n openAddBonusModal={openAddBonusModal}\n />\n );\n }}\n border\n clickable\n />\n \n )}\n \n );\n};\n\nTableRow.propTypes = {\n findItem: PropTypes.func,\n columnOne: PropTypes.node,\n columnTwo: PropTypes.node,\n columnThree: PropTypes.node,\n tokens: PropTypes.number,\n columnFour: PropTypes.node,\n columnFive: PropTypes.node,\n columnSix: PropTypes.node,\n baseUrl: PropTypes.string,\n isLinkEnabled: PropTypes.bool,\n isFirstLetter: PropTypes.bool,\n isActionsEnabled: PropTypes.bool,\n urlLink: PropTypes.string,\n deleteLink: PropTypes.string,\n removeRow: PropTypes.func,\n fetchData: PropTypes.func,\n tableStylings: PropTypes.shape(),\n isShowActionsVisable: PropTypes.bool,\n isEditActionsVisable: PropTypes.bool,\n isDeleteActionsVisable: PropTypes.bool,\n additionalLinkParams: PropTypes.string.isRequired,\n deleteConfirmMessage: PropTypes.string\n};\n\nexport default TableRow;\n","import styled from \"styled-components\";\n\nconst TableHeadColumnStyles = styled.div`\n display: flex;\n align-items: center;\n width: ${({ width }) => width};\n justify-content: ${({ justifyContent }) => justifyContent};\n margin: ${({ margin }) => margin};\n text-align: ${({ textAlign }) => textAlign};\n\n .tableHeadColumnName {\n margin-right: ${({ isSortable }) => isSortable && \"10px\"};\n font-size: ${({ fontSize }) => fontSize};\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n }\n\n .arrowsContainer {\n display: flex;\n\n .arrowButtons {\n display: flex;\n align-items: center;\n border: none;\n outline: none;\n background: none;\n\n .arrowUpImg {\n width: 10px;\n transform: rotate(180deg);\n cursor: pointer;\n }\n\n .arrowImg {\n width: 10px;\n cursor: pointer;\n }\n }\n }\n`;\n\nexport default TableHeadColumnStyles;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport ArrowDown from \"../../../assets/images/categoryFilters/rectangle.png\";\n\nimport TableHeadColumnStyles from \"./TableHeadColumnStyles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst TableHeadColumn = ({\n tableHeadColName,\n isSortedUp = false,\n toggleSortFunc = () => {},\n colWidth,\n justifyContent,\n margin,\n isSortable = false,\n id,\n Component,\n fontSize = \"16px\",\n textAlign = \"initial\"\n}) => {\n const { t } = useTranslation();\n\n return (\n \n

{t(tableHeadColName)}

\n {isSortable && (\n \n toggleSortFunc(id)}\n type=\"button\"\n className=\"arrowButtons\"\n >\n \n \n \n )}\n {Component && Component}\n \n );\n};\n\nTableHeadColumn.propTypes = {\n tableHeadColName: PropTypes.string,\n isSortedUp: PropTypes.bool,\n toggleSortFunc: PropTypes.func,\n colWidth: PropTypes.string,\n justifyContent: PropTypes.string,\n margin: PropTypes.string,\n isSortable: PropTypes.bool,\n id: PropTypes.number,\n fontSize: PropTypes.string\n};\n\nexport default TableHeadColumn;\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nimport Button from '../../button'\nimport { DotsIcon } from '../../../assets/Icons'\n\nconst SettingsTableRowStyles = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tbackground: #f7f7f7;\n\tborder-radius: 4px;\n\theight: 42px;\n\tmargin-bottom: 30px;\n\toverflow: hidden;\n\t\n\t&:last-child {\n\t\tmargin-bottom: 0;\n\t}\n\n\t.inputTextContainer {\n\t\tdisplay: flex;\n\t\twidth: 117px; \n\t\theight: 42px;\n\t\tjustify-content: center; \n\t\talign-items: center; \n\t\tposition: relative;\n\t}\n\n\t.text {\n\t\twidth: 117px;\n\t\ttext-align: center;\n\t\tfont-size: 14px;\n\t\tfont-weight: 500;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\ttext-align: center;\n\t\tcolor: #8f8f8f;\n\t\ttransition: all 0.4s;\n\t\tposition: absolute;\n\t\tz-index: 2;\n\t}\n\n\t\n\t.dotsContainer {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\twidth: 117px;\n\t}\n\n\t.inputsTest {\n\t\topacity: 0; \n\t\tleft: -100px;\n\t\tposition: absolute;\n\t\ttransition: all 0.4s;\n\t\twidth: 100px;\n\t\tborder-radius: 4px;\n\t\theight: 24px;\n\t\tborder: solid 1px #979797;\n\t\tpadding: 0 5px;\n\t\tfont-size: 14px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n\t\tcolor: #5d5d5d;\n\t\toutline: none;\n\t\ttext-align: center;\n\t}\n\n\t.inputsTest::-webkit-outer-spin-button,\n.inputsTest::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\n\t.button {\n\t\ttransition: all 0.8s;\n\t\tposition: absolute;\n\t\tz-index: 2;\n\t\twidth: 113px;\n\t\theight: 42px;\n\t\tborder-radius: 4px;\n\t\tbackground: #1568bf;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\toverflow: hidden;\n\t}\n\n\t.submitButton {\n\t\theight: 42px;\n\t\twidth: 80px;\n\t\tborder: none;\n\t\tbackground: none;\n\t\toutline: none;\n\t\tcolor: #fff;\n\t\tfont-size: 14px;\n\t\tfont-weight: 600;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\ttext-align: center;\n\t}\n\n\t.cancelButton {\n\t\theight: 42px;\n\t\twidth: 34px;\n\t\tborder: none !important;\n\t\tbackground: red;\n\t\toutline: none;\n\t\tcolor: #fff;\n\t\tfont-size: 14px;\n\t\tfont-weight: 600;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\ttext-align: center;\n\t\tcursor: pointer;\n\t}\n`\n// tier: 'Tier 2',\n// \ttokens: 20,\n// \t\ttierUsers: 25,\n// \t\t\tdescription: 'Junior'\n\nconst SettingsTableRow = ({\n\ttier,\n\ttokens,\n\ttierUsers,\n\tdescription,\n\tonClick,\n\tbuttonContainerId,\n\trowId,\n\tisFormDisplay,\n\tcancelEdit,\n\tgetTier,\n\tonChange\n}) => (\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t{\n\t\t\t\t\t!isFormDisplay ?\n\t\t\t\t\t\t\n\t\t\t\t\t\t:\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t
\n\t\t\t onChange(rowId, e.target.name, e.target.value)}\n\t\t\t\tclassName=\"inputsTest\"\n\t\t\t\tid={`input1${rowId}`}\n\t\t\t\tvalue={tier}\n\t\t\t/>\n\t\t
\n\t\t
\n\t\t\t

{tokens}

\n\t\t\t onChange(rowId, e.target.name, Number(e.target.value))}\n\t\t\t\tclassName=\"inputsTest\"\n\t\t\t\tid={`input2${rowId}`}\n\t\t\t\tvalue={tokens}\n\t\t\t/>\n\t\t
\n\t\t
\n\t\t\t

{tierUsers}

\n\t\t\t onChange(rowId, e.target.name, Number(e.target.value))}\n\t\t\t\tclassName=\"inputsTest\"\n\t\t\t\tid={`input3${rowId}`}\n\t\t\t\tvalue={tierUsers}\n\t\t\t/>\n\t\t
\n\t\t
\n\t\t\t

{description}

\n\t\t\t onChange(rowId, e.target.name, e.target.value)}\n\t\t\t\tclassName=\"inputsTest\"\n\t\t\t\tid={`input4${rowId}`}\n\t\t\t\tvalue={description}\n\t\t\t/>\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n)\n\nSettingsTableRow.propTypes = {\n\ttier: PropTypes.string,\n\ttokens: PropTypes.number,\n\ttierUsers: PropTypes.number,\n\tdescription: PropTypes.string,\n\tonClick: PropTypes.func,\n\tcancelEdit: PropTypes.func,\n\tgetTier: PropTypes.func,\n\tonChange: PropTypes.func,\n\tbuttonContainerId: PropTypes.string,\n\trowId: PropTypes.number,\n\tisFormDisplay: PropTypes.bool\n}\n\nexport default SettingsTableRow\n","import styled from \"styled-components\";\n\nconst CompanyThemeLogoStyles = styled.div`\n width: 160px;\n height: 50px;\n display: flex;\n align-items: center;\n\n .companyThemeContainer {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n // background: #1568bf;\n // padding: 2px 11px;\n // border-radius: 4px;\n\n .logo {\n //height: 28px;\n height: 34px;\n\n img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n }\n\n .text {\n display: flex;\n align-items: center;\n margin-top: 3.5px;\n\n p {\n font-size: 10px;\n font-weight: 400;\n line-height: 12.19px;\n margin: 0 4px 4px 0;\n color: \"#777777\";\n opacity: 0.6;\n }\n }\n }\n`;\nexport default CompanyThemeLogoStyles;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport BenefitLogo from \"../../assets/Icons/BenefitLogoSvg\";\n//services\nimport { getUrl } from \"../../services/imageHandler\";\n//styles\nimport CompanyThemeLogoStyles from \"./CompanyThemeLogo.styles\";\n\nconst CompanyThemeLogo = ({ color = \"#fff\", theme = null, colorTheme }) => (\n \n {getUrl(theme?.photo) ? (\n
\n
\n \n
\n
\n

Powered by

\n \n
\n
\n ) : (\n \n )}\n
\n);\n\nCompanyThemeLogo.propTypes = {\n color: PropTypes.string,\n theme: PropTypes.oneOfType([\n PropTypes.shape({\n id: PropTypes.number,\n mode: PropTypes.oneOf([\"light\", \"dark\", \"custom\"]),\n photo: PropTypes.oneOfType([\n PropTypes.shape({}),\n PropTypes.instanceOf(null)\n ]),\n companyId: PropTypes.number,\n color: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(null)])\n }),\n PropTypes.instanceOf(null)\n ]),\n colorTheme: PropTypes.string\n};\n\nexport default CompanyThemeLogo;\n","import CompanyThemeLogo from './CompanyThemeLogo'\n\nexport default CompanyThemeLogo","import React, { useRef, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n\nimport { Button } from \"../components\";\nimport { useTranslation } from \"react-i18next\";\n\nconst NotFoundStyles = styled.section`\n width: 100%;\n background: smokewhite;\n min-height: 100vh;\n overflow-x: hidden;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n .title {\n font-size: 64px;\n color: #1568bf;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: 0.81;\n letter-spacing: normal;\n margin: 0 0 30px 0;\n }\n\n .para {\n font-size: 32px;\n color: #1568bf;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: 0.81;\n letter-spacing: normal;\n margin: 0 0 30px 0;\n }\n`;\n\nconst NotFound = ({ removeSideBar, showSideBar }) => {\n const { t } = useTranslation();\n\n const isMounted = useRef(true);\n const history = useHistory();\n\n useEffect(() => {\n if (isMounted.current && removeSideBar) {\n removeSideBar();\n }\n\n return () => {\n isMounted.current = false;\n if (showSideBar) {\n showSideBar();\n }\n };\n }, []);\n\n return (\n \n

404

\n

{t(\"404_desc\")}

\n \n
\n );\n};\n\nNotFound.propTypes = {\n removeSideBar: PropTypes.func,\n showSideBar: PropTypes.func\n};\n\nexport default NotFound;\n","import styled from \"styled-components\";\n\nconst CustomBudgetsStyles = styled.div`\n min-width: 50vw;\n min-height: 50vh;\n padding: 0;\n max-height: 90vh;\n\n .custom-budget {\n padding: 20px;\n display: flex;\n flex-direction: column;\n }\n\n .custom-budget__header {\n height: 50px;\n display: flex;\n align-items: center;\n gap: 10px;\n color: #757575;\n }\n\n .custom-budget__company-logo {\n border-radius: 50%;\n }\n`;\n\nexport default CustomBudgetsStyles;\n","import React from \"react\";\nimport { BenefitLogo } from \"../../../assets/Icons\";\n\nexport const March8Header = ({ companyInfo }) => {\n return (\n
\n \n \n \n

Srećan 8. mart!

\n
\n );\n};\n","import React, { useRef, useState } from \"react\";\nimport BenefitCardStyles from \"../../benefitCard/BenefitCardStyles\";\nimport { truncate } from \"../../../services/truncateString\";\nimport { FlagCurrency } from \"../../../assets/Icons\";\nimport moment from \"moment\";\n\nexport const March8Cards = props => {\n const {\n card,\n data,\n handleSelect,\n selectedDataBudget,\n budgetData,\n priceless,\n disabled,\n getDataForUnsubscribe\n } = props;\n\n const budgetRef = useRef(null);\n const [inputValue, setInputValue] = useState(\"\");\n\n const handleSelectCard = () => {\n const currentDate = moment();\n const deadline = moment(\"2025-03-15\");\n\n if (currentDate.isAfter(deadline)) return;\n\n handleSelect({\n cardId: card.id,\n price: priceless ? card.price : inputValue,\n cardDescription: card.title,\n customProvider: priceless\n });\n };\n\n const debouncedChange = e => {\n const value = parseFloat(e.target.value);\n if (value < 0) return;\n\n if (value > budgetData.totalBudget - budgetData.spentBudget) {\n budgetRef.current.value = (\n budgetData.totalBudget - budgetData.spentBudget\n ).toString();\n } else {\n budgetRef.current.value = e.target.value;\n }\n\n setInputValue(budgetRef.current.value);\n };\n\n const selectedIds = selectedDataBudget.map(item => item.cardId);\n const selectedBudgetCard = selectedDataBudget.find(\n item => item.cardId === card.id\n );\n\n const handleUnsubScribe = cardId => {\n getDataForUnsubscribe(cardId);\n };\n\n return (\n \n \n \n \n \n
\n
\n
\n
\n \n
\n
\n
\n

{card.title}

\n
\n

{card.category}

\n
\n
\n
\n
\n

\n {truncate(card.description, 89)}\n

\n
\n
\n

{card.location}

\n
\n
\n
\n \n {selectedIds.includes(card.id) ? (\n
\n {!priceless ? (\n <>\n <>\n

\n {selectedBudgetCard.price}\n

\n \n \n <>\n \n \n \n ) : (\n <>\n \n \n )}\n
\n ) : (\n
\n {!priceless && (\n \n )}\n {priceless ? (\n <>\n {!selectedIds.some(item => item > 0) && (\n \n )}\n \n ) : (\n \n Pretplati se\n \n )}\n
\n )}\n
\n
\n
\n \n \n
\n );\n};\n","import React, { useCallback, useEffect, useState } from \"react\";\n\nimport { March8Cards } from \"./March8Cards\";\nimport { FlagCurrency } from \"../../../assets/Icons\";\nimport { useSelector } from \"react-redux\";\nimport { apiService } from \"../../../services/api/api.service\";\nimport { toast } from \"react-toastify\";\n\nexport const March8Body = ({ data }) => {\n const { customBudgetData, getCustomBudgetInfo, shouldShowMorePerks } = data;\n\n const { id: userId, vocativeName, firstName } = useSelector(\n state => state.app.user\n );\n\n const [budgetData, setBudgetData] = useState({\n totalBudget: 0,\n spentBudget: 0\n });\n const [selectedDataBudget, setSelectedDataBudget] = useState([]);\n\n const staticCardData = [\n {\n id: 1,\n title: \"Lilly poklon vaučer\",\n description: `Kompanija Benefiti vam poklanja Lily poklon vaučer u vrednosti do ${budgetData.totalBudget} dinara.`,\n price: 4000,\n category: \"Poklon za 8. mart\",\n image:\n \"https://gazfduoumclmczxravnt.supabase.co/storage/v1/object/public/platform/localhost/lily-logo.png\",\n location: \"Remote\"\n },\n {\n id: 2,\n title: \"Jasmin poklon vaučer\",\n description: `Kompanija Benefiti vam poklanja Jasmin poklon vaučer u vrednosti do ${budgetData.totalBudget} dinara.`,\n price: 4000,\n category: \"Poklon za 8. mart\",\n image:\n \"https://gazfduoumclmczxravnt.supabase.co/storage/v1/object/public/platform/localhost/jasmin-logo.png\",\n location: \"Remote\"\n },\n {\n id: 3,\n title: \"DM poklon vaučer\",\n description: `Kompanija Benefiti vam poklanja DM poklon vaučer u vrednosti do ${budgetData.totalBudget} dinara.`,\n price: 4000,\n category: \"Poklon za 8. mart\",\n image:\n \"https://gazfduoumclmczxravnt.supabase.co/storage/v1/object/public/platform/localhost/dm-logo.png\",\n location: \"Remote\"\n }\n ];\n\n const morePerksStaticData = [\n {\n id: 4,\n title: \"Mali Proizvođači poklon paket 'Liker od maline'\",\n description: `Kompanija Benefiti vam poklanja 'Mali Proizvođači poklon paket Liker od maline'.`,\n price: 3420,\n category: \"Poklon za 8. mart\",\n image:\n \"https://gazfduoumclmczxravnt.supabase.co/storage/v1/object/public/platform/localhost/mp-malina.png\",\n location: \"Remote\"\n },\n {\n id: 5,\n title: \"Mali Proizvođači poklon paket 'Orahovača'\",\n description: `Kompanija Benefiti vam poklanja 'Mali Proizvođači poklon paket Orahovača'.`,\n price: 3970,\n category: \"Poklon za 8. mart\",\n image:\n \"https://gazfduoumclmczxravnt.supabase.co/storage/v1/object/public/platform/localhost/pm-orahovaca.png\",\n location: \"Remote\"\n }\n ];\n\n const subscribeToCustomBenefit = async payload => {\n try {\n const response = await apiService.post(\n \"/custom-budgets/subscribe\",\n payload\n );\n await getCustomBudgetInfo();\n\n toast.success(response.data.message);\n } catch (error) {\n toast.error(\n error.errorMessage || \"Nemate dovoljno sredstava za ovu transakciju.\"\n );\n console.log(error, \"Unable to subscribeToCustomBenefit\");\n }\n };\n\n const handleSelect = useCallback(\n data => {\n const payload = {\n userId: userId,\n price: data.price,\n providerId: data.cardId,\n providerDescription: data.cardDescription,\n customProvider: data.customProvider\n };\n\n subscribeToCustomBenefit(payload);\n },\n [selectedDataBudget]\n );\n\n useEffect(() => {\n const totalBudget = customBudgetData[0].totalBudget;\n\n const disableIds = customBudgetData\n .map(item => item.providerId)\n .some(item => item > 3);\n\n const payload = {\n totalBudget: totalBudget,\n spentBudget: disableIds\n ? totalBudget\n : customBudgetData.reduce(\n (total, item) => total + Number(item.spentBudget),\n 0\n )\n };\n\n setBudgetData(payload);\n\n const spentCardData = customBudgetData.map(customBudgetItem => {\n return {\n subscribedId: customBudgetItem.id,\n userId: customBudgetItem.userId,\n cardId: customBudgetItem.providerId,\n price: customBudgetItem.spentBudget\n };\n });\n\n setSelectedDataBudget(spentCardData);\n }, [customBudgetData]);\n\n const unsubscribe = async customBudgetId => {\n try {\n await apiService.delete(`/custom-budgets/${customBudgetId}`);\n await getCustomBudgetInfo();\n toast.success(\"Uspešna odjava pretplate.\");\n } catch (error) {\n console.log(error, \"unsubscribe\");\n toast.error(\"Neuspešna odjava pretplate.\");\n }\n };\n\n const getDataForUnsubscribe = useCallback(\n async cardId => {\n try {\n const response = await apiService.get(\n `/custom-budgets/checkup?provider_id=${cardId}`\n );\n\n const customBudgetId = response.data.data.id;\n await unsubscribe(customBudgetId);\n } catch (error) {\n console.log(error, \"getDataForUnsubscribe\");\n toast.error(\"Neuspešna odjava pretplate\");\n }\n },\n [selectedDataBudget]\n );\n\n return (\n
\n

\n Draga {vocativeName || firstName}, u vidu poklona za 8. mart, priredili\n smo Vam sledeća iskustva koje možete izabrati.\n

\n\n \n \n Ukupan Budžet: {budgetData.totalBudget} \n \n \n Preostali Budžet:{\" \"}\n {budgetData.totalBudget - budgetData.spentBudget} \n \n \n\n
\n {/* For benefits */}\n {shouldShowMorePerks &&\n morePerksStaticData.map(card => {\n return (\n item.cardId)\n .some(someItem =>\n staticCardData.map(item => item.id).includes(someItem)\n )}\n getDataForUnsubscribe={getDataForUnsubscribe}\n />\n );\n })}\n {/* For other users */}\n {staticCardData.map(card => {\n return (\n item.cardId)\n .some(someItem =>\n morePerksStaticData.map(item => item.id).includes(someItem)\n )}\n getDataForUnsubscribe={getDataForUnsubscribe}\n />\n );\n })}\n
\n
\n );\n};\n","import styled from \"styled-components\";\n\nconst March8Styles = styled.div`\n width: 100%;\n position: relative;\n\n .custom-budget__header {\n height: 50px;\n display: flex;\n align-items: center;\n gap: 10px;\n color: #757575;\n\n .custom-budget__company-logo {\n border-radius: 50%;\n }\n\n h3 {\n width: 100%;\n position: absolute;\n text-align: center;\n left: 50%;\n transform: translate(-50%, -50%);\n margin-top: 15px;\n }\n }\n\n .custom-budget__body {\n display: flex;\n flex-direction: column;\n padding: 20px;\n\n .custom-budget-body__intro {\n text-align: justify;\n font-size: 14px;\n color: #757575;\n font-weight: 500;\n }\n\n .custom-budget-body__budget {\n display: flex;\n justify-content: space-evenly;\n align-items: center;\n justify-content: space-evenly;\n border-radius: 16px;\n background: #fff;\n box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2),\n 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 4px 5px 0 rgba(0, 0, 0, 0.14);\n padding: 8px 10px 8px 10px;\n display: flex;\n padding: 10px;\n flex-direction: column;\n width: 250px;\n margin-top: 20px;\n align-items: flex-start;\n gap: 10px;\n\n & > span {\n display: flex;\n align-items: center;\n font-size: 14px;\n font-weight: 500;\n color: #757575;\n gap: 5px;\n }\n }\n\n .custom-budget-body__cards {\n flex-wrap: wrap;\n margin-top: 20px;\n display: flex;\n justify-content: center;\n transition: border 0.5s ease-in;\n\n .benefitCardWrapper {\n border: 2px solid #757575;\n\n &:hover {\n border: 2px solid #0b75a6;\n }\n\n &--selected {\n border: 2px solid #0b75a6;\n background-color: #a1d8f280;\n }\n\n &--disabled {\n opacity: 0.7;\n cursor: not-allowed;\n }\n }\n\n .tokensContentChosen {\n font-size: 14px;\n font-weight: 500;\n color: #757575;\n display: flex;\n gap: 5px;\n align-items: center;\n\n button {\n padding: 7px 30px;\n border-radius: 4px;\n border: none;\n background: transparent;\n cursor: pointer;\n border: 0.5px solid #0b75a6;\n color: #0b75a6;\n font-size: 14px;\n font-weight: 500;\n transition: 0.5s ease-in;\n\n &:hover {\n background: #0b75a6;\n color: #fff;\n }\n\n &:disabled {\n cursor: not-allowed;\n pointer-events: none;\n }\n }\n }\n\n .tokensContent {\n width: 100%;\n display: flex;\n justify-content: space-between;\n\n .input-tokens {\n padding: 10px;\n width: 120px;\n height: 35px;\n border: 1px solid #0b75a6;\n border-radius: 5px;\n text-align: left;\n font-size: 14px;\n font-weight: 500;\n color: #757575;\n\n &--disabled {\n cursor: not-allowed;\n pointer-events: none;\n }\n }\n\n button {\n padding: 7px 30px;\n border-radius: 4px;\n border: none;\n background: transparent;\n cursor: pointer;\n border: 0.5px solid #0b75a6;\n color: #0b75a6;\n font-size: 14px;\n font-weight: 500;\n transition: 0.5s ease-in;\n\n &:hover {\n background: #0b75a6;\n color: #fff;\n }\n\n &:disabled {\n cursor: not-allowed;\n pointer-events: none;\n }\n }\n }\n }\n }\n`;\n\nexport default March8Styles;\n","import React from \"react\";\nimport { March8Header } from \"./March8Header\";\nimport { March8Body } from \"./March8Body\";\nimport March8Styles from \"./March8Styles\";\n\nexport const March8 = ({ content, data }) => {\n const showContent = (content, data) => {\n const Content = {\n header: data => ,\n body: data => ,\n footer: () => <>Footer\n };\n\n return Content[content](data);\n };\n\n return {showContent(content, data)};\n};\n","import React, { useEffect, useState } from \"react\";\nimport CustomBudgetsStyles from \"./CustomBudgetsStyles\";\nimport { useSelector } from \"react-redux\";\nimport { Modal } from \"../modal\";\nimport { apiService } from \"../../services/api/api.service\";\nimport { PngPhoto } from \"../../services/global.entities\";\nimport { getUrl } from \"../../services/imageHandler\";\nimport { March8 } from \"./March8/March8\";\nimport { useHistory } from \"react-router-dom/cjs/react-router-dom.min\";\n\nexport const CustomBudgets = () => {\n const { companyId } = useSelector(state => state.app.user);\n const history = useHistory();\n\n const [isOpen, setIsOpen] = useState(true);\n const [companyInfo, setCompanyInfo] = useState(null);\n\n const [customBudgetData, setCustomBudgetData] = useState([]);\n\n const getCustomBudgetInfo = async () => {\n try {\n const response = await apiService.get(`/custom-budgets`);\n\n setCustomBudgetData(response.data.items);\n } catch (error) {\n console.error(error, \"Unable to getCustomBudgetInfo\");\n }\n };\n\n const getCompanyInfo = async companyId => {\n try {\n const response = await apiService.get(`/company/${companyId}`);\n\n const companyPhoto = new PngPhoto(response.data.Photo);\n const companyLogo = getUrl(companyPhoto, \"url3x\");\n setCompanyInfo({ logo: companyLogo || null, name: response.data.name });\n } catch (error) {\n console.error(error, \"Unable to getCompanyInfo\");\n }\n };\n\n useEffect(() => {\n getCustomBudgetInfo();\n\n if (!companyId) return;\n getCompanyInfo(companyId);\n }, [companyId]);\n\n const handleClose = () => {\n setIsOpen(false);\n\n history.push(\"/\");\n };\n\n const whiteListedCompanies = [5];\n\n const shouldShowMorePerks = whiteListedCompanies.includes(companyId);\n\n return (\n <>\n {isOpen && companyInfo && (\n \n \n
\n
\n \n
\n {customBudgetData.length > 0 && (\n
\n \n
\n )}\n
\n
\n
\n )}\n \n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { connect, useSelector } from \"react-redux\";\nimport { HashRouter as Router, Route, Switch } from \"react-router-dom\";\nimport \"react-toastify/dist/ReactToastify.css\";\n\nimport { SidebarMenu } from \"./components\";\nimport NotFound from \"./pages/NotFound\";\n\nimport { getItem } from \"./services/localStorage.service\";\nimport { isAuthenticatedRole } from \"./services/roles.utils\";\nimport { BENEFIT_ROLE } from \"./constants/localStorage.constants\";\nimport * as actionCreators from \"./actions/app.actions\";\nimport * as api from \"./services/api/auth.service\";\nimport { INTERCOM_API_KEY, OLVY_ORGANISATION } from \"./constants/api.constants\";\nimport { UserRolesKeysEnum } from \"./constants/roles.constants\";\nimport { shouldShowInRsd } from \"./utils/transformTokensToRsd\";\nimport { CustomBudgets } from \"./components/CustomBudgets/CustomBudgets\";\nimport { useHistory } from \"react-router-dom/cjs/react-router-dom.min\";\nimport { apiService } from \"./services/api/api.service\";\n\nconst AppRoute = ({ component: Component, fullLayout, user, ...rest }) => {\n const [showCustomBudgets, setShowCustomBudgets] = useState(false);\n const history = useHistory();\n\n const query = new URLSearchParams(history.location.search);\n const isCustomBudgets = query.get(\"custom-budgets\");\n\n const isUserInCustomBudgetData = async () => {\n try {\n const response = await apiService.get(\"/custom-budgets\");\n\n return response.data.items.length > 0;\n } catch (error) {\n console.error(error, \"Unable to getCustomBudgetInfo\");\n return false;\n }\n };\n const fetchData = async () => {\n const data = await isUserInCustomBudgetData();\n\n setShowCustomBudgets(Boolean(isCustomBudgets) && data);\n };\n\n useEffect(() => {\n fetchData();\n }, [query]);\n\n return (\n {\n return (\n <>\n {/* */}\n {showCustomBudgets && }\n {!fullLayout && }\n \n \n );\n }}\n />\n );\n};\n\nconst App = ({ routes, setUser, user }) => {\n const { companyId } = useSelector(state => state.app.user);\n\n const fetchUser = async () => {\n const response = await api.getUser();\n if (response.hasError) {\n } else {\n setUser(response);\n\n user.authenticatedRole &&\n !isAuthenticatedRole(user.authenticatedRole, UserRolesKeysEnum.ADMIN) &&\n window.Intercom(\"boot\", {\n api_base: \"https://api-iam.intercom.io\",\n app_id: INTERCOM_API_KEY,\n name: `${response.firstName} ${response.lastName}`, // Full name\n email: response.email, // Email address\n user_id: response.id,\n remaining_tokens: response.remainingTokens,\n user_hash: response.userHash\n });\n\n isAuthenticatedRole(user.authenticatedRole, UserRolesKeysEnum.ADMIN) &&\n window.Intercom(\"shutdown\");\n\n if (window.Olvy) {\n window.Olvy.init({\n organisation: OLVY_ORGANISATION,\n target: \"#olvy-target\",\n type: \"sidebar\",\n view: {\n showSearch: false,\n compact: false,\n showHeader: false,\n showUnreadIndicator: true,\n unreadIndicatorColor: \"#cc1919\",\n unreadIndicatorPosition: \"top-right\"\n }\n });\n window.Olvy.setUser({\n name: `${response.firstName} ${response.lastName}`, // Full name\n email: response.email, // Email address\n identifier: response.userHash\n });\n }\n return function cleanup() {\n if (window.Olvy) {\n window.Olvy.teardown();\n }\n };\n }\n };\n\n useEffect(() => {\n if (getItem(BENEFIT_ROLE)) {\n fetchUser();\n }\n }, [user.authenticatedRole.key]);\n\n const fetchCompanyTokensInfo = async companyId => {\n // Osmisliti bolju logiku\n if (!companyId) return;\n if (localStorage.getItem(\"isValueInRsd\")) return;\n\n try {\n await shouldShowInRsd(companyId);\n } catch (error) {\n console.log(error, \"Unable to set to currency\");\n }\n };\n\n useEffect(() => {\n fetchCompanyTokensInfo(companyId);\n }, [companyId]);\n\n return (\n \n \n {routes.map(({ exact, path, component, fullLayout }) => (\n \n ))}\n \n \n \n );\n};\n\nconst mapStateToProps = state => {\n return {\n routes: state.app.routes,\n user: state.app.user\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setUser: payload => dispatch(actionCreators.setUser(payload))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(App);\n","import styled from 'styled-components'\n\nconst LoginStyles = styled.section`\n\tmin-height: 100vh;\n\theight: 100vh;\n width: 100%;\n display: flex;\n justify-content: center;\n\talign-items: center;\n\t\n\t@media only screen and (max-height: 420px) {\n\t\theight: unset;\n\t\tpadding: 20px 0;\n overflow-y: scroll;\n }\n`\n\nexport default LoginStyles\n","export const findLocales = language => {\n return localStorage.getItem(\"locales\") === language;\n};\n","import validator from \"validator\";\nimport { findLocales } from \"../../../utils/helpers/findLocales\";\n\nexport const validateLogin = ({ email, password }) => {\n const errors = {};\n const isInLanguage = findLocales(\"rs\");\n\n if (!email) {\n errors.email = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!validator.isEmail(email)) {\n errors.email = isInLanguage ? \"Neispravna email adresa\" : \"Invalid email\";\n }\n\n if (!password) {\n errors.password = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (password.length < 8) {\n errors.password = isInLanguage\n ? \"Minimalno 8 karaktera\"\n : \"At least 8 characters\";\n }\n\n return errors;\n};\n","import styled from \"styled-components\";\n\nexport const LoginFormStyles = styled.section`\n display: flex;\n width: 71.25%;\n height: 71.3%;\n min-width: 420px;\n min-height: 420px;\n border-radius: 4px;\n overflow: hidden;\n box-shadow: 2px 5px 10px 2px #888;\n\n .lngDropdown {\n position: absolute;\n top: 10px;\n right: 10px;\n z-index: 10;\n\n .flagDropdownWrapper {\n .shownFlag {\n box-shadow: none;\n }\n }\n }\n\n .authWindow {\n overflow: hidden;\n position: relative;\n width: 530px;\n min-width: 420px;\n padding: 40px;\n\n .logo {\n font-size: 32px;\n }\n\n .formContainer {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n .serverErrorMsg {\n font-size: 14px;\n color: red;\n margin-bottom: 20px;\n height: 18px;\n }\n\n .form {\n width: 66.04%;\n\n .errorMsg {\n font-size: 12px;\n color: red;\n }\n\n .label {\n width: 100%;\n font-size: 14px;\n\n .inputs {\n margin: 0 0 30px 0;\n font-size: 16px;\n padding: 5px 10px 2px 10px;\n line-height: 24px;\n width: 100%;\n border-top: none;\n border-left: none;\n border-right: none;\n border-bottom: 1px solid #1568bf;\n }\n\n .inputs:focus {\n outline: none;\n border-bottom: 1px solid #1568bf;\n }\n\n input[type=\"number\"]::-webkit-inner-spin-button,\n input[type=\"number\"]::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n\n .label:focus-within {\n color: #1568bf;\n }\n\n .checkbox-wrapper {\n margin: 20px 0;\n display: flex;\n flex-direction: row;\n align-items: center;\n label {\n margin-left: 10px;\n width: 150px;\n }\n }\n\n .buttonContainer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .forgotPassword {\n color: black;\n font-size: 14px;\n\n &:hover {\n color: #1568bf;\n }\n }\n\n .submitButton {\n padding: 5px 20px;\n color: #fff;\n cursor: pointer;\n background: darkblue;\n font-weight: bold;\n font-size: 16px;\n border-radius: 4px;\n border: 1px solid darkblue;\n }\n\n .submitButton:focus {\n outline: none;\n }\n }\n\n .goBackContainer {\n font-size: 14px;\n text-decoration: underline;\n cursor: pointer;\n margin-top: 30px;\n\n &:hover {\n color: #1568bf;\n }\n }\n }\n }\n }\n\n .bannerWindow {\n position: relative;\n width: 838px;\n background-image: linear-gradient(to bottom, #1488cc 3%, #1e3c72);\n }\n\n @media only screen and (max-width: 1279px) {\n .authWindow {\n width: 100%;\n }\n\n .bannerWindow {\n display: none;\n }\n }\n\n @media only screen and (max-width: 420px) {\n width: 100%;\n height: 100%;\n box-shadow: none;\n min-width: 0;\n\n .authWindow {\n width: 100%;\n min-width: unset;\n padding: 20px;\n }\n }\n\n @media only screen and (max-height: 420px) {\n min-height: 360px;\n\n .authWindow {\n padding: 20px;\n }\n }\n`;\n","import styled from \"styled-components\";\n\nconst TreeAnimationStyles = styled.div`\n background-image: linear-gradient(to bottom, #1488cc 3%, #1e3c72);\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n display: none;\n\n @media screen and (min-width: 876px) {\n display: flex;\n }\n\n svg {\n width: 10rem;\n height: 10rem;\n }\n\n .snow-container {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n overflow: hidden;\n }\n\n .snowflake {\n position: absolute;\n background: white;\n border-radius: 50%;\n opacity: 0.8;\n }\n\n @keyframes fall {\n 0% {\n transform: translateY(0);\n }\n 100% {\n transform: translateY(100vh);\n }\n }\n\n @keyframes diagonal-fall {\n 0% {\n transform: translateY(0) translateX(0);\n }\n 100% {\n transform: translateY(100vh) translateX(20vw);\n }\n }\n`;\n\nexport default TreeAnimationStyles;\n","import React, { useEffect, useRef } from \"react\";\nimport TreeAnimationStyles from \"./TreeAnimationStyles\";\nimport { BenefitLogo } from \"../../assets/Icons\";\n\nconst SnowAnimation = () => {\n // const snowContainerRef = useRef(null);\n\n // useEffect(() => {\n // const snowContainer = snowContainerRef.current;\n // if (!snowContainer) return;\n\n // const particlesPerThousandPixels = 0.1;\n // const fallSpeed = 1.25;\n // const pauseWhenNotActive = true;\n // const maxSnowflakes = 200;\n // const snowflakes = [];\n // let snowflakeInterval;\n // let isTabActive = true;\n\n // const resetSnowflake = snowflake => {\n // const size = Math.random() * 5 + 1;\n // const viewportWidth = window.innerWidth - size; // Adjust for snowflake size\n // const viewportHeight = window.innerHeight;\n\n // snowflake.style.width = `${size}px`;\n // snowflake.style.height = `${size}px`;\n // snowflake.style.left = `${Math.random() * viewportWidth}px`; // Constrain within viewport width\n // snowflake.style.top = `-${size}px`;\n\n // const animationDuration = (Math.random() * 3 + 2) / fallSpeed;\n // snowflake.style.animationDuration = `${animationDuration}s`;\n // snowflake.style.animationTimingFunction = \"linear\";\n // snowflake.style.animationName =\n // Math.random() < 0.5 ? \"fall\" : \"diagonal-fall\";\n\n // setTimeout(() => {\n // if (parseInt(snowflake.style.top, 10) < viewportHeight) {\n // resetSnowflake(snowflake);\n // } else {\n // snowflake.remove();\n // const index = snowflakes.indexOf(snowflake);\n // if (index > -1) snowflakes.splice(index, 1);\n // }\n // }, animationDuration * 1000);\n // };\n\n // const createSnowflake = () => {\n // if (snowflakes.length < maxSnowflakes) {\n // const snowflake = document.createElement(\"div\");\n // snowflake.classList.add(\"snowflake\");\n // snowflakes.push(snowflake);\n // snowContainer.appendChild(snowflake);\n // resetSnowflake(snowflake);\n // }\n // };\n\n // const generateSnowflakes = () => {\n // const numberOfParticles =\n // Math.ceil((window.innerWidth * window.innerHeight) / 1000) *\n // particlesPerThousandPixels;\n // const interval = 5000 / numberOfParticles;\n\n // clearInterval(snowflakeInterval);\n // snowflakeInterval = setInterval(() => {\n // if (isTabActive && snowflakes.length < maxSnowflakes) {\n // requestAnimationFrame(createSnowflake);\n // }\n // }, interval);\n // };\n\n // const handleVisibilityChange = () => {\n // if (!pauseWhenNotActive) return;\n\n // isTabActive = !document.hidden;\n // if (isTabActive) {\n // generateSnowflakes();\n // } else {\n // clearInterval(snowflakeInterval);\n // }\n // };\n\n // generateSnowflakes();\n\n // window.addEventListener(\"resize\", () => {\n // clearInterval(snowflakeInterval);\n // setTimeout(generateSnowflakes, 1000);\n // });\n\n // document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n\n // return () => {\n // clearInterval(snowflakeInterval);\n // document.removeEventListener(\"visibilitychange\", handleVisibilityChange);\n // window.removeEventListener(\"resize\", () => {\n // clearInterval(snowflakeInterval);\n // setTimeout(generateSnowflakes, 1000);\n // });\n // };\n // }, []);\n\n return (\n \n {/*
*/}\n\n \n
\n );\n};\n\nexport default SnowAnimation;\n","import React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useHistory, Link } from \"react-router-dom\";\nimport { toast } from \"react-toastify\";\nimport { useFormik } from \"formik\";\n\n// Validations\nimport { validateLogin } from \"../../../services/validations/publicPages/loginFormValidation\";\n\n// Components\nimport { LoginFormStyles } from \"./LoginFormStyles\";\nimport { BenefitLogo } from \"../../../assets/Icons\";\nimport { Button, CheckboxInput } from \"../../\";\nimport Unmasked from \"../../../assets/images/002-visibility.png\";\nimport Masked from \"../../../assets/images/003-visibility-1.png\";\n\n// Services\nimport * as actionCreators from \"../../../actions/app.actions\";\nimport * as api from \"../../../services/api/auth.service\";\n\n// Utils\nimport { isAuthenticatedRole } from \"../../../services/roles.utils\";\n\n// Constants\nimport { UserRolesKeysEnum } from \"../../../constants/roles.constants\";\nimport { useTranslation } from \"react-i18next\";\nimport { LanguageDropdown } from \"../../locales/LanguageDropdown\";\nimport SnowAnimation from \"../../ChristmasAnimation/ChristmasAnimation\";\n\nconst LoginForm = ({ login, setIsBenefitLogin }) => {\n const { t } = useTranslation();\n\n const history = useHistory();\n const [maskedNewPassword, setMaskedNewPassword] = useState(true);\n\n const handleLogin = async values => {\n const response = await api.login(values);\n if (response.hasError) {\n return toast.error(\n response.errorMessage ? response.errorMessage : t(\"failed_to_login\")\n );\n }\n window.location.reload();\n\n if (\n isAuthenticatedRole(\n response.user.authenticatedRole,\n UserRolesKeysEnum.HR\n ) &&\n !response.user.isOnboardingDone\n ) {\n history.push(\"/onboarding\");\n }\n login(response.user);\n\n const metadata = {\n user_id: response.user.id,\n email: response.user.email,\n name: `${response.user.firstName} ${response.user.lastName}`,\n created_at: new Date()\n };\n window.Intercom(\"trackEvent\", \"user-login\", metadata);\n };\n\n const formik = useFormik({\n initialValues: {\n email: \"\",\n password: \"\",\n remember: false\n },\n validate: validateLogin,\n onSubmit: handleLogin\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n
\n
\n \n
\n \n
\n
\n
\n \n \n\n
\n
\n \n setMaskedNewPassword(!maskedNewPassword)}\n alt=\"masked\"\n style={{\n position: \"absolute\",\n cursor: \"pointer\",\n right: -30\n }}\n />\n
\n \n\n
\n \n \n
\n\n
\n
\n \n {t(\"forgot_password\")}\n \n
\n \n
\n
\n
setIsBenefitLogin(false)}>{t(\"go_back\")}
\n
\n \n \n \n {/*
*/}\n \n \n );\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n login: payload => dispatch(actionCreators.login(payload))\n };\n};\n\nexport default connect(null, mapDispatchToProps)(LoginForm);\n","import { LogLevel } from \"@azure/msal-browser\";\n// Browser check variables\n// If you support IE, our recommendation is that you sign-in using Redirect APIs\n// If you as a developer are testing using Edge InPrivate mode, please add \"isEdge\" to the if check\nconst ua = window.navigator.userAgent;\nconst msie = ua.indexOf(\"MSIE \");\nconst msie11 = ua.indexOf(\"Trident/\");\nconst msedge = ua.indexOf(\"Edge/\");\nconst firefox = ua.indexOf(\"Firefox\");\nconst isIE = msie > 0 || msie11 > 0;\nconst isEdge = msedge > 0;\nconst isFirefox = firefox > 0; // Only needed if you need to support the redirect flow in Firefox incognito\n\n// Config object to be passed to Msal on creation\nexport const msalConfig = {\n auth: {\n clientId: \"529eafa6-0981-45ff-81dc-23c1df8f1305\",\n authority:\n \"https://login.microsoftonline.com/c527ff3f-f379-4557-98ee-38f2c2bb9537\",\n redirectUri: \"/\",\n postLogoutRedirectUri: \"/\"\n },\n cache: {\n cacheLocation: \"localStorage\",\n storeAuthStateInCookie: isIE || isEdge || isFirefox\n },\n system: {\n allowNativeBroker: false, // Disables WAM Broker\n loggerOptions: {\n loggerCallback: (level, message, containsPii) => {\n if (containsPii) {\n return;\n }\n switch (level) {\n case LogLevel.Error:\n console.error(message);\n return;\n case LogLevel.Info:\n console.info(message);\n return;\n case LogLevel.Verbose:\n console.debug(message);\n return;\n case LogLevel.Warning:\n console.warn(message);\n return;\n default:\n return;\n }\n }\n }\n }\n};\n\n// Add here scopes for id token to be used at MS Identity Platform endpoints.\nexport const loginRequest = {\n scopes: [\"User.Read.All\"]\n};\n\n// Add here the endpoints for MS Graph API services you would like to use.\nexport const graphConfig = {\n graphMeEndpoint: \"https://graph.microsoft.com/v1.0/me\"\n};\n","import styled from \"styled-components\";\n\nconst AzureLoginStyles = styled.section`\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: 50px;\n padding: 30px;\n width: 400px;\n height: 400px;\n border-radius: 4px;\n overflow: hidden;\n box-shadow: 2px 5px 10px 2px #888;\n\n .lngDropdown {\n display: flex;\n justify-content: flex-end;\n\n .flagDropdownWrapper {\n width: 75px;\n\n &:hover {\n background-color: unset;\n }\n\n .shownFlag {\n width: unset;\n box-shadow: none;\n\n &:hover {\n background-color: unset;\n color: unset;\n svg {\n fill: unset;\n }\n }\n }\n }\n }\n\n button {\n justify-content: space-around;\n &:hover {\n background-color: #1568bf; //#668CCC\n color: #fff;\n svg {\n fill: #fff;\n }\n }\n }\n\n .logo {\n font-size: 32px;\n }\n\n @media only screen and (max-width: 420px) {\n width: 100%;\n height: 100%;\n }\n`;\n\nexport default AzureLoginStyles;\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { useHistory } from \"react-router\";\nimport { useMsal } from \"@azure/msal-react\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\n// services\nimport { loginRequest } from \"../../config/azureAuth.config\";\nimport * as actionCreators from \"../../actions/app.actions\";\nimport * as api from \"../../services/api/auth.service\";\nimport { isAuthenticatedRole } from \"../../services/roles.utils\";\nimport { handleAzureLoginError } from \"../../services/errors/login/AzureLoginError\";\n// components\nimport Button from \"../../components/button\";\n// assets\nimport {\n BenefitLogo,\n MicrosoftIconSvg,\n EnvelopIconSvg\n} from \"../../assets/Icons\";\n// styles\nimport AzureLoginStyles from \"./AzureLogin.styles\";\n// constants\nimport { UserRolesKeysEnum } from \"../../constants/roles.constants\";\nimport { useTranslation } from \"react-i18next\";\nimport { LanguageDropdown } from \"../../components/locales/LanguageDropdown\";\n\nconst AzureLogin = ({ setIsBenefitLogin, login }) => {\n const { instance } = useMsal();\n const { t } = useTranslation();\n const history = useHistory();\n\n const azureLogin = async token => {\n const response = await api.azureLogin({ token: token });\n\n if (response.hasError) {\n return toast.error(response.errorMessage || t(\"failed_to_login\"));\n }\n\n if (\n isAuthenticatedRole(\n response.user.authenticatedRole,\n UserRolesKeysEnum.HR\n ) &&\n !response.user.isOnboardingDone\n ) {\n history.push(\"/onboarding\");\n }\n\n login(response.user);\n\n const metadata = {\n user_id: response.user.id,\n email: response.user.email,\n name: `${response.user.firstName} ${response.user.lastName}`,\n created_at: new Date()\n };\n\n window.location.reload();\n window.Intercom(\"trackEvent\", \"user-login\", metadata);\n };\n\n const handleLogin = async () => {\n try {\n const response = await instance.loginPopup({\n ...loginRequest,\n redirectUri: window.location.origin + \"/redirect\"\n });\n\n azureLogin(response.accessToken);\n } catch (error) {\n return handleAzureLoginError(error);\n }\n };\n\n return (\n \n
\n \n
\n \n setIsBenefitLogin(true)}\n type=\"button\"\n padding=\"15px 0\"\n margin=\"0\"\n width=\"100%\"\n height=\"65px\"\n outline\n customClass=\"loginChange\"\n >\n \n {t(\"LWE\")}\n \n \n \n {t(\"LWM\")}\n \n
\n );\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n login: payload => dispatch(actionCreators.login(payload))\n };\n};\n\nAzureLogin.propTypes = {\n setIsBenefitLogin: PropTypes.func,\n login: PropTypes.func\n};\n\nexport default connect(null, mapDispatchToProps)(AzureLogin);\n","import { BrowserAuthError } from \"@azure/msal-browser\";\nimport { toast } from \"react-toastify\";\n\nexport const handleAzureLoginError = (error) => {\n if (error instanceof BrowserAuthError) {\n console.error('BrowserAuthError:', error.errorCode, error.errorMessage);\n if (error.errorCode === 'popup_window_error') {\n return toast.error('Popup window error! Please retry');\n \n } else if (error.errorCode === 'user_cancelled') {\n return toast.error('User cancel error! Please retry');\n\n } else if (error.errorCode === 'token_renewal_error') {\n return toast.error('Token renewal error! Please reauthenticate');\n\n } else if (error.errorCode === 'login_hint_error') {\n return toast.error('Login hint error! Please reauthenticate');\n\n } else if (error.errorCode === 'interaction_in_progress') {\n return toast.error('Interaction in progress! Please make sure you do not down the popup window');\n\n } else {\n return toast.error('Browser Auth error! Please retry');\n }\n } else {\n console.error('An unexpected error occurred:', error);\n return toast.error('An unexpected error occurred! Please retry');\n };\n};","import React, { useState } from \"react\";\n\nimport LoginStyles from \"./LoginStyles\";\nimport LoginForm from \"../../components/forms/login/LoginForm\";\nimport AzureLogin from \"./AzureLogin\";\n\nconst Login = () => {\n const [isBenefitLogin, setIsBenefitLogin] = useState(false);\n\n return (\n \n {isBenefitLogin ? (\n \n ) : (\n \n )}\n \n );\n};\n\nexport default Login;\n","import validator from \"validator\";\nimport { findLocales } from \"../../../utils/helpers/findLocales\";\n\nexport const validateForgotPassword = ({ email }) => {\n const isInLanguage = findLocales(\"rs\");\n\n const errors = {};\n if (!email) {\n errors.email = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!validator.isEmail(email)) {\n errors.email = isInLanguage ? \"Neispravna email adresa\" : \"Invalid email\";\n }\n\n return errors;\n};\n","import React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { toast } from \"react-toastify\";\nimport { useFormik } from \"formik\";\n\nimport { validateForgotPassword } from \"../../../services/validations/publicPages/forgotPassword.validation\";\nimport { LoginFormStyles } from \"../login/LoginFormStyles\";\nimport { BenefitLogo } from \"../../../assets/Icons\";\nimport Button from \"../../button\";\nimport * as authService from \"../../../services/api/auth.service\";\nimport { useTranslation } from \"react-i18next\";\nimport SnowAnimation from \"../../ChristmasAnimation/ChristmasAnimation\";\n\nexport const ForgotPasswordForm = () => {\n const { t } = useTranslation();\n\n const handleSubmitForgotPassword = async (values, { resetForm }) => {\n const response = await authService.forgotPassword(values);\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage ? response.errorMessage : \"Something went wrong\"\n );\n }\n\n resetForm();\n toast.success(response.message);\n };\n\n const formik = useFormik({\n initialValues: {\n email: \"\"\n },\n validate: validateForgotPassword,\n onSubmit: handleSubmitForgotPassword\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n
\n \n
\n
\n
\n \n \n\n
\n
\n \n {t(\"go_back\")}\n \n
\n \n
\n \n
\n
\n {/*
*/}\n \n \n );\n};\n\nexport default ForgotPasswordForm;\n","import React from 'react'\nimport LoginStyles from './LoginStyles'\nimport Form from '../../components/forms/forgotPassword/ForgotPassowrdForm'\n\n\nconst ForgotPassword = () => (\n\t\n\t\t
\n\t\n)\n\n\nexport default ForgotPassword\n","import validator from \"validator\";\nimport { findLocales } from \"../../../utils/helpers/findLocales\";\n\nexport const resetPasswordValidation = ({\n email,\n password,\n passwordConfirmation\n}) => {\n const isInLanguage = findLocales(\"rs\");\n const errors = {};\n\n if (!email) {\n errors.email = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!validator.isEmail(email)) {\n errors.email = isInLanguage ? \"Neispravna email adresa\" : \"Invalid email\";\n }\n\n if (!password) {\n errors.password = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (password.length < 8) {\n errors.password = isInLanguage\n ? \"Minimalno 8 karaktera\"\n : \"At least 8 characters\";\n } else if (!password.match(/\\d+/g)) {\n errors.password = isInLanguage\n ? \"Mora sadržati broj\"\n : \"Must contain number\";\n } else if (!password.match(/[a-zA-Z]/)) {\n errors.password = isInLanguage\n ? \"Mora sadržati slova\"\n : \"Must contain letters\";\n }\n\n if (!passwordConfirmation) {\n errors.passwordConfirmation = isInLanguage\n ? \"*Obavezno polje\"\n : \"* Required\";\n } else if (passwordConfirmation !== password) {\n errors.passwordConfirmation = isInLanguage ? \"Ne podudara se\" : \"No match\";\n }\n\n return errors;\n};\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Link, useHistory } from \"react-router-dom\";\nimport { toast } from \"react-toastify\";\nimport { useFormik } from \"formik\";\n\nimport { resetPasswordValidation } from \"../../../services/validations/publicPages/resetPassword.validation\";\nimport { LoginFormStyles } from \"../login/LoginFormStyles\";\nimport { BenefitLogo } from \"../../../assets/Icons\";\nimport Button from \"../../button\";\nimport * as authService from \"../../../services/api/auth.service\";\nimport Unmasked from \"../../../assets/images/002-visibility.png\";\nimport Masked from \"../../../assets/images/003-visibility-1.png\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const ResetPassword = ({ email, hash }) => {\n const { t } = useTranslation();\n const [maskedNewPassword, setMaskedNewPassword] = useState(true);\n const [maskedNewPasswordConfirm, setMaskedNewPasswordConfirm] = useState(\n true\n );\n const history = useHistory();\n\n const handleResetPassword = async (values, { resetForm }) => {\n const response = await authService.resetPassword(values);\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_reset_password\")\n );\n }\n\n resetForm();\n toast.success(response.message);\n history.push(\"/\");\n };\n\n const formik = useFormik({\n initialValues: {\n email,\n password: \"\",\n passwordConfirmation: \"\",\n hash\n },\n validate: resetPasswordValidation,\n onSubmit: handleResetPassword\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n
\n \n
\n \n
\n \n \n
\n
\n \n setMaskedNewPassword(!maskedNewPassword)}\n alt=\"masked\"\n style={{\n position: \"absolute\",\n cursor: \"pointer\",\n right: -30\n }}\n />\n
\n \n\n
\n
\n \n \n setMaskedNewPasswordConfirm(!maskedNewPasswordConfirm)\n }\n alt=\"masked\"\n style={{\n position: \"absolute\",\n cursor: \"pointer\",\n right: -30\n }}\n />\n
\n \n\n
\n
\n \n Login\n \n
\n \n
\n \n \n \n
\n \n );\n};\n\nResetPassword.propTypes = {\n email: PropTypes.string,\n hash: PropTypes.string\n};\n\nexport default ResetPassword;\n","/*eslint-disable*/\nimport React from 'react'\nimport {useLocation} from 'react-router-dom'\nimport LoginStyles from './LoginStyles'\nimport Form from '../../components/forms/resetPassword/resetPassword.form'\n\n\n\nconst ResetPassword = () => {\n\tconst location = useLocation()\n\n\tfunction getUrlParameter(name) {\n\t\tname = name.replace(/[\\[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\n\t\tvar regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)');\n\t\tvar results = regex.exec(location.search);\n\t\treturn results === null ? '' : decodeURIComponent(results[1]).replace(\"%2B\", \"+\").replace(\"%40\", \"@\");\n\t};\n\t\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t)\n}\n\n\nexport default ResetPassword\n","import React, {useState, useEffect} from 'react'\nimport styled from 'styled-components'\nimport axios from 'axios'\n\nimport { Button } from '../../components'\n\nconst Styles = styled.div`\n width: 100%;\n height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .text {\n font-style: normal;\n font-weight: normal;\n font-size: 16px;\n line-height: 20px;\n color: #4B4B4B;\n margin: 5px 0;\n text-align: center;\n }\n`\n\nconst PresentationPage = () => {\n const [data, setData] = useState({\n combinations: 0,\n unique: 0\n })\n\n const fetchData = () => {\n axios.get('https://demo.benefit.bstorm.app/api/v1/dashboard/temp-combinations')\n .then(response => {\n setData({\n combinations: response.data.combinations,\n unique: response.data.unique\n })\n })\n .catch(error => {\n alert(error)\n })\n }\n\n\n const resetData = () => {\n axios.post('https://demo.benefit.bstorm.app/api/v1/dashboard/temp-delete')\n .then(response => {\n setData({\n combinations: 0,\n unique: 0\n })\n })\n .catch(error => {\n alert(error)\n })\n }\n\n useEffect(() => {\n fetchData()\n }, [])\n\n return (\n \n
\n
\n

Submited combinations

\n

{data.combinations}

\n
\n
\n

Unique combinations

\n

{data.unique}

\n
\n \n \n GET COMBINATIONS\n \n\n resetData()}\n >\n Reset\n \n
\n
\n )\n}\n\nexport default PresentationPage\n","import styled from 'styled-components'\n\nexport const SetPasswordStyles = styled.div`\n\tpadding: 30px;\n\tbackground: #d8d8d8;\n\n\t.setPasswordContent {\n\t\tmin-height: calc(100vh - 120px);\n\t\tdisplay: flex;\n\t\tflex-direction:column;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\n\t\t.circleLogoContainer {\n\t\t\twidth: 126px;\n\t\t\theight: 126px;\n\t\t\tmargin-bottom: 30px;\n\t\t}\n\n\t\t.setPasswordTitle {\n\t\t\tfont-size: 24px;\n\t\t\tfont-weight: bold;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: 0.81;\n\t\t\tletter-spacing: normal;\n\t\t\tcolor: #4b4b4b;\n\t\t\tmargin-bottom: 30px;\n\t\t}\n\t\t.setPasswordText {\n\t\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.57;\n\t\tletter-spacing: normal;\n\t\ttext-align: center;\n\t\tcolor: #4b4b4b;\n\t\t}\n\n\t\t\t.form {\n\t\t margin-top: 30px;\n max-width: 400px;\n width: 85%;\n \n .errorMsg {\n font-size: 12px;\n color: red\n }\n\n .label {\n width: 100%;\n font-size: 14px;\n\n .inputs {\n margin: 0 0 30px 0;\n font-size: 16px;\n padding: 5px 10px 2px 10px;\n line-height: 24px;\n width: 100%;\n border-top: none;\n border-left: none;\n border-right: none;\n border-bottom: 1px solid #1568bf;\n }\n\n .inputs:focus {\n outline: none;\n border-bottom: 1px solid #1568bf;\n }\n\n input[type='number']::-webkit-inner-spin-button,\n input[type='number']::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n\n .label:focus-within {\n color: #1568bf;\n }\n\n .buttonContainer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n\n .termsContainer {\n display: flex;\n\n .termsCheckbox {\n margin-top: 4px;\n }\n\n .terms {\n width: 203px;\n margin-left: 12px;\n margin-bottom: 7px;\n font-style: normal;\n font-weight: normal;\n font-size: 12px;\n line-height: 20px;\n color: #4B4B4B;\n }\n }\n\n .termsErrors {\n position: absolute;\n left: 0;\n top: -15px;\n height: 15px;\n }\n\n .forgotPassword {\n color: black;\n font-size: 14px;\n\n &:hover {\n color: #1568bf;\n }\n }\n /**TODO remove next snippet -\n start - dead code*/\n .submitButton {\n padding: 5px 20px;\n color: #fff;\n cursor: pointer;\n background: darkblue;\n font-weight: bold;\n font-size: 16px;\n border-radius: 4px;\n border: 1px solid darkblue;\n }\n\n .submitButton:focus {\n outline: none;\n }\n /**end - dead code */\n }\n }\n\n \n\t}\n\n`\n","/* eslint-disable */\nimport validator from \"validator\";\nimport { findLocales } from \"../../../utils/helpers/findLocales\";\n\nexport const setPasswordValidation = ({\n email,\n password,\n passwordConfirmation,\n termsAndPolicy\n}) => {\n const isInLanguage = findLocales(\"rs\");\n const errors = {};\n\n if (!email) {\n errors.email = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!validator.isEmail(email)) {\n errors.email = isInLanguage ? \"Neispravna email adresa\" : \"Invalid email\";\n }\n\n if (!password) {\n errors.password = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (password.length < 8) {\n errors.password = isInLanguage\n ? \"Minimalno 8 karaktera\"\n : \"At least 8 characters\";\n } else if (!password.match(/\\d+/g)) {\n errors.password = isInLanguage\n ? \"Mora sadržati broj\"\n : \"Must contain number\";\n } else if (!password.match(/[a-zA-Z]/)) {\n errors.password = isInLanguage\n ? \"Mora sadržati slova\"\n : \"Must contain letters\";\n }\n\n if (!passwordConfirmation) {\n errors.passwordConfirmation = isInLanguage\n ? \"*Obavezno polje\"\n : \"* Required\";\n } else if (passwordConfirmation !== password) {\n errors.passwordConfirmation = isInLanguage ? \"Ne podudara se\" : \"No match\";\n }\n\n if (!termsAndPolicy) {\n errors.termsAndPolicy = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n return errors;\n};\n","/* eslint-disable */\nimport React, { useState } from \"react\";\nimport { useFormik } from \"formik\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { toast } from \"react-toastify\";\n\n// assets\nimport { BenefitLogoIcon } from \"../../assets/Icons\";\nimport Unmasked from \"../../assets/images/002-visibility.png\";\nimport Masked from \"../../assets/images/003-visibility-1.png\";\n// components\nimport { Card, Button } from \"../../components\";\n// styles\nimport { SetPasswordStyles } from \"./SetPassword.styles\";\n// services\nimport { setPasswordValidation } from \"../../services/validations/publicPages/setPassword.validations\";\nimport * as authService from \"../../services/api/auth.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst SetPassword = () => {\n const { t } = useTranslation();\n const [maskedNewPassword, setMaskedNewPassword] = useState(true);\n const [maskedNewPasswordConfirm, setMaskedNewPasswordConfirm] = useState(\n true\n );\n const location = useLocation();\n const history = useHistory();\n\n function getUrlParameter(name) {\n name = name.replace(/[[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\n const regex = new RegExp(`[\\\\?&]${name}=([^&#]*)`);\n const results = regex.exec(location.search);\n return results === null\n ? \"\"\n : decodeURIComponent(results[1])\n .replace(\"%2B\", \"+\")\n .replace(\"%40\", \"@\");\n }\n\n const handleResetPassword = async (values, { resetForm }) => {\n const response = await authService.resetPassword(values);\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_reset_password\")\n );\n }\n\n resetForm();\n toast.success(response.message);\n history.push(\"/\");\n };\n\n const formik = useFormik({\n initialValues: {\n email: getUrlParameter(\"email\"),\n password: \"\",\n passwordConfirmation: \"\",\n hash: getUrlParameter(\"hash\"),\n termsAndPolicy: false\n },\n validate: setPasswordValidation,\n onSubmit: handleResetPassword\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n handleChange,\n handleBlur\n } = formik;\n return (\n \n \n
\n
\n \n
\n

Welcome to Benefiti!

\n

\n Thank you for confirming your email.\n

\n

\n Please set your password in order to login to the platform!\n

\n\n
\n
\n \n \n
\n
\n \n setMaskedNewPassword(!maskedNewPassword)}\n alt=\"masked\"\n style={{\n position: \"absolute\",\n cursor: \"pointer\",\n right: -30\n }}\n />\n
\n \n\n \n\n
\n
\n
\n \n

\n I agree with{\" \"}\n \n terms and conditions\n \n
\n and the{\" \"}\n \n privacy policy\n \n

\n
\n
\n {errors.termsAndPolicy && touched.termsAndPolicy\n ? errors.termsAndPolicy\n : \"\"}\n
\n
\n\n \n Set Password\n \n
\n \n \n \n \n );\n};\n\nexport default SetPassword;\n","import styled from \"styled-components\";\n\nexport const PrivacyPolicyStyles = styled.div`\n max-width: 720px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 30px 30px 30px;\n\n .circleLogoContainer {\n width: 126px;\n height: 126px;\n margin-bottom: 30px;\n }\n\n .privacy-policy-content {\n max-height: 500px;\n overflow-x: auto;\n padding: 30px;\n\n h2 {\n padding: 10px 0 20px 0;\n }\n\n h3 {\n margin-left: 10px;\n padding: 10px 0 20px 0;\n }\n\n p {\n padding: 10px 0 10px 0;\n }\n\n & > ol {\n list-style: none;\n padding: 10px 0 10px 0;\n\n li {\n padding: 10px 0 10px 0;\n margin-left: 10px;\n }\n }\n\n ul {\n padding: 10px 0 10px 0;\n\n li {\n margin-left: 10px;\n padding: 10px 0 10px 0;\n }\n }\n\n .checkbox-wrapper {\n display: flex;\n align-items: center;\n }\n\n .action-buttons {\n display: flex;\n justify-content: space-evenly;\n align-items: center;\n }\n }\n\n .cancel-button {\n background: crimson;\n }\n\n .title {\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 0.81;\n letter-spacing: normal;\n color: #4b4b4b;\n margin-bottom: 30px;\n }\n\n .text {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n margin-bottom: 10px;\n }\n\n .privacy-policy-subtitle {\n font-size: 16px;\n }\n\n @media only screen and (max-width: 767px) {\n width: 100%;\n height: 100vh;\n }\n`;\n","import React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\n// styles\nimport { PrivacyPolicyStyles } from \"./privacyPolicy.styles\";\n// assets\nimport { BenefitLogoIcon } from \"../../assets/Icons\";\n// components\nimport { Button, CheckboxInput, InputLabel } from \"../\";\n// services\nimport * as api from \"../../services/api/auth.service\";\n// actions\nimport * as actionCreators from \"../../actions/app.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst PrivacyPolicy = ({ acceptPrivacyPolicy, logout }) => {\n const { t } = useTranslation();\n const [hasAcceptedTerms, setHasAcceptedTerms] = useState(false);\n const handleAcceptPrivacyPolicy = async () => {\n const response = await api.acceptPrivacyPolicy();\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_accept_policy\")\n );\n }\n acceptPrivacyPolicy();\n };\n\n return (\n \n
\n \n
\n
\n

OBAVEŠTENJE O PRIVATNOSTI

\n\n

1. Datum izdavanja Obaveštenja o privatnosti

\n

\n Ovo Obaveštenje o privatnosti (\n Obaveštenje\n ) je izdato 25.02.2021. godine.\n

\n

2. Svrha obaveštavanja

\n

\n \n Ovim Obaveštenjem želimo da Vam na lako razumljiv i transparentan\n način pružimo informacije o tome na koji način SBT obrađuje podatke\n o ličnosti lica na koja se podaci odnose, koje kategorije podataka o\n ličnosti obrađuje SBT i koja prava imaju lica na koja se podaci\n odnose. Obrađujemo Vaše podatke o ličnosti u ime kompanija sa kojima\n sarađujemo (\n \n Klijenti\n ) kako bismo:\n

\n
    \n
  1. \n \n 1. mogli da svojim Klijentima omogućimo sve prednosti korišćenja\n naše softverske platforme Benefiti.rs (\n \n Platforma\n \n ), preko koje oni u svojstvu poslodavca i rukovaoca u obradi\n podataka o ličnosti svojim zaposlenima (\n \n Krajnji korisnici\n \n ) obezbeđuju personalizovane, fleksibilne i merljive benefite i\n podsticaje u okviru svog predefinisanog budžeta (\n \n Benefiti\n );\n
  2. \n
  3. \n \n 2. omogućili Klijentima isporučivanje odabranih Benefita Krajnjim\n korisnicima. \n \n
  4. \n
\n

\n \n Sve podatke o ličnosti navedene u ovom Obaveštenju obrađujemo i\n štitimo u potpunosti u skladu sa srpskim Zakonom o zaštiti podataka\n o ličnosti (ZZPL) i Opštom uredom o zaštiti podataka o ličnosti\n (GDPR), a isključivo na osnovu pismenih uputstava Klijenta kao\n rukovaoca.\n \n

\n
    \n
  • \n \n Podatak o ličnosti predstavlja svaki podatak koji se odnosi na\n fizičko lice čiji je identitet određen ili odrediv, kao što su\n lično ime, godište, fotografija ili lokacija. Podaci koji su\n anonimizovani se ne smatraju ličnim podacima.\n \n
  • \n
\n
    \n
  • \n \n Obrada predstavlja svaku radnju ili skup radnji koje se vrše sa\n podacima o ličnosti ili njihovim skupovima (npr. prikupljanje,\n skladištenje, upotreba, umnožavanje, objavljivanje, brisanje ili\n uništavanje).\n \n
  • \n
\n

3. Izmene i dopune

\n

\n \n Ovo je poslednja verzija Obaveštenja (25. februar 2021. godine).\n \n

\n

\n \n SBT ima puno pravo da u bilo kom momentu izmeni ovo Obaveštenje. U\n slučaju da se Obaveštenje menja ili dopunjuje, unećemo datum\n poslednje verzije dokumenta. O svakoj promeni Obaveštenja ćemo Vas\n blagovremeno obavestiti. Molimo Vas da imate na umu činjenicu da\n izmene i dopune ovog Obaveštenja ne utiču ni na koji način na\n Obaveštenje o privatnosti koje je sačinio Klijent ili bilo koja\n treća strana povodom Platforme, odnosno Benefita.\n \n

\n

4. O nama

\n

\n \n U ovom Obaveštenju, ,,SBT’’, ,,mi’’ i ,,naši’’ upućuje na Smart\n Benefit Technologies d.o.o. Beograd, sa sedištem u ul. Takovska br.\n 12, Beograd-Palilula, Republika Srbija.\n \n

\n

\n \n SBT postupa isključivo u svojstu obrađivača\n \n u obradi Vaših podataka o ličnosti:\n

\n
    \n
  • \n \n Kada u ime Klijenata kao rukovaoca obrađujemo podatke Krajnjih\n korisnika koje Klijenti i Krajni korisnici ostavljaju na\n Platformi;\n \n
  • \n
  • \n \n Kada u ime Klijenata kao rukovalaca obrađujemo podatke o ličnosti\n Krajnjih korisnika koje nam dostave Klijenti kako bismo omogućili\n Klijentima isporučivanje odabranih Benefita Krajnjim korisnicima.\n Ovo u ime Klijenata koji su nas u ovu svrhu angažovali činimo u\n vidu kupovine Benefita od svojih poslovnih partnera (\n \n Partneri\n \n ) i prenosa prava na njima Klijentima, budući da Klijenti nemaju\n mogućnost da samostalno isporuče odabrane Benefite Krajnjim\n korisnicima. Na ovaj način, SBT omogućava svojim Klijentima da u\n njihovo ime, a na osnovu zaključenog ugovora o poslovnoj saradnji\n povodom omogućavanja isporučivanja odabranih Benefita Krajnjim\n korisnicima da na najbrži i najefikasniji mogući način to i\n ostvare.\n \n
  • \n
\n

\n \n Klijenti su rukovaoci u obradi Vaših podataka o ličnosti s obzirom\n na to da oni utvrđuju svrhu i način na koji se Vaši podaci o\n ličnosti prikupljaju, upotrebljavaju i na drugi način obrađuju, a mi\n u njihovo ime pružamo usluge korišćenja Platforme, odnosno usluge\n omogućavanja isporučivanja odabranih Benefita Krajnjim korisnicima.\n \n

\n

\n \n Druga obaveštenja o privatnosti na Platformi\n \n

\n

\n \n Klijent kao rukovalac u obradi Vaših podataka o ličnosti sačinio je\n zasebno obaveštenje o privatnosti u skladu sa svojom zakonskom\n obavezom na osnovu ZZPL-a, koje Vam je dostupno prilikom logovanja\n na našu Platformu. SBT ne može ni na koji način biti odgovoran licu\n na koje se podaci odnose u slučaju da je rukovalac u svom\n obaveštenju o privatnosti propustio da informiše lica na koja se\n podaci odnose o bilo kojim okolnostima koje je bio dužan da\n transparentno predoči u svom obaveštenju o privatnosti.\n \n

\n

\n \n Pitanja, pritužbe i dodatne informacije u vezi sa ovim Obaveštenjem\n i zaštitom podataka o ličnosti kod SBT-a možete dobiti putem sledeće\n imejl adrese: gdpr@benefiti.rs\n .\n \n

\n

5. Podaci o ličnosti koje prikupljamo

\n

\n \n \n Na osnovu ugovora o poslovnoj saradnji sa Klijentima povodom\n korišćenja Platforme\n \n \n

\n
    \n
  1. \n \n A. Omogućavanje korišćenja Platforme i obuka za korišćenje\n Platforme\n \n
  2. \n
\n

\n \n Kada Klijenti koriste našu Platformu radi omogućavanja svojim\n zaposlenima kao Krajnjim korisnicima odabir Benefita, uvid u status\n odabranih Benefita, odnosno upravljanje njima, obezbeđujući im\n pritom različita prava na njoj u zavisnosti od svog svojstva u\n kompaniji Klijenta (admin, HR, zaposleni), obrađujemo u ime\n Klijenata podatke o ličnosti Krajnjih korisnika.\n \n

\n

\n \n Pored toga, SBT u ime Klijenata obrađuje podatke o ličnosti Krajnjih\n korisnik i u svrhe obučavanja za korišćenje Platforme Krajnjih\n korisnika koji će Platformu koristiti u zavisnosti od obima\n dodeljenih im prava od strane Klijenata.\n \n

\n

\n \n Podaci o ličnosti koje tada prikupljamo uključuju, ali se ne\n ograničavaju na sledeće kategorije podataka o ličnosti:\n \n

\n
    \n
  • \n \n Podaci o ličnoj identifikaciji,\n \n kao što su: ime i prezime, datum rođenja, pol;\n
  • \n
  • \n \n Kontakt podaci\n \n \n , kao što su: poslovna imejl adresa, privatna imejl adresa, broj\n poslovnog i privatnog fiksnog ili mobilnog telefona;\n \n
  • \n
  • \n \n Podaci o radnom mestu\n \n \n : tačan naziv i pozicija koju Krajnji korisnik ima u kompaniji\n Klijenta, datum početka rada kod Klijenta, hijerarhijski nivo kod\n Klijenta (npr. Junior, Medior, Senior, itd.), opseg prava koja\n Krajnji korisnik ima na Platformi u odnosu na svoju poziciju u\n kompaniji Klijenta (npr. Admin, HR, zaposleni), naziv tima u kome\n se Krajnji korisnik nalazi;\n \n
  • \n
  • \n \n Podaci o ličnom statusu, \n \n kao što je bračni status;\n
  • \n
  • \n \n \n Podaci o aktivnom nalogu Krajnjeg korisnika na različitim\n elektronskim digitalnim servisima\n \n \n \n , na primer onda kada Krajnji korisnik odabere Benefite koje\n omogućavaju pružaoci usluga digitalnog servisa;\n \n
  • \n
  • \n \n Podatak o jedinstvenom korisničkom kodu\n \n ,\n \n koji SBT generiše za Krajnjeg korisnika u slučaju da izabrani\n Benefit predstavlja vaučer/kupon/kod;\n \n
  • \n
  • \n \n \n Podaci o potrošačkim navikama i interesovanjima Krajnjih\n korisnika\n \n \n \n , kao što je izbor konkretnih Benefita prilikom korišćenja\n Platforme;\n \n
  • \n
  • \n \n Podaci o kulturnom identitetu Krajnjih korisnika\n ;\n \n
  • \n
  • \n Podaci o društvenom identitetu Krajnjih korisnika\n ;\n
  • \n
  • \n \n Podaci o fiziološkom identitetu Krajnih korisnika\n \n ;\n
  • \n
  • \n \n Podaci o mentalnom identitetu Krajnjih korisnika\n \n ;\n
  • \n
  • \n \n Ostali podaci o korišćenju Platforme\n \n \n , kao su podaci dobijeni na osnovu uvida u aktivnosti na\n korisničkom nalogu Krajnjeg korisnika (broj tokena koji je\n Krajnjem korisniku raspoloživ, trenutni status raspoloživog broja\n tokena i promena broja tokena u odnosu na raspoloživost), kao i\n podaci o ostvarenim Benefitima.\n \n
  • \n
\n

\n \n SBT u ovom slučaju obrađuje navedene podatke o ličnosti u svojstvu\n obrađivača podataka o ličnosti kako bismo omogućili Klijentima\n korišćenje Platforme u punom obimu, a na osnovu zaključenog ugovora\n sa Klijentima o poslovnoj saradnji u vidu korišćenja Platforme.\n \n

\n
    \n
  1. \n B. Tehnička podrška\n
  2. \n
\n

\n \n SBT kao obrađivač u ime Klijenta takođe obrađuje informacije o\n korisničkim sesijama (kao što su greške pri učitavanju i vreme\n odziva), kao i podatke u vezi sa komunikacijom sa korisničkom\n podrškom putem telefona, imejla i pisanim putem tj. u vezi a upitima\n koje Krajnji korisnici podnose (kanal komunikacije, vrsta upita,\n datum, vreme, sadržaj). Navedene podatke obrađujemo kako bismo\n Klijentima pružili korisničku podršku sa ciljem nesmetanog\n korišćenja Platforme, a na osnovu ugovora o poslovnoj saradnji\n povodom korišćenja Platforme, koji obuhvata i pružanje tehničke\n podrške od strane SBT-a.\n \n

\n

\n \n \n Na osnovu ugovora o poslovnoj saradnji sa Klijentima povodom\n omogućavanja isporučivanja odabranih Benefita Krajnjim korisnicima\n \n \n

\n
    \n
  1. \n \n C. Omogućavanje isporučivanja odabranih Benefita Krajnjim\n korisnicima\n \n
  2. \n
\n

\n \n Kako bismo Klijentima mogli da omogućimo isporučivanje odabranih\n Benefita Krajnjim korisnicima u ime Klijenata u ovu svrhu za koju\n smo angažovani obrađujemo podatke o ličnosti Krajnjih korisnika koje\n nam dostave Klijenti koji se odnose, ali ne ograničavaju na sledeće\n kategorije podataka o ličnosti:\n \n

\n
    \n
  • \n \n Podaci o ličnoj identifikaciji\n \n , kao što su: ime i prezime, datum rođenja, pol;\n
  • \n
  • \n \n Kontakt podaci\n \n \n , kao što su: poslovna imejl adresa, privatna imejl adresa, broj\n poslovnog i privatnog fiksnog ili mobilnog telefona;\n \n
  • \n
  • \n \n Podaci o radnom mestu\n \n \n : tačan naziv i pozicija koju Krajnji korisnik ima u kompaniji\n Klijenta, datum početka rada kod Klijenta, hijerarhijski nivo kod\n Klijenta (npr. Junior, Medior, Senior, itd.), opseg prava koja\n Krajnji korisnik ima na Platformi u odnosu na svoju poziciju u\n kompaniji Klijenta (npr. Admin, HR, zaposleni), naziv tima u kome\n se Krajnji korisnik nalazi;\n \n
  • \n
  • \n \n \n Podaci o aktivnom korisničkom nalogu Krajnjeg korisnika\n \n \n \n {\" \"}\n na različitim elektronskim digitalnim servisima, na primer onda\n kada Krajnji korisnik odabere Benefite koje omogućavaju pružaoci\n usluga digitalnog servisa;\n \n
  • \n
  • \n \n Podatak o jedinstvenom korisničkom kodu\n \n \n , koji SBT generiše za Krajnjeg korisnika u slučaju da izabrani\n Benefit predstavlja vaučer/kupon/kod.\n \n
  • \n
\n

\n \n SBT kao obrađivač podataka o ličnosti Krajnjih korisnika posebno\n napominje i ističe da postupa u svojstvu obrađivača podataka o\n ličnosti Krajnjih korisnika koji se odnose na aktivni korisnički\n nalog na različitim elektronskim digitalnim servisima isključivo i\n jedino onda kada ove podatke obrađuje na osnovu pismenih uputstava\n rukovaoca u momentu kada je Krajnji korisnik lice zaposleno kod\n rukovaoca. SBT ne snosi odgovornost za obradu ovakvih podataka\n ukoliko je do obrade došlo na osnovu instrukcije rukovaoca nakon što\n je lice na koje se podaci odnose prestalo da bude zaposleno u\n kompaniji Klijenta, budući da SBT ne može i nije dužan samostalno da\n proverava status lica na koje se podaci odnose u kompaniji Klijenta.\n \n

\n

6. Svrha obrade i pravni osnov za obradu

\n

\n \n Klijent kao rukovalac u obradi Vaših podataka o ličnosti određuje\n svrhu i pravni osnov na osnovu kojeg se vrši obrada Vaših podataka o\n ličnosti. Obrada podataka se najčešće vrši na osnovu potpisanog\n ugovora o radu, na osnovu legitimnog interesa rukovaoca ili onda\n kada je obrada neophodna u cilju zaštite životno važnih interesa\n lica na koje se podaci odnose ili drugog fizičkog lica.\n \n

\n

\n \n Ako imate pitanja u vezi sa svrhom ili pravnim osnovom na osnovu\n kojeg Klijent kao rukovalac u obradi Vaših podataka obrađuje Vaše\n podatke o ličnosti ili Vam trebaju dodatne informacije u vezi sa\n ovim, molimo da se obratite Klijentu tj. Vašem poslodavcu kao\n rukovaocu u obradi Vaših podataka o ličnosti.\n \n

\n\n

7. Platforma

\n

\n \n Naša Platforma na osnovu Vašeg pristanka prikuplja određene podatke\n o ličnosti svih korisnika Platforme uz pomoć tehnologija koje\n Platforma koristi (\n \n \n cookies/trackers\n \n \n ) i skladišti ih na datotekama. Ukoliko želite da saznate više\n detalja o tome, uključujući to koje tačno podatke o ličnosti\n prikupljamo tom prilikom, molimo Vas da pročitate našu{\" \"}\n \n \n \n Politiku Platforme.\n \n \n

\n

8. Rok čuvanja

\n

\n \n Sa jedne strane, onda kada Klijentima omogućavamo korišćenje naše\n Platforme i sa njom povezanih aktivnosti SBT čuva Vaše podatke o\n ličnosti tokom trajanja korišćenja Platforme od strane Klijenata i\n nakon toga tokom određenog vremenskog perioda kako bi se Klijentima\n u svojstvu rukovalaca omogućilo da povrate korisničke naloge\n Krajnjih korisnika. Nakon što profil Krajnjeg korisnika postane\n deaktiviran bez obzira na razlog za deaktiviranje od strane Krajnjeg\n korisnika, Klijent će doneti odluku o tome da se takvi podaci o\n ličnosti izbrišu ili anonimizuju, osim ako je zakonom propisana\n obaveza čuvanja podataka, a SBT će postupiti u skladu sa dobijenom\n instrukcijom.\n \n

\n

\n \n Sa druge strane, kada obrađujemo Vaše podatke o ličnosti kako bismo\n Klijentima omogućili isporučivanje odabranih Benefita Krajnjim\n korisnicima, SBT čuva Vaše podatke o ličnosti u strogo ograničenom\n vremenskom intervalu, koji obuhvata period od momenta kupovine\n Benefita od Partnera do momenta prenosa prava na Benefitima\n Klijentima. Nakon toga, Klijent će doneti odluku o tome da se takvi\n podaci o ličnosti izbrišu ili anonimizuju, osim ako je zakonom\n propisana obaveza čuvanja podataka, a SBT će postupiti u skladu sa\n dobijenom instrukcijom.\n \n

\n

\n \n Klijent kao rukovalac u obradi Vaših podataka o ličnosti i mi takođe\n zadržavamo Vaše podatke o ličnosti ukoliko je njihova obrada\n neophodna povodom podnošenja, ostvarivanja ili odbrane pravnog\n zahteva. U meri u kojoj je to moguće Vaš rukovalac će ograničiti\n obradu podataka u takve svrhe nakon prestanka ugovornog odnosa sa\n našom kompanijom.\n \n

\n

\n \n Za više informacija u vezi sa time na koji način i u kom trajanju se\n Vaši podaci o ličnosti čuvaju, kao i za više informacija u vezi sa\n Vašim pravom na brisanje i prenos podataka, molimo da kontaktirate\n Klijenta kao Vašeg rukovaoca.\n \n

\n

9. Integritet podataka o ličnosti

\n

\n \n Preduzećemo razumne korake kako bismo osigurali da su podaci o\n ličnosti koje obrađujemo pouzdani za upotrebu kojoj su namenjeni,\n tačni, potpuni i aktuelni. Vi ste odgovorni za tačnost svih podataka\n o lilnosti koje nam date. Uložićemo razumne napore da održimo\n tačnost i integritet dobijenih podataka o ličnosti i da ih po\n potrebi ažuriramo. \n \n

\n

10. Bezbednost podataka o ličnosti

\n

\n \n Naša kompanija preduzima odgovarajuće bezbednosne mere u cilju\n zaštite Vaših podataka o ličnosti od pristupa i uvida koji nisu\n odobreni primenom ovog Obaveštenja, a u skladu sa ZZPL-om i GDPR-om.\n \n

\n

\n \n Sprovodimo odgovarajuće fizičke, proceduralne, tehničke,\n organizacione i kadrovske mere kako bismo dostigli odgovarajući nivo\n zaštite Vaših podataka o ličnosti koje obrađujemo. Mi primenjujemo\n najbolje industrijske standarde u zaštiti podataka. Zaštita se\n odnosi na gubitak, korišćenje protivno svrsi, neovlašćeni pristup i\n uvid, menjanje i uništenje tih podataka o ličnosti. Ipak nijedna\n mera bezbednosti ne može da garantuje da će lični podaci biti 100%\n zaštićeni, ali Benefiti u svakom momentu svojim kontrolisanim\n procesima i uz visoku odgovornost stalno unapređuju sve mere\n bezbednosti u cilju zaštite Vaših podataka o ličnosti.\n \n

\n

11. Vaša prava

\n

\n \n Kao lice na koje se podaci odnose možete da ostvarite određena prava\n prema Klijentu kao rukovaocu u odnosu na podatke o ličnosti koji se\n obrađuju o Vama.{\" \"}\n \n \n \n Međutim, posebno naglašavamo da je potrebno da znate i budete\n jasno informisani o tome da je SBT samo obrađivač u odnosu na\n obradu Vaših podataka o ličnosti i da kao takav ne može da\n odgovori niti ispuni bilo koji zahtev za ostvarivanje Vaših prava\n kao lica na koja se podaci odnose, osim ukoliko nismo dobili takvu\n napismenu instrukciju.{\" \"}\n \n \n \n Stoga, u slučaju da bilo kakav vid ovakvog zahteva za ostvarivanje\n Vaših prava bude upućen na našu adresu, mi ćemo ga u razumno\n najkraćem mogućem roku proslediti Klijentu kao rukovaocu.\n \n

\n

\n Imate sledeća prava:\n

\n
    \n
  • \n Informisanje:\n \n {\" \"}\n pravo da budete informisani o tome na koji način obrađujemo Vaše\n podatke o ličnosti;\n \n
  • \n
  • \n Pristup:\n \n {\" \"}\n pravo da zahtevate od nas pristup svim Vašim podacima o ličnosti\n koje obrađujemo;\n \n
  • \n
  • \n Ispravka/dopuna:\n \n {\" \"}\n pravo da tražite da se netačni ili nepotpuni podaci o ličnosti o\n Vama isprave bez odlaganja;\n \n
  • \n
  • \n Brisanje:\n \n {\" \"}\n pravo da zahtevate da se obrišu Vaši podaci o ličnosti bez\n odlaganja;\n \n
  • \n
  • \n Ograničenje:\n \n {\" \"}\n pravo da tražite ograničenje obrade Vaših podataka o ličnosti u\n određenim situacijama;\n \n
  • \n
  • \n Prigovor:\n \n {\" \"}\n pravo da izjavite prigovor na specifične obrade podataka o\n ličnosti;\n \n
  • \n
  • \n Prenosivost:\n \n {\" \"}\n pravo da zahtevate od nas da ove podatke prenesemo drugoj\n kompaniji, ako je obrada je zasnovana na pristanku ili na osnovu\n ugovora i obrada se vrši automatizovanim putem.\n \n
  • \n
\n

\n \n Molimo Vas da sve zahteve za ostvarivanje Vaših prava prosledite na\n odgovarajuću adresu Klijenta. Tek ukoliko budu smatrali to\n adekvatnim Klijenti će u svojstvu rukovaoca nama uputiti pismenu\n instrukciju kako da postupimo sa Vašim zahtevom.\n \n

\n

\n \n U svakom trenutku ukoliko smatrate da su Vaša prava kao lica na koje\n se podaci odnose u bilo kom smislu, odnosno obimu ograničena ili\n povređena možete da podnesete pritužbu Povereniku za informacije od\n javnog značaja i zaštitu podataka o ličnosti.\n \n

\n

\n
\n

\n

\n Vaš Smart Benefit Technologies\n

\n
\n\n
\n \n setHasAcceptedTerms(!hasAcceptedTerms ? true : false)\n }\n />\n \n
\n
\n handleAcceptPrivacyPolicy()}\n margin=\"20px 0 0 0\"\n disabled={!hasAcceptedTerms}\n >\n Ok\n \n logout()}\n margin=\"20px 0 0 0\"\n customClass=\"cancel-button\"\n >\n Cancel\n \n
\n
\n
\n );\n};\n\nPrivacyPolicy.propTypes = {\n acceptPrivacyPolicy: PropTypes.func\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n acceptPrivacyPolicy: () => dispatch(actionCreators.acceptPrivacyPolicy()),\n logout: () => dispatch(actionCreators.logout())\n };\n};\n\nexport default connect(null, mapDispatchToProps)(PrivacyPolicy);\n","import PrivacyPolicy from \"./PrivacyPolicy\";\n\nexport default PrivacyPolicy;\n","import styled from \"styled-components\";\n\nexport const ButtonContainerStyles = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 30px;\n\n .buttonsContainer {\n display: flex;\n justify-content: space-between;\n width: 100%;\n flex-wrap: wrap;\n\n .pageButtonsContainer {\n display: flex;\n flex-wrap: wrap;\n }\n }\n\n .mobileFilterButton {\n display: none;\n }\n\n @media only screen and (max-width: 1099px) {\n .mobileFilterButton {\n display: unset;\n }\n\n .mobileButton {\n white-space: nowrap;\n width: auto;\n }\n }\n\n @media only screen and (max-width: 767px) {\n .mobileFilterButton {\n display: block;\n width: auto !important;\n margin-bottom: 10px;\n font-size: 11px;\n }\n\n .mobileButton {\n white-space: nowrap;\n margin-bottom: 10px;\n font-size: 11px;\n }\n }\n\n @media only screen and (max-width: 500px) {\n .mobileFilterButton {\n font-size: 10px;\n padding: 5px;\n border-radius: 20px;\n }\n\n .mobileButton {\n font-size: 10px;\n padding: 8px;\n }\n }\n\n @media only screen and (max-width: 340px) {\n .mobileButton {\n font-size: 9px;\n padding: 5px;\n margin-right: 5px;\n }\n }\n`;\n","import React, { useEffect } from \"react\";\nimport { connect, useSelector } from \"react-redux\";\n// custom components\nimport { Button } from \"../../../../components\";\n// styles\nimport { ButtonContainerStyles } from \"./buttonsContainer.styles\";\n// services\nimport * as actionCreators from \"../../../../actions/employee/employeeBenefits.actions\";\n// constants\nimport * as benefitGroupTypes from \"../../../../builders/benefitGroups/benefitGroup.types\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ButtonsContainer = ({\n isSubscribedBenefitGroupsVisible,\n setIsSubscribedBenefitGroupsVisible,\n setBenefitGroupType,\n benefitGroupType,\n isFavoritePageOpen,\n setIsFavoritePageOpen\n}) => {\n const { t } = useTranslation();\n const { listOfFavoriteBenefits } = useSelector(\n state => state.employeeBenefitsPage.favoriteBenefits\n );\n\n const showFilters = () => {\n const filters = document.getElementById(\"filters\");\n const filterWrapper = document.getElementById(\"filterWrapper\");\n const body = document.getElementsByTagName(\"body\")[0];\n\n if (\n filters &&\n filterWrapper &&\n !filterWrapper.classList.contains(\"showWrapper\") &&\n !filters.classList.contains(\"showFilters\")\n ) {\n filterWrapper.classList.add(\"showWrapper\");\n filters.classList.add(\"showFilters\");\n body.style.overflow = \"hidden\";\n body.style.position = \"fixed\";\n body.style.width = \"100%\";\n }\n };\n\n const navigateToBrowseBenefits = () => {\n setIsSubscribedBenefitGroupsVisible(false);\n setBenefitGroupType(benefitGroupTypes.PUBLIC);\n };\n\n const navigateToCompanyBenefits = () => {\n setIsSubscribedBenefitGroupsVisible(false);\n setBenefitGroupType(benefitGroupTypes.LOCAL);\n };\n\n const navigateToMyBenefits = () => {\n setIsSubscribedBenefitGroupsVisible(true);\n setBenefitGroupType(\"\");\n };\n\n const navigateToFavoriteBenefits = () => {\n setIsSubscribedBenefitGroupsVisible(true);\n setIsFavoritePageOpen(true);\n setBenefitGroupType(benefitGroupTypes.FAVORITE);\n };\n\n useEffect(() => {\n if (benefitGroupType !== benefitGroupTypes.FAVORITE && isFavoritePageOpen) {\n setIsFavoritePageOpen(false);\n }\n }, [benefitGroupType]);\n\n return (\n \n
\n
\n \n {t(\"Browse_Benefits\")}\n \n \n {t(\"Company_Benefits\")}\n \n \n {t(\"My_Benefits\")}\n \n \n {t(\"Favorite_Benefits\")}\n \n
\n {!isSubscribedBenefitGroupsVisible && (\n \n {t(\"open_filters\")}\n \n )}\n
\n
\n );\n};\n\nconst mapStateToProps = state => {\n return {\n isSubscribedBenefitGroupsVisible:\n state.employeeBenefitsPage.pageFrontEndStates\n .isSubscribedBenefitGroupsVisible,\n benefitGroupType:\n state.employeeBenefitsPage.pageFrontEndStates.benefitGroupType,\n isFavoritePageOpen:\n state.employeeBenefitsPage.pageFrontEndStates.isFavoriteTab\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setIsSubscribedBenefitGroupsVisible: isVisible =>\n dispatch(actionCreators.setIsSubscribedBenefitGroupsVisible(isVisible)),\n setBenefitGroupType: benefitGroupType =>\n dispatch(actionCreators.setBenefitGroupType(benefitGroupType)),\n setIsFavoritePageOpen: payload =>\n dispatch(actionCreators.setIsFavoritePageOpen(payload))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ButtonsContainer);\n","import styled from \"styled-components\";\n\nexport const BenefitGroupFiltersStyles = styled.div`\n .availableProviders {\n margin-bottom: 20px;\n }\n\n .filtersContainer {\n min-width: 310px;\n margin-left: 30px;\n\n .filterTitle {\n font-style: normal;\n font-weight: 500;\n font-size: 16px;\n line-height: 20px;\n color: #757575;\n margin-bottom: 15px;\n }\n\n .searchWrapper {\n margin-bottom: 22px;\n }\n\n .filtersListContainer {\n margin: 22px 0;\n padding-bottom: 16px;\n border-bottom: 1px solid #e6eaee;\n }\n\n .checkLabelContainer {\n display: flex;\n align-items: center;\n margin-top: 10px;\n\n &:first-child {\n margin-top: 0;\n }\n\n .filterCheck {\n width: 12px;\n height: 12px;\n border-radius: 4px;\n cursor: pointer;\n }\n\n .checkLabel {\n font-style: normal;\n font-weight: normal;\n font-size: 12px;\n line-height: 15px;\n color: #4b4b4b;\n margin-left: 10px;\n white-space: nowrap;\n text-transform: uppercase;\n }\n\n .changeColor {\n color: #1568bf;\n }\n }\n\n .filtersButtonsContainer {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n justify-content: space-between;\n max-width: 300px;\n }\n\n .cancelFilters {\n display: none;\n }\n }\n\n @media only screen and (max-width: 1099px) {\n position: fixed;\n top: 0;\n right: 0;\n height: 100%;\n z-index: 2;\n width: 100%;\n background: rgba(0, 0, 0, 0.2);\n visibility: hidden;\n\n .filtersContainer {\n position: fixed;\n top: 0;\n right: 0;\n min-height: 100vh;\n z-index: 2;\n transition: all 0.3s ease-in-out;\n transform: translateX(100%);\n\n .filtersCard {\n height: 100vh;\n overflow-y: auto;\n }\n\n .cancelFilters {\n display: unset;\n }\n }\n }\n\n @media only screen and (max-width: 600px) {\n .filtersCard {\n padding: 30px 30px 100px 30px;\n }\n }\n\n @media screen and (max-width: 320px) {\n .filtersContainer {\n min-width: 280px;\n }\n\n .filtersCard {\n padding: 30px 10px 100px 10px;\n }\n }\n`;\n","import styled from \"styled-components\";\n\nconst PriceFilterStyles = styled.div`\n margin-bottom: -16px;\n\n .inputWrapper {\n display: flex;\n align-items: center;\n gap: 8px; \n margin-top: 18px;\n\n .inputContainer {\n position: relative;\n\n label {\n position: absolute;\n left: 18px; \n top: 7px;\n }\n\n input {\n width: 50px;\n padding-left: 50px;\n width: 119px;\n height: 40px;\n border: 1px solid #E3E3E3;\n border-radius: 8px;\n color: #777777;\n font-size: 16px; \n outline: none;\n }\n\n span {\n position: absolute;\n right: 20px;\n top: 10px;\n }\n }\n }\n`\n\nexport default PriceFilterStyles;","export const BenefitExpirationTypeEnum = {\n ONE_TIME: \"one time\",\n MONTH: \"month\",\n VOUCHER: \"voucher\"\n};\n","import { BenefitExpirationTypeEnum } from \"./benefit.constants\";\n\nconst EN = {\n newest: \"Newest / Recently added\",\n benefit_group_name: \"Benefit Group Name\",\n best_rated: \"Best Rated\",\n one_time: BenefitExpirationTypeEnum.ONE_TIME,\n monthly: BenefitExpirationTypeEnum.MONTH,\n voucher: BenefitExpirationTypeEnum.VOUCHER,\n married: \"Married\",\n single: \"Single\",\n divorced: \"Divorced\",\n male: \"Male\",\n female: \"Female\",\n other: \"Other\",\n created_at: \"Created At\",\n provider_name: \"Provider name\",\n three_months: \"Three Months\",\n six_months: \"Six Months\",\n yearly: \"Yearly\"\n};\n\nconst RS = {\n newest: \"Najnovije\",\n benefit_group_name: \"Ime benefit grupe\",\n best_rated: \"Najbolje ocenjeno\",\n one_time: \"Jednokratni\",\n monthly: \"Mesečni\",\n voucher: \"Vaučer\",\n married: \"Oženjen/Udata\",\n single: \"Slobodan/Slobodna\",\n divorced: \"Razveden/Razvedena\",\n male: \"Muški\",\n female: \"Ženski\",\n other: \"Drugo\",\n created_at: \"Kreirano\",\n provider_name: \"Naziv provajdera\",\n three_months: \"Tri meseca\",\n six_months: \"Šest meseci\",\n yearly: \"Godišnje\"\n};\n\nconst LOCALES = { rs: RS, en: EN };\n\nexport default LOCALES;\n","// Constants\nimport { BenefitExpirationTypeEnum } from \"./benefit.constants\";\nimport LOCALES from \"./locales.constants\";\n\nexport const FILTERS_TIMER_IN_MILLISECONDS = 600;\n\nexport const PRICE_STEP = 50;\nexport const PRICE_MIN = 0;\nexport const PRICE_MAX = 1000;\n\nexport const BENEFIT_EXPIRATION_TYPES = [\n {\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"one_time\"],\n key: BenefitExpirationTypeEnum.ONE_TIME.split(\" \").join(\"_\")\n },\n {\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"monthly\"],\n key: BenefitExpirationTypeEnum.MONTH\n },\n {\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"voucher\"],\n key: BenefitExpirationTypeEnum.VOUCHER\n }\n];\n\nexport const SORT_OPTIONS = [\n {\n id: 1,\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"newest\"],\n key: \"created\"\n },\n {\n id: 2,\n name:\n LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"benefit_group_name\"],\n key: \"name\"\n },\n {\n id: 3,\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"best_rated\"],\n key: \"rating\"\n }\n];\n","import styled from \"styled-components\";\n\nconst TwoThumbsStyles = styled.div`\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n padding: 8px;\n\n .sliderContainer {\n height: 36px;\n display: flex;\n width: 100%; \n \n .slider { \n height: 5px;\n width: 100%;\n border-radius: 4px;\n align-self: center;\n position: relative;\n }\n\n .thumb {\n height: 16px;\n width: 16px;\n border-radius: 50%;\n background-color: #2F68B9;\n display: flex;\n justify-content: center;\n align-items: center;\n box-shadow: none;\n }\n }\n \n`;\n\nexport default TwoThumbsStyles;","import React from \"react\";\nimport { Range, getTrackBackground } from \"react-range\";\nimport PropTypes from \"prop-types\";\n// Styles\nimport TwoThumbsStyles from \"./TwoThumbs.styles\";\n// Constants\nimport {\n PRICE_MAX,\n PRICE_MIN,\n PRICE_STEP\n} from \"../../constants/filter.constants\";\nimport { transformTokensToRsd } from \"../../utils/transformTokensToRsd\";\n\nconst TwoThumbs = ({ values, onRangeChange, rtl }) => {\n return (\n \n onRangeChange(values)}\n renderTrack={({ props, children }) => (\n \n \n {children}\n \n \n )}\n renderThumb={({ props }) => (\n
\n )}\n />\n
\n );\n};\n\nTwoThumbs.propTypes = {\n values: PropTypes.array,\n onRangeChange: PropTypes.func,\n rtl: PropTypes.bool\n};\n\nexport default TwoThumbs;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n// Styles\nimport PriceFilterStyles from \"./PriceFilter.styles\";\n// Assets\nimport { TokenIcon } from \"../../../../../assets/Icons\";\n// Constants\nimport {\n PRICE_MAX,\n PRICE_MIN,\n PRICE_STEP\n} from \"../../../../../constants/filter.constants\";\n// Component\nimport { TwoThumbs } from \"../../../../../components/range\";\nimport {\n transformTokenCurrencyIcons,\n transformTokensToRsd\n} from \"../../../../../utils/transformTokensToRsd\";\n\nconst PriceFilter = ({ handlePriceChange, priceRange }) => {\n return (\n \n
\n
\n \n \n handlePriceChange([e.target.value * 1, priceRange[1]])\n }\n />\n
\n -\n
\n \n \n handlePriceChange([priceRange[0], e.target.value * 1])\n }\n />\n
\n
\n \n
\n );\n};\n\nPriceFilter.propTypes = {\n handleRangeChange: PropTypes.func,\n priceRange: PropTypes.array\n};\n\nexport default PriceFilter;\n","import PriceFilters from './PriceFilter';\n\nexport default PriceFilters;","/* eslint-disable */\nimport React from \"react\";\nimport styled from \"styled-components\";\nimport PropTypes from \"prop-types\";\nimport { useTranslation } from \"react-i18next\";\n\nconst CategoryFilterStyles = styled.div`\n display: flex;\n flex-direction: column;\n\n .checkLabelContainer {\n display: flex;\n align-items: center;\n margin-top: 10px;\n\n &:first-child {\n margin-top: 0;\n }\n\n .filterCheck {\n width: 12px;\n height: 12px;\n border-radius: 4px;\n cursor: pointer;\n }\n\n .checkLabel {\n font-style: normal;\n font-weight: normal;\n font-size: 12px;\n line-height: 15px;\n color: #4b4b4b;\n margin-left: 10px;\n white-space: nowrap;\n text-transform: uppercase;\n }\n\n .changeColor {\n color: #1568bf;\n }\n }\n\n @media only screen and (max-width: 1099px) {\n .checkLabelContainer {\n margin-top: 15px !important;\n }\n }\n`;\n\nconst CategoryFilters = ({\n eventProtectClass,\n categories = [],\n handleChange,\n chosenCategories\n}) => {\n const { t } = useTranslation();\n return (\n \n {categories.length > 0 &&\n categories.map(category => (\n \n handleChange(category.id)}\n checked={chosenCategories.includes(category.id)}\n className={`filterCheck ${eventProtectClass}`}\n />\n \n {t(category.name)}\n

\n \n ))}\n
\n );\n};\n\nCategoryFilters.propTypes = {\n eventProtectClass: PropTypes.string,\n categories: PropTypes.array,\n chosenCategories: PropTypes.array,\n handleChange: PropTypes.func\n};\n\nexport default CategoryFilters;\n","import { createClient } from \"@supabase/supabase-js\";\n\nconst supabaseUrl = \"https://gazfduoumclmczxravnt.supabase.co\";\nconst supabaseKey =\n \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImdhemZkdW91bWNsbWN6eHJhdm50Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MDAyMjAzMTAsImV4cCI6MjAxNTc5NjMxMH0._-KA-Jw84Put6oSfgiLBmzamV-5goTDEvTnCApW6dZQ\";\n\nconst supabaseClient = createClient(supabaseUrl, supabaseKey);\n\nexport default supabaseClient;\n","import moment from \"moment\";\n\nconst createSupaBaseStorageFolder = companyId => {\n const currentDate = moment(new Date());\n const nextMonth = currentDate.add(1, \"months\");\n const formattedMonth = nextMonth.format(\"MM\");\n return `${companyId}_${formattedMonth}_${currentDate.year()}`;\n};\n\nexport default createSupaBaseStorageFolder;\n","import { toast } from \"react-toastify\";\nimport supabaseClient from \"./supabaseClient\";\nimport createSupaBaseStorageFolder from \"./createSupaBaseStorageFolder\";\n\nconst sendImageToSupabase = async (fileName, file, companyId) => {\n const folderName = createSupaBaseStorageFolder(companyId);\n\n try {\n const { error } = await supabaseClient.storage\n .from(\"refund-upload\")\n .upload(`${folderName}_pending_refund/${fileName}`, file);\n\n if (error) throw new Error(error);\n } catch (error) {\n toast.error(error.message);\n }\n};\n\nexport default sendImageToSupabase;\n","// services\nimport { apiService } from \"../api.service\";\n// global handlers\nimport { isEmpty } from \"../../general.utils\";\n// response modals\nimport {\n BenefitGroupsResponse,\n BenefitsResponse,\n CategoriesResponse,\n SubscribedBenefitGroupsResponse\n} from \"../../../models/server/responses\";\n// payload modals\nimport {\n CreateBenefitGroupReviewPayload,\n SubscribeUnsubscribePayload,\n UploadPDFPayload,\n VoucherSubscribeUnsubscribePayload\n} from \"../../../models/server/payloads\";\nimport { PUBLIC } from \"../../../builders/benefitGroups/benefitGroup.types\";\nimport sendImageToSupabase from \"../../../utils/supabaseUtils/sendImageToSupabase\";\n\nconst LIMIT = 10;\n\nexport const getBenefitGroups = async ({\n chosenCategories,\n priceRange,\n chosenCities,\n chosenBenefitExpirationTypes,\n limit = LIMIT,\n page,\n remoteFilter = false,\n type = PUBLIC,\n search,\n order,\n key\n}) => {\n let queryParams = \"\";\n let categoriesQuery = \"\";\n let citiesQuery = \"\";\n let benefitExpirationTypesQuery = \"\";\n\n if (limit) {\n queryParams += `limit=${limit}`;\n }\n\n if (page) {\n queryParams += `${!isEmpty(queryParams) ? \"&\" : \"\"}page=${page}`;\n }\n\n if (key && order) {\n queryParams += `${\n !isEmpty(key) && !isEmpty(order) ? \"&\" : \"\"\n }order=${key} ${order}`;\n }\n\n if (priceRange && typeof priceRange === \"object\") {\n queryParams += `${!isEmpty(queryParams) ? \"&\" : \"\"}price_from=${\n priceRange.min\n }${priceRange.max < 1000 ? `&price_to=${priceRange.max}` : \"\"}`;\n }\n\n if (!isEmpty(chosenCategories) && Array.isArray(chosenCategories)) {\n categoriesQuery = chosenCategories.reduce(\n (query, category) =>\n `${!isEmpty(query) ? `${query}&` : \"\"}category_id=${category}`,\n \"\"\n );\n }\n\n if (!isEmpty(chosenCities) && Array.isArray(chosenCities)) {\n citiesQuery = chosenCities\n .filter(id => id !== 0)\n .reduce(\n (query, city) => `${!isEmpty(query) ? `${query}&` : \"\"}city_id=${city}`,\n \"\"\n );\n }\n\n if (\n !isEmpty(chosenBenefitExpirationTypes) &&\n Array.isArray(chosenBenefitExpirationTypes)\n ) {\n benefitExpirationTypesQuery = chosenBenefitExpirationTypes.reduce(\n (query, benefitExpirationType) =>\n `${\n !isEmpty(query) ? `${query}&` : \"\"\n }expiration=${benefitExpirationType}`,\n \"\"\n );\n }\n\n if (!isEmpty(categoriesQuery)) {\n queryParams += `${!isEmpty(queryParams) && \"&\"}${categoriesQuery}`;\n }\n\n if (isEmpty(citiesQuery) && !remoteFilter) {\n queryParams += `${!isEmpty(queryParams) && \"&\"}${citiesQuery}`;\n }\n\n if (!isEmpty(citiesQuery) && !remoteFilter) {\n queryParams += `${!isEmpty(queryParams) &&\n \"&\"}${citiesQuery}&is_remote=${remoteFilter}`;\n }\n\n if (isEmpty(citiesQuery) && remoteFilter) {\n queryParams += `&is_remote=${remoteFilter}`;\n }\n\n if (!isEmpty(citiesQuery) && remoteFilter) {\n queryParams += `${!isEmpty(queryParams) &&\n \"&\"}${citiesQuery}&is_remote=${remoteFilter}`;\n }\n\n if (!isEmpty(benefitExpirationTypesQuery)) {\n queryParams += `${!isEmpty(queryParams) &&\n \"&\"}${benefitExpirationTypesQuery}`;\n }\n\n if (!isEmpty(search)) {\n queryParams += `${!isEmpty(queryParams) && \"&\"}search=${search}`;\n }\n\n if (!isEmpty(type)) {\n queryParams += `${!isEmpty(queryParams) && \"&\"}type=${type}`;\n }\n\n const response = await apiService.get(\n `/benefit-group/employee-benefits?${queryParams}`\n );\n if (response.hasError) return response;\n return new BenefitGroupsResponse(response);\n};\n\nexport const getCategories = async () => {\n const response = await apiService.get(\"/benefit-group/categories\");\n if (response.hasError) return response;\n return new CategoriesResponse(response);\n};\n\nexport const getCategoriesForEmployeePlatform = async () => {\n const response = await apiService.get(\"/benefit-group/employee/categories\");\n if (response.hasError) return response;\n return new CategoriesResponse(response);\n};\n\nexport const getSubscribedBenefits = async () => {\n const response = await apiService.get(\"/benefit-group/used\");\n if (response.hasError) return response;\n return new SubscribedBenefitGroupsResponse(response);\n};\n\nexport const getAlreadyUsedBenefits = async id => {\n const response = await apiService.get(\"/employee/used-benefits/\" + id);\n if (response.hasError) return response;\n return new BenefitsResponse(response);\n};\n\nexport const createBenefitGroupReview = async values => {\n const payload = new CreateBenefitGroupReviewPayload(values);\n const response = await apiService.post(\n \"benefit-group/review/create\",\n payload\n );\n return response;\n};\n\nexport const finishOnboarding = async () => {\n const response = await apiService.patch(\"/users/employee/onboarding\");\n return response;\n};\n\nexport const subscribeOrUnsubscribeToBenefit = async values => {\n const payload = new SubscribeUnsubscribePayload(values);\n const response = await apiService.post(\n \"/employee/benefit-subscribe\",\n payload\n );\n return response;\n};\n\nexport const subscribeOrUnsubscribeToVoucher = async values => {\n const payload = new VoucherSubscribeUnsubscribePayload(values);\n const response = await apiService.post(\n \"/employee/benefit-subscribe\",\n payload\n );\n return response;\n};\n\nexport const syncEmployeeUser = async () => {\n const response = await apiService.post(\"/employee/sync\");\n return response;\n};\n\nexport const getEmployeeTokenCount = async () => {\n return await apiService.get(\"/employee/token-count\");\n};\n\nexport const uploadPDF = async (values, companyId) => {\n const payloadData = new UploadPDFPayload(values);\n\n try {\n const response = await apiService.post(\n \"/employee/upload\",\n payloadData.payload\n );\n\n sendImageToSupabase(response.data.content, values.pdfFile, companyId);\n } catch (error) {\n toast.error(response.error.data.error.message);\n }\n};\n\nexport const getBenefitsForBenefitGroup = async (\n benefitGroupId,\n priceRange,\n chosenBenefitExpirationTypes\n) => {\n let queryParams = \"\";\n let benefitExpirationTypesQuery = \"\";\n\n if (priceRange && typeof priceRange === \"object\") {\n queryParams += `${!isEmpty(queryParams) ? \"&\" : \"\"}price_from=${\n priceRange.min\n }${priceRange.max < 1000 ? `&price_to=${priceRange.max}` : \"\"}`;\n }\n\n if (\n !isEmpty(chosenBenefitExpirationTypes) &&\n Array.isArray(chosenBenefitExpirationTypes)\n ) {\n benefitExpirationTypesQuery = chosenBenefitExpirationTypes.reduce(\n (query, benefitExpirationType) =>\n `${\n !isEmpty(query) ? `${query}&` : \"\"\n }expiration=${benefitExpirationType}`,\n \"\"\n );\n }\n\n if (!isEmpty(benefitExpirationTypesQuery)) {\n queryParams += `${!isEmpty(queryParams) &&\n \"&\"}${benefitExpirationTypesQuery}`;\n }\n\n const response = await apiService.get(\n `/benefit/benefit-group/${benefitGroupId}?${queryParams}`\n );\n if (response.hasError) return response;\n return new BenefitsResponse(response);\n};\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { connect } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\n// styles\nimport { BenefitGroupFiltersStyles } from \"./benefitGroupsFilters.styles\";\n// components\nimport {\n Card,\n TextAndLine,\n Button,\n LocationsMultiselectInput,\n TypesMultiselectInput,\n SearchInput,\n SortSelectInput\n} from \"../../../../components\";\nimport PriceFilter from \"./priceFilter\";\nimport CategoryFilters from \"./categoriesFilter\";\n// models\nimport { PriceRange } from \"../../../../models/domain\";\n// services\nimport * as api from \"../../../../services/api/employee/employeeBenefits.services\";\nimport * as employeeService from \"../../../../services/api/hr/employees.service\";\n// actions\nimport * as actionCreators from \"../../../../actions/employee/employeeBenefits.actions\";\n// Utils\nimport { isEmpty } from \"../../../../services/general.utils\";\n// Constants\nimport {\n BENEFIT_EXPIRATION_TYPES,\n FILTERS_TIMER_IN_MILLISECONDS,\n SORT_OPTIONS,\n PRICE_MIN,\n PRICE_MAX\n} from \"../../../../constants/filter.constants\";\nimport { useTranslation } from \"react-i18next\";\nimport { transformTokensToRsd } from \"../../../../utils/transformTokensToRsd\";\n\nconst BenefitGroupFilters = ({\n categories,\n chosenCategoryIds,\n setChosenCategoryIds,\n chosenPriceRange,\n applyBenefitGroupsFilters,\n resetBenefitGroupFilters,\n setCitiesFilter,\n setRemoteFilterToStore,\n setBenefitExpirationTypesFilter,\n setSearchFilter,\n setOrderSort,\n setKeySort,\n benefitBrowseGroupsCount,\n benefitCompanyGroupsCount,\n setFiltersPriceRange,\n priceRangeOptions,\n benefitGroupType,\n isInitialStateSet,\n setIsPageLoading\n}) => {\n const { t } = useTranslation();\n const [cities, setCities] = useState([]);\n const [citiesPage, setCitiesPage] = useState(1);\n const [totalPages, setTotalPages] = useState(1);\n const [citiesSearchQuery, setCitiesSearchQuery] = useState(\"\");\n const [chosenCityIds, setChosenCityIds] = useState([]);\n const [chosenCities, setChosenCities] = useState([]);\n const [remoteFilter, setRemoteFilter] = useState(false);\n const [\n chosenBenefitExpirationTypeKeys,\n setChosenBenefitExpirationTypeKeys\n ] = useState([]);\n const [\n chosenBenefitExpirationTypes,\n setChosenBenefitExpirationTypes\n ] = useState([]);\n const [numberOfProvidersRender, setNumberOfProvidersRender] = useState(false);\n const [page, setPage] = useState(1);\n const [sortOrder, setOrder] = useState(\"\");\n const [sortKey, setKey] = useState(\"\");\n const [keywordSearch, setKeywordSearch] = useState(\"\");\n const [priceRange, setPriceRange] = useState([\n transformTokensToRsd(PRICE_MIN),\n transformTokensToRsd(PRICE_MAX)\n ]);\n const [isFilter, setIsFilter] = useState(false);\n\n const timeout = useRef();\n\n /**\n * Handles altering of sorting direction.\n * Sets sort order to state.\n * Sets sort key to state.\n * @param {object} option\n */\n const handleSelectingSortOption = option => {\n if (isEmpty(option)) {\n setKey(\"\");\n setOrder(\"\");\n setKeySort(\"\");\n setOrderSort(\"\");\n return;\n }\n\n if (sortOrder === \"\") {\n setOrder(\"DESC\");\n setOrderSort(\"DESC\");\n }\n if (sortOrder === \"DESC\" && option.id !== 3) {\n setOrder(\"ASC\");\n setOrderSort(\"ASC\");\n }\n if (sortOrder === \"ASC\") {\n setOrder(\"DESC\");\n setOrderSort(\"DESC\");\n }\n setKey(option.key);\n setKeySort(option.key);\n setIsFilter(true);\n };\n\n /**\n * Returns list of cities from server and sets it to state.\n * Is fired every time if search query or page changes.\n */\n const fetchCities = async () => {\n const response = await employeeService.getCities(\n citiesSearchQuery,\n citiesPage\n );\n\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n const remoteOption = { id: 0, name: \"Remote\" };\n const cities = [remoteOption].concat(response.cities);\n\n setCities(cities);\n setTotalPages(response.pages);\n };\n\n /**\n * Refetches cities list from server and sets it to state.\n * If page number increments to a value that is greater than there are total pages\n * function exits.\n * Updates page number & sets it to state.\n */\n const refetchCities = async () => {\n let currentPage = citiesPage;\n let newPage = (currentPage += 1);\n\n if (newPage > totalPages) return;\n\n setCitiesPage(newPage);\n\n const response = await employeeService.getCities(\n citiesSearchQuery,\n newPage\n );\n\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n let newCities = [];\n setTimeout(() => {\n newCities = [...cities, ...response.cities];\n setTimeout(() => {\n setCities(newCities);\n }, 100);\n }, 100);\n };\n\n const handleCategoryChange = id => {\n const newChosenCategoryIds = chosenCategoryIds.includes(id)\n ? chosenCategoryIds.filter(cat => cat !== id)\n : [...chosenCategoryIds, id];\n setChosenCategoryIds(newChosenCategoryIds);\n setIsFilter(true);\n };\n\n const applyFilters = async (\n chosenCategories = chosenCategoryIds,\n priceRange = chosenPriceRange,\n chosenCities = chosenCityIds,\n chosenBenefitExpirationTypes = chosenBenefitExpirationTypeKeys,\n search = keywordSearch,\n order = sortOrder,\n key = sortKey,\n type = benefitGroupType\n ) => {\n const response = await api.getBenefitGroups({\n chosenCategories,\n page: page,\n priceRange,\n chosenCities,\n chosenBenefitExpirationTypes,\n remoteFilter,\n search,\n order,\n key,\n type\n });\n\n if (response.hasError) {\n setIsPageLoading(false);\n return;\n }\n if (\n !isEmpty(chosenCategories) ||\n !isEmpty(chosenCities) ||\n !isEmpty(chosenBenefitExpirationTypes) ||\n !isEmpty(priceRange) ||\n !isEmpty(keywordSearch)\n ) {\n setNumberOfProvidersRender(true);\n } else {\n setNumberOfProvidersRender(false);\n }\n applyBenefitGroupsFilters(\n response.groups,\n response.count,\n response.pages,\n benefitGroupType\n );\n setIsPageLoading(false);\n };\n\n const resetFilters = async () => {\n setCitiesSearchQuery(\"\");\n setChosenCityIds([]);\n setChosenCities([]);\n setRemoteFilter(false);\n setCitiesFilter([]);\n setChosenBenefitExpirationTypes([]);\n setRemoteFilterToStore(false);\n setChosenCategoryIds([]);\n setNumberOfProvidersRender(false);\n handleSelectingSortOption(null);\n setKeywordSearch(\"\");\n setPriceRange([\n transformTokensToRsd(PRICE_MIN),\n transformTokensToRsd(PRICE_MAX)\n ]);\n\n const response = await api.getBenefitGroups({\n chosenCategories: [],\n chosenCities: [],\n page: page,\n priceRange: new PriceRange(),\n search: \"\",\n order: \"\",\n key: \"\",\n type: benefitGroupType\n });\n\n if (response.hasError) {\n setIsPageLoading(false);\n return;\n }\n\n resetBenefitGroupFilters(\n response.groups,\n response.count,\n response.pages,\n benefitGroupType\n );\n setIsPageLoading(false);\n };\n\n const hideFilters = () => {\n const filters = document.getElementById(\"filters\");\n const filterWrapper = document.getElementById(\"filterWrapper\");\n const body = document.getElementsByTagName(\"body\")[0];\n\n if (\n filters &&\n filterWrapper &&\n filterWrapper.classList.contains(\"showWrapper\") &&\n filters.classList.contains(\"showFilters\")\n ) {\n filterWrapper.classList.remove(\"showWrapper\");\n filters.classList.remove(\"showFilters\");\n body.style.overflow = \"\";\n body.style.position = \"\";\n body.style.width = \"\";\n }\n };\n\n /**\n * Handles input change, search of cities.\n * Sets it to state.\n * @param {string} newValue\n * @returns {string}\n */\n const handleInputChange = newValue => {\n setCitiesPage(1);\n setCitiesSearchQuery(newValue);\n\n return newValue;\n };\n\n /**\n * Handles select of element from multiselect.\n * Sets selected elements' ids to state.\n * @param {City} options - Selected options, emmited from multiselect.\n * @param {object} action - Action object, emmited from multiselect. Consists of action type, option data object.\n */\n const handleSelect = (options, action) => {\n let selectedCityIds = [];\n\n if (options && options.length) {\n selectedCityIds = options.map(city => city.id);\n }\n\n if (action.action === \"select-option\" && action.option.name === \"Remote\") {\n setRemoteFilter(true);\n setRemoteFilterToStore(true);\n }\n\n if (\n action.action === \"remove-value\" &&\n action.removedValue.name === \"Remote\"\n ) {\n setRemoteFilter(false);\n setRemoteFilterToStore(false);\n }\n\n setChosenCityIds(selectedCityIds);\n setCitiesFilter(selectedCityIds);\n setChosenCities(options);\n setIsFilter(true);\n };\n\n /**\n * Handles select of element from multiselect.\n * Sets selected element's names to state.\n * @param {object} options - Selected options, emitted from multiselect.\n * @param {object} action - Action object, emitted from multiselect. Consists of action type, option data object.\n */\n const handleSelectTypes = (options, action) => {\n let selectedExpirationTypes = [];\n\n if (options && options.length) {\n selectedExpirationTypes = options.map(type => type.key);\n }\n setChosenBenefitExpirationTypeKeys(selectedExpirationTypes);\n setBenefitExpirationTypesFilter(selectedExpirationTypes);\n setChosenBenefitExpirationTypes(options);\n setIsFilter(true);\n };\n\n const handleSearch = searchQuery => {\n setKeywordSearch(searchQuery);\n setSearchFilter(searchQuery);\n setIsFilter(true);\n };\n\n /**\n * Handles range of price change.\n * Sets price range to state.\n * Sets filters price range to state.\n * @param {Array} values - Array of numbers, Array[0] - min value, Array[1] - max value\n */\n const handlePriceChange = values => {\n const isValueInRsd = localStorage.getItem(\"isValueInRsd\");\n\n setPriceRange(values);\n\n const transformedValue = isValueInRsd\n ? values.map(value => value / 20)\n : values;\n\n setFiltersPriceRange(priceRangeOptions, {\n min: transformedValue[0],\n max: transformedValue[1]\n });\n setIsFilter(true);\n };\n\n useEffect(() => {\n fetchCities();\n }, [citiesPage, citiesSearchQuery]);\n\n useEffect(() => {\n clearTimeout(timeout.current);\n setIsFilter(false);\n\n timeout.current = setTimeout(() => {\n if (isInitialStateSet) {\n setIsPageLoading(true);\n applyFilters();\n }\n }, FILTERS_TIMER_IN_MILLISECONDS);\n\n return () => {\n setIsFilter(false);\n clearTimeout(timeout.current);\n };\n }, [isFilter]);\n\n const handleResetFilters = () => {\n setIsFilter(false);\n setIsPageLoading(true);\n clearTimeout(timeout.current);\n\n timeout.current = setTimeout(() => {\n resetFilters();\n }, FILTERS_TIMER_IN_MILLISECONDS);\n\n return () => {\n setIsFilter(false);\n clearTimeout(timeout.current);\n };\n };\n\n useEffect(() => {\n if (isInitialStateSet) {\n handleResetFilters();\n }\n\n return () => {\n handleResetFilters();\n };\n }, [benefitGroupType]);\n\n const displayAvailableProviders = () => {\n const objectOfProviders = {\n public: benefitBrowseGroupsCount,\n local: benefitCompanyGroupsCount,\n favorite: 1\n };\n\n return objectOfProviders[benefitGroupType];\n };\n\n return (\n \n
\n \n {numberOfProvidersRender && (\n
\n
\n {t(\"available_prov\")}: {displayAvailableProviders()}\n
\n \n
\n )}\n
\n {}}\n setSearch={handleSearch}\n search={keywordSearch}\n setPagginationPage={setPage}\n placeholder={t(\"Search\")}\n />\n
\n

{t(\"Price\")}

\n
\n \n
\n

{t(\"SBG\")}

\n
\n handleSelectingSortOption(option)}\n />\n
\n

{t(\"locations\")}

\n
\n handleSelect(option, action)}\n handleInputChange={handleInputChange}\n shouldHaveFullWidth={true}\n fetchMoreData={refetchCities}\n />\n
\n

{t(\"FBT\")}

\n
\n \n handleSelectTypes(option, action)\n }\n shouldHaveFullWidth={true}\n />\n
\n

{t(\"Category\")}

\n
\n \n
\n
\n {\n handleResetFilters();\n hideFilters();\n }}\n >\n {t(\"reset_filter\")}\n \n \n {t(\"close\")}\n \n
\n
\n
\n
\n );\n};\n\nBenefitGroupFilters.propTypes = {\n categories: PropTypes.arrayOf(\n PropTypes.shape({\n description: PropTypes.string,\n id: PropTypes.number,\n name: PropTypes.string\n })\n ),\n chosenCategoryIds: PropTypes.arrayOf(PropTypes.number),\n setChosenCategoryIds: PropTypes.func,\n chosenPriceRange: PropTypes.shape({\n min: PropTypes.number,\n max: PropTypes.number\n }),\n applyBenefitGroupsFilters: PropTypes.func,\n resetBenefitGroupFilters: PropTypes.func,\n setCitiesFilter: PropTypes.func,\n setRemoteFilterToStore: PropTypes.func,\n setBenefitExpirationTypesFilter: PropTypes.func,\n setSearchFilter: PropTypes.func,\n setOrderSort: PropTypes.func,\n setKeySort: PropTypes.func,\n benefitGroupsCount: PropTypes.number,\n priceRangeOptions: PropTypes.array,\n setFiltersPriceRange: PropTypes.func,\n benefitGroupType: PropTypes.string,\n isInitialStateSet: PropTypes.bool,\n setIsPageLoading: PropTypes.func\n};\n\nconst mapStateToProps = state => {\n return {\n categories: state.employeeBenefitsPage.filters.categories,\n chosenCategoryIds: state.employeeBenefitsPage.filters.chosenCategoryIds,\n chosenPriceRange: state.employeeBenefitsPage.filters.chosenPriceRange,\n benefitBrowseGroupsCount:\n state.employeeBenefitsPage.benefitsBrowse.benefitGroupsCount,\n benefitCompanyGroupsCount:\n state.employeeBenefitsPage.benefitsCompany.benefitGroupsCount,\n priceRangeOptions: state.employeeBenefitsPage.filters.priceRangeOptions,\n benefitGroupType:\n state.employeeBenefitsPage.pageFrontEndStates.benefitGroupType,\n isInitialStateSet:\n state.employeeBenefitsPage.pageFrontEndStates.isInitialStateSet\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setChosenCategoryIds: chosenCategoryIds =>\n dispatch(actionCreators.setChosenCategoryIds(chosenCategoryIds)),\n setCitiesFilter: cityIds =>\n dispatch(actionCreators.setCitiesFilter(cityIds)),\n setRemoteFilterToStore: isRemote =>\n dispatch(actionCreators.setRemoteFilter(isRemote)),\n setBenefitExpirationTypesFilter: expirations =>\n dispatch(actionCreators.setBenefitExpirationTypesFilter(expirations)),\n setSearchFilter: search => dispatch(actionCreators.setSearchFilter(search)),\n setOrderSort: order => dispatch(actionCreators.setOrderSort(order)),\n setKeySort: key => dispatch(actionCreators.setKeySort(key)),\n applyBenefitGroupsFilters: (\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupType\n ) =>\n dispatch(\n actionCreators.applyBenefitGroupsFilters(\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupType\n )\n ),\n resetBenefitGroupFilters: (\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupType\n ) =>\n dispatch(\n actionCreators.resetBenefitGroupFilters(\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupType\n )\n ),\n setFiltersPriceRange: (updatedPriceRangeOptions, priceRange) =>\n dispatch(\n actionCreators.setFiltersPriceRange(\n updatedPriceRangeOptions,\n priceRange\n )\n ),\n setIsPageLoading: isLoading =>\n dispatch(actionCreators.setIsPageLoading(isLoading))\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(BenefitGroupFilters);\n","import { apiService } from \"../api.service\";\nimport { BenefitGroup } from \"../../../models/domain\";\n\nexport const getChosenBenefitGroup = async benefitGroupId => {\n const response = await apiService.get(`/benefit-group/${benefitGroupId}`);\n\n if (response.hasError) return response;\n\n return new BenefitGroup(response.data);\n};\n\nexport const refreshBenefitGroup = async benefitGroupId => {\n const response = await apiService.get(`/benefit-group/refresh/${benefitGroupId}`);\n\n if (response.hasError) return response;\n\n return new BenefitGroup(response.data);\n};\n\n/**\n * Marks new benefit group as read.\n * @param {number} benefitGroupId \n * @returns {Object}\n */\nexport const markNewBenefitGroupAsSeen = async benefitGroupId => {\n const payload = { benefit_group_id: benefitGroupId };\n const response = await apiService.post(`/benefit-group/new/mark-as-read`, payload);\n\n if (response.hasError) return response;\n\n return response;\n}\n\nexport const getBenefitGroupForPreview = async benefitGroupId => {\n const response = await apiService.get(`/benefit-group/preview/${benefitGroupId}`);\n\n if (response.hasError) return response;\n\n return new BenefitGroup(response.data);\n}\n","import React, { useEffect } from \"react\";\nimport { connect, useDispatch } from \"react-redux\";\nimport InfiniteScroll from \"react-infinite-scroll-component\";\nimport styled from \"styled-components\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\nimport { BeatLoader } from \"react-spinners\";\n// components\nimport {\n TextAndLine,\n BenefitCard,\n ListPlaceHolder,\n openModalAnim\n} from \"../../../../components\";\n// services\nimport * as api from \"../../../../services/api/employee/employeeBenefits.services\";\nimport * as benefitGroupService from \"../../../../services/api/admin/benefitGroups.service\";\n// actions\nimport * as actionCreators from \"../../../../actions/employee/employeeBenefits.actions\";\n// constants\nimport { PUBLIC } from \"../../../../builders/benefitGroups/benefitGroup.types\";\nimport { override } from \"../../../../services/loadingOverride.styles\";\nimport { apiService } from \"../../../../services/api/api.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BrowseBenefitGroupsStyles = styled.div`\n .benefitList {\n display: flex;\n justify-content: center;\n max-width: 1440px;\n flex-wrap: wrap;\n margin: 30px 0 0 0;\n }\n`;\n\nconst BrowseBenefitGroups = ({\n benefitBrowseGroups,\n benefitBrowseGroupsTotalPages,\n benefitBrowseGroupsPage,\n benefitBrowseGroupsCount,\n benefitCompanyGroups,\n benefitCompanyGroupsTotalPages,\n benefitCompanyGroupsPage,\n benefitCompanyGroupsCount,\n appliedChosenCategoryIds,\n appliedCityIds,\n appliedRemoteFilter,\n appliedChosenPriceRange,\n appliedBenefitExpirationTypes,\n appliedSearchFilter,\n appliedOrderSort,\n appliedKeySort,\n setAditionalBenefitGroups,\n openBenefitGroupModal,\n fetchData,\n fetchAlreadyUsedBenefits,\n benefitGroupType,\n isPageLoading\n}) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n\n const fetchMoreBenefitGroups = async (\n chosenCategories = appliedChosenCategoryIds,\n priceRange = appliedChosenPriceRange,\n chosenCities = appliedCityIds,\n remoteFilter = appliedRemoteFilter,\n chosenBenefitExpirationTypes = appliedBenefitExpirationTypes,\n search = appliedSearchFilter,\n order = appliedOrderSort,\n key = appliedKeySort\n ) => {\n let benefitGroupsPage =\n benefitGroupType === PUBLIC\n ? benefitBrowseGroupsPage\n : benefitCompanyGroupsPage;\n const response = await api.getBenefitGroups({\n chosenCategories,\n page: benefitGroupsPage + 1,\n priceRange,\n chosenCities,\n remoteFilter,\n chosenBenefitExpirationTypes,\n search,\n order,\n key,\n type: benefitGroupType\n });\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_benefit_groups\")\n );\n }\n setAditionalBenefitGroups(\n response.groups,\n response.count,\n response.pages,\n benefitGroupsPage + 1,\n benefitGroupType\n );\n };\n\n useEffect(() => {\n if (\n document.body.clientHeight <= window.innerHeight &&\n (benefitBrowseGroupsPage < benefitBrowseGroupsTotalPages ||\n benefitCompanyGroupsPage < benefitCompanyGroupsTotalPages)\n ) {\n fetchMoreBenefitGroups();\n }\n }, []);\n\n /**\n * Handles opening of modal after click on benefit group card.\n * If benefit group is marked as new, sends request to DB for updating status.\n * Refetches data.\n * Sends request to DB for benefits from that group that user is already using\n * @param {BenefitGroup} chosenBenefitGroup\n */\n const openModal = async chosenBenefitGroup => {\n if (chosenBenefitGroup.isBenefitGroupNew) {\n await benefitGroupService.markNewBenefitGroupAsSeen(\n chosenBenefitGroup.id\n );\n fetchData();\n }\n\n fetchAlreadyUsedBenefits(chosenBenefitGroup.id);\n\n const response = await apiService.get(\n `/favorites/check/benefits/${chosenBenefitGroup.id}`\n );\n\n let checkIfInFavoritesPayload = false;\n if (response.data.favorites?.id) checkIfInFavoritesPayload = true;\n\n dispatch(actionCreators.checkIfInFavorites(checkIfInFavoritesPayload));\n\n openBenefitGroupModal(chosenBenefitGroup);\n // Show modal card after 100ms\n setTimeout(() => {\n openModalAnim();\n }, 100);\n };\n\n const showTitle = () => {\n const typeObject = {\n public: t(\"Browse_Benefits\"),\n local: t(\"Company_Benefits\")\n };\n\n return typeObject[benefitGroupType];\n };\n\n return (\n \n \n {isPageLoading ? (\n \n \n \n ) : benefitGroupType === PUBLIC ? (\n benefitBrowseGroups?.length ? (\n \n \n \n }\n >\n {benefitBrowseGroups.map(benefitGroup => (\n openModal(benefitGroup)}\n />\n ))}\n \n ) : (\n
\n \n
\n )\n ) : benefitCompanyGroups?.length ? (\n \n \n \n }\n >\n {benefitCompanyGroups.map(benefitGroup => (\n openModal(benefitGroup)}\n />\n ))}\n \n ) : (\n
\n \n
\n )}\n
\n );\n};\n\nBrowseBenefitGroups.propTypes = {\n benefitBrowseGroups: PropTypes.arrayOf(PropTypes.shape({})),\n benefitBrowseGroupsTotalPages: PropTypes.number,\n benefitBrowseGroupsPage: PropTypes.number,\n benefitCompanyGroups: PropTypes.arrayOf(PropTypes.shape({})),\n benefitCompanyGroupsTotalPages: PropTypes.number,\n benefitCompanyGroupsPage: PropTypes.number,\n appliedChosenCategoryIds: PropTypes.arrayOf(PropTypes.number),\n appliedCityIds: PropTypes.arrayOf(PropTypes.number),\n appliedRemoteFilter: PropTypes.bool,\n appliedChosenPriceRange: PropTypes.shape({\n min: PropTypes.number,\n max: PropTypes.number\n }),\n appliedBenefitExpirationTypes: PropTypes.arrayOf(PropTypes.string),\n appliedSearchFilter: PropTypes.string,\n appliedOrderSort: PropTypes.string,\n appliedKeySort: PropTypes.string,\n setAditionalBenefitGroups: PropTypes.func,\n openBenefitGroupModal: PropTypes.func,\n fetchData: PropTypes.func,\n fetchAlreadyUsedBenefits: PropTypes.func,\n benefitGroupType: PropTypes.string,\n isPageLoading: PropTypes.bool\n};\n\nconst mapStateToProps = state => {\n return {\n benefitBrowseGroups:\n state.employeeBenefitsPage.benefitsBrowse.benefitGroups,\n benefitBrowseGroupsCount:\n state.employeeBenefitsPage.benefitsBrowse.benefitGroupsCount,\n benefitBrowseGroupsTotalPages:\n state.employeeBenefitsPage.benefitsBrowse.benefitGroupsTotalPages,\n benefitBrowseGroupsPage:\n state.employeeBenefitsPage.benefitsBrowse.benefitGroupsPage,\n benefitCompanyGroups:\n state.employeeBenefitsPage.benefitsCompany.benefitGroups,\n benefitCompanyGroupsCount:\n state.employeeBenefitsPage.benefitsCompany.benefitGroupsCount,\n benefitCompanyGroupsTotalPages:\n state.employeeBenefitsPage.benefitsCompany.benefitGroupsTotalPages,\n benefitCompanyGroupsPage:\n state.employeeBenefitsPage.benefitsCompany.benefitGroupsPage,\n appliedChosenCategoryIds:\n state.employeeBenefitsPage.filters.appliedChosenCategoryIds,\n appliedCityIds: state.employeeBenefitsPage.filters.cityIds,\n appliedRemoteFilter: state.employeeBenefitsPage.filters.isRemote,\n appliedChosenPriceRange:\n state.employeeBenefitsPage.filters.appliedChosenPriceRange,\n appliedBenefitExpirationTypes:\n state.employeeBenefitsPage.filters.expirations,\n appliedSearchFilter: state.employeeBenefitsPage.filters.search,\n appliedOrderSort: state.employeeBenefitsPage.filters.order,\n appliedKeySort: state.employeeBenefitsPage.filters.key,\n isApplyFilterClicked:\n state.employeeBenefitsPage.filters.isApplyFilterClicked,\n benefitGroupType:\n state.employeeBenefitsPage.pageFrontEndStates.benefitGroupType,\n isPageLoading: state.employeeBenefitsPage.pageFrontEndStates.isPageLoading\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setAditionalBenefitGroups: (\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage,\n benefitGroupType\n ) =>\n dispatch(\n actionCreators.setAditionalBenefitGroups(\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage,\n benefitGroupType\n )\n ),\n setBenefitGroupsPage: benefitGroupsPage =>\n dispatch(actionCreators.setBenefitGroupsPage(benefitGroupsPage)),\n openBenefitGroupModal: chosenBenefitGroup =>\n dispatch(actionCreators.openBenefitGroupModal(chosenBenefitGroup))\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(BrowseBenefitGroups);\n","import styled from \"styled-components\";\n\nexport const NextMonthDropDownStyles = styled.div`\n margin-left: 30px;\n display: flex;\n align-items: center;\n\n .nextMonthBenefitsCondition {\n font-style: normal;\n font-weight: 500;\n font-size: 16px;\n line-height: 20px;\n color: #757575;\n white-space: nowrap;\n margin-right: 8px;\n }\n\n .tooltipContainer {\n position: relative;\n .arrowButtons {\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n width: 10px;\n }\n\n .tooltip {\n position: absolute;\n background: #282a3b !important;\n border-radius: 4px;\n padding: 10px;\n right: -15px;\n bottom: -78px;\n\n .pointerBorder {\n width: 0;\n height: 0;\n border-left: 9px solid transparent;\n border-right: 9px solid transparent;\n border-bottom: 9px solid #282a3b;\n position: absolute;\n border-radius: 2px;\n right: 11px;\n top: -9px;\n }\n\n .pointer {\n width: 0;\n height: 0;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n border-bottom: 8px solid #282a3b;\n position: absolute;\n border-radius: 2px;\n right: 12px;\n top: -8px;\n }\n\n .tooltipOption {\n font-style: normal;\n font-weight: normal;\n font-size: 12px;\n line-height: 15px;\n white-space: nowrap;\n color: #ffffff;\n margin-bottom: 10px;\n cursor: pointer;\n }\n\n .tooltipOption:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n @media only screen and (max-width: 767px) {\n margin-left: 0;\n\n .tooltipContainer {\n z-index: 2;\n }\n }\n`;\n","import React, { useRef } from \"react\";\nimport { connect } from \"react-redux\";\n\nimport ArrowDown from \"../../../../../assets/images/categoryFilters/rectangle.png\";\nimport { NextMonthDropDownStyles } from \"./nextMonthDropDown.styles\";\n\nimport useClickOutside from \"../../../../../hooks/useClickOutside\";\n\nimport * as actionCreators from \"../../../../../actions/employee/employeeBenefits.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst NextMonthDropDown = ({\n isConditionAllBenefits,\n isNextMonthTooltipOpen,\n setIsConditionAllBenefits,\n setIsNextMonthTooltipOpen\n}) => {\n const { t } = useTranslation();\n const tooltip = useRef(null);\n\n useClickOutside([tooltip], () => setIsNextMonthTooltipOpen(false));\n return (\n \n

\n {isConditionAllBenefits ? t(\"SAB\") : t(\"SOC\")}\n

\n
\n setIsNextMonthTooltipOpen(true)}\n >\n {\"arrowDown\"}\n \n {isNextMonthTooltipOpen && (\n
\n
\n
\n setIsConditionAllBenefits(false)}\n >\n {t(\"SOC\")}\n

\n setIsConditionAllBenefits(true)}\n >\n {t(\"SAB\")}\n

\n
\n )}\n
\n
\n );\n};\n\nconst mapStateToProps = state => {\n return {\n isConditionAllBenefits:\n state.employeeBenefitsPage.subscribedBenefits.isConditionAllBenefits,\n isNextMonthTooltipOpen:\n state.employeeBenefitsPage.subscribedBenefits.isNextMonthTooltipOpen\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setIsConditionAllBenefits: isConditionAllBenefits =>\n dispatch(\n actionCreators.setIsConditionAllBenefits(isConditionAllBenefits)\n ),\n setIsNextMonthTooltipOpen: isNextMonthTooltipOpen =>\n dispatch(actionCreators.setIsNextMonthTooltipOpen(isNextMonthTooltipOpen))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(NextMonthDropDown);\n","import styled from \"styled-components\";\n\nexport const SubscribedBenefitGroupsStyles = styled.div`\n .benefitList {\n display: flex;\n max-width: 1440px;\n flex-wrap: wrap;\n margin: 30px 0 0 0;\n }\n\n .no-benefits-text {\n margin: 0 0 20px 0;\n }\n\n .mobileMyBenefits {\n display: none;\n }\n\n @media only screen and (max-width: 767px) {\n .desktopMyBenefits {\n display: none;\n }\n\n .mobileMyBenefits {\n display: block;\n\n .buttonsContainer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n\n .button {\n cursor: pointer;\n background: transparent;\n\n padding: 5px;\n border: 1px solid transparent;\n color: #1568bf;\n }\n\n .active {\n background: #1568bf;\n border: 1px solid #1568bf;\n color: #fff;\n border-radius: 20px;\n box-shadow: 0px 3px 12px rgba(0, 0, 0, 0.108528);\n }\n }\n }\n }\n\n @media only screen and (max-width: 500px) {\n .button {\n font-size: 10px;\n }\n }\n`;\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { connect } from \"react-redux\";\nimport { toast } from \"react-toastify\";\n// components and openModal animation function\nimport {\n BenefitCard,\n TextAndLine,\n openModalAnim\n} from \"../../../../components\";\nimport NextMonthDropDown from \"./NextMonthDropDown/NextMonthDropDown\";\n// styles\nimport { SubscribedBenefitGroupsStyles } from \"./subscribedBenefitGroups.styles\";\n// actions\nimport * as actionCreators from \"../../../../actions/employee/employeeBenefits.actions\";\n// services\nimport * as benefitGroupService from \"../../../../services/api/admin/benefitGroups.service\";\nimport * as api from \"../../../../services/api/employee/employeeBenefits.services\";\n// builder constants\nimport * as benefitGroupStatus from \"../../../../builders/benefitGroups/benefitGroup.status\";\nimport * as benefitGroupType from \"../../../../builders/benefitGroups/benefitGroup.types\";\nimport * as mobileBenefitsTypeRender from \"../../../../builders/benefitGroups/mobileBenefitsType\";\nimport { useTranslation } from \"react-i18next\";\n\nconst SubscribedBenefitGroups = ({\n subscribedBenefitGroups,\n isConditionAllBenefits,\n openBenefitGroupModal,\n fetchAlreadyUsedBenefits,\n setSubscribedBenefitGroups\n}) => {\n const { t } = useTranslation();\n const [isDesktop, setIsDesktop] = useState(window.innerWidth > 767);\n const [mobileBenefitsType, setMobileBenefitsTypes] = useState(\n mobileBenefitsTypeRender.THIS_MONTH\n );\n const isMounted = useRef(false);\n\n const fetchInitialData = async () => {\n const subscribedBenefitGroupsResponse = await api.getSubscribedBenefits();\n\n if (subscribedBenefitGroupsResponse.hasError) {\n return toast.error(\n subscribedBenefitGroupsResponse.errorMessage\n ? subscribedBenefitGroupsResponse.errorMessage\n : t(\"failed_to_get_sub_benefit_groups\")\n );\n }\n\n if (isMounted.current) {\n setSubscribedBenefitGroups(subscribedBenefitGroupsResponse.groups);\n }\n\n // // displays content after all state is set\n // setTimeout(() => {\n // const editEmployeeContentCard = document.getElementById(\n // \"benefitGroupList\"\n // );\n // if (isMounted.current && editEmployeeContentCard) {\n // editEmployeeContentCard.style.opacity = 1;\n // }\n // }, 100);\n };\n\n /**\n * Handles opening of modal after click on benefit group card.\n * If benefit group is marked as new, sends request to DB for updating status.\n * Refetches data.\n * @param {BenefitGroup} chosenBenefitGroup\n */\n const openModal = async chosenBenefitGroup => {\n if (chosenBenefitGroup.isBenefitGroupNew) {\n await benefitGroupService.markNewBenefitGroupAsSeen(\n chosenBenefitGroup.id\n );\n fetchData();\n }\n\n fetchAlreadyUsedBenefits(chosenBenefitGroup.id);\n\n openBenefitGroupModal(chosenBenefitGroup);\n // modal fades in after 100 ms\n setTimeout(() => {\n openModalAnim();\n }, 100);\n };\n\n /**\n * If benefit group is marked as new, sends request to DB for updating status.\n * Refetches data.\n * @param {BenefitGroup} chosenBenefitGroup\n */\n const handleDefaultBenefitCardClick = async chosenBenefitGroup => {\n if (chosenBenefitGroup.isBenefitGroupNew) {\n await benefitGroupService.markNewBenefitGroupAsSeen(\n chosenBenefitGroup.id\n );\n fetchData();\n }\n };\n\n // splits subscribed benefit groups in this month, next month and default on frontend\n const splitBenefitGroups = nextMonthCondition => {\n let thisMonthBenefitGroups = [];\n let nextMonthBenefitGroups = [];\n let defaultBenefitGroups = [];\n\n subscribedBenefitGroups.forEach(benefitGroup => {\n if (benefitGroup.type === benefitGroupType.PUBLIC) {\n if (\n benefitGroup.status === benefitGroupStatus.PENDING_DEACTIVATION ||\n benefitGroup.status === benefitGroupStatus.ACTIVE\n ) {\n thisMonthBenefitGroups = [...thisMonthBenefitGroups, benefitGroup];\n }\n if (nextMonthCondition) {\n if (\n benefitGroup.status === benefitGroupStatus.PENDING_ACTIVATION ||\n benefitGroup.status === benefitGroupStatus.ACTIVE ||\n benefitGroup.shouldBeInAllBenefits\n ) {\n nextMonthBenefitGroups = [...nextMonthBenefitGroups, benefitGroup];\n }\n } else {\n if (\n !benefitGroup.shouldBeInAllBenefits &&\n (benefitGroup.status === benefitGroupStatus.PENDING_DEACTIVATION ||\n benefitGroup.status === benefitGroupStatus.PENDING_ACTIVATION)\n ) {\n nextMonthBenefitGroups = [...nextMonthBenefitGroups, benefitGroup];\n }\n }\n } else {\n defaultBenefitGroups = [...defaultBenefitGroups, benefitGroup];\n }\n });\n return [\n thisMonthBenefitGroups,\n nextMonthBenefitGroups,\n defaultBenefitGroups\n ];\n };\n\n const [\n thisMonthBenefitGroups,\n nextMonthBenefitGroups,\n defaultBenefitGroups\n ] = splitBenefitGroups(isConditionAllBenefits);\n\n const mobileSubscribedGroupsRender = () => {\n if (mobileBenefitsType === mobileBenefitsTypeRender.THIS_MONTH)\n return thisMonthBenefitGroups;\n if (mobileBenefitsType === mobileBenefitsTypeRender.NEXT_MONTH)\n return nextMonthBenefitGroups;\n if (mobileBenefitsType === mobileBenefitsTypeRender.DEFAULT)\n return defaultBenefitGroups;\n };\n\n useEffect(() => {\n // setIsDesctop because i need to reinizialize two diffret designs\n const resizeListener = () => {\n setIsDesktop(window.innerWidth > 767);\n };\n window.addEventListener(\"resize\", resizeListener);\n\n return () => {\n window.removeEventListener(\"resize\", resizeListener);\n };\n }, []);\n\n useEffect(() => {\n isMounted.current = true;\n fetchInitialData();\n\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return (\n \n {isDesktop ? (\n
\n \n
\n {thisMonthBenefitGroups?.length > 0 ? (\n thisMonthBenefitGroups.map(benefitGroup => (\n openModal(benefitGroup)}\n />\n ))\n ) : (\n

{t(\"NABTM\")}

\n )}\n
\n \n \n \n
\n {nextMonthBenefitGroups?.length > 0 ? (\n nextMonthBenefitGroups.map(benefitGroup => (\n openModal(benefitGroup)}\n />\n ))\n ) : (\n

{t(\"NABNM\")}

\n )}\n
\n \n
\n {defaultBenefitGroups?.length > 0 ? (\n defaultBenefitGroups.map(benefitGroup => (\n openModal(benefitGroup)}\n />\n ))\n ) : (\n

{t(\"NADB\")}

\n )}\n
\n
\n ) : (\n
\n
\n \n setMobileBenefitsTypes(mobileBenefitsTypeRender.THIS_MONTH)\n }\n >\n {t(\"TM\")}\n \n \n setMobileBenefitsTypes(mobileBenefitsTypeRender.NEXT_MONTH)\n }\n >\n {t(\"NM\")}\n \n \n setMobileBenefitsTypes(mobileBenefitsTypeRender.DEFAULT)\n }\n >\n {t(\"DEF\")}\n \n
\n {mobileBenefitsType === mobileBenefitsTypeRender.NEXT_MONTH && (\n \n )}\n
\n {mobileSubscribedGroupsRender().map(benefitGroup => (\n \n mobileBenefitsType !== mobileBenefitsTypeRender.DEFAULT &&\n openModal(benefitGroup)\n }\n />\n ))}\n
\n
\n )}\n
\n );\n};\n\nconst mapStateToProps = state => {\n return {\n subscribedBenefitGroups:\n state.employeeBenefitsPage.subscribedBenefits.subscribedBenefitGroups,\n isConditionAllBenefits:\n state.employeeBenefitsPage.subscribedBenefits.isConditionAllBenefits\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n openBenefitGroupModal: chosenBenefitGroup =>\n dispatch(actionCreators.openBenefitGroupModal(chosenBenefitGroup)),\n setSubscribedBenefitGroups: subscribedBenefitGroups =>\n dispatch(\n actionCreators.setSubscribedBenefitGroups(subscribedBenefitGroups)\n )\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(SubscribedBenefitGroups);\n","export const THIS_MONTH = \"THIS_MONTH\";\nexport const NEXT_MONTH = \"NEXT_MONTH\";\nexport const DEFAULT = \"DEFAULT\";\n","import styled from \"styled-components\";\n\nexport const LeaveReviewFormStyles = styled.div`\n min-height: 180px;\n width: 100%;\n padding: 12px 0;\n\n .closeButton {\n width: 30px;\n height: 30px;\n border: none;\n outline: none;\n font-size: 15px;\n position: absolute;\n z-index: 2;\n right: -10px;\n top: 0px;\n font-weight: 500;\n cursor: pointer;\n background: rgba(255, 255, 255, 0.6);\n border-radius: 50%;\n }\n\n .closeButton:hover {\n color: #1568bf;\n background: rgba(255, 255, 255, 0.8);\n }\n\n .ratingTopContainer {\n text-align: center;\n height: 75px;\n margin: 20px 0;\n font-family: \"Montserrat\";\n font-style: normal;\n font-weight: 500;\n letter-spacing: -0.2px;\n\n .ratingTitle {\n font-size: 18px;\n line-height: 19px;\n color: #354052;\n margin-bottom: 16px;\n }\n }\n\n .ratingButtonsContainer {\n text-align: right;\n\n button {\n font-size: 16px;\n line-height: 20px;\n border: none;\n outline: none;\n background-color: transparent;\n cursor: pointer;\n }\n\n .cancel {\n color: #87919e;\n }\n\n .post {\n color: #2f68b9;\n margin-left: 40px;\n }\n\n .itemContainer:hover {\n background-color: red;\n }\n }\n`;\n","import React, { useEffect, useState } from \"react\";\nimport { toast } from \"react-toastify\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport { useFormik } from \"formik\";\nimport StarRatings from \"react-star-ratings\";\n\n//entities\nimport BenefitGroupReview from \"../../../models/domain/BenefitGroupReview.entity\";\n//components\nimport { SelectInput } from \"../..\";\n// actions\nimport * as actionCreators from \"../../../actions/employee/employeeBenefits.actions\";\n//services\nimport * as api from \"../../../services/api/employee/employeeBenefits.services\";\nimport * as benefitGroupService from \"../../../services/api/admin/benefitGroups.service\";\nimport { uniqueArrayOfObjects } from \"../../../services/general.utils\";\n//styles\nimport { LeaveReviewFormStyles } from \"./LeaveReviewFormStyles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst LeaveReviewForm = ({\n usedBenefits,\n setUsedBenefits,\n closeModal,\n benefitGroup,\n updateBenefitGroup,\n setChosenBenefitGroup,\n setSubscribedBenefitGroups\n}) => {\n const { t } = useTranslation();\n const [rating, setRating] = useState(0);\n\n useEffect(() => {\n setFieldValue(\"rating\", rating);\n }, [rating]);\n\n const leaveReview = async values => {\n if (values.rating === 0) {\n return toast.error(t(\"add_rating\"));\n }\n\n const response = await api.createBenefitGroupReview(values);\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_leave_rating\")\n );\n }\n\n const [\n benefitGroupResponse,\n usedBenefitsResponse,\n subscribedBenefitGroupsResponse\n ] = await Promise.all([\n benefitGroupService.refreshBenefitGroup(benefitGroup.id),\n api.getAlreadyUsedBenefits(benefitGroup.id),\n api.getSubscribedBenefits()\n ]);\n\n if (benefitGroupResponse.hasError) {\n return toast.error(\n benefitGroupResponse.errorMessage\n ? benefitGroupResponse.errorMessage\n : t(\"failed_to_get_benefit_groups\")\n );\n }\n\n if (usedBenefitsResponse.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_used_benefits\")\n );\n }\n\n if (subscribedBenefitGroupsResponse.hasError) {\n return toast.error(\n subscribedBenefitGroupsResponse.errorMessage\n ? subscribedBenefitGroupsResponse.errorMessage\n : t(\"failed_to_get_sub_benefit_groups\")\n );\n }\n\n toast.success(t(\"success_review\"));\n\n setUsedBenefits(uniqueArrayOfObjects(usedBenefitsResponse.benefits));\n setChosenBenefitGroup(benefitGroupResponse);\n updateBenefitGroup(benefitGroupResponse);\n setSubscribedBenefitGroups(subscribedBenefitGroupsResponse.groups);\n\n closeModal();\n };\n\n const formik = useFormik({\n initialValues: new BenefitGroupReview({\n benefitId: usedBenefits[0].id,\n benefitGroupId: usedBenefits[0].benefitGroupId\n }),\n onSubmit: leaveReview\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n handleChange,\n handleBlur,\n setFieldValue\n } = formik;\n\n return (\n \n
\n \n
\n

Rate this benefit

\n {\n setRating(newRating);\n }}\n handleChange\n />\n
\n
\n benefit.id === values.benefitId\n )}\n handleChange={option => setFieldValue(\"benefitId\", option.id)}\n customHeight=\"41px\"\n shouldHaveFullWidth\n />\n
\n
\n {\n setRating(0);\n closeModal();\n }}\n className=\"cancel\"\n type=\"reset\"\n >\n Cancel\n \n \n
\n
\n
\n );\n};\n\nLeaveReviewForm.propTypes = {\n usedBenefits: PropTypes.arrayOf(PropTypes.shape({})),\n setUsedBenefits: PropTypes.func,\n closeModal: PropTypes.func\n};\n\nconst mapStateToProps = state => {\n return {\n benefitGroup:\n state.employeeBenefitsPage.pageFrontEndStates.chosenBenefitGroup\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n updateBenefitGroup: benefitGroup =>\n dispatch(actionCreators.updateBenefitGroup(benefitGroup)),\n setChosenBenefitGroup: benefitGroup =>\n dispatch(actionCreators.setChosenBenefitGroup(benefitGroup)),\n setSubscribedBenefitGroups: benefitGroups =>\n dispatch(actionCreators.setSubscribedBenefitGroups(benefitGroups))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(LeaveReviewForm);\n","import styled, { keyframes } from \"styled-components\";\n\nconst fadeInDown = keyframes`\n from {\n opacity: 0;\n transform: translate3d(0, -100%, 0);\n }\n\n to {\n opacity: 1;\n transform: translate3d(0, 0, 0);\n }\n`;\n\nconst BenefitSubscribeStyles = styled.div`\n width: 650px;\n padding: 0;\n max-height: ${({ maxHeight }) => maxHeight};\n overflow-y: auto;\n overflow-x: hidden;\n\n .titleWrapper {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n #social-proof {\n animation: ${fadeInDown} 0.7s ease-in-out;\n }\n\n .socialProofForSingleBenefit {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-align-items: center;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: flex-start;\n position: absolute;\n right: 0;\n background: #ffffff;\n bottom: -45px;\n z-index: 1;\n width: 300px;\n border-radius: 4px;\n box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2),\n 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 4px 5px 0 rgba(0, 0, 0, 0.14);\n height: 45px;\n color: #1568bf;\n padding: 5px;\n font-weight: 500;\n\n .socialProofForSingleBenefitCountWrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 0 1 33%;\n\n .socialProofForSingleBenefitNumberOfSubscribes {\n font-size: 18px;\n font-weight: 700;\n }\n\n .socialProofForSingleBenefitUsers {\n font-size: 10px;\n }\n }\n\n .socialProofForSingleBenefitDescription {\n flex: 0 1 66%;\n font-size: 10px;\n color: #757575;\n }\n\n .socialProofForSingleBenefitName {\n font-weight: 600;\n color: #1568bf;\n }\n }\n\n .addOrRemoveFromFavoritesButton {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 10px;\n border-radius: 4px;\n border: solid 1px transparent;\n color: #1568bf;\n outline: #1568bf;\n background: #ffffff;\n outline-style: inset;\n outline-width: 0.5px;\n cursor: pointer;\n font-size: 16px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n margin: 0;\n margin-right: 10px;\n margin-top: 40px;\n margin-bottom: 8px;\n transition: 0.5s;\n\n &:hover {\n background: #1568bf;\n color: #fff;\n outline: unset;\n }\n }\n\n .categoryTag {\n display: inline-block;\n margin-bottom: 5px;\n .categoryText {\n font-family: \"Montserrat\";\n font-style: normal;\n font-weight: 500;\n font-size: 14px;\n line-height: 13px;\n color: #2f68b9;\n }\n }\n\n .vouchersContainer {\n display: none;\n }\n\n .inputContainer {\n position: relative;\n .priceDisclaimer {\n color: #373737;\n position: absolute;\n top: -23px;\n width: 250px;\n font-size: 11px;\n }\n }\n\n .imageContainer {\n width: 100%;\n height: 305px;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n }\n\n .imageContainer img {\n position: absolute;\n height: 100%;\n top: 0;\n left: 0;\n object-fit: cover;\n width: 100%;\n }\n\n .topContainer {\n padding: 12px 32px 0 32px;\n position: relative;\n margin-bottom: 20px;\n\n .providerImageOuterCircle {\n width: 80px;\n height: 80px;\n border-radius: 50%;\n position: absolute;\n background: #fff;\n left: 32px;\n top: -40px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .providerImageInnerCircle {\n width: 74px;\n height: 74px;\n border-radius: 50%;\n overflow: hidden;\n display: flex;\n justify-content: center;\n align-items: center;\n\n .providerLogo {\n height: 100%;\n object-fit: cover;\n width: 100%;\n }\n }\n }\n\n .title {\n font-size: 24px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: 19px;\n letter-spacing: -0.2px;\n color: #000000;\n margin-top: 40px;\n margin-bottom: 8px;\n }\n\n .ratingContainer {\n width: 190px;\n height: 40px;\n font-size: 14px;\n letter-spacing: -0.2px;\n\n .starContainer {\n line-height: 18px;\n font-weight: 500;\n color: #87919e;\n }\n\n .link {\n line-height: 18px;\n font-weight: 400;\n color: #2f68b9;\n cursor: pointer;\n }\n }\n\n @keyframes showModal {\n from {\n transform: translateY(50px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n .ratingCardContainer {\n position: relative;\n animation: showModal 0.4s ease-in-out;\n border-radius: 4px;\n //box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.5);\n background-color: #ffffff;\n transition: all 0.35s ease-in-out;\n }\n\n .anim {\n transform: translateY(0);\n opacity: 1;\n }\n\n .summary {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.36;\n letter-spacing: normal;\n color: #000000;\n word-wrap: break-word;\n margin: 10px 0;\n }\n\n .locations {\n font-weight: 500;\n color: #87919e;\n margin-top: 15px;\n word-wrap: break-word;\n font-size: 14px;\n font-stretch: normal;\n line-height: 18px;\n }\n\n .description {\n margin: 10px 0 10px 0;\n line-height: 1.36;\n word-wrap: break-word;\n color: #000000;\n font-size: 14px;\n ul {\n margin-left: 18px;\n }\n ol {\n margin-left: 18px;\n }\n }\n }\n\n .benefitItemsContainer {\n padding: 20px;\n overflow-y: visible;\n }\n\n .labels {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 15px;\n\n .label {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 2;\n letter-spacing: -0.2px;\n color: #b4b4b4;\n }\n\n .packages {\n width: 39%;\n }\n\n .duration {\n width: 11%;\n }\n\n .tokensLabel {\n width: 23%;\n }\n }\n\n .subscribedBenefitIndicator {\n border-color: #1568bf !important;\n }\n\n .benefitStatusActiveIndicator {\n background-color: rgba(65, 194, 100, 0.08) !important;\n border: 1px solid #41c264 !important;\n box-sizing: border-box;\n border-radius: 4px;\n }\n\n .benefitStatusPendingActivationIndicator {\n background-color: rgba(132, 152, 142, 0.08) !important;\n border: 1px solid #84988e !important;\n box-sizing: border-box;\n border-radius: 4px;\n }\n\n .benefitStatusPendingDeactivationIndicator {\n background-color: rgba(197, 60, 60, 0.08) !important;\n border: 1px solid #c53c3c !important;\n box-sizing: border-box;\n border-radius: 4px;\n }\n\n .benefiItemCard {\n width: 100%;\n padding: 15px 15px 20px 15px;\n border-radius: 4px;\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.11);\n border: solid 1px #e6eaee;\n background-color: #ffffff;\n margin-bottom: 12px;\n position: relative;\n\n .fileName {\n position: absolute;\n right: 0;\n bottom: -16px;\n color: #505050;\n font-size: 11px;\n }\n\n .labelValues {\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n .benefitName {\n width: 39%;\n font-size: 16px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #354052;\n }\n }\n }\n\n .benefitSummary {\n margin-top: 15px;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.36;\n letter-spacing: normal;\n color: #000000;\n word-wrap: break-word;\n }\n\n .benefitDescription {\n margin-top: 15px;\n line-height: 1.36;\n word-wrap: break-word;\n color: #000000;\n font-size: 14px;\n ul {\n margin-left: 18px;\n }\n ol {\n margin-left: 18px;\n }\n }\n\n .benefitExpirationAndTokens {\n display: flex;\n margin-top: 12px;\n .duration {\n min-width: 11%;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 2;\n letter-spacing: -0.2px;\n color: #373737;\n opacity: 0.8;\n margin-right: 2px;\n }\n .tokenContainer {\n display: flex;\n align-items: center;\n\n .tokens {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 2;\n letter-spacing: -0.2px;\n color: #373737;\n opacity: 0.8;\n margin-left: 4px;\n }\n }\n }\n\n .benefitStatusWrap {\n margin-bottom: 12px;\n display: flex;\n justify-content: space-between;\n\n .benefitStatusActive {\n font-weight: 600;\n font-size: 13px;\n line-height: 16px;\n letter-spacing: -0.2px;\n color: #41c264;\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .benefitStatusPendingDeactivation {\n font-weight: 600;\n font-size: 13px;\n line-height: 16px;\n letter-spacing: -0.2px;\n color: #c53c3c;\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .benefitStatusPendingActivation {\n font-weight: 600;\n font-size: 13px;\n line-height: 16px;\n letter-spacing: -0.2px;\n color: #84988e;\n display: flex;\n align-items: center;\n gap: 10px;\n }\n }\n\n @media only screen and (max-width: 767px) {\n width: 100%;\n height: 100vh;\n max-height: 100vh;\n\n .vouchersContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n padding: 15px 15px 70px 15px;\n overflow-y: auto;\n\n .vouchersTitle {\n font-size: 24px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n margin: 0 0 27px 0;\n }\n\n .chosenVoucher {\n border: 1px solid #1568bf !important;\n }\n\n .voucherItem {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px;\n border: 1px solid #d8d8d8;\n border-radius: 4px;\n margin-bottom: 10px;\n cursor: pointer;\n\n .voucherInputContainer {\n display: flex;\n align-items: center;\n\n .filterCheck {\n width: 12px;\n height: 12px;\n border-radius: 4px;\n cursor: pointer;\n }\n\n .checkLabel {\n width: 50px;\n font-style: normal;\n font-weight: normal;\n font-size: 12px;\n line-height: 15px;\n color: #4b4b4b;\n margin-left: 10px;\n margin-right: 10px;\n white-space: nowrap;\n text-transform: uppercase;\n }\n\n .changeColor {\n color: #1568bf;\n }\n\n .priceLabel {\n width: 15px;\n font-style: normal;\n font-weight: normal;\n font-size: 12px;\n line-height: 15px;\n color: #4b4b4b;\n margin-left: 10px;\n margin-right: 10px;\n white-space: nowrap;\n text-transform: uppercase;\n }\n }\n }\n }\n\n .benefitItemsContainer {\n padding: 0 10px;\n margin-bottom: 100px;\n }\n\n .labels {\n padding: 0 10px;\n }\n\n .benefiItemCard {\n padding: 10px;\n\n .labelValues {\n .benefitName {\n font-size: 14px;\n }\n }\n\n .benefitDescription {\n font-size: 12px;\n }\n }\n\n .redeemButton {\n margin-right: 10px;\n margin-left: 0;\n }\n }\n\n .remainingQuantity {\n font-weight: 500;\n font-size: 13px;\n letter-spacing: -0.2px;\n color: #616161;\n }\n .vatDisclaimer {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 2;\n letter-spacing: -0.2px;\n color: #373737;\n opacity: 0.8;\n }\n @media only screen and (max-width: 500px) {\n .redeemButton {\n margin-top: 10px;\n margin-bottom: 10px;\n float: right;\n }\n\n .benefiItemCard .labelValues .benefitName {\n width: 50%;\n }\n }\n`;\n\nexport default BenefitSubscribeStyles;\n","import React from \"react\";\nimport { isEmpty } from \"../services/general.utils\";\n\n/**\n * Renders list of benefit group locations.\n * @param {City[]} locations\n * @param {boolean} isRemote\n * @param {City[]} employeeLocations\n * @returns {HTMLParagraphElement | undefined}\n */\nexport const renderLocations = (\n locations,\n isRemote,\n employeeLocations = []\n) => {\n if (isEmpty(locations) && isRemote) {\n return

Remote

;\n }\n\n if (!isEmpty(locations) && isEmpty(employeeLocations) && isRemote) {\n return (\n

\n Remote,{\" \"}\n {locations.map((city, index) => {\n return locations.length - 1 === index\n ? `${city.name}`\n : `${city.name}, `;\n })}\n

\n );\n }\n\n if (!isEmpty(locations) && !isEmpty(employeeLocations)) {\n const employeeCity = employeeLocations?.find(city =>\n locations.find(ct => ct.id === city.id)\n );\n const groupLocations = !isEmpty(employeeCity)\n ? locations.filter(location => location.id !== employeeCity.id)\n : locations;\n\n if (!isEmpty(employeeCity) && isRemote) {\n return (\n

\n Remote, {employeeCity.name}{\" \"}\n {!isEmpty(groupLocations)\n ? `, ${groupLocations.map(city => city.name).join(\", \")}`\n : null}\n

\n );\n }\n\n if (!isEmpty(employeeCity) && !isRemote) {\n return (\n

\n {employeeCity.name}{\" \"}\n {!isEmpty(groupLocations)\n ? `, ${groupLocations.map(city => city.name).join(\", \")}`\n : null}\n

\n );\n }\n\n if (isEmpty(employeeCity) && isRemote) {\n return (\n

\n Remote,{\" \"}\n {!isEmpty(groupLocations)\n ? groupLocations.map(city => city.name).join(\", \")\n : null}\n

\n );\n }\n\n if (isEmpty(employeeCity) && !isRemote) {\n return (\n

\n {!isEmpty(groupLocations)\n ? groupLocations.map(city => city.name).join(\", \")\n : null}\n

\n );\n }\n }\n\n return (\n !isEmpty(locations) && (\n

{locations.map(city => city.name).join(\", \")}

\n )\n );\n};\n","/**\n * Calculates benefit price with VAT.\n * @param price - benefit price in tokens.\n * @param vatRate - VAT rate.\n * @returns {number} - Benefit price with VAT.\n */\nexport const calculatePriceWithVat = (price, vatRate) => {\n const vatAmount = price * (vatRate / 100);\n return Math.floor(price + vatAmount);\n};\n","import styled from \"styled-components\";\n\nexport const BenefitSubscribeButtonsContainerStyles = styled.div`\n margin-top: 8px;\n display: flex;\n align-items: center;\n position: relative;\n justify-content: ${({ doesHaveMinimumContractPeriod, enableInstalments }) =>\n !!doesHaveMinimumContractPeriod || !!enableInstalments\n ? \"space-between\"\n : \"flex-end\"};\n\n .voucherInputContainer {\n width: 183px;\n }\n\n .__react_component_tooltip {\n top: 0 !important;\n left: 0 !important;\n position: absolute !important;\n }\n\n .tokensContainer {\n width: 48%;\n margin: 0 0 7px 10px;\n position: relative;\n }\n\n .inputContainer {\n margin: 5px 0 0 0;\n }\n\n .voucherErrorMsg {\n margin-top: -30px !important;\n position: absolute;\n width: 300px;\n }\n\n .benefitErrorMsg {\n margin-bottom: 85px;\n position: absolute;\n width: 300px;\n right: 0px;\n }\n\n .tokenWorth {\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: italic;\n line-height: 1.85;\n letter-spacing: -0.22px;\n color: #626262;\n }\n\n .label {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n color: #373737;\n position: absolute;\n top: 93%;\n min-width: 120px;\n }\n\n .subscribedButton {\n width: 111px;\n height: 34px;\n border-radius: 4px;\n background-color: #1568bf;\n border: 1px solid #1568bf;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n outline: none;\n\n .circle {\n width: 13px;\n height: 13px;\n border-radius: 6.5px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #fff;\n\n .unsubscribeLine {\n width: 9px;\n height: 3px;\n border: 1px solid #1568bf;\n background: #1568bf;\n }\n }\n\n .subscribedText {\n width: 78px;\n font-size: 12px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n color: #ffffff;\n margin-left: 5px;\n }\n\n &:hover {\n background-color: white;\n border: 1px solid #1568bf;\n color: #1568bf;\n .subscribedText {\n color: #1568bf;\n }\n }\n }\n\n .minimum-contract-period {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 2;\n letter-spacing: -0.2px;\n color: #373737;\n opacity: 0.8;\n margin-top: 10px;\n }\n\n .voucherName {\n font-size: 14px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n color: #000000;\n margin-right: 5px;\n }\n\n .voucherPrice {\n font-size: 14px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n color: #000000;\n margin-left: 10px;\n }\n\n .desktopVoucherContainer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n flex-wrap: wrap;\n }\n\n .desktopVoucher {\n display: flex;\n align-items: center;\n }\n .benefitPrice {\n font-size: 14px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n color: #000000;\n margin-left: 4px;\n }\n\n #voucherInput {\n height: 31px;\n .react-dropdown-select {\n height: 31px !important;\n border-radius: 4px !important;\n border: solid 1px #d5dbdd !important;\n background-color: #ffffff !important;\n font-size: 14px !important;\n font-weight: normal !important;\n font-stretch: normal !important;\n font-style: normal !important;\n line-height: 1.71 !important;\n letter-spacing: -0.23px !important;\n color: #373737 !important;\n width: 100% !important;\n box-shadow: none !important;\n cursor: pointer !important;\n display: flex !important;\n align-items: center !important;\n\n .react-dropdown-select-content {\n height: 100% !important;\n display: flex !important;\n padding: 0 5px !important;\n align-items: center !important;\n flex-wrap: nowrap !important;\n text-overflow: ellipsis !important;\n overflow: hidden !important;\n width: 70px !important;\n white-space: nowrap !important;\n\n input {\n font-size: 12px !important;\n font-weight: normal !important;\n font-stretch: normal !important;\n font-style: normal !important;\n line-height: normal !important;\n letter-spacing: normal !important;\n color: #5d5d5d !important;\n overflow-x: scroll !important;\n }\n }\n\n .react-dropdown-select-dropdown-handle {\n height: 100%;\n display: flex;\n align-items: center;\n margin: 0 !important;\n }\n }\n }\n\n .unsubscribedButton {\n width: 100px;\n padding: 9px;\n border-radius: 4px;\n border: solid 1px #1568bf;\n background-color: #ffffff;\n outline: none;\n cursor: pointer;\n font-size: 12px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n color: #1568bf;\n margin-top: 10px;\n\n &:disabled {\n border: solid 1px #d8d8d8;\n background-color: whitesmoke;\n color: #d8d8d8;\n }\n }\n\n .redeemButton {\n width: 86px;\n padding: 9px;\n border-radius: 4px;\n border: solid 1px #1568bf;\n background-color: #ffffff;\n outline: none;\n cursor: pointer;\n font-size: 12px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n color: #1568bf;\n\n &:hover {\n background-color: #1568bf;\n color: white;\n }\n\n &:disabled {\n border: solid 1px #d8d8d8;\n background-color: whitesmoke;\n color: #d8d8d8;\n }\n }\n\n @media only screen and (max-width: 520px) {\n flex-wrap: wrap;\n\n .voucherErrorMsg {\n width: 220px;\n margin-left: -70px;\n font-size: 11px;\n }\n\n .predefined {\n width: 300px;\n font-size: 12px;\n left: -110px;\n }\n\n .benefitErrorMsg {\n margin-bottom: 53px;\n left: 0px;\n bottom: -5px;\n }\n\n .minimum-contract-period {\n margin-top: 0;\n margin-bottom: 10px;\n }\n\n .unsubscribedButton {\n margin-top: 10px;\n }\n }\n\n @media only screen and (max-width: 420px) {\n .tokensContainer {\n margin: 35px 0 15px 0;\n position: relative;\n }\n\n .voucherErrorMsg {\n width: 300px;\n margin: -30px 0 120px 0;\n font-size: 11px;\n }\n\n .predefined {\n width: 240px;\n font-size: 12px;\n left: 0;\n }\n\n .desktopVoucher {\n flex-wrap: wrap;\n }\n }\n\n @media only screen and (max-width: 356px) {\n .benefitErrorMsg {\n bottom: 40px;\n font-size: 11px;\n }\n }\n\n @media only screen and (max-width: 320px) {\n .voucherInputContainer {\n width: 155px;\n }\n\n .predefinedContainer {\n margin: 20px 0 0 0;\n }\n\n .voucherErrorMsg {\n font-size: 10px;\n width: 250px;\n }\n\n .predefined {\n bottom: -120px;\n }\n .benefitErrorMsg {\n font-size: 10px;\n }\n }\n`;\n","import styled from \"styled-components\";\n\nexport const BenefitSubscribeQuantityStyles = styled.div`\n position: relative;\n height: 46px;\n display: flex;\n align-items: center;\n gap: 5px;\n justify-content: flex-end;\n margin: 0 5px;\n \n .decrementButton {\n width: 33px;\n height: 25px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #fff;\n border: 1px solid #1568bf;\n border-radius: 4px;\n outline: none;\n cursor: pointer;\n }\n\n .incrementButton {\n width: 33px;\n height: 25px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #fff;\n border: 1px solid #1568bf;\n border-radius: 4px;\n outline: none;\n cursor: pointer;\n }\n\n .quantityInput {\n text-align: center;\n width: 70px;\n height: 26px;\n }\n`;\n","import React from 'react';\nimport { Input } from '../../../../../../components';\nimport { BenefitSubscribeQuantityStyles } from './BenefitSubscribeQuantity.styles';\n\nconst BenefitSubscribeQuantity = ({ setQuantity, isPreview, quantity, handleSetQuantity, handleKeyDown }) => (\n \n setQuantity(quantity - 1)}\n disabled={isPreview || quantity === 1 || quantity === 0}\n className=\"decrementButton\"\n >\n -\n \n handleSetQuantity(e)}\n onBlur={(e) => handleSetQuantity(e)}\n onKeyDown={handleKeyDown}\n shouldHaveHight={false}\n min={1}\n max={999}\n customCssClass=\"inputStyles quantityInput\"\n disabled={isPreview}\n />\n setQuantity(quantity + 1)}\n disabled={isPreview || quantity === \"\"}\n className=\"incrementButton\"\n >\n +\n \n \n)\n\nexport default BenefitSubscribeQuantity;\n","import React, { useState, useMemo } from \"react\";\nimport { connect, useDispatch, useSelector } from \"react-redux\";\nimport { toast } from \"react-toastify\";\n// components and animations\nimport { closeModalAnim } from \"../../../../../components\";\nimport BenefitSubscribeQuantity from \"./BenefitSubscribeQuantity/BenefitSubscribeQuantity\";\n// assets\nimport { CheckIcon, TokenIcon } from \"../../../../../assets/Icons\";\n// services\nimport * as api from \"../../../../../services/api/employee/employeeBenefits.services\";\nimport * as employeeService from \"../../../../../services/api/employee/employeeBenefits.services\";\nimport * as userApiService from \"../../../../../services/api/auth.service\";\nimport * as benefitGroupService from \"../../../../../services/api/admin/benefitGroups.service\";\n// actions\nimport * as actionCreators from \"../../../../../actions/employee/employeeBenefits.actions\";\nimport * as appActionCreators from \"../../../../../actions/app.actions\";\nimport { PENDING_DEACTIVATION } from \"../../../../../builders/benefitGroups/benefitGroup.status\";\nimport { BenefitExpirationTypeEnum } from \"../../../../../constants/benefit.constants\";\n// Utils\nimport { isEmpty } from \"../../../../../services/general.utils\";\nimport {\n LOCAL,\n PUBLIC,\n FAVORITE\n} from \"../../../../../builders/benefitGroups/benefitGroup.types\";\nimport { apiService } from \"../../../../../services/api/api.service\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n transformTokenCurrencyIcons,\n transformTokensToRsd\n} from \"../../../../../utils/transformTokensToRsd\";\n\nconst BenefitSubscribeButton = ({\n benefitGroup,\n benefit,\n appliedChosenCategoryIds,\n appliedCityIds,\n appliedRemoteFilter,\n appliedChosenPriceRange,\n appliedBenefitExpirationTypes,\n appliedSearchFilter,\n appliedKeySort,\n appliedOrderSort,\n setBenefitGroupsAndSubscribedBenefitGroups,\n closeBenefitGroupModal,\n setEmployeeTokenCount,\n status,\n setSystemNotifications,\n user,\n isPreview = false,\n updateBenefitGroup,\n setSubscribedBenefitGroups,\n setIsLoading,\n setListOfCompanyBenefits\n}) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const [isSubscribedButtonHovered, setIsSubscribedButtonHovered] = useState(\n false\n );\n\n const { benefitGroupType } = useSelector(\n state => state.employeeBenefitsPage.pageFrontEndStates\n );\n\n const [IsButtonsDisabled, setIsButtonsDisabled] = useState(false);\n const [quantity, setQuantity] = useState(1);\n\n const { benefitGroupsPage } = useSelector(\n state => state.employeeBenefitsPage.benefitsCompany\n );\n\n /**\n * Calculates price user will pay for benefit.\n * @returns {number}\n */\n const calculateBenefitPrice = () => {\n if (\n benefit.instalments &&\n benefitGroup.doesBenefitGroupHaveInstalments &&\n benefitGroup.enableInstalments &&\n benefit.expiration === \"one time\"\n ) {\n return quantity * (benefit.tokenPrice / benefit.instalments);\n }\n\n return quantity * benefit.tokenPrice;\n };\n\n /**\n * * If VAT is defined, include VAT in the price the user will pay for the benefit\n */\n const calculatedPrice = useMemo(\n () =>\n user.companyVatEnabled && benefit.vat\n ? parseFloat(\n (calculateBenefitPrice() * (1 + benefit.vat / 100)).toFixed(2)\n )\n : calculateBenefitPrice(),\n [quantity]\n );\n\n const closeModal = () => {\n closeModalAnim();\n // delays change of state until animation is done\n setTimeout(() => {\n closeBenefitGroupModal();\n }, 350);\n };\n\n const fetchLocalBenefits = async () => {\n try {\n const response = await api.getBenefitGroups({\n chosenCategories: appliedChosenCategoryIds,\n page: 1,\n limit: 10 * benefitGroupsPage,\n priceRange: appliedChosenPriceRange,\n chosenCities: appliedCityIds,\n remoteFilter: appliedRemoteFilter,\n chosenBenefitExpirationTypes: appliedBenefitExpirationTypes,\n search: appliedSearchFilter,\n order: appliedOrderSort,\n key: appliedKeySort,\n type: benefitGroupType\n });\n setListOfCompanyBenefits(response);\n } catch (error) {\n toast.error(t(\"failed_to_get_benefit_groups\"));\n }\n };\n\n const updatePublicBenefits = async () => {\n try {\n const updatedBenefitFromPublicListOfBenefits = await benefitGroupService.refreshBenefitGroup(\n benefitGroup.id\n );\n\n updateBenefitGroup(updatedBenefitFromPublicListOfBenefits);\n } catch (error) {\n toast.error(t(\"failed_to_get_benefit_groups\"));\n }\n };\n\n const fetchFavoritesData = async () => {\n try {\n setIsLoading(true);\n const response = await apiService.get(\"/favorites\");\n const listOfFavorite =\n response.data.items.length > 0\n ? response.data.items.map(item => item.group)\n : [];\n\n dispatch(actionCreators.setListOfFavorites(listOfFavorite));\n } catch (error) {\n toast.error(t(\"failed_to_get_favorite_benefits\"));\n } finally {\n setIsLoading(false);\n }\n };\n\n const fetchNewBenefits = async benefitGroupType => {\n if (!benefitGroupType) return;\n\n const objectForFetching = {\n public: updatePublicBenefits,\n local: fetchLocalBenefits,\n favorite: fetchFavoritesData\n };\n\n await objectForFetching[benefitGroupType]();\n };\n\n const subscribeToBenefit = async () => {\n setIsButtonsDisabled(true);\n setIsLoading(true);\n\n const response = await api.subscribeOrUnsubscribeToBenefit({\n benefitGroupId: benefitGroup.id,\n benefitId: benefit.id,\n subscribe: true,\n quantity: quantity\n });\n if (response.hasError) {\n setIsButtonsDisabled(false);\n setIsLoading(false);\n\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_benefit_subscribe\")\n );\n }\n\n const [\n subscribedBenefitGroupsResponse,\n employeeTokens,\n notificationsResponse\n ] = await Promise.all([\n api.getSubscribedBenefits(),\n employeeService.getEmployeeTokenCount(),\n userApiService.getUnreadNotifications()\n ]);\n\n if (employeeTokens.hasError) {\n return toast.error(\n employeeTokens.errorMessage\n ? employeeTokens.errorMessage\n : t(\"failed_to_get_employees_tokens\")\n );\n }\n\n if (notificationsResponse.hasError) {\n return toast.error(\n notificationsResponse.errorMessage\n ? notificationsResponse.errorMessage\n : t(\"failed_to_get_notifications\")\n );\n }\n setEmployeeTokenCount(employeeTokens.data);\n setSystemNotifications(notificationsResponse.notifications);\n\n toast.success(response.data.value);\n closeModal();\n\n if (subscribedBenefitGroupsResponse.hasError) {\n return toast.error(\n subscribedBenefitGroupsResponse.errorMessage\n ? subscribedBenefitGroupsResponse.errorMessage\n : t(\"failed_to_get_sub_benefit_groups\")\n );\n }\n\n // Todo ostaviti prethodni state ako fetch failuje\n setSubscribedBenefitGroups(subscribedBenefitGroupsResponse.groups);\n\n const metadata = {\n user_id: user.id,\n email: user.email,\n name: `${user.firstName} ${user.lastName}`,\n benefit_group_name: benefitGroup.name,\n benefit_name: benefit.title,\n benefit_price: benefit.tokenPrice,\n quantity: quantity,\n created_at: new Date()\n };\n window.Intercom(\"trackEvent\", \"subscribed-to-benefit\", metadata);\n\n fetchNewBenefits(benefitGroupType);\n };\n\n const unsubscribeToBenefit = async () => {\n setIsButtonsDisabled(true);\n setIsLoading(true);\n\n const response = await api.subscribeOrUnsubscribeToBenefit({\n benefitGroupId: benefitGroup.id,\n subscribe: false,\n benefitId: benefit.id\n });\n if (response.hasError) {\n setIsButtonsDisabled(false);\n setIsLoading(false);\n\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_benefit_subscribe\")\n );\n }\n\n const [\n subscribedBenefitGroupsResponse,\n employeeTokens\n ] = await Promise.all([\n api.getSubscribedBenefits(),\n employeeService.getEmployeeTokenCount()\n ]);\n\n if (subscribedBenefitGroupsResponse.hasError) {\n return toast.error(\n subscribedBenefitGroupsResponse.errorMessage\n ? subscribedBenefitGroupsResponse.errorMessage\n : t(\"failed_to_get_sub_benefit_groups\")\n );\n }\n\n if (employeeTokens.hasError) {\n return toast.error(\n employeeTokens.errorMessage\n ? employeeTokens.errorMessage\n : t(\"failed_to_get_employees_tokens\")\n );\n }\n setEmployeeTokenCount(employeeTokens.data);\n\n toast.success(response.data.value);\n closeModal();\n\n setSubscribedBenefitGroups(subscribedBenefitGroupsResponse.groups);\n\n fetchNewBenefits(benefitGroupType);\n };\n\n /**\n * Handles setting of quantity from on change event in input field.\n * Sets quantity to state.\n * @param {Event} e\n */\n const handleSetQuantity = e => {\n let inputValue;\n if (e.target.validity.valid) {\n let replacedValue = e.target.value.replace(/[^0-9]*/g, \"\");\n inputValue = parseInt(replacedValue);\n }\n if (isNaN(inputValue)) {\n inputValue = 1;\n }\n\n if (inputValue >= 999) {\n inputValue = 999;\n }\n\n setQuantity(inputValue);\n };\n\n const handleKeyDown = e => {\n if (e.key === \".\" || e.key === \",\" || e.key === \"-\" || e.key === \"e\") {\n e.preventDefault();\n }\n };\n\n return (\n <>\n {benefit.isSubscribed && benefit.tokenPrice > 0 ? (\n setIsSubscribedButtonHovered(true)}\n onMouseLeave={() => setIsSubscribedButtonHovered(false)}\n disabled={IsButtonsDisabled}\n onClick={unsubscribeToBenefit}\n >\n
\n {isSubscribedButtonHovered ? (\n
\n ) : (\n \n )}\n
\n

\n {isSubscribedButtonHovered ? t(\"Unsubscribe\") : t(\"Subscribed\")}\n

\n \n ) : (\n <>\n {!isEmpty(benefit.quantity) && (\n <>\n
\n {!IsButtonsDisabled &&\n calculateBenefitPrice() > user.remainingTokens &&\n t(\"tokens_shortage_sub\")}\n
\n \n
\n {transformTokenCurrencyIcons()}\n

\n {transformTokensToRsd(calculatedPrice)}\n

\n
\n \n \n \n )}\n {benefitGroupType === PUBLIC ? (\n user.remainingTokens\n }\n onClick={subscribeToBenefit}\n >\n {benefit.expiration === BenefitExpirationTypeEnum.ONE_TIME &&\n status === PENDING_DEACTIVATION &&\n benefit.shouldBeIndicatedAsActive\n ? t(\"Resubscribe\")\n : t(\"Subscribe\")}\n \n ) : benefitGroupType === LOCAL && benefit.tokenPrice > 0 ? (\n user.remainingTokens\n }\n onClick={subscribeToBenefit}\n >\n {benefit.expiration === BenefitExpirationTypeEnum.ONE_TIME &&\n status === PENDING_DEACTIVATION &&\n benefit.shouldBeIndicatedAsActive\n ? t(\"Resubscribe\")\n : t(\"Subscribe\")}\n \n ) : benefitGroupType === FAVORITE && benefit.tokenPrice > 0 ? (\n user.remainingTokens\n }\n onClick={subscribeToBenefit}\n >\n {benefit.expiration === BenefitExpirationTypeEnum.ONE_TIME &&\n status === PENDING_DEACTIVATION &&\n benefit.shouldBeIndicatedAsActive\n ? t(\"Resubscribe\")\n : t(\"Subscribe\")}\n \n ) : (\n user.remainingTokens\n }\n onClick={subscribeToBenefit}\n >\n {benefit.expiration === BenefitExpirationTypeEnum.ONE_TIME &&\n status === PENDING_DEACTIVATION &&\n benefit.shouldBeIndicatedAsActive\n ? t(\"Resubscribe\")\n : t(\"Subscribe\")}\n \n )}\n \n )}\n \n );\n};\nconst mapStateToProps = state => {\n return {\n user: state.app.user,\n benefitGroup:\n state.employeeBenefitsPage.pageFrontEndStates.chosenBenefitGroup,\n appliedChosenCategoryIds:\n state.employeeBenefitsPage.filters.appliedChosenCategoryIds,\n appliedCityIds: state.employeeBenefitsPage.filters.cityIds,\n appliedRemoteFilter: state.employeeBenefitsPage.filters.isRemote,\n appliedChosenPriceRange:\n state.employeeBenefitsPage.filters.appliedChosenPriceRange,\n appliedBenefitExpirationTypes:\n state.employeeBenefitsPage.filters.expirations,\n appliedSearchFilter: state.employeeBenefitsPage.filters.search,\n appliedOrderSort: state.employeeBenefitsPage.filters.order,\n appliedKeySort: state.employeeBenefitsPage.filters.key\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setListOfCompanyBenefits: payload => {\n return dispatch(actionCreators.setListOfCompanyBenefits(payload));\n },\n closeBenefitGroupModal: () =>\n dispatch(actionCreators.closeBenefitGroupModal()),\n setBenefitGroupsAndSubscribedBenefitGroups: (\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsPages,\n subscribedBenefitGroups\n ) =>\n dispatch(\n actionCreators.setBenefitGroupsAndSubscribedBenefitGroups(\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsPages,\n subscribedBenefitGroups\n )\n ),\n setEmployeeTokenCount: payload =>\n dispatch(appActionCreators.setEmployeeTokens(payload)),\n setSystemNotifications: notifications =>\n dispatch(appActionCreators.setSystemNotifications(notifications)),\n updateBenefitGroup: benefitGroup =>\n dispatch(actionCreators.updateBenefitGroup(benefitGroup)),\n setSubscribedBenefitGroups: benefitGroups =>\n dispatch(actionCreators.setSubscribedBenefitGroups(benefitGroups))\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(BenefitSubscribeButton);\n","/**\n * Sorting passed array of objects by key with number value\n * returns sorted array.\n * @param {list} array - chosen array to be sorted\n * @param {key} string - key with Number value\n * @returns {array} - array sorted by key \n */\nexport const sortNumbersByKey = (list, key) => list.sort((a, b) => a[key] - b[key]);\n","export const calculateValueWithVAT = (value, vat, vatInCompanyIsOn) => {\n if (vatInCompanyIsOn) {\n return vat ? parseFloat((value * (1 + vat / 100)).toFixed(2)) : value;\n }\n\n return value;\n};\n","import React, { useState, useMemo, useEffect } from \"react\";\nimport { connect, useDispatch, useSelector } from \"react-redux\";\nimport { toast } from \"react-toastify\";\n// components and animations\nimport { SelectInput, closeModalAnim, Input } from \"../../../../../components\";\nimport BenefitSubscribeQuantity from \"./BenefitSubscribeQuantity/BenefitSubscribeQuantity\";\n// assets\nimport { TokenIcon, CheckIcon } from \"../../../../../assets/Icons\";\n// services\nimport * as api from \"../../../../../services/api/employee/employeeBenefits.services\";\nimport * as employeeService from \"../../../../../services/api/employee/employeeBenefits.services\";\nimport * as userApiService from \"../../../../../services/api/auth.service\";\nimport * as benefitGroupService from \"../../../../../services/api/admin/benefitGroups.service\";\n// Utils\nimport { sortNumbersByKey } from \"../../../../../services/sort.utils\";\nimport { isEmpty } from \"../../../../../services/general.utils\";\n// actions\nimport * as actionCreators from \"../../../../../actions/employee/employeeBenefits.actions\";\nimport * as appActionCreators from \"../../../../../actions/app.actions\";\nimport { TOKEN_VALUE } from \"../../../../../builders/benefits/tokenValue\";\nimport { apiService } from \"../../../../../services/api/api.service\";\nimport { UploadPDFPayload } from \"../../../../../models/server/payloads\";\nimport sendImageToSupabase from \"../../../../../utils/supabaseUtils/sendImageToSupabase\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n transformTokenCurrencyIcons,\n transformTokensToRsd\n} from \"../../../../../utils/transformTokensToRsd\";\nimport { calculateValueWithVAT } from \"../../../../../utils/calculateValueWithVAT\";\n\nconst VoucherSubscribeButton = ({\n benefit,\n benefitGroup,\n appliedChosenCategoryIds,\n appliedCityIds,\n appliedRemoteFilter,\n appliedChosenPriceRange,\n closeBenefitGroupModal,\n setBenefitGroupsAndSubscribedBenefitGroups,\n setEmployeeTokenCount,\n setSystemNotifications,\n user,\n isPreview = false,\n updateBenefitGroup,\n setSubscribedBenefitGroups,\n setIsLoading,\n setShowPDFBill,\n setVoucherReimbursementData,\n appliedBenefitExpirationTypes,\n appliedSearchFilter,\n appliedOrderSort,\n appliedKeySort,\n setListOfCompanyBenefits\n}) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const [isSubscribedButtonHovered, setIsSubscribedButtonHovered] = useState(\n false\n );\n const [IsButtonsDisabled, setIsButtonsDisabled] = useState(false);\n const [voucher, setVoucher] = useState(null);\n const [customVoucherPrice, setCustomVoucherPrice] = useState(\"\");\n const [customVoucherPriceTokens, setCustomVoucherPriceTokens] = useState(\n null\n );\n const [nearestValueError, setNearestValueError] = useState(false);\n const [quantity, setQuantity] = useState(1);\n\n const [uploadedPDF, setUploadedPDF] = useState(null);\n\n const { benefitGroupType } = useSelector(\n state => state.employeeBenefitsPage.pageFrontEndStates\n );\n\n const { benefitGroupsPage } = useSelector(\n state => state.employeeBenefitsPage.benefitsCompany\n );\n\n const companyId = useSelector(state => state.app.user.companyId);\n\n const convertedCustomVoucherPrice = useMemo(\n () =>\n parseFloat(\n (customVoucherPriceTokens * TOKEN_VALUE * quantity).toFixed(2)\n ),\n [customVoucherPriceTokens, quantity]\n );\n\n /**\n * If VAT is defined, include VAT in the price the user will pay for the voucher\n */\n const convertedCustomVoucherPriceTokens = useMemo(\n () =>\n user.companyVatEnabled && benefit.vat\n ? parseFloat(\n (\n customVoucherPriceTokens *\n quantity *\n (1 + benefit.vat / 100)\n ).toFixed(2)\n )\n : customVoucherPriceTokens,\n [customVoucherPriceTokens, quantity]\n );\n\n /**\n * If VAT is defined, include VAT in the price the user will pay for the voucher\n */\n const convertedVoucherPrice = useMemo(\n () =>\n user.companyVatEnabled && benefit.vat\n ? parseFloat((voucher?.price * (1 + benefit.vat / 100)).toFixed(2))\n : voucher?.price,\n [voucher?.price, benefit.vat]\n );\n\n const calculatedPriceBasedOnQuantity = useMemo(\n () => quantity * voucher?.price,\n [quantity]\n );\n\n const closeModal = () => {\n closeModalAnim();\n // delays change of state until animation is done\n setTimeout(() => {\n closeBenefitGroupModal();\n }, 350);\n };\n\n const fetchFavoritesData = async () => {\n try {\n setIsLoading(true);\n const response = await apiService.get(\"/favorites\");\n const listOfFavorite =\n response.data.items.length > 0\n ? response.data.items.map(item => item.group)\n : [];\n\n dispatch(actionCreators.setListOfFavorites(listOfFavorite));\n } catch (error) {\n toast.error(t(\"failed_to_get_favorite_benefits\"));\n } finally {\n setIsLoading(false);\n }\n };\n\n const fetchLocalBenefits = async () => {\n try {\n const response = await api.getBenefitGroups({\n chosenCategories: appliedChosenCategoryIds,\n page: 1,\n limit: 10 * benefitGroupsPage,\n priceRange: appliedChosenPriceRange,\n chosenCities: appliedCityIds,\n remoteFilter: appliedRemoteFilter,\n chosenBenefitExpirationTypes: appliedBenefitExpirationTypes,\n search: appliedSearchFilter,\n order: appliedOrderSort,\n key: appliedKeySort,\n type: benefitGroupType\n });\n setListOfCompanyBenefits(response);\n } catch (error) {\n toast.error(t(\"failed_to_get_benefit_groups\"));\n }\n };\n\n const updatePublicBenefits = async () => {\n try {\n const updatedBenefitFromPublicListOfBenefits = await benefitGroupService.refreshBenefitGroup(\n benefitGroup.id\n );\n\n updateBenefitGroup(updatedBenefitFromPublicListOfBenefits);\n } catch (error) {\n toast.error(t(\"failed_to_get_benefit_groups\"));\n }\n };\n\n const fetchNewBenefits = async benefitGroupType => {\n if (!benefitGroupType) return;\n const objectForFetching = {\n public: updatePublicBenefits,\n local: fetchLocalBenefits,\n favorite: fetchFavoritesData\n };\n\n await objectForFetching[benefitGroupType]();\n };\n\n const handleSubmitFile = async (pdfValues, companyId) => {\n const payloadData = new UploadPDFPayload(pdfValues);\n\n try {\n const response = await apiService.post(\n \"/employee/upload\",\n payloadData.payload\n );\n\n sendImageToSupabase(response.data.content, pdfValues.pdfFile, companyId);\n } catch (error) {\n toast.error(response.error.data.error.message);\n }\n };\n\n const redeemVoucher = async () => {\n setIsButtonsDisabled(true);\n setIsLoading(true);\n\n const response = await api.subscribeOrUnsubscribeToVoucher({\n benefitId: benefit.id,\n subscribe: true,\n benefitGroupId: benefitGroup.id,\n voucherId: voucher\n ? voucher.id\n : benefit.vouchers.find(voucher => voucher.isSubscribed).id,\n voucherCustomPrice: customVoucherPriceTokens,\n voucherIsReimbursement: voucher.isReimbursement,\n quantity: quantity\n });\n\n if (response.hasError) {\n setIsButtonsDisabled(false);\n setIsLoading(false);\n\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_redeem_voucher\")\n );\n }\n\n const [\n subscribedBenefitGroupsResponse,\n employeeTokens,\n notificationsResponse\n ] = await Promise.all([\n api.getSubscribedBenefits(),\n employeeService.getEmployeeTokenCount(),\n userApiService.getUnreadNotifications()\n ]);\n\n if (employeeTokens.hasError) {\n return toast.error(\n employeeTokens.errorMessage\n ? employeeTokens.errorMessage\n : t(\"failed_to_get_employees_tokens\")\n );\n }\n if (notificationsResponse.hasError) {\n return toast.error(\n notificationsResponse.errorMessage\n ? notificationsResponse.errorMessage\n : t(\"failed_to_get_notifications\")\n );\n }\n setEmployeeTokenCount(employeeTokens.data);\n setSystemNotifications(notificationsResponse.notifications);\n\n toast.success(response.data.value);\n\n const voucherReimbursementData = {\n user_id: user.id,\n email: user.email,\n name: `${user.firstName} ${user.lastName}`,\n benefit_name: voucher.name,\n benefit_price: customVoucherPriceTokens,\n created_at: new Date(),\n voucher_id: voucher.id,\n benefit_group_id: benefitGroup.id\n };\n\n voucher &&\n voucher.isReimbursement &&\n setVoucherReimbursementData(voucherReimbursementData);\n\n uploadedPDF &&\n handleSubmitFile(\n {\n pdfFile: uploadedPDF,\n voucherId: voucher.id,\n benefitGroupId: benefitGroup.id\n },\n companyId\n );\n\n closeModal();\n\n if (subscribedBenefitGroupsResponse.hasError) {\n return toast.error(\n subscribedBenefitGroupsResponse.errorMessage\n ? subscribedBenefitGroupsResponse.errorMessage\n : t(\"failed_to_get_sub_benefit_groups\")\n );\n }\n\n setSubscribedBenefitGroups(subscribedBenefitGroupsResponse.groups);\n\n const metadata = {\n user_id: user.id,\n email: user.email,\n name: `${user.firstName} ${user.lastName}`,\n benefit_group_name: benefitGroup.name,\n benefit_name: voucher.name,\n benefit_price: voucher.price,\n quantity: quantity,\n created_at: new Date()\n };\n window.Intercom(\"trackEvent\", \"subscribed-to-benefit\", metadata);\n\n fetchNewBenefits(benefitGroupType);\n };\n\n const returnVoucher = async () => {\n setIsLoading(true);\n\n const findSubscribedVoucher = benefit.vouchers.find(\n voucher => voucher.isSubscribed === true\n );\n const response = await api.subscribeOrUnsubscribeToVoucher({\n benefitId: benefit.id,\n subscribe: false,\n benefitGroupId: benefitGroup.id,\n voucherId: findSubscribedVoucher.id,\n voucherIsReimbursement: findSubscribedVoucher.isReimbursement,\n quantity: quantity\n });\n\n if (response.hasError) {\n setIsButtonsDisabled(false);\n setIsLoading(false);\n\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_redeem_voucher\")\n );\n }\n\n const [\n subscribedBenefitGroupsResponse,\n employeeTokens\n ] = await Promise.all([\n api.getSubscribedBenefits(),\n employeeService.getEmployeeTokenCount()\n ]);\n\n if (subscribedBenefitGroupsResponse.hasError) {\n return toast.error(\n subscribedBenefitGroupsResponse.errorMessage\n ? subscribedBenefitGroupsResponse.errorMessage\n : t(\"failed_to_get_sub_benefit_groups\")\n );\n }\n\n if (employeeTokens.hasError) {\n return toast.error(\n employeeTokens.errorMessage\n ? employeeTokens.errorMessage\n : t(\"failed_to_get_employees_tokens\")\n );\n }\n setEmployeeTokenCount(employeeTokens.data);\n\n toast.success(response.data.value);\n closeModal();\n\n setSubscribedBenefitGroups(subscribedBenefitGroupsResponse.groups);\n fetchNewBenefits(benefitGroupType);\n };\n\n /**\n * Handles number input on change.\n * Sets custom voucher price based on input value to state.\n * If the input value in tokens does not round up to an even number, we set zero, which disables button for redeeming.\n * @param {Event} e\n */\n const handleNumberInput = e => {\n let inputValue;\n if (e.target.validity.valid) {\n let replacedValue = e.target.value.replace(/[^0-9]*/g, \"\");\n inputValue = parseInt(replacedValue);\n }\n if (isNaN(inputValue)) {\n inputValue = \"\";\n }\n\n if (inputValue % TOKEN_VALUE === 0) {\n setCustomVoucherPriceTokens(inputValue ? inputValue / TOKEN_VALUE : \"\");\n setNearestValueError(false);\n } else {\n setCustomVoucherPriceTokens(Math.floor(inputValue / TOKEN_VALUE));\n setNearestValueError(true);\n }\n\n setCustomVoucherPrice(inputValue);\n };\n\n /**\n * Handles setting chosen voucher from dropdown.\n * Sets custom voucher price to default value.\n * Sets custom voucher price in tokens to default value.\n * @param {any} option\n */\n const handleSetVoucher = option => {\n setVoucher(option);\n setCustomVoucherPrice(\"\");\n setCustomVoucherPriceTokens(null);\n };\n\n const handleKeyDown = e => {\n if (e.key === \".\" || e.key === \",\" || e.key === \"-\" || e.key === \"e\") {\n e.preventDefault();\n }\n };\n\n /**\n * Handles setting of quantity from on change event in input field.\n * Sets quantity to state.\n * @param {Event} e\n */\n const handleSetQuantity = e => {\n let inputValue;\n if (e.target.validity.valid) {\n let replacedValue = e.target.value.replace(/[^0-9]*/g, \"\");\n inputValue = parseInt(replacedValue);\n }\n if (isNaN(inputValue)) {\n inputValue = 1;\n }\n\n if (inputValue >= 999) {\n inputValue = 999;\n }\n\n setQuantity(inputValue);\n };\n\n const uploadPDF = e => {\n if (e.target.files.length > 0) setUploadedPDF(e.target.files[0]);\n };\n\n const handleUpload = () => {\n document.getElementById(\"pdf\").click();\n };\n\n useEffect(() => {\n const listOfVouchers = sortNumbersByKey(benefit.vouchers, \"price\");\n if (listOfVouchers?.length > 1) return;\n\n handleSetVoucher(listOfVouchers[0]);\n }, []);\n\n console.log(user);\n\n return (\n
\n {benefit.isSubscribed ? (\n
\n

\n {transformTokensToRsd(benefit.subscribedPrice)}\n

\n {benefit.vouchers.find(voucher => voucher.isSubscribed === true) && (\n <>\n {transformTokenCurrencyIcons()}\n

\n {transformTokensToRsd(benefit.subscribedPrice)}\n

\n \n )}\n
\n ) : (\n
\n
\n handleSetVoucher(option)}\n customValuePosition=\"-8%\"\n disabled={isPreview}\n menuPlacement=\"top\"\n searchable={false}\n />\n
\n {voucher && (\n \n \n {!voucher.predefinedValuesOnly && customVoucherPriceTokens > 0\n ? transformTokensToRsd(convertedCustomVoucherPriceTokens)\n : transformTokensToRsd(convertedVoucherPrice)}\n

\n {transformTokenCurrencyIcons()}\n
\n )}\n {voucher && voucher.predefinedValuesOnly && (\n
\n
\n {voucher.price > user.remainingTokens && t(\"tokens_shortage\")}\n
\n
\n
\n )}\n\n {voucher && !voucher.predefinedValuesOnly && (\n
\n {voucher &&\n calculateValueWithVAT(\n quantity * customVoucherPriceTokens,\n voucher.vatIncluded,\n user.companyVatEnabled\n ) > user.remainingTokens && (\n
\n {t(\"tokens_shortage\")}\n
\n )}\n
\n {(customVoucherPriceTokens > user.remainingTokens ||\n (voucher.price > user.remainingTokens &&\n customVoucherPriceTokens === null)) &&\n !IsButtonsDisabled &&\n t(\"tokens_shortage\")}\n
\n
\n {customVoucherPriceTokens !== null &&\n customVoucherPriceTokens < voucher.price &&\n customVoucherPriceTokens <= user.remainingTokens &&\n t(\"min_voucher_price\", {\n price: voucher.price * TOKEN_VALUE\n })}\n
\n {/*
\n {nearestValueError &&\n customVoucherPrice >= voucher.price * TOKEN_VALUE &&\n customVoucherPriceTokens <= user.remainingTokens &&\n `Value of the voucher has been changed to nearest possible value of ${convertedCustomVoucherPrice}`}\n
*/}\n
\n \n {user.companyVatEnabled &&\n !isEmpty(benefit.vat) &&\n customVoucherPriceTokens > 0 && (\n
\n Price with VAT of {benefit.vat}% in currency is{\" \"}\n {convertedCustomVoucherPriceTokens * 20}\n
\n )}\n
\n
\n {t(\"enter_the_value\")}\n
\n
\n )}\n
\n )}\n {benefit.isSubscribed && !isPreview ? (\n setIsSubscribedButtonHovered(true)}\n onMouseLeave={() => setIsSubscribedButtonHovered(false)}\n disabled={isPreview || IsButtonsDisabled}\n onClick={returnVoucher}\n >\n
\n {isSubscribedButtonHovered ? (\n
\n ) : (\n \n )}\n
\n

\n {isSubscribedButtonHovered ? t(\"Return_voucher\") : t(\"Redeemed\")}\n

\n \n ) : (\n <>\n {!isEmpty(benefit.quantity) && !isEmpty(voucher) && !isPreview && (\n <>\n
\n {!IsButtonsDisabled &&\n calculatedPriceBasedOnQuantity > user.remainingTokens &&\n t(\"tokens_shortage_sub\")}\n
\n \n
\n {transformTokenCurrencyIcons()}\n

\n {!voucher.predefinedValuesOnly &&\n customVoucherPriceTokens > 0\n ? transformTokensToRsd(\n calculateValueWithVAT(\n quantity * customVoucherPriceTokens,\n voucher.vatIncluded,\n user.companyVatEnabled\n )\n )\n : transformTokensToRsd(\n calculateValueWithVAT(\n quantity * voucher.price,\n voucher.vatIncluded,\n user.companyVatEnabled\n )\n )}\n

\n
\n \n \n \n )}\n {voucher?.isReimbursement && (\n <>\n {\n e.target.value = null;\n }}\n accept=\".pdf, .jpg, .jpeg, .png, .JPG, .PNG, .JPEG, .PDF\"\n onChange={e => {\n const fileName = e.target.value;\n const regex = /\\.(pdf|jpg|jpeg|png|JPG|PNG|JPEG|PDF)$/;\n\n if (!regex.test(fileName)) {\n toast.error(t(\"failed_to_set_valid_file_format\"));\n e.target.value = null;\n return;\n }\n\n uploadPDF(e);\n }}\n style={{ display: \"none\" }}\n />\n\n \n {t(\"upload\")}\n \n\n {uploadedPDF &&

{uploadedPDF.name}

}\n \n )}\n user.remainingTokens ||\n customVoucherPriceTokens > user.remainingTokens ||\n (voucher?.isReimbursement && !uploadedPDF)\n }\n onClick={redeemVoucher}\n >\n {t(\"Redeem\")}\n \n \n )}\n \n );\n};\n\nconst mapStateToProps = state => {\n return {\n user: state.app.user,\n benefitGroup:\n state.employeeBenefitsPage.pageFrontEndStates.chosenBenefitGroup,\n appliedChosenCategoryIds:\n state.employeeBenefitsPage.filters.appliedChosenCategoryIds,\n appliedCityIds: state.employeeBenefitsPage.filters.cityIds,\n appliedRemoteFilter: state.employeeBenefitsPage.filters.isRemote,\n appliedChosenPriceRange:\n state.employeeBenefitsPage.filters.appliedChosenPriceRange,\n appliedBenefitExpirationTypes:\n state.employeeBenefitsPage.filters.expirations,\n appliedSearchFilter: state.employeeBenefitsPage.filters.search,\n appliedOrderSort: state.employeeBenefitsPage.filters.order,\n appliedKeySort: state.employeeBenefitsPage.filters.key\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setListOfCompanyBenefits: payload => {\n return dispatch(actionCreators.setListOfCompanyBenefits(payload));\n },\n closeBenefitGroupModal: () =>\n dispatch(actionCreators.closeBenefitGroupModal()),\n setBenefitGroupsAndSubscribedBenefitGroups: (\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsPages,\n subscribedBenefitGroups\n ) =>\n dispatch(\n actionCreators.setBenefitGroupsAndSubscribedBenefitGroups(\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsPages,\n subscribedBenefitGroups\n )\n ),\n setEmployeeTokenCount: payload =>\n dispatch(appActionCreators.setEmployeeTokens(payload)),\n setSystemNotifications: notifications =>\n dispatch(appActionCreators.setSystemNotifications(notifications)),\n updateBenefitGroup: benefitGroup =>\n dispatch(actionCreators.updateBenefitGroup(benefitGroup)),\n setSubscribedBenefitGroups: benefitGroups =>\n dispatch(actionCreators.setSubscribedBenefitGroups(benefitGroups))\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(VoucherSubscribeButton);\n","export const TOKEN_VALUE = 20;","import React from \"react\";\nimport ReactTooltip from \"react-tooltip\";\n// styles\nimport { BenefitSubscribeButtonsContainerStyles } from \"./benefitSubscribeButtonsContainer.styles\";\n// components\nimport BenefitSubscribeButton from \"./BenefitsSubscribeButton\";\nimport VoucherSubscribeButton from \"./VoucherSubscribeButton\";\n// builder constants\nimport { BenefitExpirationTypeEnum } from \"../../../../../constants/benefit.constants\";\nimport { isEmpty } from \"../../../../../services/general.utils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BenefitSubscribeButtonsContainer = ({\n benefit,\n status,\n isPreview = false,\n enableInstalments,\n setIsLoading,\n benefitGroupType,\n setShowPDFBill,\n setVoucherReimbursementData\n}) => {\n const { t } = useTranslation();\n\n return (\n \n {!isEmpty(benefit.minimumContractPeriod) && (\n <>\n \n {t(\"mcp_period_info\", { month: benefit.minimumContractPeriod })}\n \n \n {t(\"mcp_take_warning\")}\n \n \n )}\n {enableInstalments && benefit.instalments && (\n {t(\"mcp_take_info\")}\n )}\n {benefit && benefit.expiration === BenefitExpirationTypeEnum.VOUCHER ? (\n \n ) : (\n \n )}\n \n );\n};\n\nexport default BenefitSubscribeButtonsContainer;\n","import React from \"react\";\nimport BenefitSubscribeButtonsContainer from \"./BenefitSubscribeButtons/BenefitSubscribeButtonsContainer\";\nimport { isEmpty } from \"../../../../services/general.utils\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n transformPriceRangeTokensToPriceRangeRsd,\n transformTokenCurrencyIcons\n} from \"../../../../utils/transformTokensToRsd\";\n\nexport const BenefitSubscribeItem = props => {\n const {\n benefit,\n getBenefitPrice,\n getVoucherPrices,\n renderBenefitStatus,\n benefitGroup,\n getClassNameForBenefitCard,\n user,\n setShowPDFBill,\n doesDescriptionExist,\n ReactHtmlParser,\n isPreview,\n setIsLoading,\n setVoucherReimbursementData\n } = props;\n\n const { t } = useTranslation();\n\n return (\n
\n {\n
\n {renderBenefitStatus(\n benefitGroup.status,\n benefitGroup.statusPreview,\n benefit.shouldBeIndicatedAsActive,\n benefit.isSubscribed\n )}\n {user.companyVatEnabled && !isEmpty(benefit.vat) && (\n
\n {t(\"Price_includes_VAT\")} {benefit.vat}%.\n
\n )}\n
\n }\n
\n

{benefit.title}

\n {!isEmpty(benefit.quantity) &&\n !isEmpty(benefit.totalQuantityRemaining) &&\n !benefit.isSubscribed && (\n
\n {benefit.totalQuantityRemaining} {t(\"remaining\")}\n
\n )}\n {!isEmpty(benefit.quantity) &&\n isEmpty(benefit.totalQuantityRemaining) &&\n !benefit.isSubscribed && (\n
\n {benefit.quantity} {t(\"remaining\")}\n
\n )}\n
\n {doesDescriptionExist(benefit.description) ? (\n
\n {ReactHtmlParser(benefit.description)}\n
\n ) : (\n

{benefit.summary}

\n )}\n
\n

{t(benefit.expiration)}

\n
\n {transformTokenCurrencyIcons()}\n

\n {benefit.expiration === \"voucher\"\n ? transformPriceRangeTokensToPriceRangeRsd(\n getVoucherPrices(benefit)\n )\n : transformPriceRangeTokensToPriceRangeRsd(\n getBenefitPrice(benefit)\n )}\n

\n
\n
\n \n
\n );\n};\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { connect, useDispatch, useSelector } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport ReactHtmlParser from \"react-html-parser\";\nimport { BeatLoader } from \"react-spinners\";\nimport StarRatings from \"react-star-ratings\";\n\n// assets\nimport {\n ActiveIcon,\n PendingActivationIcon,\n PendingDeactivationIcon\n} from \"../../../../assets/Icons\";\n\n// components\nimport LeaveReviewForm from \"../../../../components/forms/review/LeaveReviewForm\";\nimport {\n openRatingModalAnim,\n closeRatingModalAnim\n} from \"../../../../components\";\n\n// style component\nimport BenefitSubscribeStyles from \"./BenefitSubscribeStyles\";\nimport { subscribe } from \"../../../../services/loadingOverride.styles\";\n\n// services\nimport { getUrl } from \"../../../../services/imageHandler\";\nimport * as api from \"../../../../services/api/employee/employeeBenefits.services\";\n\n// actions\nimport * as actionCreators from \"../../../../actions/employee/employeeBenefits.actions\";\n\n// builder constants\nimport { BenefitExpirationTypeEnum } from \"../../../../constants/benefit.constants\";\nimport {\n ACTIVE,\n PENDING_ACTIVATION,\n PENDING_DEACTIVATION\n} from \"../../../../builders/benefitGroups/benefitGroup.status\";\n\n// Utils\nimport { renderLocations } from \"../../../../renderers/locations.renderer\";\nimport { doesDescriptionExist } from \"../../../../services/textEditor.utils\";\nimport { isEmpty } from \"../../../../services/general.utils\";\nimport { calculatePriceWithVat } from \"../../../../services/benefit.utils\";\n\n// Renderers\nimport { renderCategories } from \"../../../../renderers/categories.renderer\";\nimport { toast } from \"react-toastify\";\nimport { apiService } from \"../../../../services/api/api.service\";\nimport { BenefitSubscribeItem } from \"./BenefitSubscribeItem\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BenefitSubscribe = ({\n benefitGroup,\n isPreview = false,\n maxHeight = \"90vh\",\n user,\n usedBenefits,\n setUsedBenefits,\n setShowPDFBill,\n setVoucherReimbursementData,\n priceRange,\n chosenBenefitExpirationTypes\n}) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n\n const [isLoading, setIsLoading] = useState(false);\n const [isOpenRatingModal, setIsOpenRatingModal] = useState(false);\n const [benefits, setBenefits] = useState([]);\n const isMounted = useRef(false);\n\n const { subscribedToSingleBenefitGroup } = useSelector(\n state => state.employeeBenefitsPage.socialProof\n );\n\n useEffect(() => {\n return () => {\n dispatch(actionCreators.checkIfInFavorites(false));\n };\n }, []);\n\n const { isInFavorites } = useSelector(\n state => state.employeeBenefitsPage.favoriteBenefits\n );\n\n const updateStateOfFavorites = async () => {\n const benefitListResponse = await apiService.get(`/favorites`);\n\n const listOfFavorite =\n benefitListResponse.data.items.length > 0\n ? benefitListResponse.data.items.map(item => item.group)\n : [];\n\n dispatch(actionCreators.setListOfFavorites(listOfFavorite));\n\n const listOfBenefitGroupIds = listOfFavorite.map(favorite => favorite.id);\n\n const isItemInListOfBenefits = listOfBenefitGroupIds.includes(\n benefitGroup.id\n );\n\n dispatch(actionCreators.checkIfInFavorites(isItemInListOfBenefits));\n };\n\n const removeFromFavorites = async () => {\n try {\n const removeFromBenefitsResponse = await apiService.delete(\n `/favorites/remove/benefits/${benefitGroup.id}`\n );\n\n toast.success(removeFromBenefitsResponse.data.message);\n\n updateStateOfFavorites();\n } catch (error) {\n toast.error(t(\"failed_to_remove_from_favorites\"));\n }\n };\n\n const addToFavorites = async () => {\n try {\n const removeFromBenefitsResponse = await apiService.post(\n `/favorites/add/benefits/${benefitGroup.id}`\n );\n\n toast.success(removeFromBenefitsResponse.data.message);\n\n updateStateOfFavorites();\n } catch (error) {\n toast.error(t(\"failed_to_add_to_favorites\"));\n }\n };\n\n const handleAddOrRemoveFromFavorites = isInFavorites => {\n if (isInFavorites) {\n removeFromFavorites();\n return;\n }\n\n addToFavorites();\n };\n\n const fetchBenefits = async () => {\n setIsLoading(true);\n const response = await api.getBenefitsForBenefitGroup(\n benefitGroup.id,\n priceRange,\n chosenBenefitExpirationTypes\n );\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : \"Fetching benefits failed.\"\n );\n }\n\n setBenefits(response.benefits);\n setIsLoading(false);\n };\n\n const getVoucherPrices = benefit => {\n if (benefit.expiration === BenefitExpirationTypeEnum.VOUCHER) {\n const voucherPrices = benefit.vouchers.map(voucher => {\n return user.companyVatEnabled && benefit.vat\n ? calculatePriceWithVat(voucher.price, benefit.vat)\n : voucher.price;\n });\n const maxTokenPrice =\n voucherPrices.length > 0 ? Math.max(...voucherPrices) : 0;\n const minTokenPrice =\n voucherPrices.length > 0 ? Math.min(...voucherPrices) : 0;\n\n if (maxTokenPrice === minTokenPrice) {\n return `${maxTokenPrice}`;\n } else {\n return `${minTokenPrice} - ${maxTokenPrice}`;\n }\n }\n };\n\n /**\n * Returns benefit price.\n * If benefit is subscribed to, returns subscribed price.\n * If not, returns default price.\n * @param {Benefit} benefit\n * @returns {number}\n */\n const getBenefitPrice = benefit => {\n if (benefit.isSubscribed) {\n return benefit.subscribedPrice;\n }\n\n const benefitPrice =\n user.companyVatEnabled && benefit.vat\n ? calculatePriceWithVat(benefit.tokenPrice, benefit.vat)\n : benefit.tokenPrice;\n if (\n benefitGroup.doesBenefitGroupHaveInstalments &&\n benefitGroup.enableInstalments &&\n benefit.expiration === \"one time\" &&\n benefit.instalments\n ) {\n return `${benefit.instalments} x ${Math.floor(\n benefitPrice / benefit.instalments\n )}`;\n }\n\n return benefitPrice;\n };\n\n /**\n * Renders benefit status with appropriate icon and color scheme.\n * @param {string} status\n * @param {string} statusPreview\n * @param {boolean} shouldBeIndicatedAsActive\n * @param {boolean} isSubscribed\n * @returns {HTMLDivElement}\n */\n const renderBenefitStatus = (\n status,\n statusPreview,\n shouldBeIndicatedAsActive,\n isSubscribed\n ) => {\n if (isSubscribed && status === ACTIVE) {\n return (\n
\n {statusPreview}\n
\n );\n }\n if (status === PENDING_DEACTIVATION && shouldBeIndicatedAsActive) {\n return (\n
\n {statusPreview}\n
\n );\n }\n if (isSubscribed && status === PENDING_ACTIVATION) {\n return (\n
\n {statusPreview}\n
\n );\n }\n };\n\n /**\n * Returns class names for benefit card based on benefit status.\n * @param {Benefit} benefit\n * @returns {string}\n */\n const getClassNameForBenefitCard = benefit => {\n if (\n benefit.shouldBeIndicatedAsActive &&\n benefitGroup.status === PENDING_DEACTIVATION\n ) {\n return \"benefiItemCard benefitStatusPendingDeactivationIndicator\";\n }\n\n if (benefit.isSubscribed && benefitGroup.status === ACTIVE) {\n return \"benefiItemCard benefitStatusActiveIndicator\";\n }\n\n if (benefit.isSubscribed && benefitGroup.status === PENDING_ACTIVATION) {\n return \"benefiItemCard benefitStatusPendingActivationIndicator\";\n }\n\n return \"benefiItemCard\";\n };\n\n const openModal = () => {\n setIsOpenRatingModal(!isOpenRatingModal);\n\n setTimeout(() => {\n openRatingModalAnim();\n }, 100);\n };\n\n const closeModal = () => {\n setIsOpenRatingModal(!isOpenRatingModal);\n\n setTimeout(() => {\n closeRatingModalAnim();\n }, 350);\n };\n\n /**\n * Sorts benefits from benefit group by subscription status.\n * Subscribed benefits should always be on top.\n * @returns {Benefit[]}\n */\n const sortedBenefits = () => {\n return (\n !isEmpty(benefits) &&\n benefits.sort(\n (a, b) =>\n Number(b.isSubscribed) - Number(a.isSubscribed) ||\n Number(b.shouldBeIndicatedAsActive) -\n Number(a.shouldBeIndicatedAsActive)\n )\n );\n };\n\n useEffect(() => {\n isMounted.current = true;\n fetchBenefits();\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n const benefitItemProps = {\n getBenefitPrice,\n getVoucherPrices,\n renderBenefitStatus,\n getClassNameForBenefitCard,\n doesDescriptionExist,\n ReactHtmlParser,\n setIsLoading,\n setVoucherReimbursementData,\n setShowPDFBill,\n isPreview,\n benefitGroup,\n user\n };\n\n return (\n \n \n
\n {benefitGroup?.photo && (\n \n )}\n {subscribedToSingleBenefitGroup?.length > 0 && (\n
\n
\n \n {subscribedToSingleBenefitGroup?.length}\n \n \n {subscribedToSingleBenefitGroup?.length > 1\n ? localStorage.getItem(\"locales\") === \"rs\"\n ? \"korisnika\"\n : \"users\"\n : localStorage.getItem(\"locales\") === \"rs\"\n ? \"korisnik\"\n : \"user\"}\n \n
\n
\n {localStorage.getItem(\"locales\") === \"rs\" ? (\n <>\n Nedavno se{\" \"}\n {subscribedToSingleBenefitGroup?.length > 1\n ? \"pretplatilo\"\n : \"pretplatio\"}{\" \"}\n na\n \n {\" \"}\n {\n new Set(\n subscribedToSingleBenefitGroup?.map(\n x => x.BenefitGroup.name\n )\n )\n }{\" \"}\n \n benefit.\n \n ) : (\n <>\n Recently subscribed to the{\" \"}\n \n {\n new Set(\n subscribedToSingleBenefitGroup?.map(\n x => x.BenefitGroup.name\n )\n )\n }\n {\" \"}\n benefit.\n \n )}\n
\n
\n )}\n
\n
\n
\n
\n {benefitGroup && (\n \n )}\n
\n
\n
\n

\n {benefitGroup && benefitGroup.name && benefitGroup.name}\n

\n {!isPreview && (\n handleAddOrRemoveFromFavorites(isInFavorites)}\n >\n {isInFavorites ? t(\"remove_favorites\") : t(\"add_favorites\")}\n \n )}\n
\n\n
\n {renderCategories(benefitGroup.categories)}\n
\n
\n
\n \n {benefitGroup.numberReviews\n ? (\n benefitGroup.sumRatings / benefitGroup.numberReviews\n ).toFixed(1)\n : 0}\n \n \n \n {\" \"}\n {benefitGroup.numberReviews} {t(\"rating\")}\n \n
\n {/**\n * When the client decides to add comments, change the text of the link to View reviews. The link opens the same modal.\n */}\n {usedBenefits?.length > 0 && !isOpenRatingModal && (\n {\n openModal(benefitGroup.id);\n }}\n className=\"link\"\n >\n {t(\"rate_the_benefit\")}\n
\n )}\n
\n {isOpenRatingModal && (\n
\n {usedBenefits?.length > 0 && (\n \n )}\n
\n )}\n {doesDescriptionExist(benefitGroup.description) ? (\n
\n {ReactHtmlParser(benefitGroup.description)}\n
\n ) : (\n

{benefitGroup.summary}

\n )}\n {renderLocations(\n benefitGroup.cities,\n benefitGroup.isRemote,\n user?.employee?.cities\n )}\n \n
\n {!isEmpty(benefits) &&\n benefits &&\n sortedBenefits().map(benefit => (\n \n ))}\n
\n
\n );\n};\n\nBenefitSubscribe.propTypes = {\n benefitGroupId: PropTypes.number,\n closeModal: PropTypes.func,\n isSubscribedBenefits: PropTypes.bool,\n getUserBenefitGroups: PropTypes.func,\n resetBenefits: PropTypes.func\n};\n\nconst mapStateToProps = state => {\n return {\n benefitGroup:\n state.employeeBenefitsPage.pageFrontEndStates.chosenBenefitGroup,\n user: state.app.user,\n priceRange: state.employeeBenefitsPage.filters.chosenPriceRange,\n chosenBenefitExpirationTypes: state.employeeBenefitsPage.filters.expirations\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n closeBenefitGroupModal: () =>\n dispatch(actionCreators.closeBenefitGroupModal())\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BenefitSubscribe);\n","import BenefitSubscribe from \"./BenefitSubscribe\";\n\nexport default BenefitSubscribe;\n","import React from 'react';\nimport { Category } from '../models/domain';\nimport { isEmpty } from \"../services/general.utils\"\n\n/**\n * Renders list of benefit group categories.\n * @param {Category[]} categories \n * @returns {HTMLParagraphElement | undefined}\n */\nexport const renderCategories = (\n categories\n) => {\n return !isEmpty(categories) && (\n

\n {categories.map(category => category.name).join(\", \")}\n

\n )\n}","import styled from \"styled-components\";\n\nconst VoucherReimbursementStyles = styled.div`\n width: 650px; \n max-width: 100%;\n height: 700px;\n max-height: 100vh;\n padding: 60px 30px;\n\n .recipe {\n padding: 20px;\n border: solid 2px #2F68B9;\n border-radius: 4px;\n box-shadow: 0px 4px 4px 0px #00000040;\n line-height: 2rem;\n\n h2 {\n text-align: center;\n margin: 10px;\n }\n }\n\n .recipeButtons {\n text-align: center;\n margin: 10%;\n display: flex;\n flex-direction: column;\n }\n\n @media only screen and (max-width: 600px){\n padding: 40px 10px;\n\n .recipe {\n padding: 15px;\n }\n }\n\n @media only screen and (max-width: 370px){\n h2 {\n font-size: 1em;\n }\n p {\n font-size: 0.677rem;\n }\n .mobileButton {\n font-size: 0.8rem;\n }\n }\n\n`;\n\nexport default VoucherReimbursementStyles","const dateFormater = (date) => {\n\tconst parts = date.split(' ')\n\tconst months = {\n\t\tJan: '01',\n\t\tFeb: '02',\n\t\tMar: '03',\n\t\tApr: '04',\n\t\tMay: '05',\n\t\tJun: '06',\n\t\tJul: '07',\n\t\tAug: '08',\n\t\tSep: '09',\n\t\tOct: '10',\n\t\tNov: '11',\n\t\tDec: '12'\n\t}\n\treturn `${parts[2]}.${months[parts[1]]}.${parts[3]}`\n}\n\nexport default dateFormater\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { useFormik } from \"formik\";\nimport { toast } from \"react-toastify\";\n// Style\nimport VoucherReimbursementStyles from \"./VoucherReimbursementStyles\";\n\n// Services\nimport * as employeeBenefitsService from \"../../../../services/api/employee/employeeBenefits.services\";\n\n// Components\nimport Button from \"../../../../components/button\";\n// Utils\nimport dateFormater from \"../../../../services/dateFormater\";\nimport { TOKEN_VALUE } from \"../../../../builders/benefits/tokenValue\";\nimport { useSelector } from \"react-redux\";\nimport { useTranslation } from \"react-i18next\";\n\nconst VoucherReimbursement = ({ setShowPDFBill, voucherReimbursementData }) => {\n const { t } = useTranslation();\n const [isUpload, setIsUpload] = useState(false);\n\n const companyId = useSelector(state => state.app.user.companyId);\n\n const handleSubmitFile = async () => {\n employeeBenefitsService.uploadPDF(values, companyId);\n\n setTimeout(() => {\n setShowPDFBill(false);\n }, 500);\n };\n\n const formik = useFormik({\n initialValues: {\n pdfFile: undefined,\n voucherId: voucherReimbursementData.voucher_id,\n benefitGroupId: voucherReimbursementData.benefit_group_id\n },\n onSubmit: handleSubmitFile\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n handleBlur\n } = formik;\n\n const handleUpload = () => {\n document.getElementById(\"pdf\").click();\n setIsUpload(true);\n };\n\n const uploadPDF = e => {\n if (e.target.files.length > 0) {\n setFieldValue(e.target.name, e.target.files[0]);\n }\n };\n\n return (\n \n
\n

Refund voucher

\n

Voucher name: {voucherReimbursementData.benefit_name}

\n

\n Voucher price: {voucherReimbursementData.benefit_price * TOKEN_VALUE}{\" \"}\n currency\n

\n

\n Date: {dateFormater(voucherReimbursementData.created_at.toString())}\n

\n
\n

User information

\n

Email: {voucherReimbursementData.email}

\n

User: {voucherReimbursementData.name}

\n
\n \n
\n

Upload the receipt

\n {\n e.target.value = null;\n }}\n accept=\".pdf, .jpg, .jpeg, .png, .JPG, .PNG, .JPEG, .PDF\"\n onChange={e => {\n const fileName = e.target.value;\n const regex = /\\.(pdf|jpg|jpeg|png|JPG|PNG|JPEG|PDF)$/;\n\n if (!regex.test(fileName)) {\n toast.error(t(\"failed_to_set_valid_file_format\"));\n e.target.value = null;\n return;\n }\n\n uploadPDF(e);\n }}\n style={{ display: \"none\" }}\n />\n handleBlur(\"pdfFile\", true)}\n margin=\"30px auto\"\n width=\"122px\"\n customClass=\"mobileButton\"\n >\n Upload\n \n
\n {values.pdfFile && (\n

{values.pdfFile.name}

\n )}\n {/*errors.pdfFile && (\n

\n {errors.pdfFile && touched.pdfFile\n ? errors.pdfFile\n : \"\"}\n

\n )*/}\n
\n
\n
\n \n Submit\n \n
\n \n
\n );\n};\n\nVoucherReimbursement.propTypes = {\n setShowPDFBill: PropTypes.func,\n voucherReimbursementData: PropTypes.shape({\n user_id: PropTypes.number,\n email: PropTypes.string,\n name: PropTypes.string,\n benefit_group_name: PropTypes.string,\n benefit_name: PropTypes.string,\n benefit_price: PropTypes.number,\n quantity: PropTypes.number,\n created_at: PropTypes.object\n })\n};\n\nexport default VoucherReimbursement;\n","import VoucherReimbursement from \"./VoucherReimbursement\";\n\nexport default VoucherReimbursement;","import styled from \"styled-components\";\n\nexport const OnboardingStyles = styled.div`\n width: 546px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 30px 30px 30px;\n\n .circleLogoContainer {\n width: 126px;\n height: 126px;\n margin-bottom: 30px;\n }\n\n .title {\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 0.81;\n letter-spacing: normal;\n color: #4b4b4b;\n margin-bottom: 30px;\n }\n\n .text {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n margin-bottom: 10px;\n }\n\n @media only screen and (max-width: 767px) {\n width: 100%;\n height: 100vh;\n }\n`;\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\n// styles\nimport { OnboardingStyles } from \"./onboarding.styles\";\n// assets\nimport { BenefitLogoIcon } from \"../../../../assets/Icons\";\n// components\nimport { Button } from \"../../../../components\";\n// services\nimport * as api from \"../../../../services/api/employee/employeeBenefits.services\";\n// actions\nimport * as actionCreators from \"../../../../actions/app.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst EmployeeOnboarding = ({ finishEmployeeOnboarding }) => {\n const { t } = useTranslation();\n const handleFinishOnboarding = async () => {\n const response = await api.finishOnboarding();\n if (response.hasError) {\n return toast.error(\n response.errorMessage ? response.errorMessage : t(\"failed_to_onboard\")\n );\n }\n finishEmployeeOnboarding();\n };\n\n return (\n \n
\n \n
\n

Welcome to Benefiti!

\n

Greetings!

\n

\n {`Good to see you on the platform! Your employer wants to allow you to \n spend your budget on the benefits you really want and change them as needed, \n which we make possible. We believe that you will find it easy to navigate \n and intuitively select your benefits. If you need help feel free to email us at `}\n \n info@benefiti.rs\n \n .\n

\n

Benefiti team

\n handleFinishOnboarding()}\n margin=\"20px 0 0 0\"\n >\n Ok\n \n
\n );\n};\n\nEmployeeOnboarding.propTypes = {\n finishOnboarding: PropTypes.func\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n finishEmployeeOnboarding: () =>\n dispatch(actionCreators.finishEmployeeOnboarding())\n };\n};\n\nexport default connect(null, mapDispatchToProps)(EmployeeOnboarding);\n","import Onboarding from \"./Onboarding\";\n\nexport default Onboarding;\n","import styled from \"styled-components\";\n\nexport const NotificationsStyles = styled.div`\n width: 546px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 30px 30px 30px;\n\n .circleLogoContainer {\n width: 126px;\n height: 126px;\n margin-bottom: 30px;\n }\n\n .title {\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 0.81;\n letter-spacing: normal;\n color: #4b4b4b;\n margin-bottom: 30px;\n }\n\n .text {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n margin-bottom: 10px;\n }\n\n .notifications-content {\n & > .notification-render {\n .notification-title {\n text-align: center;\n margin: 10px 0;\n }\n .notification-subtitle {\n text-align: center;\n color: red;\n margin: 10px 0;\n }\n .notification-description {\n text-align: center;\n margin: 10px 0;\n }\n }\n }\n\n @media only screen and (max-width: 767px) {\n width: 100%;\n height: 100vh;\n }\n`;\n","import React from \"react\";\n\nconst BenefitChangedExpirationType = ({ notification }) => {\n return (\n <>\n

\n There have been changes regarding the types of some benefits you were subscribed to\n

\n

\n You have been automatically unsubscribed from these benefits.\n

\n

\n Please, make sure to visit My Benefits or Browse Benefits page and choose which benefits would you prefer to subscribe to for the next month.\n

\n \n );\n};\n\nexport default BenefitChangedExpirationType;\n","import React from \"react\";\n\nconst BenefitChangedPrice = ({ notification }) => {\n return (\n <>\n

\n There have been changes regarding the prices of some benefits you were\n subscribed to\n

\n

\n You have been automatically unsubscribed from these benefits.\n

\n

\n Please, make sure to visit My Benefits or Browse Benefits page and\n choose which benefits would you prefer to subscribe to for the next\n month, according to the price changes and your available tokens.\n

\n \n );\n};\n\nexport default BenefitChangedPrice;\n","import React from \"react\";\n\nconst BenefitGroupChangedLocation = ({ notification }) => {\n return (\n <>\n

\n There have been changes regarding the location of some benefits you were subscribed to\n

\n

\n You have been automatically unsubscribed from these benefits.\n

\n

\n Please, make sure to visit My Benefits or Browse Benefits page and choose which benefits would you prefer to subscribe to for the next month.\n

\n \n );\n};\n\nexport default BenefitGroupChangedLocation;\n","import React from \"react\";\nimport { isEmpty } from \"../../../../services/general.utils\";\n\nconst BenefitGroupLocationUpdatedInfo = ({ notification }) => {\n return (\n <>\n {!isEmpty(notification.payload.benefit_group_name) && (

\n There have been some changes regarding benefit group's \"{notification.payload.benefit_group_name}\" location.\n

)}\n

\n Please check your benefits on My Benefits page and make sure you are ok with these changes.\n

\n \n );\n};\n\nexport default BenefitGroupLocationUpdatedInfo;\n","import React from \"react\";\n\nconst EmployeeChangedLocation = ({ notification }) => {\n return (\n <>\n

\n There have been changes regarding your location!\n

\n

\n You have been automatically unsubscribed from affected benefits.\n

\n

\n Please, make sure to visit My Benefits or Browse Benefits page and choose which benefits would you prefer to subscribe to for the next month, according to the new available location.\n

\n \n );\n};\n\nexport default EmployeeChangedLocation;\n","import React from \"react\";\nimport { isEmpty } from \"../../../../services/general.utils\";\n\nconst EmployeeLocationUpdatedInfo = ({ notification }) => {\n const handleNotificationSubtitle = () => {\n return `\"${notification.payload.removed_cities.map(city => city.name).join(\", \")}\" ${notification.payload.removed_cities.length > 1 ? 'have' : 'has'} been removed from your locations. `;\n }\n\n return (\n <>\n

\n There have been some changes regarding your location.\n

\n {!isEmpty(notification.payload.removed_cities) && (

\n {handleNotificationSubtitle()}\n You might have lost access to some benefits on these locations.\n

)}\n

\n Please check your benefits on My Benefits page and make sure your you are ok with these changes.\n

\n \n );\n};\n\nexport default EmployeeLocationUpdatedInfo;\n","import React from \"react\";\n\nconst EmployeeReassignedTier = ({ notification }) => {\n return (\n <>\n

\n You have been reassigned to a different tier.\n

\n

\n You have been automatically unsubscribed from all benefits.\n

\n

\n Please, make sure to visit My Benefits or Browse Benefits page and\n choose which benefits would you prefer to subscribe to for the next\n month, according to the new available budget.\n

\n \n );\n};\n\nexport default EmployeeReassignedTier;\n","import React from \"react\";\nimport moment from \"moment\";\nimport { useTranslation } from \"react-i18next\";\n\nconst EmployeeSubscribedToMcpBenefit = ({ notification }) => {\n const { t } = useTranslation();\n return (\n <>\n

\n {t(\"subscribed_success_to_mcp_title\")}\n

\n

\n {t(\"subscribed_success_to_mcp_info\")}\n

\n

\n {t(\"subscribed_success_to_mcp_info2\", {\n minimumContractPeriod: notification.payload.minimumContractPeriod\n })}\n {moment(notification.payload.minimumContractPeriodExpiration).format(\n \"DD. MMMM\"\n )}\n

\n \n );\n};\n\nexport default EmployeeSubscribedToMcpBenefit;\n","import React from \"react\";\n\nconst TierBudgetDecreased = ({ notification }) => {\n return (\n <>\n

\n There have been changes regarding the budget of the tier you are\n belonging to!\n

\n

\n You have been automatically unsubscribed from all benefits.\n

\n

\n Please, make sure to visit My Benefits or Browse Benefits page and\n choose which benefits would you prefer to subscribe to for the next\n month, according to the new available budget.\n

\n \n );\n};\n\nexport default TierBudgetDecreased;\n","import React from \"react\";\nimport { SYSTEM_NOTIFICAITON_TYPES } from \"../../../../constants/systemNotifications.constants\";\nimport BenefitChangedExpirationType from \"./BenefitChangedExpirationType\";\nimport BenefitChangedPrice from \"./BenefitChangedPrice\";\nimport BenefitGroupChangedLocation from \"./BenefitGroupChangedLocation\";\nimport BenefitGroupLocationUpdatedInfo from \"./BenefitGroupLocationUpdatedInfo\";\nimport EmployeeChangedLocation from \"./EmployeeChangedLocation\";\nimport EmployeeLocationUpdatedInfo from \"./EmployeeLocationUpdatedInfo\";\nimport EmployeeReassignedTier from \"./EmployeeReassignedTier\";\nimport EmployeeSubscribedToMcpBenefit from \"./EmployeeSubscribedToMcpBenefit\";\nimport TierBudgetDecreased from \"./TierBudgetDecreased\";\n\nconst NotificationPayloadRender = ({ notification }) => {\n return (\n
\n {notification.notificationType ===\n SYSTEM_NOTIFICAITON_TYPES.BENEFIT_CHANGED_PRICE && (\n \n )}\n\n {notification.notificationType ===\n SYSTEM_NOTIFICAITON_TYPES.EMPLOYEE_REASSIGNED_TIER && (\n \n )}\n\n {notification.notificationType ===\n SYSTEM_NOTIFICAITON_TYPES.DECREASED_TIER_BUDGET && (\n \n )}\n\n {notification.notificationType ===\n SYSTEM_NOTIFICAITON_TYPES.BENEFIT_GROUP_CHANGED_LOCATION && (\n \n )}\n {notification.notificationType ===\n SYSTEM_NOTIFICAITON_TYPES.EMPLOYEE_CHANGED_LOCATION && (\n \n )}\n {notification.notificationType ===\n SYSTEM_NOTIFICAITON_TYPES.EMPLOYEE_LOCATION_UPDATED_INFO && (\n \n )}\n {notification.notificationType ===\n SYSTEM_NOTIFICAITON_TYPES.BENEFIT_GROUP_LOCATION_UPDATED_INFO && (\n \n )}\n {notification.notificationType ===\n SYSTEM_NOTIFICAITON_TYPES.BENEFIT_CHANGED_EXPIRATION_TYPE && (\n \n )}\n {notification.notificationType ===\n SYSTEM_NOTIFICAITON_TYPES.EMPLOYEE_SUBSCRIBED_TO_MCP_BENEFIT && (\n \n )}\n
\n );\n};\n\nexport default NotificationPayloadRender;\n","import React from \"react\";\nimport NotificationPayloadRender from \"./NotificationPayloadRender\";\n\nconst NotificationsContent = ({ notification }) => {\n return (\n
\n \n
\n );\n};\n\nexport default NotificationsContent;\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\n// styles\nimport { NotificationsStyles } from \"./notifications.styles\";\n// assets\nimport { BenefitLogoIcon } from \"../../../../assets/Icons\";\n// components\nimport { Button } from \"../../../../components\";\n// services\nimport * as api from \"../../../../services/api/auth.service\";\n// actions\nimport * as actionCreators from \"../../../../actions/app.actions\";\nimport NotificationsContent from \"./NotificationsContent\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Notification = ({ notification, popSystemNotifications }) => {\n const { t } = useTranslation();\n\n const handleMarkNotificationAsRead = async id => {\n const response = await api.markAsRead(id);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_mark_as_read\")\n );\n }\n\n popSystemNotifications();\n };\n\n return (\n \n
\n \n
\n \n handleMarkNotificationAsRead(notification.id)}\n margin=\"20px 0 0 0\"\n >\n Ok\n \n
\n );\n};\n\nNotification.propTypes = {\n notification: PropTypes.object\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n popSystemNotifications: () =>\n dispatch(actionCreators.popSystemNotifications())\n };\n};\n\nexport default connect(null, mapDispatchToProps)(Notification);\n","import Notification from \"./Notification\";\n\nexport default Notification;\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport styled from \"styled-components\";\nimport { toast } from \"react-toastify\";\n// components\nimport { SubscribeCountDown, Button } from \"../../../components\";\n// assets\nimport { WatchIcon } from \"../../../assets/Icons\";\n// services\nimport { calculateTimeLeft } from \"../../../components/timer/countDown.service\";\nimport * as api from \"../../../services/api/employee/employeeBenefits.services\";\n// actions\nimport * as actionCreators from \"../../../actions/app.actions\";\n\nconst SyncModalStyles = styled.div`\n width: 544px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 46px 30px 30px 30px;\n\n .syncTitle {\n font-style: normal;\n font-weight: bold;\n font-size: 26px;\n line-height: 26px;\n text-align: center;\n color: #4b4b4b;\n }\n\n .syncDescription {\n font-style: normal;\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n width: 380px;\n text-align: center;\n color: #4b4b4b;\n margin: 30px 0;\n }\n\n @media only screen and (max-width: 767px) {\n width: 100%;\n height: 100vh;\n}\n\n @media only screen and (max-width: 420px) {\n .syncTitle {\n font-size: 24px;\n line-height: 24px;\n }\n\n .syncDescription {\n width: 265px;\n }\n }\n`;\n\nconst SyncModal = ({ isSync, syncUser }) => {\n const syncEmployee = async () => {\n const response = await api.syncEmployeeUser();\n if (response.hasError) {\n return toast.error(\n response.errorMessage ? response.errorMessage : \"Submit failed.\"\n );\n }\n toast.success(response.data.message);\n syncUser();\n };\n return (\n \n

Submit Benefits

\n

\n Once you submit the data you will not be able to change them until the\n next month. An automatic submit is done on the 26th of each month. You\n can manually submit the data now if you are sure about your choices.\n

\n

\n Time remaining before the next automatic submit:\n

\n
\n \n \n
\n {calculateTimeLeft() !== \"Submit in progress...\" && !isSync && (\n syncEmployee()}\n margin=\"29px 0 0 0\"\n width=\"140px\"\n >\n Submit\n \n )}\n
\n );\n};\n\nconst mapStateToProps = state => {\n return {\n isSync: state.app.user.isSync\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n syncUser: () => dispatch(actionCreators.syncUser())\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SyncModal);\n","import styled from \"styled-components\";\n\nconst EmployeeBenefitsStyles = styled.div`\n background: whitesmoke;\n min-height: 100vh;\n\n .smallScreenNotification {\n color: #757575;\n font-size: 12px;\n display: flex;\n justify-content: center;\n margin-bottom: 10px;\n b {\n margin-left: 3px;\n }\n }\n\n @media screen and (min-width: 767px) {\n .smallScreenNotification {\n display: none;\n }\n }\n\n .container {\n padding: 0 30px 30px 30px;\n width: 100%;\n\n .benefitsAndFilterContainer {\n display: flex;\n }\n }\n\n #benefitGroupList {\n opacity: 0;\n transition: all 0.4s ease-in-out;\n }\n\n .benefitList {\n display: flex;\n max-width: 1440px;\n flex-wrap: wrap;\n margin: 30px 0 30px 0;\n }\n\n .noItemsContainer {\n height: calc(100vh - 250px);\n display: flex;\n align-items: center;\n justify-content: center;\n\n .noItemsTitle {\n font-style: normal;\n font-weight: bold;\n font-size: 26px;\n line-height: 26px;\n text-align: center;\n color: #4b4b4b;\n }\n }\n\n @media only screen and (max-width: 1099px) {\n .showFilters {\n transition-delay: 0.1s;\n transform: translateX(0) !important;\n }\n\n .showWrapper {\n visibility: visible !important;\n }\n }\n\n @media only screen and (max-width: 780px) {\n .benefitList {\n justify-content: space-between;\n }\n }\n\n @media only screen and (max-width: 767px) {\n .container {\n padding: 0 0 30px 0;\n }\n\n .timerAndFilters {\n .buttonsContainer {\n width: 100%;\n justify-content: space-between;\n }\n /* .mobileFilterButton {\n display: unset;\n font-size: 12px !important;\n width: 80px !important;\n } */\n }\n .benefitList {\n margin: 30px 0 30px 0;\n justify-content: space-between;\n }\n }\n\n @media only screen and (max-width: 500px) {\n .lastMobile {\n width: 100%;\n }\n }\n`;\n\nexport default EmployeeBenefitsStyles;\n","import { useEffect } from 'react';\n\nexport const useDisableBodyScroll = (open) => {\n useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = 'unset';\n }\n\n return () => {\n document.body.style.overflow = 'unset';\n }\n }, [open]);\n};","import React from \"react\";\nimport { BeatLoader } from \"react-spinners\";\nimport { override } from \"../../../../services/loadingOverride.styles\";\n\nexport const LoadingFavoriteBenefits = ({ isLoading }) => {\n return (\n \n \n \n );\n};\n","import React from \"react\";\nimport { ListPlaceHolder } from \"../../../../components\";\n\nexport const EmptyFavoriteBenefits = ({ textPlaceholder }) => {\n return (\n
\n \n
\n );\n};\n","import React, { useMemo, useState } from \"react\";\nimport { connect, useDispatch, useSelector } from \"react-redux\";\nimport ReactTooltip from \"react-tooltip\";\nimport PropTypes from \"prop-types\";\nimport StarRatings from \"react-star-ratings\";\n\n// Styles\n// Assets\nimport Capacity from \"../../../../assets/images/capacity-left.svg\";\n// Components\nimport {\n ActiveIcon,\n FullHeartIconSVG,\n InfoIconSvg,\n OutlineHeartIconSVG,\n PendingActivationIcon,\n PendingDeactivationIcon,\n TokenIcon\n} from \"../../../../assets/Icons\";\n// Services\nimport { getUrl } from \"../../../../services/imageHandler\";\nimport { truncate } from \"../../../../services/truncateString\";\n// Utils\nimport { isEmpty } from \"../../../../services/general.utils\";\n// Constants\nimport { LOCAL } from \"../../../../builders/benefitGroups/benefitGroup.types\";\n\nimport { UserRolesKeysEnum } from \"../../../../constants/roles.constants\";\nimport BenefitCardStyles from \"../../../../components/benefitCard/BenefitCardStyles\";\nimport { toast } from \"react-toastify\";\nimport { setListOfFavorites } from \"../../../../actions/employee/employeeBenefits.actions\";\nimport { apiService } from \"../../../../services/api/api.service\";\nimport {\n transformPriceRangeTokensToPriceRangeRsd,\n transformTokenCurrencyIcons\n} from \"../../../../utils/transformTokensToRsd\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BenefitCard = ({\n benefitGroupId,\n benefitDetails: {\n photo,\n provider,\n name,\n benefits = [],\n categories,\n status,\n statusPreview,\n taxes,\n cities,\n isRemote,\n type,\n summary,\n doesBenefitGroupHaveMcp,\n isBenefitGroupNew,\n benefitGroupAvailable,\n doesBenefitGroupHaveInstalments,\n doesBenefitGroupHaveQuantity,\n sumRatings,\n numberReviews,\n priceRange\n },\n onClick,\n isMyBenefits = false,\n isHr = false,\n user,\n isPreview = false\n}) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const [isDisabled, setIsDisabled] = useState(false);\n\n const { listOfFavoriteBenefitsInObject } = useSelector(\n state => state.employeeBenefitsPage.favoriteBenefits\n );\n\n /**\n * Handles on click event for the benefit card.\n * @returns {Function}\n */\n const handleOnClick = async () => {\n return onClick();\n };\n\n /**\n * Renders cities on benefit card.\n * If user is hr, and benefit group has more than one city while also being remote, renders remote with no of locations.\n * If user is hr, and benefit group has more than one city, renders first city name and array length - 1.\n * If user is employee and benefit group has remote renders remote and renders first city name and array length - 1.\n * If user is employee, renders first city from his cities and array length - 1.\n * If there is only one city in cities list, render its name.\n * @param {City[]} cities\n */\n const renderCities = cities => {\n if (isEmpty(cities) && type === LOCAL) return [];\n\n if (\n (isHr || user.authenticatedRole?.key !== UserRolesKeysEnum.MEMBER) &&\n cities.length >= 1 &&\n isRemote\n ) {\n return

Remote, + {cities.length}

;\n }\n\n if (\n (isHr || user.authenticatedRole?.key !== UserRolesKeysEnum.MEMBER) &&\n cities.length > 1\n ) {\n return (\n

\n {cities[0].name}, + {cities.length - 1}\n

\n );\n }\n\n if (isEmpty(cities) && isRemote) return

Remote

;\n\n if (\n user.authenticatedRole?.key === UserRolesKeysEnum.MEMBER &&\n !isEmpty(user.employee.cities)\n ) {\n const employeeCity = user.employee?.cities?.find(city =>\n cities.find(ct => ct.id === city.id)\n );\n if (!!employeeCity && cities.length > 1 && !isRemote) {\n return (\n

\n {employeeCity.name}, + {cities.length - 1}\n

\n );\n }\n\n if (!!employeeCity && cities.length > 1 && isRemote) {\n return (\n

\n Remote, {employeeCity.name}, + {cities.length - 1}\n

\n );\n }\n\n if (!!employeeCity && cities.length === 1 && isRemote) {\n return

Remote, {employeeCity.name}

;\n }\n\n if (!isEmpty(cities) && isEmpty(employeeCity) && isRemote) {\n return

Remote, + {cities.length}

;\n }\n\n if (cities.length > 1) {\n return (\n

\n {cities[0].name}, + {cities.length - 1}\n

\n );\n }\n }\n\n return

{cities[0].name}

;\n };\n\n /**\n * Renders benefit group categories to card.\n * @returns {HTMLDivElement}\n */\n const renderCategories = () => {\n if (isEmpty(categories)) return [];\n\n if (!isEmpty(categories) && categories.length > 1) {\n return (\n

\n {categories[0].name}, + {categories.length - 1}\n

\n );\n }\n\n return

{categories[0].name}

;\n };\n\n /**\n * Returns icon component based on status.\n * @param {string} status\n * @returns {import(\"react\").ReactComponentElement}\n */\n const renderStatusIcon = status => {\n const statusObject = {\n Active: ,\n \"Pending Activation\": ,\n \"Pending Deactivation\": \n };\n\n return statusObject[status];\n };\n\n /**\n * Calculates & returns total quantity remaining.\n * @returns {number}\n */\n const calculateTotalQuantityRemaining = () => {\n return benefits?.reduce(\n (total, benefit) => total + benefit.totalQuantityRemaining,\n null\n );\n };\n const quantityRemaining = useMemo(() => calculateTotalQuantityRemaining(), [\n benefits\n ]);\n\n /**\n * Calculates & returns tooltip position relative on top left border.\n * @param {number} left\n * @param {number} top\n * @param {HTMLDivElement} node\n * @returns {number, number}\n */\n const overrideTooltipPosition = (\n { top, left },\n currentEvent,\n currentTarget,\n node\n ) => {\n const d = document.documentElement;\n left = Math.min(d.clientWidth - node.clientWidth, left);\n top = Math.min(d.clientHeight - node.clientHeight, top);\n left = Math.max(0, left);\n top = Math.max(0, top);\n\n return { top, left };\n };\n\n const refetchFavoriteBenefits = async () => {\n try {\n const response = await apiService.get(\"/favorites\");\n const listOfFavorite =\n response.data?.items.length > 0\n ? response.data.items.map(item => item.group)\n : [];\n\n dispatch(setListOfFavorites(listOfFavorite));\n } catch (error) {\n console.log(error);\n toast.error(t(\"failed_to_get_favorite_benefits\"));\n }\n };\n\n const handleRemoveFromFavorites = async e => {\n e.stopPropagation();\n\n try {\n setIsDisabled(true);\n const removeFromBenefitsResponse = await apiService.delete(\n `/favorites/remove/benefits/${benefitGroupId}`\n );\n\n await refetchFavoriteBenefits();\n toast.success(removeFromBenefitsResponse.data.message);\n } catch (error) {\n console.log(error);\n toast.error(t(\"failed_to_remove_from_favorites\"));\n } finally {\n setIsDisabled(false);\n }\n };\n\n const handleAddToFavorites = async e => {\n e.stopPropagation();\n\n try {\n setIsDisabled(true);\n\n const removeFromBenefitsResponse = await apiService.post(\n `/favorites/add/benefits/${benefitGroupId}`\n );\n\n await refetchFavoriteBenefits();\n toast.success(removeFromBenefitsResponse.data.message);\n } catch (error) {\n toast.error(t(\"failed_to_add_to_favorites\"));\n } finally {\n setIsDisabled(false);\n }\n };\n\n return (\n \n
\n
\n \n {isBenefitGroupNew && NEW}\n
\n
\n
\n
\n \n
\n
\n
\n

{name}

\n
{renderCategories()}
\n
\n
\n
\n \n {\" \"}\n {numberReviews\n ? (sumRatings / numberReviews).toFixed(1)\n : 0}{\" \"}\n \n \n ({numberReviews} ratings)\n
\n
\n
\n \n {!isEmpty(taxes) &&

{truncate(taxes, 60)}

}\n

{truncate(summary, 89)}

\n
\n \n {cities && renderCities(cities)}\n \n
\n
\n
\n
\n {transformTokenCurrencyIcons()}\n

\n {transformPriceRangeTokensToPriceRangeRsd(priceRange)}\n

\n
\n {isPreview ||\n (doesBenefitGroupHaveMcp && (\n <>\n \n MCP\n
\n \n \n {t(\"mcp_take_warning\")}\n \n \n \n ))}\n {doesBenefitGroupHaveInstalments && (\n <>\n \n \n \n \n \n This benefit group has a price split in instalments.\n \n \n \n )}\n
\n {!isHr && (\n
\n {!!listOfFavoriteBenefitsInObject[benefitGroupId] ? (\n \n \n \n ) : (\n \n \n \n )}\n {!isEmpty(quantityRemaining) && doesBenefitGroupHaveQuantity && (\n
\n \n

{quantityRemaining} left

\n
\n )}\n
\n )}\n
\n \n {isHr && (\n
\n {benefitGroupAvailable ? (\n
\n ON
\n
\n ) : (\n
\n OFF
\n
\n )}\n
\n )}\n {isMyBenefits\n ? status && (\n
\n {renderStatusIcon(status)}\n

{statusPreview}

\n
\n )\n : status && (\n
\n {renderStatusIcon(status)}\n

{statusPreview}

\n
\n )}\n
\n \n );\n};\n\nBenefitCard.propTypes = {\n benefitDetails: PropTypes.shape({\n name: PropTypes.string,\n description: PropTypes.string,\n status: PropTypes.string,\n statusPreview: PropTypes.string,\n photo: PropTypes.shape({\n url: PropTypes.string\n }),\n provider: PropTypes.shape({\n photo: PropTypes.shape({\n url: PropTypes.string\n }),\n description: PropTypes.string\n }),\n benefitMin: PropTypes.number,\n benefitMax: PropTypes.number,\n capacity: PropTypes.number,\n takenBenefits: PropTypes.number,\n Benefit: PropTypes.arrayOf(PropTypes.shape({})),\n isPremium: PropTypes.bool,\n sumRatings: PropTypes.number,\n numberReviews: PropTypes.number\n }),\n onClick: PropTypes.func,\n isHr: PropTypes.bool\n};\n\nconst mapStateToProps = state => {\n return {\n user: state.app.user\n };\n};\n\nexport default connect(mapStateToProps, undefined)(BenefitCard);\n","import React from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport styled from \"styled-components\";\nimport BenefitCard from \"./BenefitCard\";\nimport { openModalAnim } from \"../../../../components\";\nimport { openBenefitGroupModal } from \"../../../../actions/employee/employeeBenefits.actions\";\nimport { apiService } from \"../../../../services/api/api.service\";\nimport * as actionCreators from \"../../../../actions/employee/employeeBenefits.actions\";\n\nconst FavoriteBenefitsDisplayStyles = styled.div`\n .benefitList {\n display: flex;\n justify-content: center;\n max-width: 1440px;\n flex-wrap: wrap;\n margin: 30px 0 0 0;\n }\n`;\n\nexport const ListOfFavoriteBenefits = props => {\n const dispatch = useDispatch();\n\n const { listOfFavoriteBenefits } = props;\n\n const openModal = async chosenBenefitGroup => {\n dispatch(openBenefitGroupModal(chosenBenefitGroup));\n\n const response = await apiService.get(\n `/favorites/check/benefits/${chosenBenefitGroup.id}`\n );\n\n let checkIfInFavoritesPayload = false;\n if (response.data.favorites?.id) checkIfInFavoritesPayload = true;\n\n dispatch(actionCreators.checkIfInFavorites(checkIfInFavoritesPayload));\n\n setTimeout(() => {\n openModalAnim();\n }, 100);\n };\n\n return (\n \n
\n {listOfFavoriteBenefits.map(benefitGroup => {\n return (\n openModal(benefitGroup)}\n />\n );\n })}\n
\n
\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { TextAndLine } from \"../../../../components\";\nimport { LoadingFavoriteBenefits } from \"./LoadingFavoriteBenefits\";\nimport { EmptyFavoriteBenefits } from \"./EmptyFavoriteBenefits\";\nimport { apiService } from \"../../../../services/api/api.service\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setListOfFavorites } from \"../../../../actions/employee/employeeBenefits.actions\";\nimport { toast } from \"react-toastify\";\nimport { ListOfFavoriteBenefits } from \"./ListOfFavoriteBenefits\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const FavoriteBenefits = () => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const [isLoading, setIsLoading] = useState(false);\n\n const { listOfFavoriteBenefits } = useSelector(\n state => state.employeeBenefitsPage.favoriteBenefits\n );\n\n const fetchFavoritesData = async () => {\n try {\n setIsLoading(true);\n const response = await apiService.get(\"/favorites\");\n const listOfFavorite =\n response.data?.items.length > 0\n ? response.data.items.map(item => item.group)\n : [];\n\n dispatch(setListOfFavorites(listOfFavorite));\n } catch (error) {\n console.log(error);\n toast.error(t(\"failed_to_get_favorite_benefits\"));\n } finally {\n setIsLoading(false);\n }\n };\n\n useEffect(() => {\n fetchFavoritesData();\n }, []);\n\n const showContent = () => {\n if (isLoading) return ;\n\n if (listOfFavoriteBenefits.length > 0) {\n return (\n \n );\n }\n\n return ;\n };\n\n return (\n
\n \n
{showContent()}
\n
\n );\n};\n","import styled, { keyframes } from \"styled-components\";\n\nconst fadeInLeft = keyframes`\n from {\n opacity: 0;\n transform: translate3d(-100%, 0, 0);\n }\n to {\n opacity: 1;\n transform: translate3d(0, 0, 0);\n }\n`;\n\nconst fadeOutLeft = keyframes`\n from {\n opacity: 1;\n transform: translate3d(0, 0, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(-100%, 0, 0);\n }\n`;\n\nconst SocialProofNotificationsStyles = styled.div`\n .socialProofNotificationWrapper {\n display: flex;\n\n img {\n width: 50px;\n height: 50px;\n border-radius: 4px;\n margin-right: 5px;\n }\n }\n\n #social-proof-notification {\n position: fixed;\n bottom: 20px;\n left: 20px;\n z-index: 2;\n background: #ffffffff;\n width: 230px;\n padding: 12px;\n border-radius: 4px;\n box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2),\n 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 4px 5px 0 rgba(0, 0, 0, 0.14);\n cursor: pointer;\n transition: all ease 0.3s;\n filter: drop-shadow(1px 2px 8px hsl(220deg 100% 55%));\n opacity: 0;\n transform: translate3d(-100%, 0, 0);\n\n color: #757575;\n font-size: 13px;\n font-weigh: 400;\n\n span {\n font-weight: 600;\n color: #1568bf;\n }\n }\n\n #social-proof-notification.show {\n animation: ${fadeInLeft} 0.7s ease forwards;\n }\n\n #social-proof-notification.hide {\n animation: ${fadeOutLeft} 0.7s ease forwards;\n }\n`;\n\nexport default SocialProofNotificationsStyles;\n","import React, { useEffect, useRef } from \"react\";\nimport SocialProofNotificationsStyles from \"./SocialProofNotificationsStyles\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n employeeBenefitsSetInitialState,\n openBenefitGroupModal,\n setBenefitGroupType,\n setIsInitialStateSet,\n setIsSubscribedBenefitGroupsVisible,\n setUsedBenefitsRedux\n} from \"../../../../actions/employee/employeeBenefits.actions\";\nimport { toast } from \"react-toastify\";\nimport {\n getAlreadyUsedBenefits,\n getBenefitGroups,\n getCategoriesForEmployeePlatform\n} from \"../../../../services/api/employee/employeeBenefits.services\";\nimport { openModalAnim } from \"../../../../components\";\nimport { uniqueArrayOfObjects } from \"../../../../services/general.utils\";\nimport { apiService } from \"../../../../services/api/api.service\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const SocialProofNotifications = () => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const notificationRef = useRef(null);\n\n const { currentlyPopularBenefit } = useSelector(\n state => state.employeeBenefitsPage.socialProof\n );\n const { benefitGroups } = useSelector(\n state => state.employeeBenefitsPage.benefitsBrowse\n );\n\n const {\n appliedChosenCategoryIds,\n appliedChosenPriceRange,\n appliedCityIds,\n appliedRemoteFilter\n } = useSelector(state => state.employeeBenefitsPage.filters);\n\n useEffect(() => {\n const showNotification = () => {\n notificationRef.current?.classList.add(\"show\");\n\n setTimeout(() => {\n notificationRef.current?.classList.remove(\"show\");\n notificationRef.current?.classList.add(\"hide\");\n setTimeout(() => {\n notificationRef.current?.classList.remove(\"hide\");\n }, 700);\n }, 15000);\n };\n\n showNotification();\n const intervalId = setInterval(showNotification, 900000);\n // Clean up the interval on component unmount\n return () => clearInterval(intervalId);\n }, []);\n\n const providerLogo = currentlyPopularBenefit?.photo;\n\n const imageUrl = currentlyPopularBenefit?.photo\n ? `${providerLogo.base}${providerLogo.path}/${providerLogo.name}@${providerLogo.size[0]}.${providerLogo.type}`\n : null;\n\n const openModalFunctionality = () => {\n setTimeout(() => {\n openModalAnim();\n }, 100);\n };\n\n const fetchBenefits = async type => {\n const [benefitGroupsResponse, categoriesResponse] = await Promise.all([\n getBenefitGroups({\n chosenCategories: appliedChosenCategoryIds,\n page: 1,\n priceRange: appliedChosenPriceRange,\n chosenCities: appliedCityIds,\n remoteFilter: appliedRemoteFilter,\n type: type\n }),\n getCategoriesForEmployeePlatform()\n ]);\n\n if (benefitGroupsResponse.hasError) {\n return toast.error(\n benefitGroupsResponse.errorMessage\n ? benefitGroupsResponse.errorMessage\n : t(\"failed_to_get_benefit_groups\")\n );\n }\n\n if (categoriesResponse.hasError) {\n return toast.error(\n categoriesResponse.errorMessage\n ? categoriesResponse.errorMessage\n : t(\"failed_to_get_categories\")\n );\n }\n\n dispatch(\n employeeBenefitsSetInitialState(\n benefitGroupsResponse.groups,\n benefitGroupsResponse.count,\n benefitGroupsResponse.pages,\n 1,\n categoriesResponse.categories\n )\n );\n dispatch(setIsInitialStateSet(true));\n\n setTimeout(() => {\n const editEmployeeContentCard = document.getElementById(\n \"benefitGroupList\"\n );\n editEmployeeContentCard.style.opacity = 1;\n }, 100);\n };\n\n const navigateToProperTab = type => {\n dispatch(setIsSubscribedBenefitGroupsVisible(false));\n dispatch(setBenefitGroupType(type));\n };\n\n const fetchAlreadyUsedBenefits = async id => {\n try {\n const response = await getAlreadyUsedBenefits(id);\n dispatch(setUsedBenefitsRedux(uniqueArrayOfObjects(response.benefits)));\n } catch (error) {\n toast.error(t(\"failed_to_get_used_benefits\"));\n }\n };\n\n const fetchInfoForSingleBenefitGroup = async benefitGroupId => {\n try {\n const response = await apiService.get(\n `/benefit-group/${benefitGroupId}/social-proof-data`\n );\n\n dispatch(openBenefitGroupModal(response.data));\n } catch (error) {\n toast.error(t(\"failed_to_get_single_benefit_info\"));\n }\n };\n\n const handleOpenBenefit = async () => {\n if (benefitGroups.length === 0) return;\n await fetchBenefits(\"public\");\n\n navigateToProperTab(\"public\");\n\n fetchAlreadyUsedBenefits(currentlyPopularBenefit.benefit_group_id);\n\n fetchInfoForSingleBenefitGroup(currentlyPopularBenefit.benefit_group_id);\n\n openModalFunctionality();\n };\n\n return (\n \n
\n
\n \n
\n {currentlyPopularBenefit?.BenefitGroup?.name} je\n trenutno najpopularniji benefit u Vašoj kompaniji.\n
\n
\n
\n
\n );\n};\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { connect, useDispatch, useSelector } from \"react-redux\";\nimport { css } from \"@emotion/core\";\nimport { BeatLoader } from \"react-spinners\";\nimport { toast } from \"react-toastify\";\n// custom components and animations\nimport {\n Header,\n Card,\n Modal,\n openModalAnim,\n closeModalAnim\n} from \"../../../components\";\nimport PrivacyPolicy from \"../../../components/privacyPolicyModal\";\nimport ButtonsContainer from \"./buttonsContainer/ButtonsContainer\";\nimport BenefitGroupsFilter from \"./benefitGroupsFilters/BenefitGroupsFilters\";\nimport BrowseBenefitGroups from \"./BrowseBenefitGroups/BrowseBenefitGroups\";\nimport SubscribedBenefitGroups from \"./SubscribedBenefitGroups/SubscribedBenefitGroups\";\nimport BenefitSubscribe from \"./benefitSubscribe\";\nimport VoucherReimbursement from \"./voucherReimbursement\";\nimport Onboarding from \"./employeeOnboarding\";\nimport Notification from \"./employeeNotifications\";\nimport SyncModal from \"./SyncModal\";\n// style component\nimport EmployeeBenefitsStyles from \"./EmployeeBenefitsStyles\";\n// services\nimport * as api from \"../../../services/api/employee/employeeBenefits.services\";\nimport * as userApiService from \"../../../services/api/auth.service\";\nimport { uniqueArrayOfObjects } from \"../../../services/general.utils\";\n// actions\nimport * as actionCreators from \"../../../actions/employee/employeeBenefits.actions\";\nimport * as appActionCreators from \"../../../actions/app.actions\";\n// hooks\nimport { useDisableBodyScroll } from \"../../../hooks/useDisableBodyScroll\";\nimport { FavoriteBenefits } from \"./FavoriteBenefits/FavoriteBenefits\";\nimport { apiService } from \"../../../services/api/api.service\";\nimport { SocialProofNotifications } from \"./SocialProofNotifications/SocialProofNotifications\";\nimport { monthsInSerbian } from \"../../../constants/monthsInSerbian.constants\";\nimport moment from \"moment\";\nimport { useTranslation } from \"react-i18next\";\n\nconst override = css`\n display: block;\n margin: 0 auto;\n border-color: #1568bf;\n`;\n\nconst EmployeeBenefits = ({\n user,\n employeeOnboarding,\n notifications,\n isLoading,\n employeeBenefitsSetInitialState,\n isSubscribedBenefitGroupsVisible,\n benefitGroupType,\n isModalOpen,\n appliedChosenCategoryIds,\n appliedCityIds,\n appliedRemoteFilter,\n appliedChosenPriceRange,\n chosenBenefitGroup,\n closeBenefitGroupModal,\n setSystemNotifications,\n setIsInitialStateSet,\n isFavoriteTab\n}) => {\n const dispatch = useDispatch();\n\n const { t } = useTranslation();\n\n const { currentlyPopularBenefit } = useSelector(\n state => state.employeeBenefitsPage.socialProof\n );\n\n const fetchMostPopularBenefitGroup = async () => {\n try {\n const durationOfCurrentBenefitGroupSubscriptions = 3;\n const benefitGroupId = undefined;\n\n const response = await apiService.get(\n `/benefit-group/social-proof/notification?duration=${durationOfCurrentBenefitGroupSubscriptions}${\n benefitGroupId ? `&benefitGroupId=${benefitGroupId}` : \"\"\n }`\n );\n\n if (response.data.items.length > 0) {\n dispatch(\n actionCreators.setCurrentlyPopularBenefit(response.data.items[0])\n );\n }\n } catch (error) {\n toast.error(t(\"failed_to_get_popular_benefit\"));\n }\n };\n\n const initialVoucherReimbursementData = {\n user_id: user.id,\n email: user.email,\n name: `${user.firstName} ${user.lastName}`,\n benefit_name: \"\",\n benefit_price: 0,\n created_at: new Date(),\n voucher_id: null,\n benefit_group_id: null\n };\n const showPrivacyPolicyModal = useRef(false);\n const isMounted = useRef(false);\n const [isSyncOpen, setIsSyncOpen] = useState(false);\n\n const [showPDFBill, setShowPDFBill] = useState(false);\n const [voucherReimbursementData, setVoucherReimbursementData] = useState(\n initialVoucherReimbursementData\n );\n\n const { usedBenefits } = useSelector(state => state.employeeBenefitsPage);\n const { firstName, vocativeName } = useSelector(state => state.app.user);\n\n const setUsedBenefits = payload => {\n dispatch(actionCreators.setUsedBenefitsRedux(payload));\n };\n\n const fetchBenefits = async () => {\n const response = await apiService.get(\"/favorites\");\n const listOfFavorite =\n response.data?.items.length > 0\n ? response.data.items.map(item => item.group)\n : [];\n\n dispatch(actionCreators.setListOfFavorites(listOfFavorite));\n };\n useEffect(() => {\n fetchBenefits();\n fetchMostPopularBenefitGroup();\n }, []);\n\n useDisableBodyScroll(isModalOpen);\n useDisableBodyScroll(isSyncOpen);\n\n const closeModal = () => {\n closeModalAnim();\n // delays change of state until animation is done\n setTimeout(() => {\n closeBenefitGroupModal();\n }, 350);\n\n const metadata = {\n user_id: user.id,\n email: user.email,\n name: `${user.firstName} ${user.lastName}`,\n benefit_group_name: chosenBenefitGroup.name,\n created_at: new Date()\n };\n window.Intercom(\"trackEvent\", \"subscribe-modal-closed\", metadata);\n };\n\n const fetchNotifications = async () => {\n const response = await userApiService.getUnreadNotifications();\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_notifications\")\n );\n }\n\n setSystemNotifications(response.notifications);\n };\n\n const fetchInitialData = async type => {\n const [benefitGroupsResponse, categoriesResponse] = await Promise.all([\n api.getBenefitGroups({\n chosenCategories: appliedChosenCategoryIds,\n page: 1,\n priceRange: appliedChosenPriceRange,\n chosenCities: appliedCityIds,\n remoteFilter: appliedRemoteFilter,\n type: type\n }),\n api.getCategoriesForEmployeePlatform()\n ]);\n\n if (benefitGroupsResponse.hasError) {\n return;\n }\n\n if (categoriesResponse.hasError) {\n return toast.error(\n categoriesResponse.errorMessage\n ? categoriesResponse.errorMessage\n : t(\"failed_to_get_categories\")\n );\n }\n\n if (isMounted.current) {\n employeeBenefitsSetInitialState(\n benefitGroupsResponse.groups,\n benefitGroupsResponse.count,\n benefitGroupsResponse.pages,\n 1,\n categoriesResponse.categories\n );\n setIsInitialStateSet(true);\n }\n\n // displays content after all state is set\n setTimeout(() => {\n const editEmployeeContentCard = document.getElementById(\n \"benefitGroupList\"\n );\n if (isMounted.current && editEmployeeContentCard) {\n editEmployeeContentCard.style.opacity = 1;\n }\n }, 100);\n };\n\n const fetchAlreadyUsedBenefits = async id => {\n const response = await api.getAlreadyUsedBenefits(id);\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_used_benefits\")\n );\n }\n\n setUsedBenefits(uniqueArrayOfObjects(response.benefits));\n };\n\n useEffect(() => {\n isMounted.current = true;\n fetchInitialData(benefitGroupType);\n\n fetchNotifications();\n return () => {\n fetchInitialData(benefitGroupType);\n isMounted.current = false;\n };\n }, []);\n\n useEffect(() => {\n if (isMounted.current && !employeeOnboarding) {\n // opens onboarding modal after 500 ms\n setTimeout(() => {\n openModalAnim();\n }, 500);\n }\n\n showPrivacyPolicyModal.current = true;\n if (\n showPrivacyPolicyModal.current &&\n user.authenticatedRole &&\n !user.hasAcceptedPrivacyPolicy\n ) {\n setTimeout(() => {\n openModalAnim();\n }, 500);\n }\n }, []);\n\n return (\n \n {\n setIsSyncOpen(true);\n setTimeout(() => {\n openModalAnim();\n }, 100);\n }}\n />\n

\n {t(\"choose_benefits_message\", {\n name: vocativeName !== \"\" ? vocativeName : firstName\n })}\n \n {\n monthsInSerbian[\n moment()\n .add(1, \"month\")\n .format(\"MMMM\")\n ]\n }\n \n

\n
\n {isLoading ? (\n \n \n
\n ) : (\n <>\n
\n \n
\n \n {isSubscribedBenefitGroupsVisible && !isFavoriteTab && (\n \n )}\n\n {!isSubscribedBenefitGroupsVisible && (\n \n )}\n {isFavoriteTab && }\n
\n
\n {!isSubscribedBenefitGroupsVisible && }\n
\n {isModalOpen && chosenBenefitGroup && (\n \n \n \n )}\n {showPDFBill && (\n setShowPDFBill(false)}\n disableClose={true}\n isCloseVisable={false}\n >\n \n \n )}\n {!employeeOnboarding && (\n \n \n \n )}\n {notifications?.length > 0 && (\n \n \n \n )}\n {isSyncOpen && (\n {\n closeModalAnim();\n setTimeout(() => {\n setIsSyncOpen(false);\n }, 350);\n }}\n >\n \n \n )}\n {showPrivacyPolicyModal.current &&\n user.authenticatedRole &&\n !user.hasAcceptedPrivacyPolicy && (\n \n \n \n )}\n \n )}\n
\n {currentlyPopularBenefit?.benefit_group_id && (\n \n )}\n \n );\n};\n\nconst mapStateToProps = state => {\n return {\n user: state.app.user,\n employeeOnboarding: state.app.user.employeeOnboarding,\n notifications: state.app.notifications,\n benefitGroupsCount:\n state.employeeBenefitsPage.benefitsBrowse.benefitGroupsCount,\n benefitGroupsPage:\n state.employeeBenefitsPage.benefitsBrowse.benefitGroupsPage,\n appliedChosenCategoryIds:\n state.employeeBenefitsPage.filters.appliedChosenCategoryIds,\n appliedCityIds: state.employeeBenefitsPage.filters.cityIds,\n appliedRemoteFilter: state.employeeBenefitsPage.filters.isRemote,\n appliedChosenPriceRange:\n state.employeeBenefitsPage.filters.appliedChosenPriceRange,\n isLoading: state.employeeBenefitsPage.pageFrontEndStates.isLoading,\n isSubscribedBenefitGroupsVisible:\n state.employeeBenefitsPage.pageFrontEndStates\n .isSubscribedBenefitGroupsVisible,\n isFavoriteTab: state.employeeBenefitsPage.pageFrontEndStates.isFavoriteTab,\n benefitGroupType:\n state.employeeBenefitsPage.pageFrontEndStates.benefitGroupType,\n isModalOpen: state.employeeBenefitsPage.pageFrontEndStates.isModalOpen,\n chosenBenefitGroup:\n state.employeeBenefitsPage.pageFrontEndStates.chosenBenefitGroup\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n employeeBenefitsSetInitialState: (\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage,\n categories,\n subscribedBenefitGroups\n ) =>\n dispatch(\n actionCreators.employeeBenefitsSetInitialState(\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage,\n categories,\n subscribedBenefitGroups\n )\n ),\n closeBenefitGroupModal: () =>\n dispatch(actionCreators.closeBenefitGroupModal()),\n setSystemNotifications: notifications =>\n dispatch(appActionCreators.setSystemNotifications(notifications)),\n setIsInitialStateSet: flag =>\n dispatch(actionCreators.setIsInitialStateSet(flag))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(EmployeeBenefits);\n","import EmployeeBenefits from \"./EmployeeBenefits\";\n\nexport default EmployeeBenefits;\n","import styled from \"styled-components\";\n\nconst ActivityStyles = styled.section`\n .activityContainer {\n width: calc(100% - 210px);\n margin-left: 210px;\n background: #f7f7f7;\n min-height: 100vh;\n overflow-x: hidden;\n }\n\n .activityContainerHistory {\n width: 100%;\n background: #f7f7f7;\n min-height: 100vh;\n overflow-y: auto;\n }\n\n .activityHistoryWrapper {\n margin: 0 auto;\n background: #ffffff;\n border-radius: 8px;\n padding: 30px;\n }\n\n .cardHeight.historyCard {\n transition: all 1s ease-in-out;\n opacity: 0;\n }\n .cardHeight.historyCard.historyCard--show {\n opacity: 1;\n }\n\n #logsCard {\n opacity: 0;\n transition: all 0.4s ease-in-out;\n }\n\n .activityContent {\n padding: 0 30px 30px 30px;\n }\n\n .cardHeight {\n min-height: calc(100vh - 180px);\n }\n\n .header {\n display: flex;\n justify-content: center;\n align-items: center;\n border-bottom: 1px solid #d8d8d8;\n }\n\n .filtersWrapper {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n border-bottom: 1px solid #d8d8d8;\n margin-bottom: 10px;\n gap: 50px;\n margin-bottom: 10px;\n padding-bottom: 20px;\n }\n\n .datePickerHolder {\n padding: 0 0 30px 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .datePickerInput {\n height: 32px;\n width: 194px;\n outline: none;\n text-align: center;\n font-size: 16px;\n font-weight: 600;\n border-color: 1px solid #d8d8d8;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n cursor: pointer;\n position: relative;\n\n &:hover {\n border: 1px solid #1568bf;\n z-index: 2;\n }\n }\n\n input[type=\"date\"]::-webkit-clear-button {\n display: none;\n -webkit-appearance: none;\n }\n\n input[type=\"date\"]::-webkit-inner-spin-button {\n -webkit-appearance: none;\n display: none;\n }\n\n input[type=\"date\"]::-webkit-calendar-picker-indicator {\n -webkit-appearance: none;\n position: absolute;\n left: 5px;\n width: 5px;\n color: rgba(0, 0, 0, 0);\n opacity: 0;\n cursor: pointer;\n }\n\n .previousDayButton {\n position: relative;\n height: 32px;\n margin-right: -1px;\n outline: none;\n border: 1px solid #d8d8d8;\n width: 115px;\n text-align: center;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #fff;\n cursor: pointer;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n background: #1568bf;\n\n &:hover {\n border: 1px solid #1568bf;\n z-index: 2;\n }\n }\n\n .nextDayButton {\n position: relative;\n height: 32px;\n margin-left: -1px;\n outline: none;\n border: 1px solid #d8d8d8;\n width: 115px;\n text-align: center;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #fff;\n cursor: pointer;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n background: #1568bf;\n\n &:hover {\n border: 1px solid #1568bf;\n z-index: 2;\n }\n\n &:disabled {\n color: #4b4b4b;\n background: transparent;\n pointer-events: none;\n cursor: not-allowed;\n opacity: 0.5;\n }\n }\n\n .content {\n padding: 0 0 0 135px;\n }\n\n @media screen and (max-width: 576px) {\n .content {\n padding: 0 0 0 80px;\n }\n }\n\n .listContainer {\n padding-left: 26px;\n min-height: 460px;\n border-left: 1px solid #d6d6d6;\n }\n\n .list {\n padding: 20px 0;\n }\n\n .item {\n margin-bottom: 20px;\n position: relative;\n display: flex;\n align-items: center;\n }\n\n .dotAndDateContainer {\n position: absolute;\n left: -79px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 60px;\n\n .time {\n font-size: 12px;\n color: #a8a8a8;\n }\n\n .outerDot {\n width: 15px;\n height: 15px;\n border-radius: 15px;\n background: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .innerDot {\n width: 7px;\n height: 7px;\n border-radius: 7px;\n background: #1568bf;\n }\n }\n\n .dotAndDateContainerHistory {\n position: absolute;\n left: -114px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 106px;\n\n .time {\n font-size: 12px;\n color: #493f3f;\n }\n\n .outerDot {\n width: 15px;\n height: 15px;\n border-radius: 15px;\n background: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .innerDot {\n width: 7px;\n height: 7px;\n border-radius: 7px;\n background: #1568bf;\n }\n }\n\n .logAndAvatar {\n display: flex;\n align-items: center;\n\n .log {\n margin-left: 5px;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n color: #4b4b4b;\n position: relative;\n }\n }\n\n .historyItemParagraph {\n background: #ffffff;\n position: absolute;\n top: -28px;\n left: 52px;\n width: 100px;\n border: 1px solid;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 4px;\n opacity: 0;\n }\n\n .historyItemParagraph--shown {\n opacity: 1;\n }\n\n .logAndAvatar--history {\n cursor: default;\n }\n\n .logAndAvatarHistoryPopup {\n opacity: 0;\n position: absolute;\n right: 0;\n top: -38px;\n display: flex;\n align-items: center;\n text-align: center;\n background: white;\n border-radius: 4px;\n padding: 4px 6px;\n -webkit-transition: opacity 0.5s ease-in-out;\n transition: opacity 0.5s ease-in-out;\n align-items: center;\n box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.5);\n\n .arrow {\n position: absolute;\n left: 7%;\n top: 26px;\n width: 0;\n height: 0;\n border-left: 7px solid transparent;\n border-right: 5px solid transparent;\n border-top: 9px solid #fff;\n }\n }\n\n .logAndAvatarHistoryPopupWrapper {\n cursor: pointer;\n position: relative;\n font-size: 12px;\n\n &:hover {\n .logAndAvatarHistoryPopup {\n opacity: 1;\n }\n }\n }\n\n .text {\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n margin-top: 30px;\n }\n`;\n\nexport default ActivityStyles;\n","import React from \"react\";\nimport ActivityLog from \"../../../assets/images/activity-log.png\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const EmptyHistory = () => {\n const { t } = useTranslation();\n return (\n \n \"History\n

{t(\"user_did_not_choose\")}

\n \n );\n};\n","import React from \"react\";\nimport moment from \"moment\";\nimport { transformTokensToRsd } from \"../../../utils/transformTokensToRsd\";\nimport { useTranslation } from \"react-i18next\";\n\nconst formatDate = dateString => {\n const dateObject = moment(dateString);\n\n const formattedDate = dateObject.format(\"DD.MM.YYYY\");\n const formattedTime = dateObject.format(\"HH:MM\");\n\n return `${formattedDate} ${formattedTime}`;\n};\n\nexport const ListOfHistoryItems = ({ openModal, showList, historyList }) => {\n const { t } = useTranslation();\n\n return (\n \n {historyList.map(historyItem => {\n return (\n
\n \n
\n
\n
\n

{formatDate(historyItem.startDate)}

\n
\n
\n
\n
\n openModal(historyItem.BenefitGroup)}\n >\n

\n {t(\"choosen_ben\")}:\n \n \n {`${historyItem.Provider?.name}`}\n \n \n \n

\n \n \n \n {\" \"}\n {historyItem.Provider?.name} -{\" \"}\n {historyItem.Benefit.title || \"\"}\n \n \n \n ,\n \n {\" \"}\n {`${t(\"price_in\")} ${\n localStorage.getItem(\"isValueInRsd\")\n ? t(\"dinars\")\n : t(\"tokens\")\n }`}{\" \"}\n \n {transformTokensToRsd(historyItem.benefitPrice || 0)}\n \n ,\n {\" \"}\n {t(\"Quantity\")}:{\" \"}\n \n {historyItem.quantity || 0}\n \n

\n
\n
\n
\n
\n \n );\n })}\n \n );\n};\n","import React from \"react\";\nimport { override } from \"../../../services/loadingOverride.styles\";\nimport { BeatLoader } from \"react-spinners\";\n\nexport const LoadingHistoryItems = ({ isLoading }) => {\n return (\n \n \n \n );\n};\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { Header, openModalAnim } from \"../../components\";\nimport { useHistory } from \"react-router-dom/cjs/react-router-dom.min\";\nimport { getUserHistory } from \"../../services/api/admin/users.service\";\nimport ActivityStyles from \"../SuperAdminPages/Activity/ActivityStyles\";\nimport { EmptyHistory } from \"./HistoryList/EmptyHistory\";\nimport { ListOfHistoryItems } from \"./HistoryList/ListOfHistoryItems\";\nimport { LoadingHistoryItems } from \"./HistoryList/LoadingHistoryItems\";\nimport { toast } from \"react-toastify\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport {\n employeeBenefitsSetInitialState,\n openBenefitGroupModal,\n setBenefitGroupType,\n setIsInitialStateSet,\n setIsSubscribedBenefitGroupsVisible,\n setUsedBenefitsRedux\n} from \"../../actions/employee/employeeBenefits.actions\";\nimport {\n getAlreadyUsedBenefits,\n getBenefitGroups,\n getCategoriesForEmployeePlatform\n} from \"../../services/api/employee/employeeBenefits.services\";\nimport { uniqueArrayOfObjects } from \"../../services/general.utils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst UserHistory = () => {\n const { t } = useTranslation();\n const history = useHistory();\n const dispatch = useDispatch();\n const [historyList, setHistoryList] = useState([]);\n const [isLoading, setIsLoading] = useState(false);\n const [showList, setShowList] = useState(false);\n const userId = useSelector(state => state.app.user.id);\n\n const {\n appliedChosenCategoryIds,\n appliedChosenPriceRange,\n appliedCityIds,\n appliedRemoteFilter\n } = useSelector(state => state.employeeBenefitsPage.filters);\n\n const fetchUserHistory = async () => {\n if (!userId) return;\n try {\n setIsLoading(true);\n const response = await getUserHistory(userId);\n setHistoryList(response.data.items);\n } catch (error) {\n toast.error(t(\"failed_to_get_user_history\"));\n } finally {\n setIsLoading(false);\n setShowList(true);\n }\n };\n\n useEffect(() => {\n fetchUserHistory();\n }, [userId]);\n\n const fetchBenefits = async type => {\n const [benefitGroupsResponse, categoriesResponse] = await Promise.all([\n getBenefitGroups({\n chosenCategories: appliedChosenCategoryIds,\n page: 1,\n priceRange: appliedChosenPriceRange,\n chosenCities: appliedCityIds,\n remoteFilter: appliedRemoteFilter,\n type: type\n }),\n getCategoriesForEmployeePlatform()\n ]);\n\n if (benefitGroupsResponse.hasError) {\n return toast.error(\n benefitGroupsResponse.errorMessage\n ? benefitGroupsResponse.errorMessage\n : t(\"failed_to_get_benefit_groups\")\n );\n }\n\n if (categoriesResponse.hasError) {\n return toast.error(\n categoriesResponse.errorMessage\n ? categoriesResponse.errorMessage\n : t(\"failed_to_get_categories\")\n );\n }\n\n dispatch(\n employeeBenefitsSetInitialState(\n benefitGroupsResponse.groups,\n benefitGroupsResponse.count,\n benefitGroupsResponse.pages,\n 1,\n categoriesResponse.categories\n )\n );\n dispatch(setIsInitialStateSet(true));\n\n setTimeout(() => {\n const editEmployeeContentCard = document.getElementById(\n \"benefitGroupList\"\n );\n editEmployeeContentCard.style.opacity = 1;\n }, 100);\n };\n\n const navigateToProperTab = type => {\n history.push(\"/\");\n dispatch(setIsSubscribedBenefitGroupsVisible(false));\n dispatch(setBenefitGroupType(type));\n };\n\n const setUsedBenefits = payload => {\n dispatch(setUsedBenefitsRedux(payload));\n };\n\n const fetchAlreadyUsedBenefits = async id => {\n try {\n const response = await getAlreadyUsedBenefits(id);\n setUsedBenefits(uniqueArrayOfObjects(response.benefits));\n } catch (error) {\n toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_used_benefits\")\n );\n }\n };\n\n const openModalFunctionality = () => {\n setTimeout(() => {\n openModalAnim();\n }, 100);\n };\n\n const openModal = useCallback(async benefitGroup => {\n navigateToProperTab(benefitGroup.type);\n\n fetchAlreadyUsedBenefits(benefitGroup.id);\n\n dispatch(openBenefitGroupModal(benefitGroup));\n\n fetchBenefits(benefitGroup.type);\n\n openModalFunctionality();\n }, []);\n\n const ShownContent = () => {\n if (isLoading) {\n return ;\n }\n if (historyList.length > 0) {\n return (\n \n );\n }\n return ;\n };\n\n return (\n \n
\n
\n
\n
{ShownContent()}
\n
\n
\n
\n );\n};\n\nexport default UserHistory;\n","import styled from 'styled-components'\n\nconst UsedTokensStyles = styled.div`\nmargin: 0 20px 20px 0;\norder: 5;\n\n .apexcharts-donut-slice-1:hover {\n\t /* fill: '#4880ff'; */\n\t opacity: 1\n }\n\n .apexcharts-donut-slice-2:hover {\n\topacity: 1;\n }\n\n .graphContainer {\n\t display: flex;\n\t flex-direction: column;\n\t align-items: center;\n\t justify-content: center;\n\t width: 170px;\n }\n\n @media screen and (max-width: 1626px) {\n\t\torder: 6;\n\t}\n \n`\n\nexport default UsedTokensStyles\n","export const bugetSpentConfig = {\n\tseries: [0],\n\toptions: {\n\t\tchart: {\n\t\t\tanimations: {\n\t\t\t\tenabled: true,\n\t\t\t\teasing: 'easeinout',\n\t\t\t\tspeed: 800,\n\t\t\t\tanimateGradually: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tdelay: 1500\n\t\t\t\t},\n\t\t\t\tdynamicAnimation: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tspeed: 800\n\t\t\t\t}\n\t\t\t},\n\t\t\theight: 350,\n\t\t\ttype: 'radialBar',\n\t\t\ttoolbar: {\n\t\t\t\tshow: false\n\t\t\t}\n\t\t},\n\t\tplotOptions: {\n\t\t\tradialBar: {\n\t\t\t\tstartAngle: 0,\n\t\t\t\tendAngle: -360,\n\t\t\t\thollow: {\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tsize: '70%',\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\timage: undefined,\n\t\t\t\t\timageOffsetX: 0,\n\t\t\t\t\timageOffsetY: 0,\n\t\t\t\t\tposition: 'front',\n\t\t\t\t\tdropShadow: {\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\ttop: 3,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\tblur: 4,\n\t\t\t\t\t\topacity: 0.24\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrack: {\n\t\t\t\t\tbackground: '#d8d8d8',\n\t\t\t\t\tstrokeWidth: '75%',\n\t\t\t\t\tmargin: 0, // margin is in pixels\n\t\t\t\t\tdropShadow: {\n\t\t\t\t\t\tenabled: false,\n\t\t\t\t\t\ttop: -3,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\tblur: 4,\n\t\t\t\t\t\topacity: 0.5\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tdataLabels: {\n\t\t\t\t\tshow: true,\n\t\t\t\t\tname: {\n\t\t\t\t\t\toffsetY: -10,\n\t\t\t\t\t\tshow: false,\n\t\t\t\t\t\tcolor: '#888',\n\t\t\t\t\t\tfontSize: '17px'\n\t\t\t\t\t},\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tformatter(val) {\n\t\t\t\t\t\t\treturn `${parseInt(val, 0)} %`\n\t\t\t\t\t\t},\n\t\t\t\t\t\toffsetY: 7,\n\t\t\t\t\t\tcolor: '#111',\n\t\t\t\t\t\tfontSize: '18px',\n\t\t\t\t\t\tshow: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tfill: {\n\t\t\ttype: 'gradient',\n\t\t\tgradient: {\n\t\t\t\tshade: 'dark',\n\t\t\t\ttype: 'horizontal',\n\t\t\t\tshadeIntensity: 0.5,\n\t\t\t\tgradientToColors: ['#1e3c72'],\n\t\t\t\tinverseColors: true,\n\t\t\t\topacityFrom: 1,\n\t\t\t\topacityTo: 1,\n\t\t\t\tstops: [0, 100]\n\t\t\t}\n\t\t},\n\t\tstroke: {\n\t\t\tlineCap: 'round'\n\t\t},\n\t\tlabels: ['']\n\t}\n}\n","export const budgetLeftConfig = {\n\tseries: [0],\n\toptions: {\n\t\tchart: {\n\t\t\tanimations: {\n\t\t\t\tenabled: true,\n\t\t\t\teasing: 'easeinout',\n\t\t\t\tspeed: 800,\n\t\t\t\tanimateGradually: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tdelay: 1500\n\t\t\t\t},\n\t\t\t\tdynamicAnimation: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tspeed: 800\n\t\t\t\t}\n\t\t\t},\n\t\t\theight: 350,\n\t\t\ttype: 'radialBar',\n\t\t\ttoolbar: {\n\t\t\t\tshow: false\n\t\t\t}\n\t\t},\n\t\tcolors: ['#ff5660'],\n\t\tplotOptions: {\n\t\t\tradialBar: {\n\t\t\t\tstartAngle: 0,\n\t\t\t\tendAngle: -360,\n\t\t\t\thollow: {\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tsize: '70%',\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\timage: undefined,\n\t\t\t\t\timageOffsetX: 0,\n\t\t\t\t\timageOffsetY: 0,\n\t\t\t\t\tposition: 'front',\n\t\t\t\t\tdropShadow: {\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\ttop: 3,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\tblur: 4,\n\t\t\t\t\t\topacity: 0.24\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrack: {\n\t\t\t\t\tbackground: '#d8d8d8',\n\t\t\t\t\tstrokeWidth: '75%',\n\t\t\t\t\tmargin: 0, // margin is in pixels\n\t\t\t\t\tdropShadow: {\n\t\t\t\t\t\tenabled: false,\n\t\t\t\t\t\ttop: -3,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\tblur: 4,\n\t\t\t\t\t\topacity: 0.5\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tdataLabels: {\n\t\t\t\t\tshow: true,\n\t\t\t\t\tname: {\n\t\t\t\t\t\toffsetY: -10,\n\t\t\t\t\t\tshow: false,\n\t\t\t\t\t\tcolor: '#888',\n\t\t\t\t\t\tfontSize: '17px'\n\t\t\t\t\t},\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tformatter(val) {\n\t\t\t\t\t\t\treturn `${parseInt(val, 0)} %`\n\t\t\t\t\t\t},\n\t\t\t\t\t\toffsetY: 7,\n\t\t\t\t\t\tcolor: '#111',\n\t\t\t\t\t\tfontSize: '18px',\n\t\t\t\t\t\tshow: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tstroke: {\n\t\t\tlineCap: 'round'\n\t\t},\n\t\tlabels: ['']\n\t}\n}\n","export const formatDateForSearch = date => {\n\tconst year = date.getFullYear()\n\tconst month\t= (`0${date.getMonth() + 1}`).slice(-2)\n\treturn `${month}/${year}`\n}\n","import { toast } from \"react-toastify\";\nimport supabaseClient from \"./supabaseClient\";\n\nasync function downloadAllFiles(folderName, setIsRefundDownloading) {\n let offset = 0;\n let allFiles = [];\n let hasMore = true;\n\n const toastId = toast.info(\n \"Images are downloading please be patient, it can take up to 15-20 minutes depending on file size.\",\n {\n autoClose: false,\n position: \"top-center\"\n }\n );\n\n while (hasMore) {\n const { data: files, error } = await supabaseClient.storage\n .from(\"refund-upload\")\n .list(folderName, {\n limit: 500,\n offset: offset\n });\n\n if (error) {\n setTimeout(() => {\n toast.update(toastId, {\n type: toast.TYPE.ERROR,\n render: \"Error with loading images.\",\n autoClose: 5000\n });\n setIsRefundDownloading(false);\n }, 5000);\n\n console.error(\"Error with loading images.\", error);\n return null;\n }\n\n hasMore = !!files.length;\n\n allFiles = allFiles.concat(files);\n offset += files.length;\n }\n\n if (allFiles.length === 0) {\n setTimeout(() => {\n toast.update(toastId, {\n type: toast.TYPE.INFO,\n render: \"No images uploaded.\",\n autoClose: 5000\n });\n setIsRefundDownloading(false);\n }, 5000);\n return null;\n }\n\n return { allFiles, toastId };\n}\n\nexport default downloadAllFiles;\n","import supabaseClient from \"./supabaseClient\";\n\nfunction generatePublicUrlOfImage(imageName, folderName) {\n const filePath = `${folderName}/${imageName}`;\n return supabaseClient.storage.from(\"file_upload\").getPublicUrl(filePath);\n}\n\nexport default generatePublicUrlOfImage;\n","import generatePublicUrlOfImage from \"./generatePublicUrlOfImage\";\n\nfunction generatePublicURls({ listOfImages, toastId, folderName }) {\n return {\n listOfImages: listOfImages.map(image => {\n return {\n url: generatePublicUrlOfImage(image.name, folderName).data.publicUrl,\n name: image.name\n };\n }),\n toastId\n };\n}\n\nexport default generatePublicURls;\n","const chunk = (input, size) => {\n return input.reduce((arr, item, idx) => {\n return idx % size === 0\n ? [...arr, [item]]\n : [...arr.slice(0, -1), [...arr.slice(-1)[0], item]];\n }, []);\n};\n\nexport default chunk;\n","function throttle(cb, delay) {\n let wait = false;\n\n return (...args) => {\n if (wait) {\n return;\n }\n\n cb(...args);\n wait = true;\n setTimeout(() => {\n wait = false;\n }, delay);\n };\n}\n\nexport default throttle;\n","import { renameSupabaseImageURL } from \"./renameSupabaseImageURL\";\nimport supabaseClient from \"./supabaseClient\";\n\nasync function processDelegation(\n zip,\n item,\n index,\n delay,\n totalImages,\n onProgress,\n downloadFolder,\n setIsRefundDownloading\n) {\n const folder = zip.folder(downloadFolder);\n\n await new Promise(resolve => setTimeout(resolve, delay));\n\n const prefix = `https://gazfduoumclmczxravnt.supabase.co/storage/v1/object/public/file_upload/`;\n\n const renamedImage = item.url.replace(prefix, \"\");\n\n const { data, error } = await supabaseClient.storage\n .from(\"refund-upload\")\n .download(renamedImage);\n\n if (error) {\n console.error(error, \"download error\");\n setIsRefundDownloading(false);\n } else {\n folder.file(item.name, data, { binary: true });\n }\n\n // Calculate and print the progress percentage across all items\n const progress = ((index + 1) / totalImages) * 100;\n onProgress(progress);\n}\n\nexport default processDelegation;\n","import JSZip from \"jszip\";\nimport processDelegation from \"./processDelegation\";\n\nasync function processTransform(\n items,\n pauseTime,\n onProgress,\n downloadFolder,\n setIsRefundDownloading\n) {\n const totalImages = items.length;\n\n const zip = new JSZip();\n\n for (let index = 0; index < totalImages; index += 1) {\n // Call processDelegation for each item\n await processDelegation(\n zip,\n items[index],\n index,\n pauseTime,\n totalImages,\n onProgress,\n downloadFolder,\n setIsRefundDownloading\n );\n }\n\n const zipBlob = await zip.generateAsync({ type: \"blob\" });\n\n return zipBlob;\n}\n\nexport default processTransform;\n","import { toast } from \"react-toastify\";\n\nasync function downloadZip(props) {\n const {\n zipBlob: blob,\n zipFileName: filename,\n zipNumFile: index,\n idOfToast: toastId,\n setIsRefundDownloading,\n listOfImages\n } = props;\n\n if (index === listOfImages.length) {\n const toastOptions = {\n type: toast.TYPE.INFO,\n autoClose: 5000,\n type: toast.TYPE.SUCCESS,\n render: \"All refund file upload parts are downloaded\"\n };\n toast.update(toastId, toastOptions);\n setIsRefundDownloading(false);\n }\n\n const blobUrl = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = blobUrl;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(blobUrl);\n}\n\nexport default downloadZip;\n","const regulateNumberOfDownloads = listOfTransformedImages => {\n if (listOfTransformedImages.length <= 1000) return 1;\n return Math.ceil(listOfTransformedImages.length / 1000);\n};\n\nexport default regulateNumberOfDownloads;\n","import chunk from \"../helpers/chunk\";\nimport { toast } from \"react-toastify\";\nimport throttle from \"../helpers/throttle\";\nimport processTransform from \"./processTransform\";\nimport downloadZip from \"./downloadZip\";\nimport regulateNumberOfDownloads from \"./regulateNumberOfDownloads\";\n\nasync function downloadImages(props) {\n const {\n listOfImages: listOfTransformedImages,\n idOfToast,\n downloadFolder,\n setIsRefundDownloading,\n setDownloadPercentage\n } = props;\n\n const totalImagesNum = listOfTransformedImages.length;\n const numOfDownloads = regulateNumberOfDownloads(listOfTransformedImages);\n const CHUNK_SIZE = Math.ceil(totalImagesNum / numOfDownloads);\n const listOfImages = chunk(listOfTransformedImages, CHUNK_SIZE);\n\n let totalProcessedItems = 0;\n\n const throttledFunction = throttle(progress => {\n setDownloadPercentage(progress);\n }, 500);\n\n const onProgress = () => {\n totalProcessedItems += 1;\n const overallProgress = (totalProcessedItems / totalImagesNum) * 100;\n throttledFunction(overallProgress.toFixed(2));\n };\n\n for (const [index, item] of listOfImages.entries()) {\n toast.update(idOfToast, {\n type: toast.TYPE.INFO,\n render: `Downloading part ${index + 1}/${listOfImages.length}`\n });\n\n const zipBlob = await processTransform(\n item,\n 1,\n onProgress,\n downloadFolder,\n setIsRefundDownloading\n );\n\n const zipFileName = `refund_download_part_${index + 1}.zip`;\n downloadZip({\n zipBlob,\n zipFileName,\n zipNumFile: index + 1,\n idOfToast,\n setIsRefundDownloading,\n listOfImages\n });\n }\n}\n\nexport default downloadImages;\n","import { apiService } from \"../api.service\";\nimport {\n Budget,\n TotalBudget,\n BudgetSpending,\n CategoryBudget,\n CompanyUsage,\n SyncedEmployees,\n Combination\n} from \"../../../models/domain\";\nimport { createRefundStatisticsDownloadDate } from \"../../../utils/createRefundStatisticsDownloadDate\";\nimport downloadAllFiles from \"../../../utils/supabaseUtils/downloadAllFiles\";\nimport generatePublicURls from \"../../../utils/supabaseUtils/generatePublicURls\";\nimport downloadImages from \"../../../utils/supabaseUtils/downloadImages\";\n\nexport const fetchBudgetPerTiers = async searchDateString => {\n const response = await apiService.get(\n `/dashboard/graph/budget-via-tiers?date=${searchDateString}`\n );\n\n if (response.hasError) return response;\n\n return new Budget(response.data);\n};\n\nexport const fetchTotalBudget = async searchDateString => {\n const response = await apiService.get(\n `/dashboard/graph/total-budget?date=${searchDateString}`\n );\n\n if (response.hasError) return response;\n\n return new TotalBudget(response.data);\n};\n\nexport const fetchBudgetSpending = async searchDateString => {\n const response = await apiService.get(\n `/dashboard/graph/budget-utilization?date=${searchDateString}`\n );\n\n if (response.hasError) return response;\n\n return new BudgetSpending(response.data);\n};\n\nexport const fetchBudgetPerCategories = async searchDateString => {\n const response = await apiService.get(\n `/dashboard/graph/budget-via-category?date=${searchDateString}`\n );\n\n if (response.hasError) return response;\n\n return new CategoryBudget(response.data);\n};\n\nexport const fetchCompanyUsage = async () => {\n const response = await apiService.get(\"/dashboard/widget/company/stats\");\n\n if (response.hasError) return response;\n\n return new CompanyUsage(response.data);\n};\n\nexport const getStatistics = async (searchDateString, reportType) => {\n const response = await apiService.get(\n `/dashboard/hr/report/statistics?date=${searchDateString}&report_type=${reportType}`\n );\n\n return response;\n};\n\nexport const getRefundStatistics = async (\n reportType,\n companyId,\n setIsRefundDownloading,\n setDownloadPercentage\n) => {\n const downloadDate = createRefundStatisticsDownloadDate(reportType);\n\n const downloadFolder = `${companyId}_${downloadDate}`;\n\n const downloadResponse = await downloadAllFiles(\n downloadFolder,\n setIsRefundDownloading\n );\n\n if (!downloadResponse?.allFiles) return;\n\n const { allFiles, toastId } = downloadResponse;\n\n const { listOfImages, toastId: idOfToast } = generatePublicURls({\n listOfImages: allFiles,\n folderName: downloadFolder,\n toastId\n });\n\n downloadImages({\n listOfImages,\n idOfToast,\n downloadFolder,\n setIsRefundDownloading,\n setDownloadPercentage\n });\n};\n\nexport const fetchSyncedEmployees = async () => {\n const response = await apiService.get(\"/dashboard/widget/sync/benefits\");\n\n if (response.hasError) return response;\n\n return new SyncedEmployees(response.data);\n};\n\nexport const fetchTopBenefitsData = async searchDateString => {\n const response = await apiService.get(\n `/dashboard/graph/top-benefits?date=${searchDateString}`\n );\n\n if (response.hasError) return response;\n\n return new Budget(response.data);\n};\n\nexport const fetchUniqueUsedCombinations = async () => {\n const response = await apiService.get(\n \"/dashboard/widget/unique/used/combination\"\n );\n\n if (response.hasError) return response;\n\n return new Combination(response.data);\n};\n\nexport const fetchUniqueCombinationsPerTiers = async () => {\n const response = await apiService.get(\"/dashboard/widget/unique/combination\");\n\n if (response.hasError) return response;\n\n return new Combination(response.data);\n};\n","import moment from \"moment\";\n\nexport const createRefundStatisticsDownloadDate = type => {\n const currentDate = moment(new Date());\n const month = currentDate.add(type - 1, \"months\");\n\n return `${month.format(\"MM\")}_${currentDate.format(\"YYYY\")}`;\n};\n","import React, { useEffect, useState, useRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport DatePicker from \"react-datepicker\";\nimport ReactApexChart from \"react-apexcharts\";\n// components\nimport { Card } from \"../../../../components\";\n// styles\nimport UsedTokensStyles from \"./UsedTokensStyles\";\n// config\nimport { bugetSpentConfig } from \"./spentTokens.config\";\nimport { budgetLeftConfig } from \"./budgetLeft.config\";\n// services\nimport { formatDateForSearch } from \"../dashboad.services\";\nimport * as dashboardService from \"../../../../services/api/hr/dashboard.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst UsedTokens = ({ usedTokensLoading, setUsedTokensLoading }) => {\n const { t } = useTranslation();\n\n const [graphs, setGraphsData] = useState({\n bugetSpentConfig,\n budgetLeftConfig\n });\n const [date, setDate] = useState(new Date());\n const [searchDateString, setSearchDateString] = useState(\n formatDateForSearch(new Date())\n );\n const isMounted = useRef(false);\n\n const handleDateChange = chosenDate => {\n setDate(chosenDate);\n setSearchDateString(formatDateForSearch(chosenDate));\n };\n\n const fetchData = async () => {\n const [totalBudegetRes, spentBudgetRes] = await Promise.all([\n dashboardService.fetchTotalBudget(searchDateString),\n dashboardService.fetchBudgetSpending(searchDateString)\n ]);\n if (isMounted.current && totalBudegetRes && spentBudgetRes) {\n setUsedTokensLoading(false);\n }\n\n let leftBudgetValue = 0;\n let spentBudgetValue = 0;\n\n if (isMounted.current && totalBudegetRes && spentBudgetRes) {\n leftBudgetValue = Math.round(\n ((parseInt(totalBudegetRes.budget, 0) -\n parseInt(spentBudgetRes.actualSpentBudget, 0)) *\n 100) /\n parseInt(totalBudegetRes.budget, 0)\n );\n\n spentBudgetValue = Math.round(\n (parseInt(spentBudgetRes.actualSpentBudget, 0) * 100) /\n parseInt(totalBudegetRes.budget, 0)\n );\n }\n\n if (totalBudegetRes && spentBudgetRes) {\n if (isMounted.current) {\n if (!isNaN(spentBudgetValue) && !isNaN(leftBudgetValue)) {\n setGraphsData({\n ...graphs,\n bugetSpentConfig: {\n ...graphs.bugetSpentConfig,\n series: [spentBudgetValue]\n },\n budgetLeftConfig: {\n ...graphs.budgetLeftConfig,\n series: [leftBudgetValue]\n }\n });\n } else {\n setGraphsData({\n ...graphs,\n bugetSpentConfig: {\n ...graphs.bugetSpentConfig,\n series: [0]\n },\n budgetLeftConfig: {\n ...graphs.budgetLeftConfig,\n series: [0]\n }\n });\n }\n }\n }\n };\n\n useEffect(() => {\n isMounted.current = true;\n fetchData();\n return () => {\n isMounted.current = false;\n };\n }, [date]);\n\n useEffect(() => {\n if (usedTokensLoading === false) {\n const datePicker = document.getElementById(\"datePicker\");\n if (datePicker) {\n datePicker.setAttribute(\"readOnly\", true);\n }\n }\n }, [usedTokensLoading]);\n\n return (\n \n \n
\n handleDateChange(chosenDate)}\n value={date}\n maxDate={new Date()}\n />\n

{t(\"tokens_used\")}

\n
\n\n \n
\n \n

{t(\"spent_budget\")}

\n
\n
\n \n

{t(\"budget_unused\")}

\n
\n \n \n
\n );\n};\n\nUsedTokens.propTypes = {\n usedTokensLoading: PropTypes.bool,\n setUsedTokensLoading: PropTypes.func\n};\n\nexport default UsedTokens;\n","export const totalBudgetConfig = {\n series: [0, 0],\n options: {\n chart: { type: \"donut\" },\n dataLabels: {\n enabled: false\n },\n colors: [\"#4880ff\", \"#ffc400\"],\n fill: {\n type: \"gradient\"\n },\n legend: {\n show: false,\n position: \"bottom\",\n horizontalAlign: \"left\"\n },\n tooltip: {\n y: {\n formatter(val) {\n return `${val} currency`;\n }\n }\n },\n labels: [\"Chosen month\", \"Previous month\"]\n }\n};\n","import styled from \"styled-components\";\n\nconst TotalBudgetStyles = styled.div`\n margin-right: 20px;\n order: 2;\n\n .chartAndMessageContainer {\n height: 299px;\n width: 250px;\n position: relative;\n z-index: 0;\n }\n\n .messageContainer {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n background: rgba(255, 255, 255, 0.8);\n }\n\n .text {\n font-size: 12px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n text-transform: uppercase;\n }\n\n .legend {\n margin-top: 20px;\n }\n\n .item {\n display: flex;\n align-items: center;\n margin-bottom: 10px;\n\n .dot {\n min-width: 7px;\n min-height: 7px;\n border-radius: 3.5px;\n margin-right: 10px;\n }\n }\n`;\n\nexport default TotalBudgetStyles;\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\nimport ReactApexChart from \"react-apexcharts\";\nimport DatePicker from \"react-datepicker\";\n// components\nimport { Card } from \"../../../../components\";\n// config\nimport { totalBudgetConfig } from \"./totalBudget.config\";\n// services\nimport { formatDateForSearch } from \"../dashboad.services\";\nimport * as dashboardService from \"../../../../services/api/hr/dashboard.service\";\n// styles\nimport TotalBudgetStyles from \"./TotalBudgetStyles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst TotalBudget = ({ totalBudgetLoading, setTotalBudgetLoading }) => {\n const { t } = useTranslation();\n const [totalBudget, setTotalBudget] = useState(totalBudgetConfig);\n const [errorMessage, setErrorMessage] = useState(undefined);\n const [date, setDate] = useState(new Date());\n const [searchDateString, setSearchDateString] = useState(\n formatDateForSearch(new Date())\n );\n const isMounted = useRef(false);\n\n const handleDateChange = chosenDate => {\n setDate(chosenDate);\n setSearchDateString(formatDateForSearch(chosenDate));\n };\n\n const fetchData = async () => {\n const response = await dashboardService.fetchTotalBudget(searchDateString);\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_total_budgets\")\n );\n }\n\n if (isMounted.current) {\n setTotalBudgetLoading(false);\n if (\n errorMessage !== undefined &&\n (response.budgetLastMonth !== 0 || response.budget !== 0)\n ) {\n setErrorMessage(undefined);\n } else if (response.budget === 0 && response.budgetLastMonth === 0) {\n setErrorMessage(\"No data to compare\");\n }\n setTotalBudget({\n ...totalBudget,\n series: [response.budget, response.budgetLastMonth]\n });\n }\n };\n useEffect(() => {\n isMounted.current = true;\n fetchData();\n return () => {\n isMounted.current = false;\n };\n }, [date]);\n\n useEffect(() => {\n if (totalBudgetLoading === false) {\n const datePicker = document.getElementById(\"datePicker2\");\n if (datePicker) {\n datePicker.setAttribute(\"readOnly\", true);\n }\n }\n }, [totalBudgetLoading]);\n\n return (\n \n \n
\n handleDateChange(chosenDate)}\n value={date}\n maxDate={new Date()}\n />\n

{t(\"total_budget\")}

\n
\n
\n {errorMessage && (\n
\n

{errorMessage}

\n
\n )}\n \n
\n
\n
\n

\n {t(\"chosen_month\")} - {totalBudget.series[0]} currency\n

\n
\n
\n
\n

\n {t(\"previous_month\")} - {totalBudget.series[1]} currency\n

\n
\n
\n
\n \n \n );\n};\n\nTotalBudget.propTypes = {\n totalBudgetLoading: PropTypes.bool,\n setTotalBudgetLoading: PropTypes.func\n};\n\nexport default TotalBudget;\n","import TotalBudget from './TotalBudget'\n\nexport default TotalBudget\n","import styled from \"styled-components\";\n\nconst CategoryBudgetStyles = styled.div`\n margin: 0 20px 20px 0;\n order: 4;\n\n .chartAndMessageContainer {\n margin-top: 30px;\n height: 285px;\n font-size: 14px;\n width: 580px;\n position: relative;\n z-index: 0;\n }\n\n .apexcharts-canvas {\n z-index: 1;\n }\n\n .apexcharts-tooltip-y-group {\n display: flex;\n align-items: center;\n }\n\n .apexcharts-tooltip-z-group {\n display: flex;\n align-items: center;\n }\n\n .apexcharts-tooltip-text-value,\n .apexcharts-tooltip-text-z-value {\n display: flex !important;\n align-items: center;\n }\n\n .messageContainer {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n background: rgba(255, 255, 255, 0.8);\n z-index: 2;\n }\n\n .text {\n font-size: 12px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n text-transform: uppercase;\n }\n`;\n\nexport default CategoryBudgetStyles;\n","const isInSerbian = localStorage.getItem(\"locales\") === \"rs\";\n\nexport const categoryBudgetConfig = {\n series: [\n {\n name: isInSerbian ? \"Budžet za odabrani mesec\" : \"Chosen month budget\",\n data: []\n },\n {\n name: isInSerbian ? \"Budžet za prethodni mesec\" : \"Previous month budget\",\n data: []\n }\n ],\n options: {\n chart: {\n type: \"bar\",\n height: 430,\n toolbar: {\n show: false,\n tools: {\n download: true,\n selection: false,\n zoom: false,\n zoomin: false,\n zoomout: false,\n pan: false,\n reset: false\n }\n }\n },\n colors: [\"#3361b5\", \"#24ccb8\"],\n tooltip: {\n y: {\n // formatter(val) {\n // \treturn `${val} ${renderToString()}`\n // }\n formatter(val) {\n return `${val} currency`;\n }\n }\n },\n plotOptions: {\n bar: {\n horizontal: true,\n dataLabels: {\n position: \"top\"\n }\n }\n },\n dataLabels: {\n enabled: false,\n offsetX: 0,\n style: {\n fontSize: \"12px\",\n colors: [\"#fff\"]\n }\n },\n stroke: {\n show: true,\n width: 1,\n colors: [\"#fff\"]\n },\n legend: {\n show: true,\n position: \"bottom\",\n horizontalAlign: \"left\"\n },\n xaxis: {\n categories: []\n }\n }\n};\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\nimport ReactApexChart from \"react-apexcharts\";\nimport DatePicker from \"react-datepicker\";\n// componenets\nimport { Card } from \"../../../../components\";\n// styles\nimport CategoryBudgetStyles from \"./CategoryBudgetStyles\";\n// config\nimport { categoryBudgetConfig } from \"./categoryBudget.config\";\n// services\nimport * as dashboardService from \"../../../../services/api/hr/dashboard.service\";\nimport { formatDateForSearch } from \"../dashboad.services\";\nimport { useTranslation } from \"react-i18next\";\n\nconst CategoryBudget = ({\n categoryBudgetLoading,\n setCategoryBudgetLoading\n}) => {\n const isInSerbian = localStorage.getItem(\"locales\") === \"rs\";\n\n const { t } = useTranslation();\n const [graphData, setGraphData] = useState(categoryBudgetConfig);\n const [errorMessage, setErrorMessage] = useState(undefined);\n const [date, setDate] = useState(new Date());\n const [searchDateString, setSearchDateString] = useState(\n formatDateForSearch(new Date())\n );\n const isMounted = useRef(true);\n\n const handleDateChange = chosenDate => {\n setDate(chosenDate);\n setSearchDateString(formatDateForSearch(chosenDate));\n };\n\n const fetchData = async () => {\n const response = await dashboardService.fetchBudgetPerCategories(\n searchDateString\n );\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_budget_per_categories\")\n );\n }\n\n if (isMounted.current) {\n setCategoryBudgetLoading(false);\n }\n\n let chosenCategoriesNames = [];\n let chosenMonthBudget = {\n name: isInSerbian ? \"Budžet za odabrani mesec\" : \"Chosen month budget\",\n data: []\n };\n let previousMonthBudget = {\n name: isInSerbian ? \"Budžet za prethodni mesec\" : \"Previous month budget\",\n data: []\n };\n\n if (\n isMounted.current &&\n response &&\n response.actualCategoryBudget &&\n response.lastCategoryBudget\n ) {\n if (\n response.actualCategoryBudget.length ===\n response.lastCategoryBudget.length\n ) {\n response.actualCategoryBudget.forEach(item => {\n chosenCategoriesNames.push(item.name);\n chosenMonthBudget.data.push(item.spentBudget);\n });\n response.lastCategoryBudget.forEach(item => {\n previousMonthBudget.data.push(item.spentBudget);\n });\n }\n } else {\n chosenCategoriesNames = [];\n chosenMonthBudget = {\n name: isInSerbian ? \"Budžet za odabrani mesec\" : \"Chosen month budget\",\n data: []\n };\n previousMonthBudget = {\n name: isInSerbian\n ? \"Budžet za prethodni mesec\"\n : \"Previous month budget\",\n data: []\n };\n }\n\n if (\n isMounted.current &&\n errorMessage !== undefined &&\n chosenCategoriesNames.length > 0\n ) {\n setErrorMessage(undefined);\n } else if (isMounted.current && chosenCategoriesNames.length === 0) {\n setErrorMessage(\"No data to compare\");\n }\n if (isMounted.current && response) {\n setGraphData({\n ...graphData,\n series: [chosenMonthBudget, previousMonthBudget],\n options: {\n ...graphData.options,\n xaxis: {\n categories: chosenCategoriesNames\n }\n }\n });\n }\n };\n\n useEffect(() => {\n isMounted.current = true;\n fetchData();\n return () => {\n isMounted.current = false;\n };\n }, [date]);\n\n useEffect(() => {\n if (categoryBudgetLoading === false) {\n const datePicker = document.getElementById(\"datePickerCategoryGraph\");\n if (datePicker) {\n datePicker.setAttribute(\"readOnly\", true);\n }\n }\n }, [categoryBudgetLoading]);\n\n return (\n \n \n
\n handleDateChange(chosenDate)}\n value={date}\n maxDate={new Date()}\n />\n

{t(\"budget_spent_by_category\")}

\n
\n e.stopPropagation()}\n >\n {errorMessage && (\n
\n

{errorMessage}

\n
\n )}\n \n
\n \n \n );\n};\n\nCategoryBudget.propTypes = {\n categoryBudgetLoading: PropTypes.bool,\n setCategoryBudgetLoading: PropTypes.func\n};\n\nexport default CategoryBudget;\n","import CategoryBudget from './CategoryBudget'\n\nexport default CategoryBudget\n","import styled from \"styled-components\";\n\nconst TierBudgetStyles = styled.div`\n margin: 0 20px 20px 0;\n order: 1;\n\n .chartAndMessageContainer {\n margin-top: 30px;\n height: 285px;\n font-size: 14px;\n width: 580px;\n position: relative;\n z-index: 0;\n }\n\n .apexcharts-canvas {\n z-index: 1;\n }\n\n .apexcharts-tooltip-y-group {\n display: flex;\n align-items: center;\n }\n\n .apexcharts-tooltip-z-group {\n display: flex;\n align-items: center;\n }\n\n .apexcharts-tooltip-text-value,\n .apexcharts-tooltip-text-z-value {\n display: flex !important;\n align-items: center;\n }\n .messageContainer {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n background: rgba(255, 255, 255, 0.8);\n z-index: 2;\n }\n\n .text {\n font-size: 12px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n text-transform: uppercase;\n }\n`;\n\nexport default TierBudgetStyles;\n","// import React from 'react'\n// import { renderToString } from 'react-dom/server'\n// import { TokenIcon } from '../../../../assets/Icons'\n\nexport const tierBudgetConfig = {\n series: [\n {\n name: \"Chosen month budget\",\n data: []\n },\n {\n name: \"Previous month budget\",\n data: []\n }\n ],\n options: {\n chart: {\n type: \"bar\",\n height: 350,\n toolbar: {\n show: false,\n tools: {\n download: true,\n selection: false,\n zoom: false,\n zoomin: false,\n zoomout: false,\n pan: false,\n reset: false\n }\n }\n },\n plotOptions: {\n bar: {\n horizontal: false,\n columnWidth: \"55%\",\n endingShape: \"rounded\"\n }\n },\n dataLabels: {\n enabled: false\n },\n stroke: {\n show: true,\n width: 2,\n colors: [\"transparent\"]\n },\n xaxis: {\n categories: []\n },\n legend: {\n show: true,\n position: \"bottom\",\n horizontalAlign: \"left\"\n },\n // yaxis: {\n // \ttitle: {\n // \t\ttext: '$ (thousands)'\n // \t}\n // },\n fill: {\n opacity: 1\n },\n tooltip: {\n y: {\n // formatter(val) {\n // \treturn `${val} ${renderToString()}`\n // }\n formatter(val) {\n return `${val} currency`;\n }\n }\n }\n }\n};\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\nimport ReactApexChart from \"react-apexcharts\";\nimport DatePicker from \"react-datepicker\";\n// components\nimport { Card } from \"../../../../components\";\n// styles\nimport TierBudgetStyles from \"./TierBudgetStyles\";\n// config\nimport { tierBudgetConfig } from \"./tierBudget.config\";\n// services\nimport * as dashboardService from \"../../../../services/api/hr/dashboard.service\";\nimport { formatDateForSearch } from \"../dashboad.services\";\nimport { useTranslation } from \"react-i18next\";\n\nconst TierBudget = ({ tierBudgetLoading, setTierBudgetLoading }) => {\n const { t } = useTranslation();\n const [graphData, setGraphData] = useState(tierBudgetConfig);\n const [errorMessage, setErrorMessage] = useState(undefined);\n const [date, setDate] = useState(new Date());\n const [searchDateString, setSearchDateString] = useState(\n formatDateForSearch(new Date())\n );\n const isMounted = useRef(false);\n\n const handleDateChange = chosenDate => {\n setDate(chosenDate);\n setSearchDateString(formatDateForSearch(chosenDate));\n };\n\n const fetchData = async () => {\n const response = await dashboardService.fetchBudgetPerTiers(\n searchDateString\n );\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_tier_budgets\")\n );\n }\n\n if (isMounted.current) {\n setTierBudgetLoading(false);\n }\n\n let chosenCategoriesNames = [];\n let chosenMonthBudget = { name: t(\"chosen_month_budget\"), data: [] };\n let previousMonthBudget = { name: t(\"previous_month_budget\"), data: [] };\n\n if (\n isMounted.current &&\n response &&\n response.actualBudget &&\n response.lastBudget\n ) {\n if (response.actualBudget.length === response.lastBudget.length) {\n response.actualBudget.forEach(item => {\n chosenCategoriesNames.push(item.name);\n chosenMonthBudget.data.push(item.spentBudget);\n });\n response.lastBudget.forEach(item => {\n previousMonthBudget.data.push(item.spentBudget);\n });\n }\n } else {\n chosenCategoriesNames = [];\n chosenMonthBudget = { name: t(\"chosen_month_budget\"), data: [] };\n previousMonthBudget = { name: t(\"previous_month_budget\"), data: [] };\n }\n\n if (\n isMounted.current &&\n errorMessage !== undefined &&\n chosenCategoriesNames.length > 0\n ) {\n setErrorMessage(undefined);\n } else if (isMounted.current && chosenCategoriesNames.length === 0) {\n setErrorMessage(\"No data to compare\");\n }\n if (response && isMounted.current) {\n setGraphData({\n ...graphData,\n series: [chosenMonthBudget, previousMonthBudget],\n options: {\n ...graphData.options,\n xaxis: {\n categories: chosenCategoriesNames\n }\n }\n });\n }\n };\n useEffect(() => {\n isMounted.current = true;\n fetchData();\n return () => {\n isMounted.current = false;\n };\n }, [date]);\n\n useEffect(() => {\n if (tierBudgetLoading === false) {\n const datePicker = document.getElementById(\"datePickerTierBudget\");\n if (datePicker) {\n datePicker.setAttribute(\"readOnly\", true);\n }\n }\n }, [tierBudgetLoading]);\n\n return (\n \n \n
\n handleDateChange(chosenDate)}\n value={date}\n maxDate={new Date()}\n />\n

{t(\"budget_spent_tiers\")}

\n
\n e.stopPropagation()}\n >\n {errorMessage && (\n
\n

{errorMessage}

\n
\n )}\n \n
\n \n \n );\n};\n\nTierBudget.propTypes = {\n tierBudgetLoading: PropTypes.bool,\n setTierBudgetLoading: PropTypes.func\n};\n\nexport default TierBudget;\n","import TierBudget from './TierBudget'\n\nexport default TierBudget\n","import styled from \"styled-components\";\n\nconst BudgetUtilizationStyles = styled.div`\n margin: 0 20px 20px 0;\n order: 3;\n\n .chartAndMessageContainer {\n height: 299px;\n width: 250px;\n position: relative;\n z-index: 0;\n }\n\n .messageContainer {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n background: rgba(255, 255, 255, 0.8);\n }\n\n .text {\n font-size: 12px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n text-transform: uppercase;\n }\n\n .legend {\n margin-top: 20px;\n }\n\n .item {\n display: flex;\n align-items: center;\n margin-bottom: 10px;\n\n .dot {\n min-width: 7px;\n min-height: 7px;\n border-radius: 3.5px;\n margin-right: 10px;\n }\n }\n`;\n\nexport default BudgetUtilizationStyles;\n","export const budgetUtilizationConfig = {\n series: [0, 0],\n options: {\n chart: {\n type: \"donut\"\n },\n dataLabels: {\n enabled: false\n },\n colors: [\"#0A243F\", \"#1B6B70\"],\n fill: {\n type: \"gradient\"\n },\n legend: {\n show: false,\n position: \"bottom\",\n horizontalAlign: \"left\"\n },\n tooltip: {\n y: {\n // formatter(val) {\n // \treturn `${val} ${renderToString()}`\n // }\n formatter(val) {\n return `${val} currency`;\n }\n }\n },\n labels: [\"Chosen month\", \"Previous month\"]\n }\n};\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\nimport ReactApexChart from \"react-apexcharts\";\nimport DatePicker from \"react-datepicker\";\n// components\nimport { Card } from \"../../../../components\";\n// styles\nimport BudgetUtilizationStyles from \"./BudgetUtilizationStyles\";\n// config\nimport { budgetUtilizationConfig } from \"./budgetUtilization.config\";\n// services\nimport { formatDateForSearch } from \"../dashboad.services\";\nimport * as dashboardService from \"../../../../services/api/hr/dashboard.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BudgetUtilization = ({\n budgetUtilizationLoading,\n setBudgetUtilizationLoading\n}) => {\n const { t } = useTranslation();\n const [budgetUtilization, setBudgetUtilization] = useState(\n budgetUtilizationConfig\n );\n const [errorMessage, setErrorMessage] = useState(undefined);\n const [date, setDate] = useState(new Date());\n const [searchDateString, setSearchDateString] = useState(\n formatDateForSearch(new Date())\n );\n const isMounted = useRef(false);\n\n const handleDateChange = chosenDate => {\n setDate(chosenDate);\n setSearchDateString(formatDateForSearch(chosenDate));\n };\n\n const fetchData = async () => {\n const response = await dashboardService.fetchBudgetSpending(\n searchDateString\n );\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_budget_spending\")\n );\n }\n\n if (isMounted.current) {\n setBudgetUtilizationLoading(false);\n if (\n errorMessage !== undefined &&\n (response.lastSpentBudget !== 0 || response.actualSpentBudget !== 0)\n ) {\n setErrorMessage(undefined);\n } else if (\n response.actualSpentBudget === 0 &&\n response.lastSpentBudget === 0\n ) {\n setErrorMessage(\"No data to compare\");\n }\n if (response && isMounted.current) {\n setBudgetUtilization({\n ...budgetUtilization,\n series: [response.actualSpentBudget, response.lastSpentBudget]\n });\n }\n }\n };\n useEffect(() => {\n isMounted.current = true;\n fetchData();\n return () => {\n isMounted.current = false;\n };\n }, [date]);\n\n useEffect(() => {\n if (budgetUtilizationLoading === false) {\n const datePicker = document.getElementById(\"datePickerBudgetSpending\");\n if (datePicker) {\n datePicker.setAttribute(\"readOnly\", true);\n }\n }\n }, [budgetUtilizationLoading]);\n\n return (\n \n \n
\n handleDateChange(chosenDate)}\n value={date}\n maxDate={new Date()}\n />\n

{t(\"budget_spent\")}

\n
\n
\n {errorMessage && (\n
\n

{errorMessage}

\n
\n )}\n \n
\n
\n
\n

\n {t(\"chosen_month\")} - {budgetUtilization.series[0]} currency\n

\n
\n
\n
\n

\n {t(\"previous_month\")} - {budgetUtilization.series[1]} currency\n

\n
\n
\n
\n \n \n );\n};\n\nBudgetUtilization.propTypes = {\n budgetUtilizationLoading: PropTypes.bool,\n setBudgetUtilizationLoading: PropTypes.func\n};\n\nexport default BudgetUtilization;\n","import BudgetUtilization from './BudgetUtilization'\n\nexport default BudgetUtilization\n","import styled from \"styled-components\";\n\nconst TopBenefitsStyles = styled.div`\n .pieChartAndMessageContainer {\n z-index: 0;\n height: 250px;\n width: 300px;\n position: relative;\n }\n\n .barChartAndMessageContainer {\n height: 350px;\n width: 300px;\n position: relative;\n }\n\n .apexcharts-canvas {\n z-index: 1;\n }\n\n .apexcharts-tooltip-y-group {\n display: flex;\n align-items: center;\n }\n\n .apexcharts-tooltip-z-group {\n display: flex;\n align-items: center;\n }\n\n .apexcharts-tooltip-text-value,\n .apexcharts-tooltip-text-z-value {\n display: flex !important;\n align-items: center;\n }\n\n .messageContainer {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n background: rgba(255, 255, 255, 0.8);\n z-index: 2;\n }\n\n .text {\n font-size: 12px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n text-transform: uppercase;\n }\n\n .inputContainer {\n display: flex;\n align-items: center;\n }\n`;\n\nexport default TopBenefitsStyles;\n","// import React from 'react'\n// import { renderToString } from 'react-dom/server'\n// import { TokenIcon } from '../../../../assets/Icons'\n\nexport const barChart = {\n series: [],\n options: {\n chart: {\n type: \"bar\",\n height: 350,\n toolbar: {\n show: false\n }\n },\n plotOptions: {\n bar: {\n horizontal: false,\n columnWidth: \"40px\",\n endingShape: \"rounded\"\n }\n },\n legend: {\n show: true,\n position: \"bottom\",\n horizontalAlign: \"left\",\n fontSize: \"12px\",\n fontFamily: \"Montserrat\"\n },\n dataLabels: {\n enabled: false\n },\n stroke: {\n show: true,\n width: 2,\n colors: [\"transparent\"]\n },\n xaxis: {\n categories: [\"Top Benefits\"]\n },\n // yaxis: {\n // \ttitle: {\n // \t\ttext: '$ (thousands)'\n // \t}\n // },\n fill: {\n opacity: 1\n },\n tooltip: {\n y: {\n // formatter(val) {\n // \treturn `${val} ${renderToString()}`\n // }\n formatter(val) {\n return `${val} currency`;\n }\n }\n }\n }\n};\n","export const pieChart = {\n series: [],\n options: {\n chart: {\n width: 380,\n type: \"pie\"\n },\n legend: {\n show: false,\n position: \"bottom\"\n },\n labels: [],\n responsive: [\n {\n breakpoint: 480,\n options: {\n chart: {\n width: 200\n },\n legend: {\n show: false,\n position: \"bottom\"\n }\n }\n }\n ],\n tooltip: {\n y: {\n // formatter(val) {\n // \treturn `${val} ${renderToString()}`\n // }\n formatter(val) {\n return `${val} currency`;\n }\n }\n }\n }\n};\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\nimport ReactApexChart from \"react-apexcharts\";\nimport DatePicker from \"react-datepicker\";\n// components\nimport { Card, InputLabel } from \"../../../../components\";\n// styles\nimport TopBenefitsStyles from \"./TopBenefitsStyles\";\n// config\nimport { barChart } from \"./bar.config\";\nimport { pieChart } from \"./pie.config\";\n// services\nimport { formatDateForSearch } from \"../dashboad.services\";\nimport * as dashboardService from \"../../../../services/api/hr/dashboard.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst radioBoxResults = {\n CHOSEN_MONTH: \"CHOSEN_MONTH\",\n PREVIOUS_MONTH: \"PREVIOUS_MONTH\"\n};\n\nconst TopBenefits = ({ topBenefitsLoading, setTopBenefitsLoading }) => {\n const { t } = useTranslation();\n const [chosenMonth, setChosenMonth] = useState({ barChart, pieChart });\n const [chosenMonthErrorMsg, setChosenMonthErrorMessage] = useState(undefined);\n const [previouseMonth, setPreviouseMonth] = useState({ barChart, pieChart });\n const [previousMonthErrorMsg, setPreviousMonthErrorMessage] = useState(\n undefined\n );\n const [chooseCurretOrLastMonth, setChooseCurrentOrLastMonth] = useState(\n radioBoxResults.CHOSEN_MONTH\n );\n const [date, setDate] = useState(new Date());\n const [searchDateString, setSearchDateString] = useState(\n formatDateForSearch(new Date())\n );\n const isMounted = useRef(false);\n\n const handleDateChange = chosenDate => {\n setDate(chosenDate);\n setSearchDateString(formatDateForSearch(chosenDate));\n };\n\n const fetchData = async () => {\n const response = await dashboardService.fetchTopBenefitsData(\n searchDateString\n );\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_top_benefits\")\n );\n }\n\n if (isMounted.current) {\n setTopBenefitsLoading(false);\n\n const pieChosenBenefitsLabels = [];\n const pieChosenBenefitsData = [];\n const barChosenSeries = [];\n if (response.actualBudget.length > 0) {\n response.actualBudget.forEach(benefit => {\n pieChosenBenefitsLabels.push(benefit.name);\n pieChosenBenefitsData.push(benefit.budget);\n barChosenSeries.push({ name: benefit.name, data: [benefit.budget] });\n });\n }\n\n const pieLastMonthBenefitsLabel = [];\n const pieLastMonthBenefitsData = [];\n const barLastMonthSeries = [];\n\n if (response.lastBudget.length > 0) {\n response.lastBudget.forEach(benefit => {\n pieLastMonthBenefitsLabel.push(benefit.name);\n pieLastMonthBenefitsData.push(benefit.budget);\n barLastMonthSeries.push({\n name: benefit.name,\n data: [benefit.budget]\n });\n });\n }\n if (response) {\n if (isMounted.current) {\n if (response.actualBudget.length > 0) {\n setChosenMonthErrorMessage(undefined);\n setChosenMonth({\n ...chosenMonth,\n pieChart: {\n ...chosenMonth.pieChart,\n series: pieChosenBenefitsData,\n options: {\n ...chosenMonth.options,\n labels: pieChosenBenefitsLabels\n }\n },\n barChart: {\n ...chosenMonth.barChart,\n series: barChosenSeries\n }\n });\n } else {\n setChosenMonthErrorMessage(\"No data to compare\");\n setChosenMonth({\n ...chosenMonth,\n pieChart: {\n ...chosenMonth.pieChart,\n series: [],\n options: {\n ...chosenMonth.options,\n labels: []\n }\n },\n barChart: {\n ...chosenMonth.barChart,\n series: []\n }\n });\n }\n\n if (isMounted.current) {\n if (response.lastBudget.length > 0) {\n setPreviousMonthErrorMessage(undefined);\n setPreviouseMonth({\n ...previouseMonth,\n pieChart: {\n ...previouseMonth.pieChart,\n series: pieLastMonthBenefitsData,\n options: {\n ...previouseMonth.options,\n labels: pieLastMonthBenefitsLabel\n }\n },\n barChart: {\n ...previouseMonth.barChart,\n series: barLastMonthSeries\n }\n });\n } else {\n setPreviousMonthErrorMessage(\"No data to compare\");\n setPreviouseMonth({\n ...previouseMonth,\n pieChart: {\n ...previouseMonth.pieChart,\n series: [],\n options: {\n ...previouseMonth.options,\n labels: []\n }\n },\n barChart: {\n ...previouseMonth.barChart,\n series: []\n }\n });\n }\n }\n }\n }\n }\n if (isMounted.current) {\n setChooseCurrentOrLastMonth(radioBoxResults.CHOSEN_MONTH);\n }\n };\n\n useEffect(() => {\n isMounted.current = true;\n fetchData();\n return () => {\n isMounted.current = false;\n };\n }, [date]);\n\n useEffect(() => {\n if (topBenefitsLoading === false) {\n const datePicker = document.getElementById(\"datePickerTopBenefits\");\n if (datePicker) {\n datePicker.setAttribute(\"readOnly\", true);\n }\n }\n }, [topBenefitsLoading]);\n\n return (\n \n \n
\n handleDateChange(chosenDate)}\n value={date}\n maxDate={new Date()}\n />\n

{t(\"top_benefits\")}

\n
\n
\n \n
\n \n setChooseCurrentOrLastMonth(radioBoxResults.CHOSEN_MONTH)\n }\n />\n \n
\n
\n \n setChooseCurrentOrLastMonth(radioBoxResults.PREVIOUS_MONTH)\n }\n />\n \n
\n
\n
\n
\n {(chooseCurretOrLastMonth === radioBoxResults.CHOSEN_MONTH\n ? chosenMonthErrorMsg\n : previousMonthErrorMsg) && (\n
\n

\n {chooseCurretOrLastMonth === radioBoxResults.CHOSEN_MONTH\n ? chosenMonthErrorMsg\n : previousMonthErrorMsg}\n

\n
\n )}\n \n
\n
\n {(chooseCurretOrLastMonth === radioBoxResults.CHOSEN_MONTH\n ? chosenMonthErrorMsg\n : previousMonthErrorMsg) && (\n
\n

\n {chooseCurretOrLastMonth === radioBoxResults.CHOSEN_MONTH\n ? chosenMonthErrorMsg\n : previousMonthErrorMsg}\n

\n
\n )}\n \n
\n
\n
\n \n \n );\n};\n\nTopBenefits.propTypes = {\n topBenefitsLoading: PropTypes.bool,\n setTopBenefitsLoading: PropTypes.func\n};\n\nexport default TopBenefits;\n","import TopBenefits from './TopBenefits'\n\nexport default TopBenefits\n","import styled from 'styled-components'\n\n\nconst UsageWidgetStyles = styled.div`\n\tmargin: 0 20px 20px 0;\n\twidth: 550px;\n\torder: 6;\n\n\t.statisticsContainer {\n\t\twidth: 100%;\n\t\theight: calc(100% - 30px);\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\talign-items: center;\n\t\tjustify-content: space-evenly;\n\t}\n\n\t.statisticItem {\n\t\twidth: 33%;\n\t\theight: 50%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\n\t\t.statisticName {\n\t\t\tfont-size: 13px;\n\t\t\tfont-weight: bold;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: normal;\n\t\t\tcolor: #4a4a4a;\n\t\t\ttext-align: center;\n\t\t\ttext-transform: uppercase;\n\t\t\tmargin-bottom: 10px;\n\t\t}\n\t}\n\n\t@media screen and (max-width: 1626px) {\n\t\twidth: 640px;\n\t\tmargin-bottom: 20px;\n\t\torder: 5;\n\t}\n\n`\n\nexport default UsageWidgetStyles\n","import React, { useEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\n\nimport { Card } from \"../../../../components\";\nimport UsageWidgetStyles from \"./UsageWidgetStyles\";\nimport * as dashboardService from \"../../../../services/api/hr/dashboard.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst UsageWidget = ({ companyName, setUsageLoading }) => {\n const { t } = useTranslation();\n const [values, setValues] = useState({});\n\n const handleFetchCompanyUsage = async () => {\n const response = await dashboardService.fetchCompanyUsage();\n setUsageLoading(false);\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_company_usage\")\n );\n }\n\n setValues(response);\n };\n\n useEffect(() => {\n handleFetchCompanyUsage();\n }, []);\n\n return (\n \n \n
\n
\n

{companyName}

\n

{t(\"usage_statistics\")}

\n
\n
\n
\n

{t(\"total_users\")}

\n

{values.totalUsers}

\n
\n
\n

HR

\n

{values.totalHr}

\n
\n
\n

{t(\"Employees\")}

\n

{values.totalEmployee}

\n
\n
\n

\n {t(\"employees_using_the_system\")}\n

\n

{values.employeeOnPlatform}

\n
\n
\n

\n {t(\"employees_not_using_the_system\")}\n

\n

{values.employeeNotOnPlatform}

\n
\n
\n
\n
\n
\n );\n};\n\nUsageWidget.propTypes = {\n companyName: PropTypes.string,\n setUsageLoading: PropTypes.func\n};\n\nexport default UsageWidget;\n","export const configUniqueCombinations = (value) => ({\n\tseries: [100],\n\toptions: {\n\t\tchart: {\n\t\t\tid: `basic-bar1${Math.random()}`,\n\t\t\tanimations: {\n\t\t\t\tenabled: true,\n\t\t\t\teasing: 'easeinout',\n\t\t\t\tspeed: 800,\n\t\t\t\tanimateGradually: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tdelay: 1500\n\t\t\t\t},\n\t\t\t\tdynamicAnimation: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tspeed: 800\n\t\t\t\t}\n\t\t\t},\n\t\t\theight: 350,\n\t\t\ttype: 'radialBar',\n\t\t\ttoolbar: {\n\t\t\t\tshow: false\n\t\t\t}\n\t\t},\n\t\tplotOptions: {\n\t\t\tradialBar: {\n\t\t\t\tstartAngle: 0,\n\t\t\t\tendAngle: -360,\n\t\t\t\thollow: {\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tsize: '70%',\n\t\t\t\t\tbackground: '#fff',\n\t\t\t\t\timage: undefined,\n\t\t\t\t\timageOffsetX: 0,\n\t\t\t\t\timageOffsetY: 0,\n\t\t\t\t\tposition: 'front',\n\t\t\t\t\tdropShadow: {\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\ttop: 3,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\tblur: 4,\n\t\t\t\t\t\topacity: 0.24\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrack: {\n\t\t\t\t\tbackground: '#d8d8d8',\n\t\t\t\t\tstrokeWidth: '75%',\n\t\t\t\t\tmargin: 0, // margin is in pixels\n\t\t\t\t\tdropShadow: {\n\t\t\t\t\t\tenabled: false,\n\t\t\t\t\t\ttop: -3,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\tblur: 4,\n\t\t\t\t\t\topacity: 0.5\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tdataLabels: {\n\t\t\t\t\tshow: true,\n\t\t\t\t\tname: {\n\t\t\t\t\t\toffsetY: -10,\n\t\t\t\t\t\tshow: false,\n\t\t\t\t\t\tcolor: '#888',\n\t\t\t\t\t\tfontSize: '17px'\n\t\t\t\t\t},\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tformatter(val) {\n\t\t\t\t\t\t\treturn `${val === 100 ? `${value}` : '0'}`\n\t\t\t\t\t\t},\n\t\t\t\t\t\toffsetY: 7,\n\t\t\t\t\t\tcolor: '#111',\n\t\t\t\t\t\tfontSize: '18px',\n\t\t\t\t\t\tshow: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tfill: {\n\t\t\ttype: 'gradient',\n\t\t\tgradient: {\n\t\t\t\tshade: 'dark',\n\t\t\t\ttype: 'horizontal',\n\t\t\t\tshadeIntensity: 0.5,\n\t\t\t\tgradientToColors: ['#1e3c72'],\n\t\t\t\tinverseColors: true,\n\t\t\t\topacityFrom: 1,\n\t\t\t\topacityTo: 1,\n\t\t\t\tstops: [0, 100]\n\t\t\t}\n\t\t},\n\t\tstroke: {\n\t\t\tlineCap: 'round'\n\t\t},\n\t\tlabels: ['']\n\t}\n})\n","/* eslint-disable */\nimport React, { useState, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport ReactApexChart from \"react-apexcharts\";\nimport styled from \"styled-components\";\n\nimport { Card } from \"../../../../components\";\nimport { configUniqueCombinations } from \"./config\";\nimport * as dashboardService from \"../../../../services/api/hr/dashboard.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst PosibleCombinationsStyles = styled.div`\n margin-top: 20px;\n\n .numberOfPosbileCombinationsContainer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .combinationsTitle {\n font-size: 13px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4a4a4a;\n text-align: center;\n text-transform: uppercase;\n margin-bottom: 10px;\n }\n\n .line {\n width: 90%;\n border: 0.5px solid #d8d8d8;\n margin: 0 auto;\n }\n\n .tierContainer {\n margin: 10px 0 0 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-bottom: 2px solid #1568bf;\n padding: 0 5px 10px 5px;\n }\n`;\n\nconst PosibleCombinations = ({ companyName }) => {\n const { t } = useTranslation();\n const [numberOfCombinations, setNumberOfCombinations] = useState([]);\n const [numberOfUniqueCombinations, setNumberOfUniqueCombinations] = useState(\n configUniqueCombinations(0)\n );\n\n const fectchWidgetData = async () => {\n const [\n usedCombinationsRes,\n uniqueCOmbinationsPerTiersRes\n ] = await Promise.all([\n dashboardService.fetchUniqueUsedCombinations(),\n dashboardService.fetchUniqueCombinationsPerTiers()\n ]);\n\n if (usedCombinationsRes) {\n setNumberOfUniqueCombinations(\n configUniqueCombinations(usedCombinationsRes.combinations)\n );\n setNumberOfCombinations(uniqueCOmbinationsPerTiersRes.items);\n }\n };\n\n useEffect(() => {\n fectchWidgetData();\n }, []);\n\n return (\n \n \n
\n
\n

{companyName}

\n

{t(\"combination_statistics\")}

\n
\n
\n

\n {t(\"uniquely_chosen_combinations_title\")}\n

\n \n
\n
\n
\n

\n {t(\"over_2_mil\")}\n

\n
\n
\n
\n
\n );\n};\n\nPosibleCombinations.propTypes = {\n companyName: PropTypes.string\n};\n\nexport default PosibleCombinations;\n","/**\n * Downloads blob file.\n * @param {any} content - Data for blob file.\n * @param {string} filename\n * @param {string} contentType\n */\nexport const downloadBlob = (content, filename, contentType) => {\n // Create a blob\n const blob = new Blob([\"\\ufeff\", content], { type: contentType });\n const url = URL.createObjectURL(blob);\n\n // Create a link to download it\n let downloadLink = document.createElement(\"a\");\n downloadLink.href = url;\n downloadLink.setAttribute(\"download\", filename);\n downloadLink.click();\n};\n\n/**\n * Creates download links and downloads base64 encoded string file.\n * @param {string} data\n * @param {string} filename\n */\nexport const downloadCsvFromBase64EncodedString = (data, filename) => {\n const element = document.createElement(\"a\");\n element.setAttribute(\"href\", \"data:text/plain;base64,\" + data);\n element.setAttribute(\"download\", filename);\n\n element.style.display = \"none\";\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n};\n","export const reportTypeDropdownOptions = t => [\n {\n id: 1,\n name: t(\"chosen_for_this_month\")\n },\n {\n id: 2,\n name: t(\"chosen_for_next_month\")\n }\n];\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport DatePicker from \"react-datepicker\";\nimport { toast } from \"react-toastify\";\n\nimport { Card, Button, SelectInput, InputLabel } from \"../../../../components\";\nimport { formatDateForSearch } from \"../dashboad.services\";\nimport * as dashboardService from \"../../../../services/api/hr/dashboard.service\";\nimport { downloadBlob } from \"../../../../services/files.utils\";\nimport { reportTypeDropdownOptions } from \"../../../SuperAdminPages/Dashboard/reportTypeDropdownOptions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst UsageReportGeneratorStyles = styled.div`\n margin: 0 20px 20px 0;\n order: 7;\n width: 400px;\n`;\n\nconst UsageReport = () => {\n const { t } = useTranslation();\n const [date, setDate] = useState(new Date());\n const [searchDateString, setSearchDateString] = useState(\n formatDateForSearch(new Date())\n );\n const [reportType, setReportType] = useState(undefined);\n\n const handleDateChange = chosenDate => {\n setDate(chosenDate);\n setSearchDateString(formatDateForSearch(chosenDate));\n };\n\n const getStatistics = async () => {\n const response = await dashboardService.getStatistics(\n searchDateString,\n reportType\n );\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_statistics\")\n );\n }\n\n downloadBlob(response.data, \"export.csv\", \"text/csv;charset=utf-8;\");\n };\n\n return (\n \n \n
\n handleDateChange(chosenDate)}\n value={date}\n maxDate={new Date()}\n />\n

{t(\"gen_usr_rep\")}

\n
\n
\n \n setReportType(option.id)}\n customId=\"reportTypeId\"\n shouldHaveHight={false}\n shouldHaveFullWidth\n customHeight=\"27px\"\n />\n
\n
\n getStatistics()}\n >\n {t(\"download\")}\n \n
\n
\n
\n );\n};\n\nexport default UsageReport;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { Card, Button, SelectInput, InputLabel } from \"../../../../components\";\nimport * as dashboardService from \"../../../../services/api/hr/dashboard.service\";\nimport { reportTypeDropdownOptions } from \"../../../SuperAdminPages/Dashboard/reportTypeDropdownOptions\";\nimport { connect, useSelector } from \"react-redux\";\nimport debounce from \"../../../../utils/helpers/debounce\";\n\nimport {\n setDownloadPercentage,\n setIsRefundDownloading\n} from \"../../../../actions/app.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst UsageReportGeneratorStyles = styled.div`\n margin: 0 20px 20px 0;\n order: 7;\n width: 400px;\n`;\n\nconst RefundReport = props => {\n const {\n setDownloadPercentage,\n isDownloading,\n setIsRefundDownloading,\n downloadPercent\n } = props;\n const { t } = useTranslation();\n const [reportType, setReportType] = useState(undefined);\n\n const companyId = useSelector(state => state.app.user.companyId);\n\n const getStatistics = () => {\n setIsRefundDownloading(true);\n dashboardService.getRefundStatistics(\n reportType,\n companyId,\n setIsRefundDownloading,\n setDownloadPercentage\n );\n };\n\n const debouncedGetStatistic = debounce(getStatistics, 777);\n\n return (\n \n \n
\n

{t(\"gen_ref_rep\")}

\n
\n {isDownloading ? (\n
\n \n
\n {t(\"downloading\")}: {downloadPercent}%\n
\n
\n
\n ) : (\n <>\n
\n \n setReportType(option.id)}\n customId=\"reportTypeId\"\n shouldHaveHight={false}\n shouldHaveFullWidth\n customHeight=\"27px\"\n />\n
\n
\n \n {t(\"download\")}\n \n
\n \n )}\n \n \n );\n};\n\nconst mapStateToProps = state => {\n return {\n isDownloading: state.app.isDownloading,\n downloadPercent: state.app.downloadPercent\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setIsRefundDownloading: payload =>\n dispatch(setIsRefundDownloading(payload)),\n setDownloadPercentage: payload => dispatch(setDownloadPercentage(payload))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(RefundReport);\n","import React, { useEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\nimport styled from \"styled-components\";\n\nimport * as dashboardService from \"../../../../services/api/hr/dashboard.service\";\n\nimport { Card } from \"../../../../components\";\nimport { useTranslation } from \"react-i18next\";\n\nconst SyncStyles = styled.div`\n width: 400px;\n order: 8;\n\n .syncContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 20px;\n height: 47px;\n\n .syncTitleText {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n\n .syncTitle {\n font-size: 13px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4a4a4a;\n text-align: center;\n text-transform: uppercase;\n margin-bottom: 10px;\n }\n }\n }\n`;\n\nconst SyncWidget = ({ companyName, setSyncLoading }) => {\n const { t } = useTranslation();\n const [values, setValues] = useState({\n employees: 0,\n sync: 0\n });\n\n const handleFetchSyncedEmployees = async () => {\n const response = await dashboardService.fetchSyncedEmployees();\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_synced_employees\")\n );\n }\n\n setValues(response);\n setSyncLoading(false);\n };\n\n useEffect(() => {\n handleFetchSyncedEmployees();\n }, []);\n\n return (\n \n \n
\n
\n

{companyName}

\n

{t(\"sync_widget\")}

\n
\n
\n
\n

{t(\"sync_title\")}

\n

{values.sync}

\n
\n
\n

{t(\"Employees\")}

\n

{values.employees}

\n
\n
\n
\n
\n
\n );\n};\n\nSyncWidget.propTypes = {\n companyName: PropTypes.string,\n setSyncLoading: PropTypes.func\n};\n\nexport default SyncWidget;\n","import styled from \"styled-components\";\n\nconst HrDashboardStyles = styled.section`\n width: calc(100% - 210px);\n margin-left: 210px;\n background: whitesmoke;\n min-height: 100vh;\n\n .dashboardContainer {\n padding: 0 30px 30px 30px;\n }\n\n #dashboarsContainer {\n opacity: 0;\n transition: all 0.4s ease-in-out;\n }\n\n .graphsContainer {\n display: flex;\n align-items: flex-start;\n width: 1350px;\n }\n\n .titleContainer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: relative;\n }\n\n .title {\n font-size: 12px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n text-transform: uppercase;\n text-align: center;\n }\n\n .datePickerInput {\n height: 24px;\n width: 100px;\n outline: none;\n text-align: center;\n font-size: 16px;\n font-weight: 600;\n border: 1px solid #d8d8d8;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n border-radius: 4px;\n cursor: pointer;\n position: relative;\n z-index: 1;\n\n &:hover {\n border: 1px solid #1568bf;\n z-index: 2;\n }\n }\n\n input[type=\"date\"]::-webkit-clear-button {\n display: none;\n -webkit-appearance: none;\n }\n\n input[type=\"date\"]::-webkit-inner-spin-button {\n -webkit-appearance: none;\n display: none;\n }\n\n input[type=\"date\"]::-webkit-calendar-picker-indicator {\n -webkit-appearance: none;\n position: absolute;\n left: 5px;\n width: 5px;\n color: rgba(0, 0, 0, 0);\n opacity: 0;\n cursor: pointer;\n }\n\n .description {\n font-size: 12px;\n font-weight: 300;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n }\n\n @media screen and (max-width: 1626px) {\n .graphsContainer {\n width: 1000px;\n }\n }\n`;\n\nexport default HrDashboardStyles;\n","import React, { useContext, useState, useEffect, useRef } from \"react\";\nimport { connect } from \"react-redux\";\nimport { BeatLoader } from \"react-spinners\";\n// components\nimport {\n Header,\n Modal,\n openModalAnim,\n closeModalAnim\n} from \"../../../components\";\nimport UsedTokens from \"./UsedTokens/UsedTokens\";\nimport TotalBudget from \"./TotalBudget\";\nimport CategoryBudget from \"./CategoryBudget\";\nimport TierBudget from \"./TierBudget\";\nimport BudgetUtilization from \"./BudgetUtilization\";\nimport TopBenefits from \"./TopBenefits\";\nimport UsageWidget from \"./UsageWidget/UsageWidget\";\nimport { CombinationsWidget } from \"./combinationsWidget\";\nimport UsageReportGenerator from \"./UsageReport/UsageReportGenerator\";\nimport RefundReportGenerator from \"./RefundReport/RefundReportGenerator\";\nimport SyncWidget from \"./SyncWidget/SyncWidget\";\nimport PrivacyPolicy from \"../../../components/privacyPolicyModal\";\n// styles\nimport HrDashboardStyles from \"./HrDashboardStyles\";\nimport { override } from \"../../../services/loadingOverride.styles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst HrDashboard = ({ user }) => {\n const { t } = useTranslation();\n const showPrivacyPolicyModal = useRef(false);\n const [isLoading, setIsLoading] = useState(false);\n const [tierBudgetLoading, setTierBudgetLoading] = useState(true);\n const [totalBudgetLoading, setTotalBudgetLoading] = useState(true);\n const [budgetUtilizationLoading, setBudgetUtilizationLoading] = useState(\n true\n );\n const [categoryBudgetLoading, setCategoryBudgetLoading] = useState(false);\n const [usedTokensLoading, setUsedTokensLoading] = useState(true);\n const [topBenefitsLoading, setTopBenefitsLoading] = useState(true);\n const [usageLoading, setUsageLoading] = useState(true);\n const [syncLoading, setSyncLoading] = useState(true);\n const isMounted = useRef(true);\n\n useEffect(() => {\n if (isMounted.current) {\n setIsLoading(true);\n if (\n !tierBudgetLoading &&\n !totalBudgetLoading &&\n !budgetUtilizationLoading &&\n !categoryBudgetLoading &&\n !usedTokensLoading &&\n !topBenefitsLoading &&\n !usageLoading &&\n !syncLoading\n ) {\n setTimeout(() => {\n if (isMounted.current) {\n setIsLoading(false);\n setTimeout(() => {\n const dashboarsContainer = document.getElementById(\n \"dashboarsContainer\"\n );\n if (isMounted.current && dashboarsContainer) {\n dashboarsContainer.style.opacity = 1;\n }\n }, 100);\n }\n }, 100);\n }\n }\n\n showPrivacyPolicyModal.current = true;\n if (user.authenticatedRole && !user.hasAcceptedPrivacyPolicy) {\n setTimeout(() => {\n openModalAnim();\n }, 500);\n }\n return () => () => {\n isMounted.current = false;\n };\n }, [\n tierBudgetLoading,\n totalBudgetLoading,\n budgetUtilizationLoading,\n categoryBudgetLoading,\n usedTokensLoading,\n topBenefitsLoading,\n usageLoading,\n syncLoading\n ]);\n\n return (\n \n
\n
\n {isLoading && (\n \n \n
\n )}\n\n
\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n \n \n
\n
\n
\n \n\n {!isLoading &&\n showPrivacyPolicyModal.current &&\n user.authenticatedRole &&\n !user.hasAcceptedPrivacyPolicy && (\n \n \n \n )}\n \n );\n};\n\nconst mapStateToProps = state => {\n return {\n user: state.app.user\n };\n};\n\nexport default connect(mapStateToProps, undefined)(HrDashboard);\n","import HrDashboard from './HrDashboard'\n\nexport default HrDashboard\n","import styled from \"styled-components\";\n\nconst HrBenefitsStyles = styled.section`\n .searchWrapper {\n margin-bottom: 20px;\n }\n\n .filtersHeader {\n display: flex;\n justify-content: flex-end;\n flex-wrap: wrap;\n align-items: center;\n }\n\n .hrBenefitsContainer {\n width: calc(100% - 210px);\n margin-left: 210px;\n background: whitesmoke;\n min-height: 100vh;\n }\n\n .contentSection {\n padding: 0 30px 30px 30px;\n }\n\n #benefitGroupList {\n opacity: 0;\n transition: all 0.4s ease-in-out;\n }\n\n .benefitList {\n display: flex;\n max-width: 1300px;\n flex-wrap: wrap;\n margin: 30px 0 0 0;\n\n &:last-child {\n margin: 30px 0 0 0;\n }\n }\n\n .filtersHeader {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n\n .filters {\n display: flex;\n gap: 25px;\n align-items: baseline;\n flex-wrap: wrap;\n }\n }\n\n .benefitsSearch {\n margin-top: 10px;\n width: 250px !important;\n }\n`;\n\nexport default HrBenefitsStyles;\n","export const SET_HR_BENEFIT_GROUPS = \"SET_HR_BENEFIT_GROUPS\";\nexport const SET_HR_CATEGORIES_FILTERS = \"SET_HR_CATEGORIES_FILTERS\";\nexport const SET_HR_TAGS_FILTERS = \"SET_HR_TAGS_FILTERS\";\nexport const SET_HR_ENABLED_BENEFIT_GROUP_FILTERS =\n \"SET_HR_ENABLED_BENEFIT_GROUP_FILTERS\";\nexport const SET_HR_BENEFITS_KEYWORD_SEARCH = \"SET_HR_BENEFITS_KEYWORD_SEARCH\";\nexport const SET_HR_BENEFITS_CHOSEN_CATEGORIES_FILTERS =\n \"SET_HR_BENEFITS_CHOSEN_CATEGORIES_FILTERS\";\nexport const SET_HR_BENEFITS_CHOSEN_TAGS_FILTERS =\n \"SET_HR_BENEFITS_CHOSEN_TAGS_FILTERS\";\nexport const SET_HR_BENEFITS_FILTERS_TO_DEFAULT = \"\";\nexport const SET_HR_BENEFITS_PAGE = \"SET_HR_BENEFITS_PAGE\";\nexport const SET_HR_EDIT_BENEFITS_INITIAL_STATE =\n \"SET_HR_EDIT_BENEFITS_INITIAL_STATE\";\nexport const TOGGLE_BENEFIT_GROUP = \"TOGGLE_BENEFIT_GROUP\";\nexport const TOGGLE_BENEFIT_GROUP_INSTALMENTS =\n \"TOGGLE_BENEFIT_GROUP_INSTALMENTS\";\nexport const SET_HR_BENEFIT_GROUP_USERS_PAGE =\n \"SET_HR_BENEFIT_GROUP_USERS_PAGE\";\nexport const SET_HR_BENEFIT_GROUP_USERS = \"SET_HR_BENEFIT_GROUP_USERS\";\nexport const SET_HR_BENEFIT_GROUP_CITIES = \"SET_HR_BENEFIT_GROUP_CITIES\";\nexport const SET_HR_BENEFIT_GROUP_CHOSEN_CITY_IDS =\n \"SET_HR_BENEFIT_GROUP_CHOSEN_CITY_IDS\";\nexport const SET_HR_BENEFIT_GROUP_CHOSEN_CITIES =\n \"SET_HR_BENEFIT_GROUP_CHOSEN_CITIES\";\n","import * as actionTypes from \"../../constants/actionTypes/hr/benefits.constants\";\nimport {\n BenefitGroup,\n Tier,\n Employee,\n Category,\n Tag\n} from \"../../models/domain\";\nimport * as modelMapperService from \"../../models/modelMapper.service\";\nimport { isEmpty } from \"../../services/general.utils\";\n\nexport const setBenefitGroups = (benefitGroups, count) => {\n const domainBenefitGroups = modelMapperService.mapManyToDomain(\n benefitGroups,\n BenefitGroup\n );\n return {\n type: actionTypes.SET_HR_BENEFIT_GROUPS,\n benefitGroups: domainBenefitGroups,\n count\n };\n};\n\nexport const setCategories = categories => {\n const domainCategories = modelMapperService.mapManyToDomain(\n categories,\n Category\n );\n return {\n type: actionTypes.SET_HR_CATEGORIES_FILTERS,\n categories: domainCategories\n };\n};\n\nexport const setTags = tags => {\n const domainTags = !isEmpty(tags)\n ? modelMapperService.mapManyToDomain(tags, Tag)\n : [];\n return {\n type: actionTypes.SET_HR_TAGS_FILTERS,\n tags: domainTags\n };\n};\n\nexport const setEnabledBenefitGroup = enabledBenefitGroup => {\n return {\n type: actionTypes.SET_HR_ENABLED_BENEFIT_GROUP_FILTERS,\n enabledBenefitGroup: enabledBenefitGroup\n };\n};\n\nexport const setKeywordSearch = keywordSearch => {\n return {\n type: actionTypes.SET_HR_BENEFITS_KEYWORD_SEARCH,\n keywordSearch: keywordSearch\n };\n};\n\nexport const setChosenCategories = (chosenCategories, chosenCategoryIds) => {\n const domainCategories = !isEmpty(chosenCategories)\n ? modelMapperService.mapManyToDomain(chosenCategories, Category)\n : [];\n return {\n type: actionTypes.SET_HR_BENEFITS_CHOSEN_CATEGORIES_FILTERS,\n chosenCategories: domainCategories,\n chosenCategoryIds: chosenCategoryIds\n };\n};\n\nexport const setChosenTags = (chosenBenefitTags, chosenBenefitTagIds) => {\n const domainTags = !isEmpty(chosenBenefitTags)\n ? modelMapperService.mapManyToDomain(chosenBenefitTags, Tag)\n : [];\n return {\n type: actionTypes.SET_HR_BENEFITS_CHOSEN_TAGS_FILTERS,\n chosenBenefitTags: domainTags,\n chosenBenefitTagIds: chosenBenefitTagIds\n };\n};\n\nexport const resetBenefitFiltersToDefault = () => {\n return {\n type: actionTypes.SET_HR_BENEFITS_FILTERS_TO_DEFAULT\n };\n};\n\nexport const setPage = page => {\n return { type: actionTypes.SET_HR_BENEFITS_PAGE, page };\n};\n\nexport const setEditHrBenfitsInitialState = (benefitGroup, tiers) => {\n const domainTiers = modelMapperService.mapManyToDomain(tiers, Tier);\n const domainBenefitGroup = modelMapperService.mapOneToDomain(\n benefitGroup,\n BenefitGroup\n );\n\n return {\n type: actionTypes.SET_HR_EDIT_BENEFITS_INITIAL_STATE,\n benefitGroup: domainBenefitGroup,\n tiers: domainTiers\n };\n};\n\nexport const toggleBenefitGroup = isBenefitGroupActive => {\n return {\n type: actionTypes.TOGGLE_BENEFIT_GROUP,\n isBenefitGroupActive\n };\n};\n\nexport const toggleBenefitGroupInstalments = enableInstalments => {\n return {\n type: actionTypes.TOGGLE_BENEFIT_GROUP_INSTALMENTS,\n enableInstalments\n };\n};\n\nexport const setHrBenefitGroupUsers = (users, count) => {\n const domainUsers = modelMapperService.mapManyToDomain(users, Employee);\n return {\n type: actionTypes.SET_HR_BENEFIT_GROUP_USERS,\n users: domainUsers,\n count\n };\n};\n\nexport const setHrBenefitGroupUsersPage = page => {\n return {\n type: actionTypes.SET_HR_BENEFIT_GROUP_USERS_PAGE,\n page\n };\n};\n\nexport const setHrBenefitGroupCities = payload => {\n return { type: actionTypes.SET_HR_BENEFIT_GROUP_CITIES, payload };\n};\n\nexport const setHrBenefitGroupChosenCities = payload => {\n return { type: actionTypes.SET_HR_BENEFIT_GROUP_CHOSEN_CITIES, payload };\n};\n\nexport const setHrBenefitGroupChosenCityIds = payload => {\n return { type: actionTypes.SET_HR_BENEFIT_GROUP_CHOSEN_CITY_IDS, payload };\n};\n","import { apiService } from \"../api.service\";\nimport {\n BenefitGroupsResponse,\n TiersResponse,\n EmployeesResponse\n} from \"../../../models/server/responses\";\n\nimport { AvailableTiersRequest } from \"../../../models/server/requests\";\n\nimport { BenefitGroup } from \"../../../models/domain\";\nimport { isEmpty } from \"../../general.utils\";\n\nexport const getBenefitGroups = async ({\n limit,\n page,\n searchQuery,\n categoryIds,\n tagIds,\n enabledBenefitGroup,\n cityIds,\n isRemoteLoc\n}) => {\n let categoriesQuery = \"\";\n let benefitTagsQuery = \"\";\n let queryParams = \"\";\n\n if (limit) {\n queryParams += `limit=${limit}`;\n }\n\n if (page) {\n queryParams += `${!isEmpty(queryParams) ? \"&\" : \"\"}page=${page}`;\n }\n\n if (!isEmpty(categoryIds) && Array.isArray(categoryIds)) {\n categoriesQuery = categoryIds.reduce(\n (query, category) =>\n `${!isEmpty(query) ? `${query}&` : \"\"}category_id=${category}`,\n \"\"\n );\n }\n\n if (!isEmpty(categoriesQuery)) {\n queryParams += `${!isEmpty(queryParams) && \"&\"}${categoriesQuery}`;\n }\n\n if (!isEmpty(tagIds) && Array.isArray(tagIds)) {\n benefitTagsQuery = tagIds.reduce(\n (query, tag) => `${!isEmpty(query) ? `${query}&` : \"\"}tag_id=${tag}`,\n \"\"\n );\n }\n\n if (!isEmpty(benefitTagsQuery)) {\n queryParams += `${!isEmpty(queryParams) && \"&\"}${benefitTagsQuery}`;\n }\n\n if (!isEmpty(enabledBenefitGroup)) {\n queryParams += `${\n !isEmpty(queryParams) ? \"&\" : \"\"\n }enabled=${enabledBenefitGroup}`;\n }\n\n if (cityIds.length > 0) {\n queryParams += cityIds\n .filter(cityId => cityId > 0)\n .map(cityId => `&city_id=${cityId}`)\n .join(\"\");\n }\n\n if (isRemoteLoc) queryParams += `&is_remote=${true}`;\n\n let response = await apiService.get(\n `/benefit-group?${queryParams}&search=${searchQuery}`\n );\n\n if (response.hasError) return response;\n return new BenefitGroupsResponse(response);\n};\n\nexport const getBenefitGroup = async id => {\n let response = await apiService.get(`/benefit-group/${id}`);\n\n if (response.hasError) return response;\n return new BenefitGroup(response.data);\n};\n\nexport const getTiers = async () => {\n const response = await apiService.get(`/company/tiers`);\n if (response.hasError) return response;\n return new TiersResponse(response);\n};\n\nexport const getBenefitGroupUsers = async ({\n benefitGroupId,\n limit,\n page,\n orderColumns,\n searchQuery\n}) => {\n let orderQuery = \"\";\n if (orderColumns.length > 0) {\n orderQuery = orderColumns.reduce(\n (acc, column) =>\n `${acc}&order=${column.field} ${column.isSortedUp ? \"ASC\" : \"DESC\"}`,\n \"\"\n );\n }\n\n let response = await apiService.get(\n `/benefit-group/employee?benefit_group_id=${benefitGroupId}&page=${page}&limit=${limit}${orderQuery}&search=${searchQuery}`\n );\n if (response.hasError) return response;\n return new EmployeesResponse(response);\n};\n\nexport const setAvailableTiers = async ({\n benefitGroupId,\n availableTiers,\n enableInstalments\n}) => {\n const payload = new AvailableTiersRequest({\n benefitGroupId,\n availableTiers,\n enableInstalments\n });\n const response = await apiService.post(\"/company/tier/available\", payload);\n return response;\n};\n","import { apiService } from \"../api.service\";\nimport { TagsResponse } from \"../../../models/server/responses\";\nimport { TagPayload } from \"../../../models/server/payloads\";\nimport { Tag } from \"../../../models/domain\";\n\nexport const getBenefitTags = async () => {\n let response = await apiService.get(`/benefit/tags`);\n\n if (response.hasError) return response;\n\n return new TagsResponse(response);\n};\n\nexport const getBenefitTag = async id => {\n let response = await apiService.get(`/benefit/tag/${id}`);\n\n if (response.hasError) return response;\n\n return new Tag(response.data);\n};\n\nexport const addBenefitTag = async values => {\n let response = await apiService.post(\"/benefit/tag\", new TagPayload(values));\n\n if (response.hasError) return response;\n\n return new Tag(response.data);\n};\n\nexport const editBenefitTag = async (values, chosenId) => {\n let response = await apiService.put(`/benefit/tag/${chosenId}`, new TagPayload(values));\n\n if (response.hasError) return response;\n\n return new Tag(response.data);\n};\n\nexport const removeBenefitTag = async id => {\n let response = await apiService.delete(`/benefit/tag/${id}`);\n\n return response;\n};\n","import React, { useEffect, useState, useRef } from \"react\";\nimport { connect, useDispatch, useSelector } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport { BeatLoader } from \"react-spinners\";\nimport { useHistory } from \"react-router-dom\";\nimport Pagination from \"react-pagination-js\";\n// components\nimport {\n Header,\n Card,\n BenefitCard,\n SearchInput,\n MultiselectInput,\n SelectInput,\n LocationsMultiselectInput\n} from \"../../../components\";\n// styles\nimport HrBenefitsStyles from \"./HrBenefitsStyles\";\nimport { override } from \"../../../services/loadingOverride.styles\";\n// services\nimport * as actionCreators from \"../../../actions/hr/benefits.actions\";\nimport * as api from \"../../../services/api/hr/benefits.service\";\n\nimport * as employeeService from \"../../../services/api/employee/employeeBenefits.services\";\nimport * as benefitTagService from \"../../../services/api/admin/benefitTags.service\";\nimport * as benefitGroupService from \"../../../services/api/admin/benefitGroups.service\";\nimport { isEmpty } from \"../../../services/general.utils\";\nimport { useTranslation } from \"react-i18next\";\nimport { getCities } from \"../../../services/api/hr/employees.service\";\nimport { setRemoteFilter } from \"../../../actions/employee/employeeBenefits.actions\";\n\nconst LIMIT = 8;\n\nconst HrBenefits = ({\n benefitGroups,\n count,\n page,\n setBenefitGroups,\n setPage,\n setCategories,\n categories,\n setBenefitTags,\n benefitTags,\n setEnabledBenefitGroup,\n enabledBenefitGroup,\n setKeywordSearch,\n keywordSearch,\n setChosenCategories,\n chosenCategories,\n chosenCategoryIds,\n setChosenBenefitTags,\n chosenBenefitTags,\n chosenBenefitTagIds,\n resetBenefitFiltersToDefault\n}) => {\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const history = useHistory();\n\n const isCardClicked = useRef(false);\n const areFiltersLoaded = useRef(false);\n const isMounted = useRef(true);\n\n const [isLoading, setIsLoading] = useState(true);\n const [totalPages, setTotalPages] = useState(1);\n\n const [citiesPage, setCitiesPage] = useState(1);\n const [citiesSearchQuery, setCitiesSearchQuery] = useState(\"\");\n const [isRemoteLoc, setIsRemoteLoc] = useState(false);\n\n const { cities, chosenCities, chosenCityIds } = useSelector(\n state => state.benefits.filters\n );\n\n const benefitGroupAvailabilityStatusOptions = [\n { id: 1, name: t(\"enabled\"), value: true },\n { id: 2, name: t(\"disabled\"), value: false }\n ];\n\n const handleBenefitGroupAvailabilityFilterChange = option => {\n if (isEmpty(option)) {\n setEnabledBenefitGroup(\"\");\n }\n if (!isEmpty(option)) {\n setEnabledBenefitGroup(option);\n }\n\n setPage(1);\n };\n\n const handleSearch = searchText => {\n setKeywordSearch(searchText);\n setPage(1);\n };\n\n const handleFetchAfterSearch = () => {\n fetchData();\n };\n\n /**\n * Handles select of element from multiselect.\n * Sets selected elements' ids to state.\n * @param {Category} options - Selected options, emmited from multiselect.\n */\n const handleSetChosenCategories = options => {\n let selectedCategoryIds = [];\n\n if (options && options.length) {\n selectedCategoryIds = options.map(category => category.id);\n }\n\n setChosenCategories(options, selectedCategoryIds);\n setPage(1);\n };\n\n /**\n * Handles select of element from multiselect.\n * Sets selected elements' ids to state.\n * @param {Tag} options - Selected options, emmited from multiselect.\n */\n const handleSetChosenBenefitTags = options => {\n let selectedBenefitTagIds = [];\n\n if (options && options.length) {\n selectedBenefitTagIds = options.map(tag => tag.id);\n }\n\n setChosenBenefitTags(options, selectedBenefitTagIds);\n setPage(1);\n };\n\n const fetchFilters = async () => {\n await fetchCategories();\n await fetchBenefitTags();\n\n areFiltersLoaded.current = true;\n };\n\n const fetchCategories = async () => {\n const categoriesResponse = await employeeService.getCategories();\n\n if (categoriesResponse.hasError) {\n return toast.error(\n categoriesResponse.errorMessage\n ? categoriesResponse.errorMessage\n : t(\"failed_to_get_categories\")\n );\n }\n\n setCategories(categoriesResponse.categories);\n };\n\n const fetchBenefitTags = async () => {\n const benefitTagsData = await benefitTagService.getBenefitTags();\n\n if (benefitTagsData.hasError) {\n return toast.error(\n benefitTagsData.errorMessage\n ? benefitTagsData.errorMessage\n : t(\"failed_to_get_benefit_tags\")\n );\n }\n\n setBenefitTags(benefitTagsData.tags);\n };\n\n const fetchData = async () => {\n const response = await api.getBenefitGroups({\n limit: LIMIT,\n page,\n searchQuery: keywordSearch,\n categoryIds: chosenCategoryIds,\n tagIds: chosenBenefitTagIds,\n enabledBenefitGroup: enabledBenefitGroup.value,\n cityIds: chosenCityIds,\n isRemoteLoc\n });\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_benefit_groups\")\n );\n }\n\n if (isMounted.current) {\n setBenefitGroups(response.groups, response.count);\n setIsLoading(false);\n }\n // setTimeout delays animation until content is ready to be displayed (set to state)\n setTimeout(() => {\n const list = document.getElementById(\"benefitGroupList\");\n if (list && isMounted.current) {\n list.style.opacity = 1;\n }\n }, 100);\n };\n\n /**\n * If benefit group is marked as new, sends request to DB for updating status.\n * @param {number} benefitGroupId\n * @param {number} isBenefitGroupNew\n */\n const handleBenefitCardClick = async (benefitGroupId, isBenefitGroupNew) => {\n isCardClicked.current = true;\n if (isBenefitGroupNew) {\n await benefitGroupService.markNewBenefitGroupAsSeen(benefitGroupId);\n }\n\n history.push(`/benefits/edit/${benefitGroupId}`);\n };\n\n /**\n * Handles changing of page.\n * Sets page to store.\n * Scrolls window to top.\n * @param {number} page\n */\n const handleSetPage = page => {\n setPage(page);\n\n setTimeout(() => {\n window.scrollTo({\n top: 0,\n behavior: \"smooth\"\n });\n }, 200);\n };\n\n useEffect(() => {\n fetchData();\n fetchFilters();\n }, [page, chosenCityIds]);\n\n useEffect(() => {\n if (areFiltersLoaded.current === true) fetchData();\n }, [\n chosenCategoryIds,\n chosenBenefitTagIds,\n enabledBenefitGroup,\n keywordSearch\n ]);\n\n useEffect(() => {\n return () => {\n isMounted.current = false;\n if (!isCardClicked.current) {\n resetBenefitFiltersToDefault();\n }\n };\n }, []);\n\n const refetchCities = async () => {\n let currentPage = citiesPage;\n let newPage = (currentPage += 1);\n\n if (newPage > totalPages) return;\n\n setCitiesPage(newPage);\n\n const response = await getCities(citiesSearchQuery, newPage);\n\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n let newCities = [];\n setTimeout(() => {\n newCities = [...cities, ...response.cities];\n setTimeout(() => {\n dispatch(actionCreators.setHrBenefitGroupCities(newCities));\n }, 100);\n }, 100);\n };\n\n const fetchCities = async () => {\n const response = await getCities(citiesSearchQuery, citiesPage);\n\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n const remoteOption = { id: 0, name: \"Remote\" };\n const cities = [remoteOption].concat(response.cities);\n\n dispatch(actionCreators.setHrBenefitGroupCities(cities));\n setTotalPages(response.pages);\n };\n\n const handleInputChange = newValue => {\n if (newValue === \"\") setIsRemoteLoc(false);\n\n setCitiesPage(1);\n setCitiesSearchQuery(newValue);\n\n return newValue;\n };\n\n const handleSelect = (options, action) => {\n setPage(1);\n let selectedCityIds = [];\n\n if (options && options.length) {\n selectedCityIds = options.map(city => city.id);\n }\n\n if (action.action === \"select-option\" && action.option.name === \"Remote\") {\n setIsRemoteLoc(true);\n }\n\n if (\n action.action === \"remove-value\" &&\n action.removedValue.name === \"Remote\"\n ) {\n setIsRemoteLoc(false);\n }\n\n dispatch(actionCreators.setHrBenefitGroupChosenCityIds(selectedCityIds));\n dispatch(actionCreators.setHrBenefitGroupChosenCities(options));\n };\n\n useEffect(() => {\n fetchCities();\n }, [citiesPage, citiesSearchQuery]);\n\n return (\n \n
\n
\n {isLoading ? (\n \n \n
\n ) : (\n
\n \n
\n \n
\n
\n
\n handleSetChosenCategories(option)}\n selectedValues={chosenCategories}\n />\n handleSetChosenBenefitTags(option)}\n selectedValues={chosenBenefitTags}\n />\n \n handleBenefitGroupAvailabilityFilterChange(option)\n }\n value={enabledBenefitGroup}\n clearable={true}\n customClass=\"hrBenefitsSearch\"\n customHeight\n placeholder={t(\"filter_by_status\")}\n minWidth=\"180px\"\n isClearable\n />\n \n \n
\n
\n
\n
\n {benefitGroups.map(benefitGroup => {\n return (\n \n handleBenefitCardClick(\n benefitGroup.id,\n benefitGroup.isBenefitGroupNew\n )\n }\n />\n );\n })}\n
\n \n handleSetPage(currentPage)}\n theme=\"border-bottom\"\n />\n \n \n \n )}\n \n
\n );\n};\n\nconst mapStateToProps = state => {\n return {\n benefitGroups: state.benefits.benefitsPage.benefitGroups,\n categories: state.benefits.filters.categories,\n benefitTags: state.benefits.filters.tags,\n enabledBenefitGroup: state.benefits.filters.enabledBenefitGroup,\n keywordSearch: state.benefits.filters.keywordSearch,\n chosenCategories: state.benefits.filters.chosenCategories,\n chosenCategoryIds: state.benefits.filters.chosenCategoryIds,\n chosenBenefitTags: state.benefits.filters.chosenBenefitTags,\n chosenBenefitTagIds: state.benefits.filters.chosenBenefitTagIds,\n count: state.benefits.benefitsPage.count,\n page: state.benefits.benefitsPage.page\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setBenefitGroups: (benefitGroups, count) =>\n dispatch(actionCreators.setBenefitGroups(benefitGroups, count)),\n setCategories: categories =>\n dispatch(actionCreators.setCategories(categories)),\n setBenefitTags: tags => dispatch(actionCreators.setTags(tags)),\n setEnabledBenefitGroup: enabledBenefitGroup =>\n dispatch(actionCreators.setEnabledBenefitGroup(enabledBenefitGroup)),\n setKeywordSearch: keywordSearch =>\n dispatch(actionCreators.setKeywordSearch(keywordSearch)),\n setChosenCategories: (chosenCategories, chosenCategoryIds) =>\n dispatch(\n actionCreators.setChosenCategories(chosenCategories, chosenCategoryIds)\n ),\n setChosenBenefitTags: (chosenTags, chosenTagIds) =>\n dispatch(actionCreators.setChosenTags(chosenTags, chosenTagIds)),\n setPage: page => dispatch(actionCreators.setPage(page)),\n resetBenefitFiltersToDefault: () =>\n dispatch(actionCreators.resetBenefitFiltersToDefault())\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(HrBenefits);\n","import HrBenefits from \"./HrBenefits\";\n\nexport default HrBenefits;\n","import styled from \"styled-components\";\n\nconst BasicInfoStyles = styled.div`\n margin: 0 0 37px 0;\n\n .benefitLogo {\n width: 100%;\n height: 140px;\n overflow: hidden;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n }\n\n .img {\n object-fit: cover;\n width: 100%;\n height: 100%;\n }\n\n .content {\n padding: 0 30px;\n position: relative;\n\n .imgContainerOuter {\n position: absolute;\n top: -30px;\n z-index: 2;\n width: 98px;\n height: 98px;\n border-radius: 49px;\n background: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .imgContainerInner {\n width: 92px;\n height: 92px;\n border-radius: 46px;\n overflow: hidden;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .providerImg {\n height: 100%;\n object-fit: cover;\n width: 100%;\n }\n }\n\n .textContent {\n margin-left: 112px;\n padding-top: 11px;\n\n .title {\n font-size: 24px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #354052;\n }\n\n .benefitGroupDescription {\n width: 80%;\n max-width: 1064px;\n color: #919ba8;\n word-break: break-word;\n font-size: 14px;\n ol {\n margin-left: 18px;\n }\n ul {\n margin-left: 18px;\n }\n }\n\n .taxes {\n width: 80%;\n max-width: 1064px;\n color: #919ba8;\n word-break: break-word;\n font-size: 14px;\n font-style: italic;\n margin-top: 10px;\n }\n\n .benefitGroupSummary {\n width: 80%;\n max-width: 1064px;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.36;\n letter-spacing: normal;\n color: #919ba8;\n word-break: break-word;\n }\n\n .locations {\n font-weight: 500;\n color: black;\n margin-top: 15px;\n word-wrap: break-word;\n font-size: 14px;\n font-stretch: normal;\n line-height: 1.36;\n }\n }\n }\n`;\n\nexport default BasicInfoStyles;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\nimport ReactHtmlParser from 'react-html-parser';\n\nimport BasicInfoStyles from \"./BasicInfoStyles\";\n\n// Utils\nimport { getUrl } from \"../../../../services/imageHandler\";\n\n// Renderers\nimport { renderLocations } from \"../../../../renderers/locations.renderer\";\nimport { doesDescriptionExist } from \"../../../../services/textEditor.utils\";\n\nconst BasicInfo = ({\n benefitGroupLogo = \"\",\n providerPhoto = \"\",\n benefitGroupName = \"\",\n disableTiersComponent,\n benefitGroupDescription = \"\",\n taxes = \"\",\n benefitGroupSummary,\n benefitGroupLocations = [],\n isRemote,\n urlSizeCover = 'url'\n}) => {\n return (\n \n
\n \n
\n
\n
\n
\n \n
\n
\n
\n

{benefitGroupName}

\n
{disableTiersComponent}
\n {doesDescriptionExist(benefitGroupDescription)\n ? (\n
\n {\n ReactHtmlParser(benefitGroupDescription)\n }\n
\n )\n : (

{benefitGroupSummary}

)\n }\n
{taxes}
\n {renderLocations(benefitGroupLocations, isRemote)}\n
\n
\n
\n )\n};\n\nBasicInfo.propTypes = {\n benefitGroupLogo: PropTypes.shape(),\n providerPhoto: PropTypes.shape(),\n benefitGroupDescription: PropTypes.string,\n benefitGroupName: PropTypes.string,\n disableTiersComponent: PropTypes.node\n};\n\nconst mapStateToProps = state => {\n return {\n benefitGroupName: state.benefits.editPageState.benefitGroup.name,\n providerPhoto: state.benefits.editPageState.benefitGroup.provider?.photo,\n benefitGroupLogo: state.benefits.editPageState.benefitGroup.photo,\n benefitGroupSummary: state.benefits.editPageState.benefitGroup.summary,\n benefitGroupDescription:\n state.benefits.editPageState.benefitGroup.description,\n taxes: state.benefits.editPageState.benefitGroup.taxes,\n benefitGroupLocations: state.benefits.editPageState.benefitGroup.cities,\n isRemote: state.benefits.editPageState.benefitGroup.isRemote\n };\n};\n\nexport default connect(mapStateToProps, null)(BasicInfo);\n","import styled from \"styled-components\";\n\nconst EditBenefitOptionsStyles = styled.div`\n margin: 30px 0 60px 0;\n\n .tiersLabel {\n font-size: 16px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n margin-bottom: 30px;\n }\n\n .checkboxesContainer {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n margin: 0 0 20px 0;\n }\n\n .checkboxContainer {\n display: flex;\n align-items: center;\n width: 200px;\n height: 100%;\n margin: 0 36px 20px 0;\n }\n\n .message {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n }\n`;\n\nexport default EditBenefitOptionsStyles;\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\n\nimport { InputLabel, CheckboxInput } from \"../../../../components\";\n\nimport EditBenefitOptionsStyles from \"./EditBenefitOptionsStyles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst EditBenefitOptions = ({\n tiers,\n availableTiers,\n disabled,\n handleChange,\n handleCheckUncheckAll\n}) => {\n const { t } = useTranslation();\n const tierIds = tiers.map(tier => tier.id);\n\n const isSomeTierChecked = availableTiers.some(tierId =>\n tierIds.includes(tierId)\n );\n\n return (\n \n
\n handleCheckUncheckAll(tierIds, isSomeTierChecked)}\n />\n \n
\n
\n {tiers.length > 0 ? (\n tiers.map(tier => (\n
\n handleChange(tier.id)}\n />\n \n
\n ))\n ) : (\n
\n

{t(\"tiers_info\")}

\n
\n )}\n
\n
\n );\n};\n\nEditBenefitOptions.propTypes = {\n tiers: PropTypes.arrayOf(PropTypes.shape()),\n disabled: PropTypes.bool,\n handleChange: PropTypes.func\n};\n\nconst mapStateToProps = state => {\n return {\n tiers: state.benefits.editPageState.tiers,\n disabled: state.benefits.editPageState.isBenefitGroupActive\n };\n};\n\nexport default connect(mapStateToProps, null)(EditBenefitOptions);\n","import styled from \"styled-components\";\n\nconst ToggleButtonStyles = styled.div`\n display: flex;\n align-items: center;\n\n .activationCheckBox {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 55px;\n height: 25px;\n border-radius: 16px;\n border: 2px solid\n ${({ isActive, tiers }) => {\n if (tiers > 0) {\n if (isActive) {\n return \"#41c264\";\n }\n return \"#ce1212\";\n }\n return \"#d8d8d8\";\n }};\n padding: 5px;\n margin-right: 8px;\n position: relative;\n }\n\n .dot {\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: ${({ isActive, tiers }) => {\n if (tiers > 0) {\n if (isActive) {\n return \"#41c264\";\n }\n return \"#ce1212\";\n }\n return \"#d8d8d8\";\n }};\n cursor: pointer;\n }\n\n .activityOnText {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: ${({ tiers }) => {\n if (tiers > 0) {\n return \"#41c264\";\n }\n return \"#d8d8d8\";\n }};\n }\n\n .activationOffText {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: ${({ tiers }) => {\n if (tiers > 0) {\n return \"#ce1212\";\n }\n return \"#d8d8d8\";\n }};\n }\n\n .benefitActivityStatusText {\n font-size: 16px;\n font-weight: 500;\n width: 209px;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: ${({ tiers }) => {\n if (tiers > 0) {\n return \"#4b4b4b\";\n }\n return \"#d8d8d8\";\n }};\n }\n\n @media screen and (min-width: 767px) {\n .activationCheckBox {\n width: unset;\n }\n .benefitActivityStatusText {\n width: unset;\n }\n }\n`;\n\nexport default ToggleButtonStyles;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\n\nimport ToggleButtonStyles from \"./ToggleButtonStyles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ToggleButton = ({ tiers, isActive, onToggle }) => {\n const { t } = useTranslation();\n\n return (\n \n
\n {isActive &&

{t(\"on\")}

}\n
0 && onToggle} />\n {!isActive &&

{t(\"off\")}

}\n
\n {isActive ? (\n

{t(\"bg_enabled\")}

\n ) : (\n

{t(\"bg_disabled\")}

\n )}\n \n );\n};\n\nToggleButton.propTypes = {\n isActive: PropTypes.bool,\n onToggle: PropTypes.func,\n tiers: PropTypes.number\n};\n\nconst mapStateToProps = state => {\n return {\n isActive: state.benefits.editPageState.isBenefitGroupActive,\n tiers: state.benefits.editPageState.tiers.length\n };\n};\n\nexport default connect(mapStateToProps, null)(ToggleButton);\n","import ToggleButton from \"./ToggleButton\";\n\nexport default ToggleButton;\n","import styled from \"styled-components\";\n\nexport const ActivitySectionStyles = styled.div`\n display: flex;\n align-items: center;\n\n .benefitActivityInfo {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n width: 204px;\n }\n .iconContainer {\n width: 12px;\n height: 12px;\n background: #a1a3a7;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #ffffff;\n font-size: 6px;\n font-weight: bold;\n margin-left: 8px;\n }\n\n .tooltip {\n width: 232px;\n background: #282a3b !important;\n border: 1px solid #282a3b !important;\n padding: 0 5px;\n border-radius: 4px;\n font-size: 13px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.38;\n letter-spacing: -0.22px;\n color: #ffffff;\n }\n\n .__react_component_tooltip.show {\n opacity: 1;\n margin-left: 0;\n visibility: visible;\n }\n\n .tooltip:after {\n border-top: 8px solid #282a3b !important;\n margin-left: -3px !important;\n }\n`;\n","import React from \"react\";\nimport ReactTooltip from \"react-tooltip\";\n\nimport { InfoIconSvg } from \"../../../../assets/Icons\";\n\nimport ToggleButton from \"./toggleButton\";\n\nimport { ActivitySectionStyles } from \"./activitySection.styles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ActivitySection = ({ onToggle }) => {\n const { t } = useTranslation();\n\n return (\n \n \n \n \n \n \n {t(\"disable_benefit_warning\")}\n \n \n );\n};\n\nexport default ActivitySection;\n","import styled from \"styled-components\";\n\nexport const BenefitGroupUsersTableStyles = styled.div`\n padding: 0 30px;\n\n .header {\n display: flex;\n justify-content: space-between;\n }\n\n .tableHead {\n padding: 0 30px;\n display: flex;\n align-items: center;\n }\n\n .tableRow {\n background: #f7f7f7;\n padding: 30px;\n margin: 20px 0 0 0;\n border-radius: 4px;\n }\n`;\n","import React from \"react\";\nimport ReactTooltip from \"react-tooltip\";\nimport styled from \"styled-components\";\n\nimport { InfoIconSvg } from \"../../assets/Icons\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Styles = styled.div`\n /* margin: 0 87px 0 0; */\n cursor: pointer;\n\n .tooltip {\n background: #ffffff !important;\n border: 1px solid #1568bf;\n color: #757575 !important;\n padding: 0;\n border-radius: 4px;\n font-size: 13px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.85;\n letter-spacing: 0.2px;\n text-align: center;\n padding: 0 8px;\n\n .arrow {\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n bottom: -7px;\n left: 50%;\n position: absolute;\n border-top: 8px solid white !important;\n margin-left: -3px !important;\n width: 10px;\n height: 10px;\n z-index: 2;\n }\n }\n\n .tooltip:after {\n border-top: 8px solid #1568bf !important;\n margin-left: -3px !important;\n\n .__react_component_tooltip.place-top {\n &:after {\n bottom: -8px !important;\n }\n }\n\n .__react_component_tooltip.show {\n opacity: 0.9 !important;\n margin-top: -10px !important;\n margin-left: 0px !important;\n visibility: visible;\n }\n }\n`;\n\nconst InfoPopUp = ({ text, id }) => {\n const { t } = useTranslation();\n\n return (\n \n \n \n \n \n {t(text)}\n \n \n \n );\n};\n\nexport default InfoPopUp;\n","import React from \"react\";\nimport InfoPopUp from \"../../../../../components/InfoPopUp/InfoPopUp\";\n\nconst tableHead = [\n {\n id: 1,\n headName: \"Name\",\n field: \"name\",\n isSortedUp: null,\n width: \"20%\",\n justifyContent: \"flex-start\",\n isSortable: true,\n margin: \"\"\n },\n {\n id: 2,\n headName: \"Tier\",\n field: \"tier\",\n isSortedUp: null,\n width: \"15%\",\n justifyContent: \"center\",\n isSortable: true,\n margin: \"\"\n },\n {\n id: 3,\n headName: \"Budget\",\n field: \"tokens\",\n isSortedUp: null,\n width: \"20%\",\n justifyContent: \"center\",\n isSortable: false,\n margin: \"\",\n Component: \n },\n {\n id: 4,\n headName: \"Total benefits\",\n field: \"total_benefits\",\n isSortedUp: null,\n width: \"25%\",\n justifyContent: \"center\",\n isSortable: true,\n margin: \"\",\n Component: (\n \n )\n },\n {\n id: 5,\n headName: \"Benefit\",\n field: \"benefit\",\n isSortedUp: null,\n width: \"20%\",\n justifyContent: \"center\",\n isSortable: true,\n margin: \"\"\n }\n];\n\nexport { tableHead };\n","let priorityCounter = 0\n\nexport const tableHeaderReducer = (state, action) => {\n const tableHeaders = state.map(tableHeader => {\n if (tableHeader.id === action.type) {\n return {\n ...tableHeader,\n isSortedUp: !tableHeader.isSortedUp,\n orderPriority: priorityCounter\n }\n }\n return {\n ...tableHeader\n }\n })\n priorityCounter += 1\n return tableHeaders\n}\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nconst UserBenefitsCount = ({ count }) => {\n return <>{count};\n};\n\nUserBenefitsCount.propTypes = {\n count: PropTypes.number\n};\n\nexport default UserBenefitsCount;\n","export const getOrderColumns = (tableHeaders) => tableHeaders\n\t.filter(tHeader =>\n\t\ttHeader.isSortable && tHeader.isSortedUp !== null\n\t)\n\t.map(tHeader => ({\n\t\tfield: tHeader.field,\n\t\tisSortedUp: tHeader.isSortedUp,\n\t\torderPriority: tHeader.orderPriority\n\t}))\n\t.sort((a, b) => b.orderPriority - a.orderPriority)\n","import React, { useEffect, useReducer } from \"react\";\nimport { connect } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport Pagination from \"react-pagination-js\";\nimport \"react-pagination-js/dist/styles.css\";\n// styles\nimport { BenefitGroupUsersTableStyles } from \"./benefitGroupUsersTable.styles\";\n// builder\nimport { tableHead, tableHeaderReducer } from \"./builder\";\n// components\nimport {\n Card,\n TextAndLine,\n Table,\n TableHead,\n TableRow,\n ListPlaceHolder,\n SearchInput\n} from \"../../../../components\";\nimport UserBenefitsCount from \"./UserBenefitsCount/UserBenefitsCount\";\n//services\nimport * as actionCreators from \"../../../../actions/hr/benefits.actions\";\nimport * as api from \"../../../../services/api/hr/benefits.service\";\nimport { getOrderColumns } from \"../../../../services/getOrderColumns\";\nimport { useTranslation } from \"react-i18next\";\nimport { transformTokensToRsd } from \"../../../../utils/transformTokensToRsd\";\n\n// config\nconst LIMIT = 20;\n\nconst BenefitGroupUsersTable = ({\n benefitGroupId,\n users,\n page,\n count,\n setHrBenefitGroupUsers,\n setHrBenefitGroupUsersPage\n}) => {\n const { t } = useTranslation();\n const [tableHeaders, dispatch] = useReducer(tableHeaderReducer, tableHead);\n let search = \"\";\n\n const handleFetchAfterSearch = () => {\n getBenefitGroupUsers();\n };\n\n const handleSearch = searchText => {\n search = searchText;\n };\n\n const getBenefitGroupUsers = async () => {\n const response = await api.getBenefitGroupUsers({\n benefitGroupId,\n limit: LIMIT,\n page,\n orderColumns: getOrderColumns(tableHeaders),\n searchQuery: search\n });\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_benefit_group_users\")\n );\n }\n\n setHrBenefitGroupUsers(response.employees, response.count);\n };\n\n useEffect(() => {\n getBenefitGroupUsers();\n }, [page, tableHeaders]);\n\n const toggleSortFunc = id => {\n dispatch({ type: id });\n };\n\n return (\n \n \n
\n \n \n
\n {users.length ? (\n <>\n \n
\n {tableHeaders.map(tableColumn => (\n \n ))}\n
\n\n
\n {users.map(activeUser => (\n = 0\n ? activeUser.remainingTokens\n : 0\n )}\n columnThree={transformTokensToRsd(activeUser.tier.tokens)}\n columnFour={\n \n }\n additionalLinkParams=\"\"\n columnFive={activeUser.userBenefits.title}\n tableStylings={{\n firstColWidth: \"20%\",\n firstColJustifyContent: \"flex-start\",\n firstColPadding: \"0\",\n firstColMargin: \"0\",\n secondColWidth: \"15%\",\n secondColJustifyContent: \"center\",\n secondColPadding: \"0\",\n secondColMargin: \"0\",\n thirdColWidth: \"20%\",\n thirdColJustifyContent: \"center\",\n thirdColPadding: \"0\",\n thirdColMargin: \"0\",\n forthColWidth: \"25%\",\n forthColJustifyContent: \"center\",\n forthColPadding: \"0\",\n forthColMargin: \"0\",\n fifthColWidth: \"20%\",\n fifthColJustifyContent: \"center\",\n fifthColPadding: \"0\",\n fifthColMargin: \"\"\n }}\n />\n ))}\n
\n
\n \n setHrBenefitGroupUsersPage(page)}\n theme=\"border-bottom\"\n />\n
\n \n ) : (\n \n )}\n \n \n );\n};\n\nconst mapStateToProps = state => {\n return {\n users: state.benefits.editPageState.users,\n page: state.benefits.editPageState.page,\n count: state.benefits.editPageState.count\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setHrBenefitGroupUsers: (users, count) =>\n dispatch(actionCreators.setHrBenefitGroupUsers(users, count)),\n setHrBenefitGroupUsersPage: page =>\n dispatch(actionCreators.setHrBenefitGroupUsersPage(page))\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(BenefitGroupUsersTable);\n","import styled from \"styled-components\";\n\nexport const PreviewModalStyles = styled.div`\n max-width: 1400px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 30px 30px 30px;\n\n .canvas-padding {\n padding: 80px;\n }\n\n .html2canvas-container { width: 3000px !important; height: 3000px !important; }\n`;\n","import React, { useEffect, useState, useRef } from \"react\";\nimport { connect } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\nimport html2canvas from \"html2canvas\";\nimport { Card } from \"@material-ui/core\";\n// styles\nimport { PreviewModalStyles } from \"./PreviewModalStyles\";\n// Services\nimport * as benefitGroupService from \"../../../../services/api/admin/benefitGroups.service\";\nimport * as actionCreators from \"../../../../actions/employee/employeeBenefits.actions\";\nimport * as employeeBenefitsService from \"../../../../services/api/employee/employeeBenefits.services\";\n// components\nimport { BenefitCard, Button } from \"../../../../components\";\nimport BenefitSubscribe from \"../../../EmployeePages/EmployeeBenefits/benefitSubscribe\";\nimport { useTranslation } from \"react-i18next\";\n\nconst PreviewModal = ({\n benefitGroup,\n benefitGroupId,\n setChosenBenefitGroup,\n chosenBenefitGroup\n}) => {\n const { t } = useTranslation();\n const [isDisabled, setIsDisabled] = useState(false);\n const [usedBenefits, setUsedBenefits] = useState([]);\n\n /**\n * Returns benefit group for preview.\n * Sets benefit group to state.\n */\n const getBenefitGroupForPreview = async () => {\n const response = await benefitGroupService.getBenefitGroupForPreview(\n benefitGroupId\n );\n\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n setChosenBenefitGroup(response);\n };\n\n /**\n * Prepares div for download.\n * Formats div to canvas.\n * Calls downloadImage function.\n */\n const downloadPreview = async () => {\n setIsDisabled(true);\n const previewCanvas = document.getElementById(\"preview-wrapper\");\n const canvas = await html2canvas(previewCanvas, {\n allowTaint: true,\n useCORS: true,\n windowHeight: (window.outerHeight + window.innerHeight) * 4,\n scale: 2\n });\n const image = canvas.toDataURL(\"image/png\", 1.0);\n\n downloadImage(image, \"preview.png\", previewCanvas);\n };\n\n const downloadImage = (blob, fileName, canvas) => {\n const fakeLink = window.document.createElement(\"a\");\n fakeLink.style = \"display: none\";\n fakeLink.download = fileName;\n\n fakeLink.href = blob;\n\n document.body.appendChild(fakeLink);\n fakeLink.click();\n document.body.removeChild(fakeLink);\n\n fakeLink.remove();\n setIsDisabled(false);\n };\n\n const fetchAlreadyUsedBenefits = async () => {\n const response = await employeeBenefitsService.getAlreadyUsedBenefits(\n benefitGroupId\n );\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_used_benefits\")\n );\n }\n\n setUsedBenefits(response.usedBenefits);\n };\n\n useEffect(() => {\n getBenefitGroupForPreview();\n fetchAlreadyUsedBenefits();\n }, []);\n\n return (\n \n {t(\"preview\")}\n {chosenBenefitGroup && (\n \n {}}\n isPreview\n />\n \n \n \n \n )}\n
\n downloadPreview()}\n disabled={isDisabled}\n >\n {t(\"download\")}\n \n
\n
\n );\n};\n\nPreviewModal.propTypes = {\n benefitGroupId: PropTypes.number\n};\n\nconst mapStateToProps = state => {\n return {\n chosenBenefitGroup:\n state.employeeBenefitsPage.pageFrontEndStates.chosenBenefitGroup\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setChosenBenefitGroup: benefitGroup =>\n dispatch(actionCreators.setChosenBenefitGroup(benefitGroup))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(PreviewModal);\n","import styled from \"styled-components\";\n\nconst ToggleButtonComponentStyles = styled.div`\n display: flex;\n align-items: center;\n\n .activationCheckBox {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 55px;\n height: 25px;\n border-radius: 16px;\n border: 2px solid;\n border-color: ${({ enableInstalments }) => {\n if (enableInstalments) {\n return \"#41c264\";\n }\n return \"#ce1212\";\n }};\n padding: 5px;\n margin-right: 8px;\n position: relative;\n }\n\n .dot {\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: ${({ enableInstalments }) => {\n if (enableInstalments) {\n return \"#41c264\";\n }\n return \"#ce1212\";\n }};\n cursor: pointer;\n }\n\n .activityOnText {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #41c264;\n }\n\n .activationOffText {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #ce1212;\n }\n\n .benefitActivityStatusText {\n font-size: 16px;\n font-weight: 500;\n width: 209px;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n }\n\n @media screen and (min-width: 767px) {\n .activationCheckBox {\n width: unset;\n }\n .benefitActivityStatusText {\n width: unset;\n }\n }\n`;\n\nexport default ToggleButtonComponentStyles;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { connect } from \"react-redux\";\n\nimport ToggleButtonComponentStyles from \"./ToggleButtonComponentStyles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ToggleButtonComponent = ({ enableInstalments, onToggle }) => {\n const { t } = useTranslation();\n\n return (\n \n
\n {enableInstalments &&

{t(\"on\")}

}\n
\n {!enableInstalments &&

{t(\"off\")}

}\n
\n {enableInstalments ? (\n

{t(\"installments_enabled\")}

\n ) : (\n

\n {t(\"installments_disabled\")}\n

\n )}\n \n );\n};\n\nToggleButtonComponent.propTypes = {\n isActive: PropTypes.bool,\n onToggle: PropTypes.func,\n tiers: PropTypes.number\n};\n\nconst mapStateToProps = state => {\n return {\n enableInstalments:\n state.benefits.editPageState.benefitGroup.enableInstalments\n };\n};\n\nexport default connect(mapStateToProps, null)(ToggleButtonComponent);\n","import ToggleButton from \"./ToggleButton\";\n\nexport default ToggleButton;\n","import styled from \"styled-components\";\n\nexport const BenefitGroupInstalmentsSectionStyles = styled.div`\n display: flex;\n align-items: center;\n margin: 0 0 20px 0;\n\n .benefitActivityInfo {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n width: 204px;\n }\n .iconContainer {\n width: 12px;\n height: 12px;\n background: #a1a3a7;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #ffffff;\n font-size: 6px;\n font-weight: bold;\n margin-left: 8px;\n }\n\n .tooltip {\n width: 232px;\n background: #282a3b !important;\n border: 1px solid #282a3b !important;\n padding: 0 5px;\n border-radius: 4px;\n font-size: 13px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.38;\n letter-spacing: -0.22px;\n color: #ffffff;\n }\n\n .__react_component_tooltip.show {\n opacity: 1;\n margin-left: 0;\n visibility: visible;\n }\n\n .tooltip:after {\n border-top: 8px solid #282a3b !important;\n margin-left: -3px !important;\n }\n`;\n","import React from \"react\";\nimport ReactTooltip from \"react-tooltip\";\n\nimport { InfoIconSvg } from \"../../../../assets/Icons\";\n\nimport ToggleButton from \"./toggleButton\";\n\nimport { BenefitGroupInstalmentsSectionStyles } from \"./BenefitGroupInstalmentsSection.styles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BenefitGroupInstalmentsSection = ({ onToggle, enableInstalments }) => {\n const { t } = useTranslation();\n\n return (\n \n \n \n \n \n \n {t(\"disable_installments_warning\")}\n \n \n );\n};\n\nexport default BenefitGroupInstalmentsSection;\n","import styled from \"styled-components\";\n\nconst EditHrBenefitStyles = styled.section`\n height: 100vh;\n .editHrBenefitsContainer {\n width: calc(100% - 210px);\n margin-left: 210px;\n background: whitesmoke;\n min-height: 100vh;\n }\n\n .editHrBenefitsContent {\n padding: 0 30px 30px 30px;\n }\n\n #benefitGroupCard {\n opacity: 0;\n transition: all 0.4s ease-in-out;\n }\n\n .buttonsContainer {\n display: flex;\n justify-content: space-between;\n }\n\n .submitContainer {\n display: flex;\n }\n`;\n\nexport default EditHrBenefitStyles;\n","import styled from \"styled-components\";\n\nconst BenefitGroupBenefitPreviewStyles = styled.section`\n padding: 0 30px;\n margin: 30px 0;\n display: flex;\n justify-content: center;\n\n .benefitGroupBenefitPreviewWrapper {\n min-width: 100%;\n max-width: 1064px;\n }\n`;\n\nexport default BenefitGroupBenefitPreviewStyles;\n","import styled from \"styled-components\";\n\nconst BenefitGroupBenefitPreviewListStyles = styled.section`\n max-width: 1064px;\n\n // Styles for single item\n .benefitGroupPreviewItemWrapper {\n display: flex;\n flex-direction: column;\n\n &:first-child {\n border-top: 0.5px solid #f0f0f0;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n }\n\n &:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n }\n\n .benefitGroupPreviewItem {\n width: 100%;\n padding: 15px 15px 20px 15px;\n border-radius: 4px;\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.11);\n border: solid 1px #e6eaee;\n background-color: #ffffff;\n margin-bottom: 12px;\n position: relative;\n\n .benefitGroupPreviewItemTitleBlock {\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n .title {\n width: 39%;\n font-size: 16px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n color: #354052;\n }\n\n .remainingQuantity {\n font-weight: 500;\n font-size: 13px;\n color: #616161;\n }\n }\n\n .benefitDescription {\n margin-top: 15px;\n word-wrap: break-word;\n color: #000000;\n font-size: 14px;\n }\n\n .benefitSummary {\n margin-top: 15px;\n word-wrap: break-word;\n color: #000000;\n font-size: 14px;\n }\n\n .benefitExpirationAndTokens {\n display: flex;\n align-items: center;\n margin-top: 12px;\n }\n\n .duration {\n min-width: 11%;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n letter-spacing: -0.2px;\n color: #373737;\n opacity: 0.8;\n margin-right: 2px;\n }\n\n .tokenContainer {\n display: flex;\n align-items: center;\n }\n\n .tokens {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 2;\n letter-spacing: -0.2px;\n color: #373737;\n opacity: 0.8;\n margin-left: 4px;\n }\n }\n }\n`;\n\nexport default BenefitGroupBenefitPreviewListStyles;\n","import React from \"react\";\n\nimport {\n transformPriceRangeTokensToPriceRangeRsd,\n transformTokenCurrencyIcons\n} from \"../../../../../utils/transformTokensToRsd\";\nimport ReactHtmlParser from \"react-html-parser\";\nimport { useTranslation } from \"react-i18next\";\nimport { isEmpty } from \"../../../../../services/general.utils\";\nimport { doesDescriptionExist } from \"../../../../../services/textEditor.utils\";\n\nexport const BenefitGroupBenefitPreviewItem = props => {\n const { benefit, getVoucherPrices, getBenefitPrice } = props;\n\n const { t } = useTranslation();\n\n return (\n
\n
\n
\n

{benefit.title}

\n {!isEmpty(benefit.quantity) &&\n !isEmpty(benefit.totalQuantityRemaining) &&\n !benefit.isSubscribed && (\n
\n {benefit.totalQuantityRemaining} {t(\"remaining\")}\n
\n )}\n {!isEmpty(benefit.quantity) &&\n isEmpty(benefit.totalQuantityRemaining) &&\n !benefit.isSubscribed && (\n
\n {benefit.quantity} {t(\"remaining\")}\n
\n )}\n
\n {doesDescriptionExist(benefit.description) ? (\n
\n {ReactHtmlParser(benefit.description)}\n
\n ) : (\n

{benefit.summary}

\n )}\n
\n

{t(benefit.expiration)}

\n
\n {transformTokenCurrencyIcons()}\n

\n {benefit.expiration === \"voucher\"\n ? transformPriceRangeTokensToPriceRangeRsd(\n getVoucherPrices(benefit)\n )\n : transformPriceRangeTokensToPriceRangeRsd(\n getBenefitPrice(benefit)\n )}\n

\n
\n
\n
\n
\n );\n};\n","import React from \"react\";\nimport BenefitGroupBenefitPreviewListStyles from \"./BenefitGroupBenefitPreviewListStyles\";\nimport { BenefitGroupBenefitPreviewItem } from \"./BenefitGroupBenefitPreviewItem\";\nimport { calculatePriceWithVat } from \"../../../../../services/benefit.utils\";\nimport { BenefitExpirationTypeEnum } from \"../../../../../constants/benefit.constants\";\nimport { useSelector } from \"react-redux\";\nimport ListPlaceHolder from \"../../../../../components/listPlaceholder/ListPlaceholder\";\n\nexport const BenefitGroupBenefitPreviewList = props => {\n const { benefitGroup } = props;\n const { user } = useSelector(state => state.app);\n\n const getBenefitPrice = benefit => {\n if (benefit.isSubscribed) {\n return benefit.subscribedPrice;\n }\n\n const benefitPrice =\n user.companyVatEnabled && benefit.vat\n ? calculatePriceWithVat(benefit.tokenPrice, benefit.vat)\n : benefit.tokenPrice;\n\n if (\n benefitGroup.doesBenefitGroupHaveInstalments &&\n benefitGroup.enableInstalments &&\n benefit.expiration === \"one time\" &&\n benefit.instalments\n ) {\n return `${benefit.instalments} x ${Math.floor(\n benefitPrice / benefit.instalments\n )}`;\n }\n\n return benefitPrice;\n };\n\n const getVoucherPrices = benefit => {\n if (benefit.expiration === BenefitExpirationTypeEnum.VOUCHER) {\n const voucherPrices = benefit.vouchers.map(voucher => {\n return user.companyVatEnabled && benefit.vat\n ? calculatePriceWithVat(voucher.price, benefit.vat)\n : voucher.price;\n });\n const maxTokenPrice =\n voucherPrices.length > 0 ? Math.max(...voucherPrices) : 0;\n const minTokenPrice =\n voucherPrices.length > 0 ? Math.min(...voucherPrices) : 0;\n\n if (maxTokenPrice === minTokenPrice) {\n return `${maxTokenPrice}`;\n } else {\n return `${minTokenPrice} - ${maxTokenPrice}`;\n }\n }\n };\n\n const listOfBenefitsForPreview = benefitGroup.benefits.filter(\n items => !items.isDraft\n );\n\n return (\n \n {listOfBenefitsForPreview.length > 0 ? (\n listOfBenefitsForPreview.map(benefit => {\n return (\n \n );\n })\n ) : (\n \n )}\n \n );\n};\n","import React, { useEffect } from \"react\";\nimport BenefitGroupBenefitPreviewStyles from \"./BenefitGroupBenefitPreviewStyles\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setChosenBenefitGroup } from \"../../../../actions/employee/employeeBenefits.actions\";\nimport * as benefitGroupService from \"../../../../services/api/admin/benefitGroups.service\";\nimport { isEmpty } from \"../../../../services/general.utils\";\nimport { useTranslation } from \"react-i18next\";\nimport { BenefitGroupBenefitPreviewList } from \"./BenefitGroupBenefitPreviewList/BenefitGroupBenefitPreviewList\";\n\nexport const BenefitGroupBenefitPreview = params => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const { benefitGroupId } = params;\n\n const benefitGroup = useSelector(\n state => state.benefits.editPageState.benefitGroup\n );\n\n const getBenefitGroupForPreview = async () => {\n const response = await benefitGroupService.getBenefitGroupForPreview(\n benefitGroupId\n );\n\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n dispatch(setChosenBenefitGroup(response));\n };\n\n useEffect(() => {\n getBenefitGroupForPreview();\n }, []);\n\n return (\n \n
\n {!isEmpty(benefitGroup) ? (\n \n ) : (\n \n {t(\"no_result_found\")}.\n
\n )}\n
\n \n );\n};\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { connect } from \"react-redux\";\nimport swal from \"sweetalert\";\nimport { BeatLoader } from \"react-spinners\";\nimport { toast } from \"react-toastify\";\nimport { useHistory } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\n// components\nimport {\n Button,\n Header,\n Card,\n Modal,\n openModalAnim,\n closeModalAnim,\n TextAndLine\n} from \"../../../components\";\nimport BasicInfo from \"./BasicInfo/BasicInfo\";\nimport EditBenefitOptions from \"./EditBenefitOptions/EditBenefitOptions\";\nimport BenefitActivitySection from \"./BenefitActivitySection/BenefitActivitySection\";\nimport BenefitGroupUsersTable from \"./BenefitGroupUsersTable/BenefitGroupUsersTable\";\nimport PreviewModal from \"../../SuperAdminPages/Providers/PreviewModal/PreviewModal\";\nimport BenefitGroupInstalmentsSection from \"./BenefitGroupInstalmentsSection/BenefitGroupInstalmentsSection\";\n// styling component\nimport { override } from \"../../../services/loadingOverride.styles\";\nimport EditHrBenefitStyles from \"./EditHrBenefitsStyles\";\n// services\nimport * as actionCreators from \"../../../actions/hr/benefits.actions\";\nimport * as api from \"../../../services/api/hr/benefits.service\";\nimport { PUBLIC } from \"../../../builders/benefitGroups/benefitGroup.types\";\nimport { useTranslation } from \"react-i18next\";\nimport { BenefitGroupBenefitPreview } from \"./BenefitGroupBenefitPreview/BenefitGroupBenefitPreview\";\n\nconst EditHrBenefit = ({\n match,\n benefitGroup,\n isBenefitGroupActive,\n tiers,\n toggleBenefitGroup,\n setEditHrBenfitsInitialState,\n toggleBenefitGroupInstalments\n}) => {\n const { t } = useTranslation();\n const [availableTiers, setAvailableTiers] = useState([]);\n const [didDisableTier, setDidDisableTier] = useState(false);\n const [canFindAvailableTiers, setCanFindAvailableTiers] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n const history = useHistory();\n const isMounted = useRef(true);\n const [previewModal, setPreviewModal] = useState(false);\n\n const fetchAllInitialData = async () => {\n const [benefitGroupResponse, tiersResponse] = await Promise.all([\n api.getBenefitGroup(match.params.id),\n api.getTiers()\n ]);\n\n if (benefitGroupResponse.hasError) {\n return toast.error(\n benefitGroupResponse.errorMessage\n ? benefitGroupResponse.errorMessage\n : t(\"failed_to_get_benefit_groups\")\n );\n }\n\n if (tiersResponse.hasError) {\n return toast.error(\n tiersResponse.errorMessage\n ? tiersResponse.errorMessage\n : t(\"failed_to_get_tiers\")\n );\n }\n\n setEditHrBenfitsInitialState(benefitGroupResponse, tiersResponse.tiers);\n setCanFindAvailableTiers(true);\n };\n\n const handleChange = id => {\n if (availableTiers.includes(id)) {\n setAvailableTiers(availableTiers.filter(tierId => tierId !== id));\n setDidDisableTier(true);\n } else {\n setAvailableTiers([...availableTiers, id]);\n }\n };\n\n const handleCheckUncheckAll = (listOfTierIds, isSomeChecked) => {\n if (isSomeChecked) {\n setAvailableTiers([]);\n return;\n }\n setAvailableTiers(listOfTierIds);\n };\n\n const findAvailableTiers = () => {\n const chosenAvailableTiers = [];\n tiers.forEach(tier => {\n if (benefitGroup.availableTiers.includes(tier.id)) {\n chosenAvailableTiers.push(tier.id);\n }\n });\n setAvailableTiers(chosenAvailableTiers);\n };\n\n // this function is called after component did mount only once\n if (canFindAvailableTiers) {\n findAvailableTiers();\n setCanFindAvailableTiers(false);\n setIsLoading(false);\n // setTimeout delays animation untill content is ready to be displayed (set to state)\n setTimeout(() => {\n const editEmployeeContentCard = document.getElementById(\n \"benefitGroupCard\"\n );\n if (editEmployeeContentCard && isMounted.current) {\n editEmployeeContentCard.style.opacity = 1;\n }\n }, 100);\n }\n\n useEffect(() => {\n fetchAllInitialData();\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n /**\n * Handles submit of selected tiers for benefit group access.\n * Side effects:\n * - Returns toast warning if group is active and there are no selected tiers.\n * - Fires a swal modal box that fires request for available tiers.\n * - Navigates to benefits page.\n * @param {Event} e\n * @returns {import(\"react-toastify/dist/types\").Toast}\n */\n const handleSubmit = async e => {\n if (isBenefitGroupActive && availableTiers.length === 0) {\n return toast.warn(t(\"select_tiers_warning\"));\n }\n\n const description =\n benefitGroup.type === PUBLIC && (!isBenefitGroupActive || didDisableTier)\n ? `If you make these changes, users that have been \n subscribed to the benefits they don't have access to \n anymore, will be automatically unsubscribed from these benefits and they will not be able to use them during the following month.`\n : \"\";\n e.preventDefault();\n swal({\n title: \"Are you sure you want to save these changes?\",\n text: description,\n buttons: true,\n dangerMode: true\n }).then(async value => {\n if (!value) return;\n const response = await api.setAvailableTiers({\n benefitGroupId: match.params.id,\n availableTiers,\n enableInstalments: benefitGroup.enableInstalments\n });\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_update_benefit_group\")\n );\n }\n history.push(\"/benefits\");\n toast.success(response.data.message);\n });\n };\n\n const handleToggleBenefitGroupInstalments = () => {\n const enabledStatus = !benefitGroup.enableInstalments;\n toggleBenefitGroupInstalments(enabledStatus);\n };\n\n const openModal = () => {\n history.push(`/benefits/preview/${match.params.id}`);\n };\n\n const closeModal = () => {\n closeModalAnim();\n setTimeout(() => {\n setPreviewModal(false);\n }, 600);\n };\n\n const shouldRedirectToOriginal = () => history.push(\"/benefits\");\n\n return (\n \n
\n \n {isLoading ? (\n \n \n
\n ) : (\n
\n \n
handleSubmit(e)}>\n {\n setAvailableTiers([]);\n toggleBenefitGroup(!isBenefitGroupActive);\n }}\n />\n }\n />\n
\n \n
\n\n \n\n
\n \n
\n\n
\n \n {\n handleToggleBenefitGroupInstalments();\n }}\n enableInstalments={benefitGroup.enableInstalments}\n />\n
\n
\n \n {t(\"save\")}\n \n history.push(\"/benefits\")}\n width=\"85px\"\n height=\"35px\"\n >\n {t(\"cancel\")}\n \n
\n {\n e.stopPropagation();\n openModal();\n }}\n >\n {t(\"preview\")}\n \n
\n
\n \n \n
\n\n {previewModal && (\n \n \n \n )}\n
\n )}\n \n
\n );\n};\n\nEditHrBenefit.propTypes = {\n match: PropTypes.shape()\n};\n\nconst mapStateToProps = state => {\n return {\n benefitGroup: state.benefits.editPageState.benefitGroup,\n isBenefitGroupActive: state.benefits.editPageState.isBenefitGroupActive,\n tiers: state.benefits.editPageState.tiers\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setEditHrBenfitsInitialState: (benefitGroup, tiers) =>\n dispatch(\n actionCreators.setEditHrBenfitsInitialState(benefitGroup, tiers)\n ),\n toggleBenefitGroup: isBenefitGroupActive =>\n dispatch(actionCreators.toggleBenefitGroup(isBenefitGroupActive)),\n toggleBenefitGroupInstalments: enableInstalments =>\n dispatch(actionCreators.toggleBenefitGroupInstalments(enableInstalments))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(EditHrBenefit);\n","import EditHrBenefit from \"./EditHrBenefit\";\n\nexport default EditHrBenefit;\n","import LOCALES from \"../../../../constants/locales.constants\";\n\nexport const genderOptions = [\n {\n id: 1,\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"male\"],\n value: \"Male\"\n },\n {\n id: 2,\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"female\"],\n value: \"Female\"\n },\n {\n id: 3,\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"other\"],\n value: \"Other\"\n }\n];\n","import styled from \"styled-components\";\n\nconst BasicInfoStyles = styled.div`\n .datepickerWrapper {\n .react-datepicker-wrapper {\n width: 100% !important;\n }\n }\n\n .datePickerInput {\n height: 27px;\n width: 100%;\n border-radius: 3px;\n border: 1px solid #979797;\n outline: none;\n text-align: center;\n font-size: 16px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n cursor: pointer;\n position: relative;\n }\n\n margin: 60px 0;\n display: flex;\n position: relative;\n align-items: flex-start;\n\n .resendVerificationLink {\n position: absolute;\n right: 0;\n top: -40px;\n cursor: pointer;\n font-size: 14px;\n color: #5d5d5d;\n\n &:hover {\n color: #505050;\n }\n }\n\n .employeeIntialsContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 30px;\n position: relative;\n height: 200px;\n\n .employeeIntials {\n width: 126px;\n height: 126px;\n background-color: #1568bf;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 48px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #ffffff;\n }\n }\n\n .userDisabledContainer {\n margin-top: 20px;\n .userDisabledTitle {\n font-weight: 400;\n font-size: 14px;\n color: #c53c3c;\n }\n }\n\n .labelAndValidation {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .inputContainers {\n width: calc(100% - 156px);\n }\n\n .topInputsContainer {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 10px;\n\n .inputContainerFirstRow {\n width: 165px;\n }\n }\n\n .middleInputsContainer {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 10px;\n margin: 20px 0;\n\n .emailInputContainer {\n width: 340px;\n }\n\n .firstDayAtWork {\n width: 165px;\n }\n }\n\n .bottomInputs {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 10px;\n margin-top: 20px;\n\n .phoneInputContainer {\n width: 195px;\n }\n\n .teamContainer,\n .uniqueIdContainer {\n width: 135px;\n }\n\n .genderContainer,\n .branchCodeContainer {\n width: 165px;\n }\n }\n\n .infoText {\n width: 100%;\n font-size: 16px;\n min-height: 29px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n background: #f7f7f7;\n padding: 5px 5px;\n overflow: hidden;\n border-radius: 4px;\n }\n\n @media screen and (max-width: 1000px) {\n .middleInputsContainer {\n .emailInputContainer {\n width: 165px;\n }\n }\n\n .bottomInputs {\n width: calc(100% + 156px);\n margin-left: -156px;\n }\n }\n\n @media screen and (max-width: 767px) {\n .middleInputsContainer {\n .emailInputContainer {\n width: 340px;\n }\n }\n\n .bottomInputs {\n width: 100%;\n margin-left: 0;\n }\n }\n\n @media screen and (max-width: 600px) {\n .topInputsContainer {\n .inputContainerFirstRow {\n width: 100%;\n }\n }\n\n .bottomInputs {\n width: calc(100% + 156px);\n margin-left: -156px;\n }\n\n .middleInputsContainer {\n width: calc(100% + 156px);\n margin-left: -156px;\n flex-wrap: wrap-reverse;\n\n .firstDayAtWork {\n width: 100%;\n margin-left: 156px;\n }\n\n .emailInputContainer {\n width: 100%;\n }\n }\n\n .userDisabledContainer {\n width: calc(100% + 156px);\n margin-left: -156px;\n }\n }\n\n @media screen and (max-width: 500px) {\n .bottomInputs {\n width: calc(100% + 156px);\n margin-left: -156px;\n\n .phoneInputContainer {\n width: 100%;\n }\n\n .teamContainer {\n width: 100%;\n }\n\n .uniqueIdContainer {\n width: 100%;\n }\n\n .genderContainer {\n width: 100%;\n }\n\n .branchCodeContainer {\n width: 100%;\n }\n }\n }\n`;\n\nexport default BasicInfoStyles;\n","import React, { useState, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\nimport DatePicker from \"react-datepicker\";\nimport { parseISO } from \"date-fns\";\n// services\nimport * as usersService from \"../../../../services/api/admin/users.service\";\nimport * as hrEmployeeServices from \"../../../../services/api/hr/employees.service\";\n// components\nimport {\n IntitialsCircle,\n InputLabel,\n Input,\n PhoneNumberInput,\n SelectInput,\n Button\n} from \"../../../../components\";\nimport { UserDisabledIconSvg } from \"../../../../assets/Icons\";\n// dropdown options\nimport { genderOptions } from \"./genderOptions\";\n// styles\nimport BasicInfoStyles from \"./BasicInfoStyles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BasicInfo = ({\n isFormDisplay = false,\n isEditEmployee = false,\n values,\n errors,\n touched,\n handleBlur,\n setFieldValue,\n handleChange,\n fetchData = () => {}\n}) => {\n const { t } = useTranslation();\n const [branchCodeOptions, setBranchCodeOptions] = useState([]);\n\n /**\n * Returns list of company branches from server and sets it to state.\n * Is fired every time if page changes.\n */\n const fetchCompanyBranches = async () => {\n const response = await hrEmployeeServices.getCompanyBranches();\n\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n const branchOptions = response.branches.map(branch => ({\n id: branch.id,\n name: branch.branchCode\n }));\n setBranchCodeOptions(branchOptions);\n };\n\n useEffect(() => {\n fetchCompanyBranches();\n\n return () => fetchCompanyBranches();\n }, []);\n\n const resendVerificationLink = async e => {\n e.stopPropagation();\n const response = await usersService.resendVerificationLink(values.userId);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_send_ver_link\")\n );\n }\n\n toast.success(response.data.message);\n };\n\n /**\n * Handles user enabling.\n * Sends request to update user enabled status.\n * Refetches data.\n * @param {Event} e\n */\n const handleUserEnable = async e => {\n e.stopPropagation();\n\n const response = await usersService.enableUser(values.userId);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_enable_user\")\n );\n }\n\n toast.success(response.data.message);\n\n fetchData();\n };\n\n const translatedGenderOptions = genderOptions.map(gender => {\n return { ...gender, name: t(gender.value) };\n });\n\n return (\n \n
\n \n {values.isDisabled && (\n \n \n \n )}\n
\n
\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.firstName && touched.firstName\n ? errors.firstName\n : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n \n ) : (\n

{values.firstName}

\n )}\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.lastName && touched.lastName ? errors.lastName : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n \n ) : (\n

{values.lastName}

\n )}\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.born_date && touched.born_date\n ? errors.born_date\n : \"\"}\n
\n )}\n
\n \n {isFormDisplay ? (\n <>\n
\n \n setFieldValue(\"born_date\", selectedDate)\n }\n maxDate={new Date()}\n value={parseISO(values.born_date)}\n showYearDropdown\n placeholderText=\"DD/MM/YYYY\"\n />\n
\n \n ) : (\n

\n {values.born_date}\n

\n )}\n
\n
\n
\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.email && touched.email ? errors.email : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n \n ) : (\n

{values.email}

\n )}\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.firstDayAtWork && touched.firstDayAtWork\n ? errors.firstDayAtWork\n : \"\"}\n
\n )}\n
\n \n {isFormDisplay ? (\n <>\n
\n \n setFieldValue(\"firstDayAtWork\", selectedDate)\n }\n maxDate={new Date()}\n value={parseISO(values.firstDayAtWork)}\n showYearDropdown\n placeholderText=\"DD/MM/YYYY\"\n />\n
\n \n ) : (\n

\n {values.firstDayAtWork}\n

\n )}\n
\n
\n \n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.contact && touched.contact ? errors.contact : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n setFieldValue(\"contact\", phone)}\n value={values.contact}\n onBlur={handleBlur}\n name=\"contact\"\n />\n ) : (\n

{values.contact}

\n )}\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.team && touched.team ? errors.team : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n \n ) : (\n

{values.team}

\n )}\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.gender && touched.gender ? errors.gender : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n setFieldValue(\"gender\", option.value)}\n shouldHaveFullWidth\n customHeight=\"27px\"\n />\n ) : (\n

\n {t(values.gender)}\n

\n )}\n
\n
\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.uniqueId && touched.uniqueId ? errors.uniqueId : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n \n ) : (\n

{values.uniqueId}

\n )}\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.branchCode && touched.branchCode\n ? errors.branchCode\n : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n setFieldValue(\"branchCode\", option.id)}\n shouldHaveFullWidth\n customHeight=\"27px\"\n />\n ) : (\n

\n {values.branchCode}\n

\n )}\n
\n
\n {values.isDisabled && (\n
\n {t(\"disabled_user_info\")}\n {isEditEmployee && (\n handleUserEnable(e)}\n margin=\"8px 0 0 0\"\n padding=\"10px 25px\"\n outline\n >\n {t(\"enable_user\")}\n \n )}\n
\n )}\n \n {isEditEmployee && (\n \n {t(\"resend_ver_link\")}\n \n )}\n
\n );\n};\n\nBasicInfo.propTypes = {\n isFormDisplay: PropTypes.bool,\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n setFieldValue: PropTypes.func,\n handleBlur: PropTypes.func,\n handleChange: PropTypes.func\n};\n\nexport default BasicInfo;\n","import BasicInfo from './BasicInfo'\n\nexport default BasicInfo\n","import LOCALES from \"../../../../constants/locales.constants\";\n\nexport const relationshipOptions = [\n {\n id: 1,\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"single\"],\n value: \"Single\"\n },\n {\n id: 2,\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"divorced\"],\n value: \"Divorced\"\n },\n {\n id: 3,\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"married\"],\n value: \"Married\"\n }\n];\n","import styled from \"styled-components\";\n\nconst DetailsStyles = styled.div`\n margin: 60px 0;\n display: flex;\n justify-content: flex-start;\n flex-wrap: wrap;\n gap: 30px;\n\n .title {\n font-size: 16px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n margin-bottom: 30px;\n }\n\n .labelAndValidation {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .infoContainer {\n .inputContainer {\n width: 300px;\n }\n }\n\n .familyContainer {\n .relationshipContainer {\n width: 150px;\n }\n\n .checkboxesContainer {\n display: flex;\n align-items: flex-end;\n\n .checkboxContainer {\n height: 27px;\n display: flex;\n align-items: center;\n height: 100%;\n margin-right: 60px;\n\n &:last-child {\n margin-right: 0;\n }\n }\n }\n }\n\n .citiesContainer {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n /*\n\t\t.relationshipContainer {\n\t\t\twidth: 150px;\n\t\t\tmargin-right: 20px;\n\t\t}\n\n\t\t.checkboxesContainer {\n\t\t\tdisplay: flex;\n\t\t\talign-items: flex-end;\n\n\t\t.checkboxContainer {\n\t\t\theight: 27px;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\theight: 100%;\n\t\t\tmargin-right: 60px;\n\n\t\t\t&:last-child {\n\t\t\t\tmargin-right: 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t.description {\n\t\tmargin-top: 10px;\n\t\tfont-size: 16px;\n\t\tfont-weight: 500;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\tcolor: #5d5d5d;\n\t\tbackground: #d8d8d8;\n\t\tpadding: 5px;\n\t\tborder-radius: 4px;\n\t\toverflow: hidden;\n\t\ttext-transform: capitalize;\n\t\tul {\n margin-left: 18px;\n }\n ol {\n margin-left: 18px;\n }\n\t}*/\n\n .checkboxStatusChecker {\n width: 20px;\n height: 21px;\n border-radius: 4px;\n border: solid 1px #979797;\n margin-bottom: 5px;\n }\n\n .haveChildren {\n background: ${({ haveChildren }) => (haveChildren ? \"#d8d8d8\" : \"#fff\")};\n }\n\n .isMarried {\n background: ${({ isMarried }) => (isMarried ? \"#d8d8d8\" : \"#fff\")};\n }\n\n .textInfo {\n font-size: 16px;\n min-height: 29px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n background: #f7f7f7;\n padding: 5px 5px;\n overflow: hidden;\n border-radius: 4px;\n }\n }\n\n @media screen and (max-width: 500px) {\n .infoContainer {\n width: 100%;\n .inputContainer {\n width: 100%;\n }\n }\n\n .familyContainer {\n width: 100%;\n\n .relationshipContainer {\n width: 100%;\n }\n }\n\n .citiesContainer {\n width: 100%;\n }\n }\n`;\n\nexport default DetailsStyles;\n","import React, { useEffect, useState } from \"react\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\n// components\nimport {\n Input,\n InputLabel,\n LocationsMultiselectInput,\n SelectInput\n} from \"../../../../components\";\n// relationshipsOptions\nimport { relationshipOptions } from \"./relationshipOptions\";\n// styles\nimport DetailsStyles from \"./DetailsStyles\";\nimport * as employeeService from \"../../../../services/api/hr/employees.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Details = ({\n isFormDisplay = false,\n values,\n errors,\n touched,\n setFieldValue,\n handleBlur,\n handleChange\n}) => {\n const { t } = useTranslation();\n const [cities, setCities] = useState([]);\n const [search, setSearch] = useState(\"\");\n const [totalPages, setTotalPages] = useState(1);\n const [page, setPage] = useState(1);\n\n /**\n * Returns list of cities from server and sets it to state.\n * Is fired every time if search query or page changes.\n */\n const fetchCities = async () => {\n const response = await employeeService.getCities(search, page);\n\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n setCities(response.cities);\n setTotalPages(response.pages);\n };\n\n /**\n * Refetches cities list from server and sets it to state.\n * If page number increments to a value that is greater than there are total pages\n * function exits.\n * Updates page number & sets it to state.\n */\n const refetchCities = async () => {\n let currentPage = page;\n let newPage = (currentPage += 1);\n\n if (newPage > totalPages) return;\n\n setPage(newPage);\n\n const response = await employeeService.getCities(search, newPage);\n\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n let newCities = [];\n setTimeout(() => {\n newCities = [...cities, ...response.cities];\n setTimeout(() => {\n setCities(newCities);\n }, 100);\n }, 100);\n };\n\n const handleInputChange = newValue => {\n setPage(1);\n setSearch(newValue);\n\n return newValue;\n };\n\n const handleSelect = option => {\n setFieldValue(\"cities\", option);\n };\n\n useEffect(() => {\n fetchCities();\n }, [page, search]);\n\n const translatedRelationshipOptions = relationshipOptions.map(\n relationship => {\n return { ...relationship, name: t(relationship.value) };\n }\n );\n\n return (\n \n
\n

{t(\"Info\")} :

\n
\n
\n \n {isFormDisplay && (\n
\n {errors.description && touched.description\n ? errors.description\n : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n \n ) : (\n

{values.description}

\n )}\n
\n
\n
\n

{t(\"Family\")} :

\n
\n
\n \n {isFormDisplay ? (\n \n setFieldValue(\"relationship\", option.value)\n }\n customHeight=\"27px\"\n />\n ) : (\n

{t(values.relationship)}

\n )}\n
\n
\n
\n \n

{t(\"locations\")} :

\n
\n
\n \n {isFormDisplay && (\n
\n {errors.cities ? errors.cities : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n handleSelect(option)}\n handleInputChange={handleInputChange}\n fetchMoreData={refetchCities}\n customHeight=\"27px\"\n />\n ) : (\n handleSelect(option)}\n handleInputChange={handleInputChange}\n fetchMoreData={refetchCities}\n customHeight=\"27px\"\n shouldHaveFullWidth\n />\n )}\n
\n \n
\n );\n};\n\nDetails.propTypes = {\n isFormDisplay: PropTypes.bool,\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n setFieldValue: PropTypes.func,\n handleBlur: PropTypes.func,\n handleChange: PropTypes.func\n};\n\nexport default Details;\n","import Details from './Details'\n\nexport default Details\n","import styled from 'styled-components'\n\nconst RankStyles = styled.div`\n\tmargin: 0 0 60px 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t.hrCheckbox {\n display: flex;\n margin: 10px 0 0 0;\n }\n\n .tierAndInfoContainer {\n margin: 60px 0 20px 0;\n display: flex;\n gap: 30px;\n }\n\n\t.tierContainer {\n\t\twidth: 217px;\n\n\t\t.title {\n\t\t\tmargin-bottom: 15px;\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: 500;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: normal;\n\t\t\tcolor: #4b4b4b;\n\t\t}\n\t}\n\t.labelAndValidation {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tjustify-content: flex-end;\n\t\theight: 20px;\n\t}\n\n\t.infoContainer {\n\t\t.title {\n\t\t\tfont-size: 12px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: normal;\n\t\t\tcolor: #4b4b4b;\n\t\t}\n\n\t\t.text {\n\t\t\twidth: 230px;\n\t\t\t/* height: 57px; */\n\t\t\t/* padding-bottom: 5px; */\n\t\t\tdisplay: flex;\n\t\t\talign-items: flex-end;\n\t\t\tfont-size: 12px;\n\t\t\tfont-weight: 300;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: normal;\n\t\t\tcolor: #5d5d5d;\n\t\t}\n\t}\n\n\t.tierContainerResult {\n\t\twidth: 100%;\n\t\tmin-height: 29px;\n\t\tborder-radius: 4px;\n\t\tfont-size: 14px;\n\t\tfont-weight: 500;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\tcolor: #5d5d5d;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpadding: 5px;\n\t\tbackground: #f7f7f7;\n\t\toverflow: hidden;\n\n\t}\n\n @media screen and (max-width: 500px) {\n .tierAndInfoContainer {\n flex-wrap: wrap;\n }\n\n .tierContainer {\n width: 100%;\n }\n }\n\t\n`\n\nexport default RankStyles\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\n// components\nimport { SelectInput, CheckboxInput, InputLabel } from \"../../../../components\";\n// services\nimport * as employeesService from \"../../../../services/api/hr/employees.service\";\n// styles\nimport RankStyles from \"./RankStyles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Rank = ({\n isFormDisplay = false,\n values,\n errors,\n touched,\n handleBlur,\n setFieldValue = () => {}\n}) => {\n const { t } = useTranslation();\n const [companyTiers, setCompanyTiers] = useState([]);\n const isMounted = useRef(true);\n\n const fetchTiers = async () => {\n const response = await employeesService.getCompanyTiers();\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n if (isMounted.current) {\n setCompanyTiers(response.tiers);\n }\n };\n\n useEffect(() => {\n if (isFormDisplay) {\n fetchTiers();\n }\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n const displayInfo = () => {\n let desc = \"\";\n let token = 0;\n const chosenTier = companyTiers.find(singleTier =>\n typeof values.tier === \"object\"\n ? singleTier.id === values.tier.id\n : singleTier.id === values.tier\n );\n if (chosenTier) {\n if (chosenTier.description !== \"\") {\n desc = chosenTier.description;\n }\n if (chosenTier.tokens) {\n token = chosenTier.tokens;\n }\n }\n return {\n desc,\n token\n };\n };\n\n const handleUserHrRoleCheckbox = () => {\n if (isFormDisplay)\n setFieldValue(\n \"shouldEmployeeHaveHRRole\",\n !values.shouldEmployeeHaveHRRole\n );\n };\n\n return (\n \n
\n
\n

{t(\"Tier\")} :

\n
\n {isFormDisplay && (\n
\n {errors.tier && touched.tier ? errors.tier : \"\"}\n
\n )}\n
\n {companyTiers.length > 0 && isFormDisplay ? (\n setFieldValue(\"tier\", option.id)}\n customHeight=\"28px\"\n shouldHaveFullWidth\n />\n ) : (\n
\n {values.tier && values.tier.name}\n
\n )}\n
\n
\n

{t(\"Info\")} :

\n {isFormDisplay ? (\n \n

\n {displayInfo().desc}\n

\n

\n {t(\"Monthly tokens\")}: {displayInfo().token}\n

\n
\n ) : (\n \n

\n {values.tier ? values.tier.description : \"\"}\n

\n

\n {t(\"Monthly tokens\")}: {values.tier ? values.tier.tokens : 0}\n

\n
\n )}\n \n \n
\n handleUserHrRoleCheckbox()}\n />\n \n \n
\n \n
\n );\n};\n\nRank.propTypes = {\n isFormDisplay: PropTypes.bool,\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n handleBlur: PropTypes.func,\n setFieldValue: PropTypes.func\n};\n\nexport default Rank;\n","import Rank from './Rank'\n\nexport default Rank\n","import styled from 'styled-components'\n\nconst EmployeeDetailsStyles = styled.section`\n\t.employeeDetailsContainer {\n\t\twidth: calc(100% - 210px);\n\t\tmargin-left: 210px;\n\t\tbackground: whitesmoke;\n\t\tmin-height: 100vh;\n\t}\n\n\t.employeeDetailsContent {\n\t\tpadding: 0 30px 30px 30px;\n\t\tdisplay: flex;\n\t}\n\n\t#employeeContentCard {\n\t\topacity: 0;\n\t\ttransition: all 0.4s ease-in-out;\n\t}\n\n\t.tableHead {\n padding: 0 30px;\n display: flex;\n align-items: center;\n\t}\n\t\n\t.tableBodyContainer {\n background: #f7f7f7;\n padding: 30px;\n margin: 20px 0 0 0;\n border-radius: 4px;\n }\n`\n\nexport default EmployeeDetailsStyles\n","const setOnboarding = (onboarding) => {\n\tif (onboarding === true) {\n\t\treturn true\n\t}\n\tif (onboarding === false) {\n\t\treturn false\n\t}\n\tif (onboarding === undefined) {\n\t\treturn null\n\t}\n}\n\nclass User {\n\tconstructor(userData = {}) {\n\t\tthis.id = userData.id || null\n\t\tthis.role = userData.role || ''\n\t\tthis.firstName = userData.firstName || ''\n\t\tthis.lastName = userData.lastName || ''\n\t\tthis.companyName = userData.companyName || ''\n\t\tthis.maximumTokens = userData.maximumTokens || 0\n\t\tthis.usedTokens = userData.usedTokens || 0\n\t\tthis.isOnboardingDone = setOnboarding(userData.onboarding)\n\t\tthis.serverOnboarding = setOnboarding(userData.onboarding)\n\t\tthis.isSync = userData.sync || false\n\t}\n}\n\nexport { User }\n","import { User } from '../user.entity'\n\nconst userInitalState = new User()\n\nconst actionTypes = {\n\tsetLoggedInUser: 'SET_USER',\n\tsetOnboardingToTrue: 'SET_ONBOARDING_TO_TRUE',\n\tloagoutUser: 'LOGOUT_USER',\n\tsubscribe: 'SUBSCRIBE',\n\tunsubscribe: 'UNSUBSCRIBE',\n\tsyncEmployee: 'SYNC_EMPLOYEE'\n}\n\nconst userReducer = (state = userInitalState, action) => {\n\tswitch (action.type) {\n\t\tcase actionTypes.setLoggedInUser:\n\t\t\treturn new User(action.payload.user)\n\t\tcase actionTypes.setOnboardingToTrue:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisOnboardingDone: true\n\t\t\t}\n\t\tcase actionTypes.loagoutUser:\n\t\t\treturn new User()\n\t\tcase actionTypes.subscribe:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tusedTokens: state.usedTokens + action.benefitTokenPrice\n\t\t\t}\n\t\tcase actionTypes.unsubscribe:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tusedTokens: state.usedTokens - action.benefitTokenPrice\n\t\t\t}\n\t\tcase actionTypes.syncEmployee:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisSync: true\n\t\t\t}\n\t\tdefault:\n\t\t\tthrow new Error(`Unknow action type: ${action.type}`)\n\t}\n}\n\nexport { userInitalState, userReducer, actionTypes }\n","import React, { createContext, useEffect, useReducer } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Clarity from \"@microsoft/clarity\";\n\nimport { userInitalState, userReducer } from \"./user.reducer\";\nimport { useUserActions } from \"./user.actions\";\n\nconst UserContext = createContext(userInitalState);\n\nconst CLARITY_PROJECT_ID_DEMO = \"q7ofku4hzs\";\nconst CLARITY_PROJECT_ID_PRODUCTION = \"qjg65jyvwx\";\n\nconst isDemo = \"https://demo.benefiti.rs\";\n\nconst UserProvider = ({ children }) => {\n const [user, dispatchUser] = useReducer(userReducer, userInitalState);\n const userActions = useUserActions(dispatchUser);\n\n useEffect(() => {\n Clarity.init(\n isDemo ? CLARITY_PROJECT_ID_DEMO : CLARITY_PROJECT_ID_PRODUCTION\n );\n }, []);\n\n return (\n \n {children}\n \n );\n};\n\nUserProvider.propTypes = {\n children: PropTypes.node\n};\n\nexport { UserProvider, UserContext };\n","import { actionTypes } from './user.reducer'\n\nexport const useUserActions = (dispatch) => {\n\tconst setUser = (user) => {\n\t\tdispatch({ type: actionTypes.setLoggedInUser, payload: { user } })\n\t}\n\n\tconst setIsOnboardingDoneToTrue = () => {\n\t\tdispatch({ type: actionTypes.setOnboardingToTrue })\n\t}\n\n\tconst logoutUser = () => {\n\t\tdispatch({ type: actionTypes.loagoutUser })\n\t}\n\n\tconst subscribe = (benefitTokenPrice) => {\n\t\tdispatch({ type: actionTypes.subscribe, benefitTokenPrice })\n\t}\n\n\tconst unsubscribe = (benefitTokenPrice) => {\n\t\tdispatch({ type: actionTypes.unsubscribe, benefitTokenPrice })\n\t}\n\n\tconst sync = () => {\n\t\tdispatch({ type: actionTypes.syncEmployee })\n\t}\n\n\treturn {\n\t\tsetUser,\n\t\tsetIsOnboardingDoneToTrue,\n\t\tlogoutUser,\n\t\tsubscribe,\n\t\tunsubscribe,\n\t\tsync\n\t}\n}\n","import React, { useState, useEffect, useContext, useRef } from \"react\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\nimport { Link, useHistory } from \"react-router-dom\";\nimport { BeatLoader } from \"react-spinners\";\n// components\nimport {\n Button,\n Card,\n Header,\n TextAndLine,\n Table,\n TableHead,\n TableRow\n} from \"../../../../components\";\nimport BasicInfo from \"../BasicInfoSection\";\nimport Details from \"../DetailsSection\";\nimport Rank from \"../RankSection\";\n// entity\nimport { HrEmployeeDetails } from \"../../../../models/domain\";\n// styles\nimport EmployeeDetailsStyles from \"./EmployeeDetailsStyles\";\nimport { override } from \"../../../../services/loadingOverride.styles\";\n// config builders\nimport employeeActiveBenefitsTableHead from \"../userBenefits.tableHeader\";\n// services\nimport * as employeesService from \"../../../../services/api/hr/employees.service\";\n// context\nimport { UserContext } from \"../../../../modules/user/context/user.context\";\n\nconst EmployeeDetails = ({ match }) => {\n const [employee, setEmployee] = useState(new HrEmployeeDetails());\n const [isLoading, setIsLoading] = useState(true);\n const isMounted = useRef(true);\n const history = useHistory();\n\n const fetchEmployee = async () => {\n const response = await employeesService.getChosenCompanyEmployee(\n match.params.id\n );\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n if (isMounted.current && response) {\n setTimeout(() => {\n setEmployee(response);\n setIsLoading(false);\n setTimeout(() => {\n const employeeContentCard = document.getElementById(\n \"employeeContentCard\"\n );\n if (employeeContentCard && isMounted.current) {\n employeeContentCard.style.opacity = 1;\n }\n }, 100);\n }, 100);\n }\n };\n\n useEffect(() => {\n fetchEmployee();\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return (\n \n
\n
\n {isLoading ? (\n \n \n
\n ) : (\n
\n \n \n \n \n \n \n \n
\n \n \n \n history.goBack()}\n padding=\"10px 22px\"\n outline\n >\n Cancel\n \n
\n {employee.userBenefits && employee.userBenefits.length > 0 && (\n \n \n \n
\n {employeeActiveBenefitsTableHead.map(\n ({ id, headName, width, justifyContent, margin }) => (\n \n )\n )}\n
\n
\n {employee.userBenefits.map(\n ({\n title,\n expiration,\n benefitGroup,\n benefitPrice,\n benefitId\n }) => (\n \n )\n )}\n
\n
\n \n )}\n \n
\n )}\n \n
\n );\n};\n\nEmployeeDetails.propTypes = {\n match: PropTypes.shape()\n};\n\nexport default EmployeeDetails;\n","import EmployeeDetails from './EmployeeDetails'\n\nexport default EmployeeDetails\n","import styled from 'styled-components'\n\n\nconst EditEmployeeStyles = styled.section`\n\t.editEmployeeContainer {\n\t\twidth: calc(100% - 210px);\n\t\tmargin-left: 210px;\n\t\tbackground: whitesmoke;\n\t\tmin-height: 100vh;\n\t}\n\n\t.editEmployeeContent {\n\t\tpadding: 0 30px 30px 30px;\n\t\tdisplay: flex;\n\t}\n\n\t#editEmployeeContentCard {\n\t\topacity: 0;\n\t\ttransition: all 0.4s ease-in-out;\n\t}\n\n\t.buttonsContainer {\n\t\tdisplay: flex;\n\t\tmargin-bottom: 30px;\n\t}\n\n\t@media screen and (max-width: 767px) {\n\t\t.editEmployeeContainer {\n\t\t\twidth: 100%;\n\t\t\tmargin-left: 0;\n\t\t} \n\n\t\t.editEmployeeContent {\n\t\t padding: 0 0 30px 0;\n\t\t}\n\t}\n\t\n`\n\nexport default EditEmployeeStyles\n","import validator from \"validator\";\nimport moment from \"moment\";\nimport { isEmpty, removeSpacesAndHTML } from \"../../general.utils\";\nimport { findLocales } from \"../../../utils/helpers/findLocales\";\n\nconst allowedDateFormats = [\n \"DD/MM/YYYY\",\n \"D/M/YYYY\",\n \"DD.MM.YYYY\",\n \"D.M.YYYY\",\n \"DD-MM-YYYY\",\n \"D-M-YYYY\"\n];\n\nconst validateDate = value => moment(value, allowedDateFormats, true).isValid();\n\nexport const hrEmployeeValidations = ({\n firstName,\n lastName,\n email,\n tier,\n cities\n}) => {\n const isInLanguage = findLocales(\"rs\");\n\n const errors = {};\n\n if (!firstName || !/\\S/.test(firstName)) {\n errors.firstName = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!removeSpacesAndHTML(firstName)) {\n errors.firstName = isInLanguage\n ? \"HTML oznaka nije dozvoljena\"\n : \"HTML tag is not allowed\";\n }\n\n if (!lastName || !/\\S/.test(lastName)) {\n errors.lastName = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!removeSpacesAndHTML(lastName)) {\n errors.lastName = isInLanguage\n ? \"HTML oznaka nije dozvoljena\"\n : \"HTML tag is not allowed\";\n }\n\n if (!email) {\n errors.email = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!validator.isEmail(email)) {\n errors.email = isInLanguage ? \"Neispravna email adresa\" : \"Invalid email\";\n }\n\n if (!tier) {\n errors.tier = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n if (isEmpty(cities)) {\n errors.cities = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n return errors;\n};\n","import React, { useEffect, useState, useRef, useContext } from \"react\";\nimport { BeatLoader } from \"react-spinners\";\nimport PropTypes from \"prop-types\";\nimport { useFormik } from \"formik\";\nimport { toast } from \"react-toastify\";\nimport { useHistory } from \"react-router-dom\";\n// components\nimport {\n Card,\n Button,\n Header,\n TextAndLine,\n EmployeeActiveBenefits\n} from \"../../../../components\";\nimport BasicInfo from \"../BasicInfoSection\";\nimport Details from \"../DetailsSection\";\nimport Rank from \"../RankSection\";\n// styles\nimport EditEmployeeStyles from \"./EditEmployeeStyles\";\nimport { override } from \"../../../../services/loadingOverride.styles\";\n// entity\nimport { HrEmployeeForm } from \"../../../../models/domain\";\n// services\nimport * as employeesService from \"../../../../services/api/hr/employees.service\";\nimport { hrEmployeeValidations } from \"../../../../services/validations/hr/hrEmployeeValidations\";\nimport { useTranslation } from \"react-i18next\";\n\nconst EditEmployee = ({ match }) => {\n const { t } = useTranslation();\n const [isLoading, setIsLoading] = useState(true);\n const [singleEmployee, setSingleEmployee] = useState(new HrEmployeeForm());\n const [disableButton, setDisableButton] = useState(false);\n\n const history = useHistory();\n const isMounted = useRef(true);\n\n const handleEditEmployeeError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.firstName) {\n toast.error(`${data.error.message}: ${data.errors.firstName.keys[0]}`);\n }\n if (data.errors.lastName) {\n toast.error(`${data.error.message}: ${data.errors.lastName.keys[0]}`);\n }\n if (data.errors.bornDate) {\n toast.error(`${data.error.message}: ${data.errors.bornDate.keys[0]}`);\n }\n if (data.errors.firstDayAtWork) {\n toast.error(\n `${data.error.message}: ${data.errors.firstDayAtWork.keys[0]}`\n );\n }\n if (data.errors.tierId) {\n toast.error(`${data.error.message}: ${data.errors.tierId.keys[0]}`);\n }\n if (data.errors.email) {\n toast.error(`${data.error.message}: ${data.errors.email.keys[0]}`);\n }\n if (data.errors.cities) {\n toast.error(`${data.error.message}: ${data.errors.cities.keys[0]}`);\n }\n } else {\n toast.error(data.error.message, {\n autoClose: 15000\n });\n }\n };\n\n const updateEmployee = async values => {\n setDisableButton(true);\n const response = await employeesService.editEmployee(\n values,\n match.params.id\n );\n\n if (response.hasError) {\n setDisableButton(false);\n return handleEditEmployeeError(response);\n }\n\n setDisableButton(false);\n toast.success(t(\"success_employee_edit\"));\n history.push(\"/employees\");\n };\n\n const formik = useFormik({\n enableReinitialize: true,\n initialValues: singleEmployee,\n validate: hrEmployeeValidations,\n onSubmit: updateEmployee\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n handleChange,\n handleBlur\n } = formik;\n\n const fetchEmployee = async () => {\n const response = await employeesService.getChosenCompanyEmployee(\n match.params.id\n );\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n if (isMounted.current && response) {\n setTimeout(() => {\n setSingleEmployee(response);\n setIsLoading(false);\n setTimeout(() => {\n const editEmployeeContentCard = document.getElementById(\n \"editEmployeeContentCard\"\n );\n if (editEmployeeContentCard && isMounted.current) {\n editEmployeeContentCard.style.opacity = 1;\n }\n }, 100);\n }, 100);\n }\n };\n\n useEffect(() => {\n fetchEmployee();\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n const shouldRedirectToOriginal = () => history.push(\"/employees\");\n\n return (\n \n
\n \n {isLoading ? (\n \n \n
\n ) : (\n
\n \n
\n \n \n \n \n \n \n
\n {disableButton ? (\n \n ) : (\n \n )}\n history.push(\"/employees\")}\n width=\"130px\"\n padding=\"10px 18px\"\n margin=\"0\"\n outline\n >\n {t(\"cancel\")}\n \n
\n \n \n \n
\n )}\n \n
\n );\n};\n\nEditEmployee.propTypes = {\n match: PropTypes.shape()\n};\n\nexport default EditEmployee;\n","import EditEmployee from './EditEmployee'\n\nexport default EditEmployee\n","import React, { useState, useEffect, useRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\nimport { useFormik } from \"formik\";\n// custom components\nimport { TextAndLine, Button, Card } from \"../../../../components\";\nimport BasicInfo from \"../BasicInfoSection\";\nimport Details from \"../DetailsSection\";\nimport Rank from \"../RankSection\";\n// entity\nimport { HrEmployeeForm } from \"../../../../models/domain\";\n// services\nimport { hrEmployeeValidations } from \"../../../../services/validations/hr/hrEmployeeValidations\";\nimport * as employeesService from \"../../../../services/api/hr/employees.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AddEmployee = ({ closeForm, fetchEmployees }) => {\n const { t } = useTranslation();\n const [disableButton, setDisableButton] = useState(false);\n const isMounted = useRef(true);\n\n const closeAddEmployee = () => {\n const addEmployeeForm = document.getElementById(\"addEmployeeForm\");\n const employeesList = document.getElementById(\"employeesList\");\n if (addEmployeeForm && employeesList) {\n employeesList.classList.remove(\"hideEmployeeList\");\n addEmployeeForm.classList.remove(\"showAddEmployeeForm\");\n }\n setTimeout(() => {\n closeForm(false);\n }, 300);\n };\n\n const handleCreateEmployeeError = ({ error }) => {\n const { data } = error;\n if (data) {\n if (data.errors && data.error) {\n if (data.errors.firstName) {\n toast.error(\n `${data.error.message}: ${data.errors.firstName.keys[0]}`\n );\n }\n if (data.errors.bornDate) {\n toast.error(`${data.error.message}: ${data.errors.bornDate.keys[0]}`);\n }\n if (data.errors.firstDayAtWork) {\n toast.error(\n `${data.error.message}: ${data.errors.firstDayAtWork.keys[0]}`\n );\n }\n if (data.errors.lastName) {\n toast.error(`${data.error.message}: ${data.errors.lastName.keys[0]}`);\n }\n if (data.errors.tierId) {\n toast.error(`${data.error.message}: ${data.errors.tierId.keys[0]}`);\n }\n if (data.errors.email) {\n toast.error(`${data.error.message}: ${data.errors.email.keys[0]}`);\n }\n if (data.errors.cities) {\n toast.error(`${data.error.message}: ${data.errors.cities.keys[0]}`);\n }\n } else {\n toast.error(data.error.message);\n }\n }\n };\n\n const createEmployee = async values => {\n setDisableButton(true);\n\n const response = await employeesService.createEmployee(values);\n\n if (response.hasError) {\n setDisableButton(false);\n return handleCreateEmployeeError(response);\n }\n\n setDisableButton(false);\n toast.success(t(\"success_add_employee\"));\n closeAddEmployee();\n fetchEmployees();\n };\n\n useEffect(\n () => () => {\n isMounted.current = false;\n },\n []\n );\n\n const formik = useFormik({\n initialValues: new HrEmployeeForm(),\n validate: hrEmployeeValidations,\n onSubmit: createEmployee\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n
\n \n \n \n \n \n \n
\n {disableButton ? (\n \n ) : (\n \n )}\n \n {t(\"cancel\")}\n \n
\n \n \n );\n};\n\nAddEmployee.propTypes = {\n closeForm: PropTypes.func,\n fetchEmployees: PropTypes.func\n};\n\nexport default AddEmployee;\n","import styled from 'styled-components'\n\nconst AddEmployeeWithCSVStyles = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\t/* justify-content: center; */\n\tpadding: 20px 0 20px 40px;\n\twidth: 500px;\n\n\t.title {\n\t\tfont-size: 24px;\n\t\tfont-weight: bold;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.08;\n\t\tletter-spacing: normal;\n\t\ttext-align: center;\n\t\tcolor: #4b4b4b;\n\t\tmargin-bottom: 30px;\n\t}\n\n\t.employeesForm {\n\t\twidth: 403px;\n\t}\n\n\t.step1Container {\n\t\tposition: relative;\n\t}\n\n\t.step1 {\n\t\tborder-left: 3px solid ${({ steps: { step1Status } }) => {\n\t\tif (step1Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\tpadding: 0 0 25px 63px;\n\t\ttransition: 0.3s all ease-in-out;\n\n\t\t.step1Circle {\n\t\t\twidth: 50px;\n\t\t\theight: 50px;\n\t\t\tborder: 3px solid\n\t\t\t${({ steps: { step1Status } }) => {\n\t\tif (step1Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\tif (step1Status === 'active') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\t\tborder-radius: 25px;\n\t\t\tbackground-color: ${({ steps: { step1Status } }) => {\n\t\tif (step1Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#fff'\n\t}};\n\t\t\tposition: absolute;\n\t\t\tcolor: #1568bf;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tfont-size: 18px;\n\t\t\tfont-weight: 600;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.23px;\n\t\t\tleft: -23px;\n\t\t\ttop: -15px;\n\t\t}\n\n\t\t.step1Title {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 600;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #4b4b4b;\n\t\t\tmargin-bottom: 15px;\n\t\t}\n\n\t\t.step1Text {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #4b4b4b;\n\t\t\tmargin-bottom: 15px;\n\t\t}\n\n\t\t.downloadButton {\n\t\t\twidth: 130px;\n\t\t\theight: 40px;\n\t\t\tborder-radius: 4px;\n\t\t\tborder: 1px solid #1568bf;\n\t\t\tbackground-color: #1568bf;\n\t\t\tdisplay: flex;\n\t\t\tfont-size: 14px;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tfont-weight: 500;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\toutline: none;\n\t\t\tcolor: #ffffff;\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t.step2Container {\n\t\tposition: relative;\n\t\tz-index: 3;\n\t}\n\n\t.step2 {\n\t\tborder-left: 3px solid \t${({ steps: { step2Status } }) => {\n\t\tif (step2Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\tpadding: 0 0 25px 63px;\n\t\theight: 0;\n\t\toverflow: hidden;\n\t\ttransition: 0.3s all ease-in-out;\n\n\t\t.step2Circle {\n\t\t\twidth: 50px;\n\t\t\theight: 50px;\n\t\t\tborder: 3px solid ${({ steps: { step2Status } }) => {\n\t\tif (step2Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\tif (step2Status === 'active') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\t\tborder-radius: 25px;\n\t\t\tbackground-color: ${({ steps: { step2Status } }) => {\n\t\tif (step2Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#ffffff'\n\t}};\n\t\t\tposition: absolute;\n\t\t\tcolor: ${({ steps: { step2Status } }) => {\n\t\tif (step2Status === 'active') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tfont-size: 18px;\n\t\t\tfont-weight: 600;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.23px;\n\t\t\tleft: -23px;\n\t\t\ttop: -15px;\n\t\t}\n\n\t\t.step2Content {\n\t\t\topacity: 0;\n\t\t\ttransition: 0.3s all ease-in-out;\n\t\t}\n\n\t\t.step2Title {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 600;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #4b4b4b;\n\t\t\tmargin-bottom: 15px;\n\t\t\ttransition: opacity 0.3s ease-in-out;\n\t\t}\n\n\t\t.step2Text {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #4b4b4b;\n\t\t\tmargin-bottom: 15px;\n\t\t}\n\n\t\t.step2TextTwo {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #1568bf;\n\t\t\tmargin-bottom: 15px;\n\t\t} \n\n\t\t.requiredFields {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: red;\n\t\t\tmargin-bottom: 15px;\n\t\t} \n\n\t\t.uploadButton {\n\t\t\tmin-width: 130px;\n\t\t\theight: 40px;\n\t\t\tborder-radius: 4px;\n\t\t\tborder: 1px solid #1568bf;\n\t\t\tbackground-color: #1568bf;\n\t\t\tdisplay: flex;\n\t\t\tfont-size: 14px;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tfont-weight: 500;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #ffffff;\n\t\t\tcursor: pointer;\n\t\t\toutline: none;\n\t\t}\n\n\t\t.fileName {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #4b4b4b;\n\t\t}\n\t}\n\n\t.step3Container {\n\t\tposition: relative;\n\t\tz-index: 4;\n\t}\n\n\t.step3 {\n\t\tpadding: 0 0 0 63px;\n\t\tborder-left: 3px solid ${({ steps: { step3Status } }) => {\n\t\tif (step3Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\tif (step3Status === 'active') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\theight: 0;\n\t\toverflow: hidden;\n\t\ttransition: 0.3s all ease-in-out;\n\n\t\t.step3Circle {\n\t\t\twidth: 50px;\n\t\t\theight: 50px;\n\t\t\tborder: 3px solid ${({ steps: { step3Status } }) => {\n\t\tif (step3Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\tif (step3Status === 'active') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\t\tborder-radius: 25px;\n\t\t\tbackground-color: ${({ steps: { step3Status } }) => {\n\t\tif (step3Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#fff'\n\t}};\n\t\t\tposition: absolute;\n\t\t\tcolor: ${({ steps: { step3Status } }) => {\n\t\tif (step3Status === 'active') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tfont-size: 18px;\n\t\t\tfont-weight: 600;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.23px;\n\t\t\tleft: -23px;\n\t\t\tbottom: -60px;\n\t\t\ttransition: 0.3s all ease-in-out;\n\t\t}\n\n\t\t.step3Content {\n\t\t\topacity: 1;\n\t\t\ttransition: 0.3s all ease-in-out;\n\t\t}\n\n\t\t.step3Title {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 600;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #4b4b4b;\n\t\t\tmargin-bottom: 15px;\n\t\t\ttransition: opacity 0.3s ease-in-out;\n\t\t}\n\n\t\t.finish {\n\t\t\twidth: 130px;\n\t\t\theight: 40px;\n\t\t\tborder-radius: 4px;\n\t\t\tborder: 1px solid #1568bf;\n\t\t\tbackground-color: #1568bf;\n\t\t\toutline: none;\n\t\t\tdisplay: flex;\n\t\t\tfont-size: 14px;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tfont-weight: 500;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #ffffff;\n\t\t\tcursor: pointer;\n\t\t}\n\n\t\t.finish:disabled {\n\t\t\tbackground: #d8d8d8;\n\t\t\tcolor: #989898;\n\t\t\tborder: 1px solid #d8d8d8;\n\t\t}\n\t\t\n\t}\n\n\t@media screen and (max-width: 600px) {\n\t\twidth: 100%;\n\t\tpadding-right: 20px;\n\n\t\t.employeesForm {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n`\n\nexport default AddEmployeeWithCSVStyles\n","import { findLocales } from \"../../../utils/helpers/findLocales\";\n\nconst SUPPORTED_FORMATS = [\"csv\"];\n\nexport const AddEmployeesWithCSVValidations = ({ csvFile }) => {\n const isInLanguage = findLocales(\"rs\");\n\n const errors = {};\n\n if (!csvFile) {\n errors.csvFile = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (\n csvFile &&\n csvFile.name &&\n !SUPPORTED_FORMATS.includes(csvFile.name.split(\".\").pop())\n ) {\n errors.csvFile = isInLanguage\n ? \"Možete učitati samo .csv format datoteke\"\n : \"You can upload only .csv file format\";\n }\n\n return errors;\n};\n","const expandSection = element => {\n const sectionHeight = element.scrollHeight;\n element.style.height = `${sectionHeight}px`;\n};\n\nconst addHeightOnClick = element => {\n expandSection(element);\n};\n\nexport { addHeightOnClick };\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\nimport { useFormik } from \"formik\";\n// assets\nimport { CheckIcon } from \"../../../../../assets/Icons\";\n// styles\nimport AddEmployeeWithCSVStyles from \"./AddEmployeeWithCSVStyles\";\n// services\nimport { AddEmployeesWithCSVValidations } from \"../../../../../services/validations/hr/addEmployeesWithCSV\";\nimport { addHeightOnClick } from \"./addEmployeesCSV.services\";\nimport * as employeesService from \"../../../../../services/api/hr/employees.service\";\nimport { BASE_CONTENT_URL } from \"../../../../../constants/api.constants\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AddEmployeeWithCSV = ({ fetchEmployees, closeModal, openErrorPopup }) => {\n const { t } = useTranslation();\n const [step1Status, setStep1Status] = useState(\"active\");\n const [step2Status, setStep2Status] = useState(\"inactive\");\n const [step3Status, setStep3Status] = useState(\"inactive\");\n const [disableButton, setDisableButton] = useState(false);\n\n const handleCreateEmployeeError = ({ error }) => {\n const { data } = error;\n if (data) {\n if (data.errors && data.error) {\n openErrorPopup(data.error, data.errors.csv.errors);\n } else {\n openErrorPopup(data.error);\n }\n }\n };\n\n const createEmployeesWithCSV = async values => {\n setDisableButton(true);\n const response = await employeesService.createEmployeesFromCsv(values);\n\n if (response.hasError) {\n setDisableButton(false);\n return handleCreateEmployeeError(response);\n }\n\n setStep3Status(\"completed\");\n fetchEmployees();\n setDisableButton(false);\n closeModal();\n toast.success(t(\"success_employees_add\"));\n };\n\n const formik = useFormik({\n initialValues: {\n csvFile: undefined\n },\n validate: AddEmployeesWithCSVValidations,\n onSubmit: createEmployeesWithCSV\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n handleBlur\n } = formik;\n\n const downloadCSV = () => {\n window.location = `${BASE_CONTENT_URL}/content/benefit_example.csv`;\n setStep1Status(\"completed\");\n setStep2Status(\"active\");\n addHeightOnClick(document.getElementById(\"step2\"));\n document.getElementById(\"step3Circle\").style.transform =\n \"translateY(-20px)\";\n document.getElementById(\"step2Content\").style.opacity = 1;\n };\n\n const uploadCSV = e => {\n if (e.target.files.length > 0) {\n setFieldValue(e.target.name, e.target.files[0]);\n setStep2Status(\"completed\");\n setStep3Status(\"active\");\n addHeightOnClick(document.getElementById(\"step3\"));\n document.getElementById(\"step3Circle\").style.transform =\n \"translateY(-60px)\";\n document.getElementById(\"step3Content\").style.opacity = 1;\n }\n };\n\n return (\n \n \n

{t(\"add_employees\")}

\n
\n
\n
\n
\n {step1Status === \"completed\" ? (\n \n ) : (\n 1\n )}\n
\n

{t(\"download_template\")}

\n

{t(\"download_template_info\")}

\n downloadCSV()}\n >\n {t(\"download\")}\n \n
\n
\n
\n
\n
\n {step2Status === \"completed\" ? (\n \n ) : (\n 2\n )}\n
\n
\n

{t(\"step2_title_employees\")}

\n

{t(\"step2_text_1\")}

\n

{t(\"step2_text_2\")}

\n

\n {t(\"required_fields_employees\")}\n

\n

{t(\"step2_title_bonuses\")}

\n

{t(\"step2_text_3\")}

\n
    \n
  • {t(\"bonus_type_info\")}
  • \n
  • {t(\"bonus_start_date_info\")}
  • \n
  • {t(\"bonus_end_date_info\")}
  • \n
  • \n {t(\"bonus_type_default_info\")}\n
  • \n
  • \n {t(\"required_fields_bonuses\")}\n
  • \n
\n

{t(\"upload_the_file\")}

\n
\n {\n document.getElementById(\"csv\").click();\n }}\n onBlur={() => handleBlur(\"csvFile\", true)}\n className=\"uploadButton\"\n type=\"button\"\n >\n {t(\"upload\")}\n \n
\n {values.csvFile && (\n

{values.csvFile.name}

\n )}\n {errors.csvFile && (\n

\n {errors.csvFile && touched.csvFile\n ? errors.csvFile\n : \"\"}\n

\n )}\n
\n
\n {\n e.target.value = null;\n }}\n onChange={e => {\n uploadCSV(e);\n }}\n style={{ display: \"none\" }}\n />\n
\n
\n
\n
\n
\n
\n {step3Status === \"completed\" ? (\n \n ) : (\n 3\n )}\n
\n
\n

{t(\"submit_the_file\")}

\n {disableButton ? (\n \n ) : (\n \n )}\n
\n
\n
\n
\n \n
\n );\n};\n\nAddEmployeeWithCSV.propTypes = {\n fetchEmployees: PropTypes.func,\n closeModal: PropTypes.func\n};\n\nexport default AddEmployeeWithCSV;\n","import AddEmployeesWithCSV from './AddEmployeeWithCSV'\n\nexport default AddEmployeesWithCSV\n","import styled from 'styled-components'\n\nconst UpdateEmployeeWithCSVStyles = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\t/* justify-content: center; */\n\tpadding: 20px 0 20px 40px;\n\twidth: 500px;\n\n\t.title {\n\t\tfont-size: 24px;\n\t\tfont-weight: bold;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.08;\n\t\tletter-spacing: normal;\n\t\ttext-align: center;\n\t\tcolor: #4b4b4b;\n\t\tmargin-bottom: 30px;\n\t}\n\n\t.employeesForm {\n\t\twidth: 403px;\n\t}\n\n\t.step1Container {\n\t\tposition: relative;\n\t}\n\n\t.step1 {\n\t\tborder-left: 3px solid ${({ steps: { step1Status } }) => {\n\t\tif (step1Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\tpadding: 0 0 25px 63px;\n\t\ttransition: 0.3s all ease-in-out;\n\n\t\t.step1Circle {\n\t\t\twidth: 50px;\n\t\t\theight: 50px;\n\t\t\tborder: 3px solid\n\t\t\t${({ steps: { step1Status } }) => {\n\t\tif (step1Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\tif (step1Status === 'active') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\t\tborder-radius: 25px;\n\t\t\tbackground-color: ${({ steps: { step1Status } }) => {\n\t\tif (step1Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#fff'\n\t}};\n\t\t\tposition: absolute;\n\t\t\tcolor: #1568bf;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tfont-size: 18px;\n\t\t\tfont-weight: 600;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.23px;\n\t\t\tleft: -23px;\n\t\t\ttop: -15px;\n\t\t}\n\n\t\t.step1Title {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 600;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #4b4b4b;\n\t\t\tmargin-bottom: 15px;\n\t\t}\n\n\t\t.step1Text {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #4b4b4b;\n\t\t\tmargin-bottom: 15px;\n\t\t}\n\n\t\t.downloadButton {\n\t\t\twidth: 130px;\n\t\t\theight: 40px;\n\t\t\tborder-radius: 4px;\n\t\t\tborder: 1px solid #1568bf;\n\t\t\tbackground-color: #1568bf;\n\t\t\tdisplay: flex;\n\t\t\tfont-size: 14px;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tfont-weight: 500;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\toutline: none;\n\t\t\tcolor: #ffffff;\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t.step2Container {\n\t\tposition: relative;\n\t\tz-index: 3;\n\t}\n\n\t.step2 {\n\t\tborder-left: 3px solid \t${({ steps: { step2Status } }) => {\n\t\tif (step2Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\tpadding: 0 0 25px 63px;\n\t\theight: 0;\n\t\toverflow: hidden;\n\t\ttransition: 0.3s all ease-in-out;\n\n\t\t.step2Circle {\n\t\t\twidth: 50px;\n\t\t\theight: 50px;\n\t\t\tborder: 3px solid ${({ steps: { step2Status } }) => {\n\t\tif (step2Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\tif (step2Status === 'active') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\t\tborder-radius: 25px;\n\t\t\tbackground-color: ${({ steps: { step2Status } }) => {\n\t\tif (step2Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#ffffff'\n\t}};\n\t\t\tposition: absolute;\n\t\t\tcolor: ${({ steps: { step2Status } }) => {\n\t\tif (step2Status === 'active') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tfont-size: 18px;\n\t\t\tfont-weight: 600;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.23px;\n\t\t\tleft: -23px;\n\t\t\ttop: -15px;\n\t\t}\n\n\t\t.step2Content {\n\t\t\topacity: 0;\n\t\t\ttransition: 0.3s all ease-in-out;\n\t\t}\n\n\t\t.step2Title {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 600;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #4b4b4b;\n\t\t\tmargin-bottom: 15px;\n\t\t\ttransition: opacity 0.3s ease-in-out;\n\t\t}\n\n\t\t.step2Text {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #4b4b4b;\n\t\t\tmargin-bottom: 15px;\n\t\t}\n\n\t\t.step2TextTwo {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #1568bf;\n\t\t\tmargin-bottom: 15px;\n\t\t} \n\n\t\t.requiredFields {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: red;\n\t\t\tmargin-bottom: 15px;\n\t\t} \n\n\t\t.uploadButton {\n\t\t\tmin-width: 130px;\n\t\t\theight: 40px;\n\t\t\tborder-radius: 4px;\n\t\t\tborder: 1px solid #1568bf;\n\t\t\tbackground-color: #1568bf;\n\t\t\tdisplay: flex;\n\t\t\tfont-size: 14px;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tfont-weight: 500;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #ffffff;\n\t\t\tcursor: pointer;\n\t\t\toutline: none;\n\t\t}\n\n\t\t.fileName {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #4b4b4b;\n\t\t}\n\t}\n\n\t.step3Container {\n\t\tposition: relative;\n\t\tz-index: 4;\n\t}\n\n\t.step3 {\n\t\tpadding: 0 0 0 63px;\n\t\tborder-left: 3px solid ${({ steps: { step3Status } }) => {\n\t\tif (step3Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\tif (step3Status === 'active') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\theight: 0;\n\t\toverflow: hidden;\n\t\ttransition: 0.3s all ease-in-out;\n\n\t\t.step3Circle {\n\t\t\twidth: 50px;\n\t\t\theight: 50px;\n\t\t\tborder: 3px solid ${({ steps: { step3Status } }) => {\n\t\tif (step3Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\tif (step3Status === 'active') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\t\tborder-radius: 25px;\n\t\t\tbackground-color: ${({ steps: { step3Status } }) => {\n\t\tif (step3Status === 'completed') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#fff'\n\t}};\n\t\t\tposition: absolute;\n\t\t\tcolor: ${({ steps: { step3Status } }) => {\n\t\tif (step3Status === 'active') {\n\t\t\treturn '#1568bf'\n\t\t}\n\t\treturn '#d8d8d8'\n\t}};\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tfont-size: 18px;\n\t\t\tfont-weight: 600;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.23px;\n\t\t\tleft: -23px;\n\t\t\tbottom: -60px;\n\t\t\ttransition: 0.3s all ease-in-out;\n\t\t}\n\n\t\t.step3Content {\n\t\t\topacity: 1;\n\t\t\ttransition: 0.3s all ease-in-out;\n\t\t}\n\n\t\t.step3Title {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 600;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #4b4b4b;\n\t\t\tmargin-bottom: 15px;\n\t\t\ttransition: opacity 0.3s ease-in-out;\n\t\t}\n\n\t\t.finish {\n\t\t\twidth: 130px;\n\t\t\theight: 40px;\n\t\t\tborder-radius: 4px;\n\t\t\tborder: 1px solid #1568bf;\n\t\t\tbackground-color: #1568bf;\n\t\t\toutline: none;\n\t\t\tdisplay: flex;\n\t\t\tfont-size: 14px;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tfont-weight: 500;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: #ffffff;\n\t\t\tcursor: pointer;\n\t\t}\n\n\t\t.finish:disabled {\n\t\t\tbackground: #d8d8d8;\n\t\t\tcolor: #989898;\n\t\t\tborder: 1px solid #d8d8d8;\n\t\t}\n\t\t\n\t}\n\n\t@media screen and (max-width: 600px) {\n\t\twidth: 100%;\n\t\tpadding-right: 20px;\n\n\t\t.employeesForm {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n`\n\nexport default UpdateEmployeeWithCSVStyles\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\nimport { useFormik } from \"formik\";\n// assets\nimport { CheckIcon } from \"../../../../../assets/Icons\";\n// styles\nimport UpdateEmployeesWithCSVStyles from \"./UpdateEmployeesWithCSV.styles\";\n// services\nimport { AddEmployeesWithCSVValidations } from \"../../../../../services/validations/hr/addEmployeesWithCSV\";\nimport { addHeightOnClick } from \"../AddEmployeeWthCSV/addEmployeesCSV.services\";\nimport * as employeesService from \"../../../../../services/api/hr/employees.service\";\nimport { BASE_CONTENT_URL } from \"../../../../../constants/api.constants\";\nimport { useDispatch } from \"react-redux\";\nimport { setListOfFailedToBulkUpdateUsers } from \"../../../../../actions/hr/employees.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst UpdateEmployeesWithCSV = ({\n fetchEmployees,\n closeModal,\n openErrorPopup\n}) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const [step1Status, setStep1Status] = useState(\"active\");\n const [step2Status, setStep2Status] = useState(\"inactive\");\n const [step3Status, setStep3Status] = useState(\"inactive\");\n const [disableButton, setDisableButton] = useState(false);\n\n const handleUpdateEmployeeError = ({ error }) => {\n const { data } = error;\n if (data) {\n if (data.errors && data.error) {\n openErrorPopup(data.error, data.errors.csv.errors);\n } else {\n openErrorPopup(data.error);\n }\n }\n };\n\n const updateEmployeesWithCSV = async values => {\n setDisableButton(true);\n const response = await employeesService.updateEmployeesFromCsv(values);\n\n if (response.data?.failedBonusUsers.length > 0) {\n dispatch(\n setListOfFailedToBulkUpdateUsers(response.data.failedBonusUsers)\n );\n }\n\n if (response.hasError) {\n setDisableButton(false);\n return handleUpdateEmployeeError(response);\n }\n\n setStep3Status(\"completed\");\n fetchEmployees();\n setDisableButton(false);\n closeModal();\n toast.success(t(\"success_employees_edit\"));\n };\n\n const formik = useFormik({\n initialValues: {\n csvFile: undefined\n },\n validate: AddEmployeesWithCSVValidations,\n onSubmit: updateEmployeesWithCSV\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n handleBlur\n } = formik;\n\n const downloadUpdateCSV = () => {\n window.location = `${BASE_CONTENT_URL}/content/update_example.csv`;\n setStep1Status(\"completed\");\n setStep2Status(\"active\");\n addHeightOnClick(document.getElementById(\"step2\"));\n document.getElementById(\"step3Circle\").style.transform =\n \"translateY(-20px)\";\n document.getElementById(\"step2Content\").style.opacity = 1;\n };\n\n const uploadCSV = e => {\n if (e.target.files.length > 0) {\n setFieldValue(e.target.name, e.target.files[0]);\n setStep2Status(\"completed\");\n setStep3Status(\"active\");\n addHeightOnClick(document.getElementById(\"step3\"));\n document.getElementById(\"step3Circle\").style.transform =\n \"translateY(-60px)\";\n document.getElementById(\"step3Content\").style.opacity = 1;\n }\n };\n\n return (\n \n \n

{t(\"update_employees\")}

\n
\n
\n
\n
\n {step1Status === \"completed\" ? (\n \n ) : (\n 1\n )}\n
\n

{t(\"download_template\")}

\n

{t(\"update_employees_info\")}

\n downloadUpdateCSV()}\n >\n {t(\"download\")}\n \n
\n
\n
\n
\n
\n {step2Status === \"completed\" ? (\n \n ) : (\n 2\n )}\n
\n
\n

{t(\"step2_title_employees\")}

\n

{t(\"step2_text_1\")}

\n

{t(\"step2_text_2\")}

\n

\n {t(\"required_fields_employees\")}\n

\n

{t(\"upload_the_file\")}

\n
\n {\n document.getElementById(\"csv\").click();\n }}\n onBlur={() => handleBlur(\"csvFile\", true)}\n className=\"uploadButton\"\n type=\"button\"\n >\n {t(\"upload\")}\n \n
\n {values.csvFile && (\n

{values.csvFile.name}

\n )}\n {errors.csvFile && (\n

\n {errors.csvFile && touched.csvFile\n ? errors.csvFile\n : \"\"}\n

\n )}\n
\n
\n {\n e.target.value = null;\n }}\n onChange={e => {\n uploadCSV(e);\n }}\n style={{ display: \"none\" }}\n />\n
\n
\n
\n
\n
\n
\n {step3Status === \"completed\" ? (\n \n ) : (\n 3\n )}\n
\n
\n

{t(\"submit_the_file\")}

\n {disableButton ? (\n \n ) : (\n \n )}\n
\n
\n
\n
\n \n \n );\n};\n\nUpdateEmployeesWithCSV.propTypes = {\n fetchEmployees: PropTypes.func,\n closeModal: PropTypes.func\n};\n\nexport default UpdateEmployeesWithCSV;\n","import UpdateEmployeesWithCSV from './UpdateEmployeesWithCSV'\n\nexport default UpdateEmployeesWithCSV\n","import styled from \"styled-components\";\n\nexport const AddEmployeeWithCSVErrorStyles = styled.div`\n width: 546px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 30px 30px 30px;\n\n .circleLogoContainer {\n width: 126px;\n height: 126px;\n margin-bottom: 30px;\n }\n\n .title {\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 0.81;\n letter-spacing: normal;\n color: #4b4b4b;\n margin-bottom: 30px;\n }\n\n .error-message {\n margin: 0 0 20px 0;\n }\n\n .text {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n margin-bottom: 10px;\n }\n\n @media only screen and (max-width: 767px) {\n width: 100%;\n height: 100vh;\n }\n`;\n","import React from \"react\";\n// styles\nimport { AddEmployeeWithCSVErrorStyles } from \"./AddEmployeeWithCSVErrorStyles\";\n// assets\nimport { ErrorIconSvg } from \"../../../../../assets/Icons\";\n// components\nimport { Button } from \"../../../../../components\";\n// utils\nimport { isEmpty } from \"../../../../../services/general.utils\";\n\nconst AddEmployeeWithCSVError = ({ message, errors, cities, closeModal }) => {\n\n /**\n * Get errors for render.\n * @param {Array} errors \n * @returns {Array}\n */\n const getErrorsForRender = (errors) => {\n const errorsToRender = [];\n\n !isEmpty(errors) && errors.map(error => {\n if (error.email) {\n errorsToRender.push(`Email: ${Object.values(error.email.keys).join(', ')}`)\n }\n if (error.firstName) {\n errorsToRender.push(`First Name: ${Object.values(error.firstName.keys).join(', ')}`)\n }\n if (error.lastName) {\n errorsToRender.push(`Last Name: ${Object.values(error.lastName.keys).join(', ')}`)\n }\n if (error.gender) {\n errorsToRender.push(`Gender: ${Object.values(error.gender.keys).join(', ')}`)\n }\n if (error.tier) {\n errorsToRender.push(`Tier: ${Object.values(error.tier.keys).join(', ')}`)\n }\n if (error.description) {\n errorsToRender.push(`Description: ${Object.values(error.description.keys).join(', ')}`)\n }\n if (error.team) {\n errorsToRender.push(`Team: ${Object.values(error.team.keys).join(', ')}`)\n }\n if (error.relationship) {\n errorsToRender.push(`Relationship: ${Object.values(error.relationship.keys).join(', ')}`)\n }\n if (error.bornDate) {\n errorsToRender.push(`Birthday: ${Object.values(error.bornDate.keys).join(', ')}`)\n }\n if (error.firstDayAtWork) {\n errorsToRender.push(`Enroll date: ${Object.values(error.firstDayAtWork.keys).join(', ')}`)\n }\n if (error.contact) {\n errorsToRender.push(`Phone: ${Object.values(error.phone.keys).join(', ')}`)\n }\n if (error.children) {\n errorsToRender.push(`Children: ${Object.values(error.children.keys).join(', ')}`)\n }\n if (error.locations) {\n errorsToRender.push(`Locations: ${Object.values(error.locations.keys).join(', ')}`)\n }\n if (error.tokens) {\n errorsToRender.push(`Bonus Amount: ${Object.values(error.tokens.keys).join(', ')}`)\n }\n if (error.startDate) {\n errorsToRender.push(`Bonus Start Date: ${Object.values(error.startDate.keys).join(', ')}`)\n }\n if (error.endDate) {\n errorsToRender.push(`Bonus End Date: ${Object.values(error.endDate.keys).join(', ')}`)\n }\n if (error.recurringType) {\n errorsToRender.push(`Bonus Recurring Type: ${Object.values(error.recurringType.keys).join(', ')}`)\n }\n })\n\n return errorsToRender;\n }\n\n return (\n \n
\n \n
\n
\n Upload Failed\n
\n {!isEmpty(message) && (\n
\n {message}\n
)}\n
\n {!isEmpty(errors) && getErrorsForRender(errors).map((error, index) => {\n return (
\n {error}\n
)\n })}\n
\n {!isEmpty(cities) && (
\n Available locations: \n
\n {cities.map(city => city.name).join(\", \")}\n
)}\n closeModal()}\n margin=\"20px 0 0 0\"\n >\n OK\n \n
\n );\n};\n\nexport default AddEmployeeWithCSVError;\n","import React from \"react\";\nimport DatePicker from \"react-datepicker\";\nimport { parseISO } from \"date-fns\";\nimport PropTypes from \"prop-types\";\n// components\nimport { SelectInput, CheckboxInput } from \"../../../../../components\";\n// utils\nimport { isEmpty } from \"../../../../../services/general.utils\";\nimport {\n formatToStartOfDay,\n startFutureMonthFromDate\n} from \"../../../../../services/date.utils\";\nimport { useTranslation } from \"react-i18next\";\nimport LOCALES from \"../../../../../constants/locales.constants\";\n\nconst BonusBudgetDateInput = ({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n setFieldValue,\n selectName\n}) => {\n const { t } = useTranslation();\n const recurrenceTypeOptions = [\n {\n id: 1,\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"monthly\"],\n key: \"monthly\"\n },\n {\n id: 2,\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"three_months\"],\n key: \"three_months\"\n },\n {\n id: 3,\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"six_months\"],\n key: \"six_months\"\n },\n {\n id: 4,\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"yearly\"],\n key: \"yearly\"\n }\n ];\n\n const handleDateChange = selectedDate => {\n if (isNaN(selectedDate) || isEmpty(selectedDate)) {\n return;\n }\n\n // You who reads this in the future, don't touch this, dates in javascript with datepickers are real hard, okay?\n // This exists because the javascript date object automatically sets selected date to utc, so we have to offset it\n // So the selected value in the datepicker is valid\n if (selectedDate) {\n selectedDate.setHours((-1 * selectedDate.getTimezoneOffset()) / 60);\n }\n setFieldValue(\"endDate\", formatToStartOfDay(selectedDate));\n };\n\n const handleStartDateChange = selectedDate => {\n if (isNaN(selectedDate) || isEmpty(selectedDate)) {\n return;\n }\n if (selectedDate) {\n selectedDate.setHours((-1 * selectedDate.getTimezoneOffset()) / 60);\n }\n setFieldValue(\"startDate\", formatToStartOfDay(selectedDate));\n };\n\n const filterStartDateBasedOnRecurrence = date => {\n return date.getDate() <= 25;\n };\n\n return (\n <>\n
\n
\n

{t(\"Bonus Start Date\")}:

\n
\n {values.recurring && values.recurringType !== \"yearly\" ? (\n handleStartDateChange(selectedDate)}\n minDate={new Date()}\n value={parseISO(values.startDate)}\n showYearDropdown\n placeholderText=\"DD/MM/YYYY\"\n filterDate={filterStartDateBasedOnRecurrence}\n />\n ) : (\n handleStartDateChange(selectedDate)}\n minDate={new Date()}\n value={parseISO(values.startDate)}\n showYearDropdown\n placeholderText=\"DD/MM/YYYY\"\n />\n )}\n

{t(\"bonus_start_date_disclaimer\")}

\n
\n
\n
\n

{t(\"Bonus End Date\")}:

\n
\n handleDateChange(selectedDate)}\n minDate={startFutureMonthFromDate(new Date(), 2)}\n value={parseISO(values.endDate)}\n showYearDropdown\n placeholderText=\"DD/MM/YYYY\"\n />\n

{t(\"bonus_end_date_disclaimer\")}

\n
\n
\n \n \n
\n {values.recurring && (\n
\n option.key === values.recurringType\n )}\n handleChange={option => setFieldValue(\"recurringType\", option.key)}\n customHeight=\"41px\"\n shouldHaveFullWidth\n />\n
\n {errors.recurringType && touched.recurringType\n ? errors.recurringType\n : \"\"}\n
\n
\n )}\n \n );\n};\n\nBonusBudgetDateInput.propTypes = {\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n handleChange: PropTypes.func,\n handleBlur: PropTypes.func,\n setFieldValue: PropTypes.func,\n selectName: PropTypes.string\n};\n\nexport default BonusBudgetDateInput;\n","import React, { useEffect } from \"react\";\nimport DatePicker from \"react-datepicker\";\nimport { parseISO } from \"date-fns\";\nimport PropTypes from \"prop-types\";\n// utils\nimport { isEmpty } from \"../../../../../services/general.utils\";\nimport {\n formatToStartOfDay,\n startFutureMonthFromDate,\n formatDateForPlaceholder\n} from \"../../../../../services/date.utils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst DateInput = ({ values, setFieldValue, isNotCompanyBonusBudget }) => {\n const { t } = useTranslation();\n\n const handleStartDateChange = selectedDate => {\n if (isNaN(selectedDate) || isEmpty(selectedDate)) {\n return;\n }\n if (selectedDate) {\n selectedDate.setHours((-1 * selectedDate.getTimezoneOffset()) / 60);\n }\n setFieldValue(\"startDate\", formatToStartOfDay(selectedDate));\n };\n\n useEffect(() => {\n isNotCompanyBonusBudget && setFieldValue(\"startDate\", new Date());\n isNotCompanyBonusBudget &&\n setFieldValue(\"endDate\", startFutureMonthFromDate(new Date()));\n }, [isNotCompanyBonusBudget]);\n\n return (\n <>\n
\n
\n

{t(\"Bonus Start Date\")}:

\n
\n handleStartDateChange(selectedDate)}\n minDate={new Date()}\n maxDate={startFutureMonthFromDate(new Date())}\n value={parseISO(values.startDate)}\n showYearDropdown\n placeholderText=\"DD/MM/YYYY\"\n />\n
\n
\n
\n

{t(\"Bonus End Date\")}:

\n
\n\n
\n {formatDateForPlaceholder(startFutureMonthFromDate(new Date()))}\n
\n
\n \n );\n};\n\nDateInput.propTypes = {\n values: PropTypes.shape(),\n setFieldValue: PropTypes.func,\n isNotCompanyBonusBudget: PropTypes.bool\n};\n\nexport default DateInput;\n","import styled from \"styled-components\";\n\nconst FormStyles = styled.div`\n width: 545px;\n padding: 36px 32px 32px 27px;\n\n .title {\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.08;\n letter-spacing: normal;\n color: #4b4b4b;\n margin-bottom: 32px;\n }\n\n .selectContainer {\n width: 100%;\n margin-bottom: 22px;\n }\n\n .nameContainer {\n width: 100%;\n margin-bottom: 12px;\n }\n\n .dateContainer {\n width: 100%;\n margin: 12px 0;\n }\n\n .tokensAndCurrencyContainer {\n display: flex;\n justify-content: space-between;\n }\n\n .tokensContainer {\n width: 48%;\n }\n\n .inputContainer {\n width: 100%;\n height: 46px;\n position: relative;\n display: flex;\n align-items: center;\n }\n\n .descriptionContainer {\n width: 100%;\n margin-bottom: 12px;\n }\n\n .labelAndValidation {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .label {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n color: #373737;\n text-transform: capitalize;\n }\n\n .numbersInputs {\n width: 100%;\n height: 46px;\n border-radius: 4px;\n border: solid 1px #d5dbdd;\n background-color: #ffffff;\n padding: 0 14px;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n color: #373737cc;\n outline: none;\n position: absolute;\n }\n\n .input {\n width: 100%;\n height: 46px;\n border-radius: 4px;\n border: solid 1px #d5dbdd;\n background-color: #ffffff;\n padding: 0 14px;\n font-size: 14px;\n font-family: \"Montserrat\", sans-serif !important;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n color: #373737;\n outline: none;\n\n &--disabled {\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 16px;\n font-weight: 600;\n color: #4b4b4b;\n opacity: 0.5;\n pointer-events: none;\n }\n }\n\n .textArea {\n min-height: 119px;\n max-height: 119px;\n min-width: 100%;\n max-width: 100%;\n border-radius: 4px;\n border: solid 1px #d5dbdd;\n background-color: #ffffff;\n opacity: 0.8;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n color: #373737;\n outline: none;\n padding: 14px;\n resize: none;\n }\n\n .tokenWorth {\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: italic;\n line-height: 1.85;\n letter-spacing: -0.22px;\n color: #626262;\n }\n\n .datepickerWrapper {\n margin-top: 22px;\n }\n .dateDisclaimer {\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: italic;\n line-height: 1.85;\n letter-spacing: -0.22px;\n color: #626262;\n }\n\n .datepickerWrapper {\n .react-datepicker-wrapper {\n width: 100% !important;\n }\n }\n\n .checkbox-wrapper {\n margin: 20px 0;\n display: flex;\n flex-direction: row;\n align-items: center;\n label {\n margin-left: 10px;\n width: 150px;\n }\n }\n\n .datePickerInput {\n height: 46px;\n width: 100%;\n border-radius: 3px;\n border: 1px solid #979797;\n outline: none;\n text-align: center;\n font-size: 16px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n cursor: pointer;\n position: relative;\n }\n\n input[type=\"number\"]::-webkit-clear-button {\n display: none;\n -webkit-appearance: none;\n }\n\n input[type=\"number\"]::-webkit-inner-spin-button {\n -webkit-appearance: none;\n display: none;\n }\n\n input[type=\"number\"] {\n -moz-appearance: textfield;\n }\n\n @media screen and (max-width: 767px) {\n width: 100%;\n padding: 36px 12px 32px 12px;\n\n button {\n width: 100%;\n }\n }\n`;\n\nexport default FormStyles;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n// assets\nimport { TokenIcon } from \"../../../../../assets/Icons\";\n// components\nimport {\n Button,\n SelectInput,\n MultiselectInput\n} from \"../../../../../components\";\nimport BonusBudgetDateInput from \"./BonusBudgetDateInput\";\nimport DateInput from \"./DateInput\";\n// styles\nimport FormStyles from \"./FormStyles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Form = ({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n tokenWorth,\n setFieldValue,\n title,\n buttonText,\n disableButton,\n inputName,\n textareaName,\n selectName,\n selectOptions,\n isNotCompanyBonusBudget,\n fetchMoreData,\n hasMore,\n handleSearchEmployees\n}) => {\n const { t } = useTranslation();\n const handleNumberInput = e => {\n let inputValue = e.target.validity.valid\n ? parseInt(e.target.value, 0)\n : values.tokens;\n\n if (isNaN(inputValue)) {\n inputValue = \"\";\n }\n\n if (e.target.name === \"tokens\") {\n setFieldValue(\"tokens\", inputValue);\n setFieldValue(\n \"currency\",\n inputValue === \"\" ? \"\" : inputValue * tokenWorth.worth\n );\n }\n\n if (e.target.name === \"currency\") {\n setFieldValue(\"currency\", inputValue);\n if (inputValue % tokenWorth.worth === 0) {\n setFieldValue(\n \"tokens\",\n inputValue === \"\" ? \"\" : inputValue / tokenWorth.worth\n );\n } else {\n setFieldValue(\"tokens\", \"\");\n }\n }\n };\n\n return (\n \n

{title}

\n
\n
\n

{t(selectName)}:

\n
\n {errors[selectName] && touched[selectName]\n ? errors[selectName]\n : \"\"}\n
\n
\n {title === t(\"Add Bonus\") ? (\n option.id === values.employees[0].id\n )}\n handleChange={option => setFieldValue(\"employees\", [option])}\n customHeight=\"41px\"\n shouldHaveFullWidth\n />\n ) : (\n setFieldValue(\"employees\", option)}\n selectedValues={values.employees}\n shouldHaveFullWidth={true}\n customHeight=\"41px\"\n dropdownMenuHeight=\"150px\"\n />\n )}\n
\n {isNotCompanyBonusBudget ? (\n \n ) : (\n \n )}\n
\n
\n

{t(inputName)}:

\n
\n {errors[inputName] && touched[inputName] ? errors[inputName] : \"\"}\n
\n
\n \n
\n
\n
\n

{t(textareaName)}:

\n
\n {errors[textareaName] && touched[textareaName]\n ? errors[textareaName]\n : \"\"}\n
\n
\n \n
\n
\n
\n

{t(\"enter_the_value\")}

\n
\n \n

\n currency\n

\n
\n

1 token = {tokenWorth.worth} currency

\n
\n
\n
\n

# {t(\"of_tokens\")}:

\n
\n {errors.tokens && touched.tokens ? errors.tokens : \"\"}\n
\n
\n
\n \n \n
\n \n
\n
\n \n
\n {disableButton ? (\n \n ) : (\n \n )}\n
\n
\n );\n};\n\nForm.propTypes = {\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n handleChange: PropTypes.func,\n handleBlur: PropTypes.func,\n tokenWorth: PropTypes.shape(),\n setFieldValue: PropTypes.func,\n title: PropTypes.string,\n buttonText: PropTypes.string,\n disableButton: PropTypes.bool,\n inputName: PropTypes.string,\n textareaName: PropTypes.string,\n selectName: PropTypes.string,\n selectOptions: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number,\n name: PropTypes.string\n })\n )\n};\n\nexport default Form;\n","import Form from './Form'\n\nexport default Form\n","import { apiService } from \"../api.service\";\nimport { TiersResponse } from \"../../../models/server/responses\";\nimport { TokenWorth, Tier, Company, CompanyTheme } from \"../../../models/domain\";\nimport { CompanyBudgetRolloverPayload, TierPayload, CompanyThemePayload } from \"../../../models/server/payloads\";\n\nexport const getCompanyTiers = async () => {\n const response = await apiService.get(\"/company/tiers\");\n\n if (response.hasError) return response;\n\n return new TiersResponse(response);\n};\n\nexport const addTier = async values => {\n const response = await apiService.post(\"/company/tier/create\", new TierPayload(values));\n\n if (response.hasError) return response;\n\n return new Tier(response.data);\n};\n\nexport const editTier = async (selectedTierId, values) => {\n const response = await apiService.put(\n `/company/tier/${selectedTierId}`,\n new TierPayload(values)\n );\n\n if (response.hasError) return response;\n\n return new Tier(response.data);\n};\n\nexport const removeTier = async selectedTierId => {\n const response = await apiService.delete(`/company/tier/${selectedTierId}`);\n\n return response;\n};\n\nexport const getTokenWorth = async () => {\n const response = await apiService.get(\"/hr/token\");\n\n if (response.hasError) return response;\n\n return new TokenWorth(response.data);\n};\n\nexport const onboardingFinish = async () => {\n const response = await apiService.patch(\"/users/hr/onboarding\");\n\n return response;\n};\n\nexport const getCompanyWithBudgetRollover = async () => {\n const response = await apiService.get(\"/company/budget-rollover/get\");\n\n if (response.hasError) return response;\n\n return new Company(response.data);\n}\n\nexport const updateBudgetRollover = async (budgetRolloverData) => {\n let payload = new CompanyBudgetRolloverPayload(budgetRolloverData);\n\n const response = await apiService.post(\n `/company/budget-rollover`,\n payload\n );\n\n if (response.hasError) return response;\n\n return response;\n}\n\nexport const addCompanyTheme = async values => {\n const theme = new CompanyThemePayload(values);\n const response = await apiService.post(`/company/theme/create`, theme.payload);\n\n if (response.hasError) return response;\n\n return new CompanyTheme(response.data);\n};\n\nexport const editCompanyTheme = async (selectedCompanyThemeId, values) => {\n const theme = new CompanyThemePayload(values);\n const response = await apiService.put(`/company/theme/${selectedCompanyThemeId}`, theme.payload);\n\n if (response.hasError) return response;\n\n return new CompanyTheme(response.data);\n};\n\nexport const removeCompanyTheme = async (selectedCompanyThemeId) => {\n const response = await apiService.delete(`/company/theme/${selectedCompanyThemeId}`);\n\n return response;\n};","import { findLocales } from \"../../../utils/helpers/findLocales\";\nimport { isEmpty, removeSpacesAndHTML } from \"../../general.utils\";\n\nexport const addBonusFormValidation = ({\n subject,\n message,\n tokens,\n employeeId,\n employees,\n recurring,\n recurringType\n}) => {\n const errors = {};\n const isInLanguage = findLocales(\"rs\");\n\n if (subject && removeSpacesAndHTML(subject).length > 50) {\n errors.subject = isInLanguage ? \"Predugo\" : \"Too long\";\n }\n\n if (message && removeSpacesAndHTML(message).length > 1000) {\n errors.message = isInLanguage ? \"Predugo\" : \"Too long\";\n }\n\n if (!tokens) {\n errors.tokens = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n if (!employeeId && (!employees || employees.length === 0)) {\n errors.employees = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n if (recurring) {\n if (isEmpty(recurringType)) {\n errors.recurringType = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n }\n\n return errors;\n};\n","import styled from 'styled-components'\n\nconst AddBonusStyles = styled.section`\n height: 80vh;\n overflow-y: scroll;\n`;\n\nexport default AddBonusStyles;","import React, { useState, useEffect, useRef } from \"react\";\nimport { connect, useDispatch, useSelector } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport { useFormik } from \"formik\";\nimport { toast } from \"react-toastify\";\nimport { BeatLoader } from \"react-spinners\";\n\n// components\nimport Form from \"./Form\";\n// entity\nimport { Bonus, DropDownOption } from \"../../../../models/domain\";\n// services\nimport * as userActionCreators from \"../../../../actions/app.actions\";\nimport * as settingsService from \"../../../../services/api/hr/settings.service\";\nimport * as employeesService from \"../../../../services/api/hr/employees.service\";\nimport { addBonusFormValidation } from \"../../../../services/validations/hr/bonusFormValidation\";\nimport { handleAddBonusError } from \"../../../../services/errors/hr//AddBonusError\";\nimport { override } from \"../../../../services/loadingOverride.styles\";\n// styles\nimport AddBonusStyles from \"./AddBonusStyles\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n setDropdownEmployeesFilter,\n setDropdownEmployeesMeta,\n setListOfDropdownEmployees\n} from \"../../../../actions/hr/employees.actions\";\n\nconst AddBonus = ({\n closeModal,\n modalType,\n companyId,\n employees,\n employeeId,\n user,\n finishOnboarding\n}) => {\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const { listOfEmployees, filters, meta } = useSelector(\n state => state.employees.dropdownEmployees\n );\n\n const [tokenWorth, setTokenWorth] = useState(0);\n const [isLoading, setIsLoading] = useState(true);\n const [isNotCompanyBonusBudget, setIsNotCompanyBonusBudget] = useState(false);\n const selectOptions = DropDownOption.createOptions(listOfEmployees);\n const isMounted = useRef(false);\n\n const fetchCompanyBonusBudgetData = async () => {\n const response = await employeesService.getCompanyBonusBudget();\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage ? response.errorMessage : \"Something went wrong\"\n );\n }\n\n if (!response?.data?.id && isMounted.current) {\n setIsNotCompanyBonusBudget(true);\n }\n };\n\n const fetchToken = async () => {\n const responseTokenWorth = await settingsService.getTokenWorth();\n\n if (isMounted.current) {\n setTokenWorth(responseTokenWorth);\n setIsLoading(false);\n }\n };\n\n useEffect(() => {\n isMounted.current = true;\n fetchToken();\n fetchCompanyBonusBudgetData();\n\n return () => {\n fetchToken();\n fetchCompanyBonusBudgetData();\n isMounted.current = false;\n };\n }, []);\n\n const onboardingDone = async () => {\n if (user.serverOnboarding === false) {\n const response = await settingsService.onboardingFinish();\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n finishOnboarding();\n }\n };\n\n const createBonusSubmit = async (values, { setSubmitting }) => {\n setSubmitting(true);\n const response = await employeesService.addBonus(values);\n\n if (response.hasError) {\n setSubmitting(false);\n return handleAddBonusError(response);\n }\n\n toast.success(t(\"success_add_bonus\"));\n setSubmitting(false);\n closeModal();\n onboardingDone();\n };\n\n const formik = useFormik({\n initialValues: new Bonus({\n employees: employeeId\n ? selectOptions.filter(option => option.id === employeeId)\n : [],\n companyId: companyId,\n endDate: \"\",\n startDate: \"\",\n recurring: false,\n recurringType: \"\"\n }),\n validate: addBonusFormValidation,\n onSubmit: createBonusSubmit\n });\n\n const getEmployees = async () => {\n try {\n const response = await employeesService.getCompanyEmployees({\n limit: filters.limit,\n page: 1,\n searchText: filters.search,\n orderColumns: [],\n tierIds: [],\n chosenBudgetRanges: []\n });\n\n dispatch(setListOfDropdownEmployees(response.employees));\n dispatch(setDropdownEmployeesMeta(response.page));\n } catch (error) {\n console.log(\"Unable to get list of employees in dropdown\");\n }\n };\n\n useEffect(() => {\n getEmployees();\n }, [filters]);\n\n const handlePageChange = () => {\n const payload = {\n ...filters,\n limit: (filters.page + 1) * 35,\n page: filters.page + 1\n };\n\n dispatch(setDropdownEmployeesFilter(payload));\n };\n\n const handleSearchEmployees = searchValue => {\n const payload = { ...filters, search: searchValue };\n\n dispatch(setDropdownEmployeesFilter(payload));\n };\n\n const {\n values,\n errors,\n touched,\n isSubmitting,\n handleSubmit,\n setFieldValue,\n handleChange,\n handleBlur\n } = formik;\n\n return isLoading ? (\n \n \n \n ) : (\n \n
\n \n \n
\n );\n};\n\nAddBonus.propTypes = {\n addBonus: PropTypes.func,\n closeModal: PropTypes.func,\n modalType: PropTypes.shape({\n title: PropTypes.string,\n selectName: PropTypes.string\n }),\n companyId: PropTypes.number,\n employees: PropTypes.arrayOf(PropTypes.shape({})),\n employeeId: PropTypes.number,\n user: PropTypes.shape({}),\n finishOnboarding: PropTypes.func\n};\n\nconst mapStateToProps = state => {\n return {\n user: state.app.user,\n companyId: state.app.user.companyId,\n employees: state.employees.employees\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n finishOnboarding: () => dispatch(userActionCreators.finishOnboarding())\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AddBonus);\n","import { toast } from \"react-toastify\";\n\nexport const handleAddBonusError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.companyId) {\n toast.error(`${data.error.message}: ${data.errors.companyId.keys[0]}`);\n }\n if (data.errors.employeeId) {\n toast.error(`${data.error.message}: ${data.errors.employeeId.keys[0]}`);\n }\n if (data.errors.tokens) {\n toast.error(`${data.error.message}: ${data.errors.tokens.keys[0]}`);\n }\n if (data.errors.subject) {\n toast.error(`${data.error.message}: ${data.errors.subject.keys[0]}`);\n }\n if (data.errors.message) {\n toast.error(\n `${data.error.message}: ${data.errors.message.keys[0]}`\n );\n }\n } else {\n toast.error(data.error.message);\n }\n };","import styled from \"styled-components\";\n\nconst EmployeesStyles = styled.section`\n .employeeContentContainer {\n width: calc(100% - 210px);\n margin-left: 210px;\n background: whitesmoke;\n min-height: 100vh;\n }\n\n .selectsContainer {\n display: flex;\n background: white;\n padding: 0 16px;\n gap: 5px;\n\n .react-dropdown-select {\n width: 100%;\n min-width: 170px;\n font-size: 11px;\n }\n }\n\n @media screen and (max-width: 891px) {\n .filtersFirst {\n opacity: 1;\n }\n\n .filtersSecond {\n opacity: 0;\n }\n }\n\n @media screen and (min-width: 891px) {\n .filtersFirst {\n opacity: 0;\n height: 0;\n }\n\n .selectsContainer {\n padding: 0;\n }\n }\n\n .employeesContainer {\n padding: 0 30px 30px 30px;\n display: flex;\n position: relative;\n }\n\n .firstMenu {\n display: flex;\n justify-content: space-between;\n padding: 16px;\n flex-wrap: wrap;\n background: #fff;\n }\n\n .buttonsWrapper {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n width: 50%;\n min-width: 450px;\n }\n\n .searchIcon {\n background: #f7f9fc;\n padding: 12px 0 8px 10px;\n border-radius: 8px 0 0 8px;\n margin-right: -10px;\n z-index: 2;\n }\n\n .filterButton {\n font-weight: 500;\n line-height: 16px;\n }\n\n .buttonsContainer {\n position: relative;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n }\n\n .filtersContainer {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 15px;\n\n .closeFiltersButton {\n display: none;\n }\n .selectsContainer {\n display: flex;\n gap: 15px;\n > div {\n width: 202px;\n }\n }\n }\n\n .addContainer {\n width: 24px;\n height: 24px;\n background: #fff;\n border-radius: 50%;\n color: #373737;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-right: 10px;\n }\n\n .addSign {\n margin-right: 8px;\n font-size: 28px;\n line-height: 28px;\n font-weight: 400;\n }\n\n #employeesList {\n transition: all 0.4s ease-in-out;\n opacity: 0;\n width: 100%;\n background-color: whitesmoke;\n }\n\n .firstMenuMobile {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n display: none;\n background: #fff;\n padding: 8px 16px;\n\n .sortMobileButton {\n font-size: 16px;\n font-weight: 400;\n }\n }\n\n .secondMenu {\n width: 100%;\n padding: 8px 20px;\n background: #fff;\n\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .flexContainer {\n display: flex;\n align-items: center;\n }\n\n p {\n font-size: 14px;\n line-height: 16px;\n font-weight: 500;\n color: #1d1d1d;\n }\n\n .selected {\n width: 90px;\n color: ${props => props.selectedColor};\n margin: 0 11px;\n }\n }\n\n .tableHead {\n padding: 14px 30px;\n display: flex;\n align-items: center;\n border-bottom: 1px solid #94abd1;\n border-top: 1px solid #f0f0f0;\n background: #fff;\n }\n\n .tableBodyContainer {\n background: #f7f7f7;\n padding: 30px;\n margin: 20px 0 0 0;\n border-radius: 4px;\n }\n\n #addEmployeeForm {\n position: absolute;\n width: calc(100% - 60px);\n transform: translateX(110%);\n transition: all 0.4s ease-in-out;\n opacity: 0;\n }\n\n .buttonText {\n font-size: 16px;\n font-weight: 600;\n line-height: 16px;\n }\n\n .showAddEmployeeForm {\n transform: translateY(0) !important;\n opacity: 1 !important;\n }\n\n .hideEmployeeList {\n transform: translateX(-110%);\n opacity: 0;\n max-height: 1000px;\n overflow-y: auto;\n }\n\n .actionsDropdownWrapper {\n position: absolute;\n display: flex;\n flex-direction: column;\n width: 234px;\n right: 0;\n border-radius: 0px 4px 0px 0px;\n border: solid 1px transparent;\n z-index: 2;\n color: rgb(7, 6, 6);\n background-color: rgb(236, 236, 236);\n\n > span {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 8px 10px;\n cursor: pointer;\n }\n\n & span:first-child {\n display: none;\n }\n\n .buttonText {\n font-size: 14px;\n font-weight: 500;\n line-height: 16px;\n }\n }\n\n .actionsSortWrapper {\n position: absolute;\n display: flex;\n flex-direction: column;\n width: 234px;\n left: 0;\n border-radius: 0px 4px 0px 0px;\n border: solid 1px transparent;\n z-index: 2;\n background-color: rgb(236, 236, 236);\n\n .chevronContainer {\n width: 24px;\n height: 24px;\n background: #fff;\n border-radius: 50%;\n color: #373737;\n margin-right: 10px;\n\n svg {\n margin: 3px 0 0 7px;\n }\n }\n\n .sortButton {\n justify-content: flex-start;\n }\n\n .buttonText {\n font-size: 14px;\n font-weight: 500;\n line-height: 16px;\n }\n }\n\n .appliedFiltersContainer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n font-size: 12px;\n line-height: 16px;\n font-weight: 500;\n background: #fff;\n\n .appliedFilters {\n display: flex;\n align-items: center;\n gap: 10px;\n overflow-x: auto;\n max-width: calc(100% - 80px);\n flex-wrap: wrap;\n\n .appliedFilterPill {\n display: flex;\n align-items: center;\n gap: 19px;\n background-color: #f0f4f9;\n color: #1d1d1d;\n padding: 6px 8px;\n border-radius: 23px;\n\n .removeFilter {\n cursor: pointer;\n }\n }\n }\n\n .clearButton {\n justify-content: flex-end;\n font-size: 12px;\n font-weight: 500;\n line-height: 16px;\n }\n }\n\n @keyframes showModal {\n from {\n transform: translateX(320px);\n opacity: 0;\n }\n to {\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n .filtersContainer.mobile {\n display: flex;\n flex-direction: column-reverse;\n justify-content: flex-end;\n width: 310px;\n padding: 90px 30px 30px 30px;\n position: fixed;\n top: 0;\n right: 0;\n height: 100%;\n background: rgb(255, 255, 255);\n border-radius: 4px;\n box-shadow: rgb(0 0 0 / 20%) 0px 2px 4px -1px,\n rgb(0 0 0 / 12%) 0px 1px 10px 0px, rgb(0 0 0 / 14%) 0px 4px 5px 0px;\n z-index: 10;\n animation: showModal 0.4s ease-in-out;\n transition: all 0.35s ease-in-out;\n transition-delay: 0.1s;\n > div {\n width: 100%;\n }\n .closeFiltersButton {\n display: unset;\n width: 40px;\n height: 40px;\n color: rgba(0, 0, 0, 0.54);\n border: none;\n outline: none;\n font-size: 20px;\n position: absolute;\n z-index: 2;\n right: 15px;\n top: 30px;\n font-weight: 500;\n cursor: pointer;\n background: rgba(255, 255, 255, 0.6);\n border-radius: 50%;\n &:hover {\n color: #1568bf;\n background: rgba(255, 255, 255, 0.8);\n }\n }\n .selectsContainer {\n flex-direction: column;\n width: 100%;\n > div {\n width: 100%;\n }\n }\n }\n\n .paginationWrapper {\n display: flex;\n justify-content: center;\n background: #fff;\n padding: 30px;\n }\n\n @media screen and (max-width: 1024px) {\n .buttonsWrapper {\n min-width: 400px;\n }\n }\n\n @media screen and (max-width: 960px) {\n .employeesContainer {\n padding: 0 15px 30px 15px;\n }\n\n .buttonsWrapper {\n min-width: 440px;\n }\n\n .addSign {\n margin: 0 4px;\n }\n\n .actionsDropdownWrapper {\n & span:first-child {\n display: flex;\n }\n }\n }\n\n @media screen and (max-width: 767px) {\n .employeeContentContainer {\n width: 100%;\n margin-left: 0;\n }\n\n .employeesContainer {\n padding: 0;\n }\n\n #employeesList {\n background: whitesmoke;\n padding: 0;\n }\n\n .firstMenu {\n padding: 8px 16px;\n }\n\n .buttonsWrapper {\n min-width: calc(100% - 60px);\n\n .filterButton {\n display: none;\n }\n }\n\n .firstMenuMobile {\n display: flex;\n }\n\n .secondMenu {\n margin: 11px 0;\n }\n\n .tableHead {\n display: none;\n }\n\n .paginationWrapper {\n margin-top: 10px;\n padding: 25px;\n }\n\n #addEmployeeForm {\n width: 100%;\n }\n }\n`;\n\nexport default EmployeesStyles;\n","import React from \"react\";\nimport InfoPopUp from \"../../../../../components/InfoPopUp/InfoPopUp\";\n\nexport const tableHeaderListHREmployees = [\n [\n {\n id: 0,\n field: \"blanco1\",\n headName: \"\",\n isSortedUp: null,\n width: \"42px\",\n justifyContent: \"flex-start\",\n isSortable: false,\n orderPriority: 0\n },\n {\n id: 1,\n field: \"name\",\n headName: \"Name\",\n isSortedUp: null,\n width: \"34%\",\n justifyContent: \"flex-start\",\n margin: \"0 0 0 46px\",\n isSortable: true,\n orderPriority: 0\n },\n {\n id: 2,\n field: \"tier\",\n headName: \"Tier\",\n isSortedUp: null,\n width: \"22%\",\n justifyContent: \"flex-start\",\n isSortable: true,\n orderPriority: 0\n },\n {\n id: 3,\n field: \"tokens\",\n headName: \"Budget\",\n isSortedUp: null,\n width: \"20%\",\n justifyContent: \"center\",\n isSortable: false,\n orderPriority: 0,\n Component: \n },\n {\n id: 4,\n field: \"used_budget_percentage\",\n headName: \"Spent(%)\",\n isSortedUp: null,\n width: \"21%\",\n justifyContent: \"center\",\n isSortable: true,\n orderPriority: 0\n },\n {\n id: 5,\n field: \"email_confirmed\",\n headName: \"Verified\",\n isSortedUp: null,\n width: \"20%\",\n justifyContent: \"center\",\n isSortable: true,\n orderPriority: 0\n },\n {\n id: 6,\n field: \"email\",\n headName: \"Email\",\n isSortedUp: null,\n width: \"30%\",\n justifyContent: \"flex-start\",\n isSortable: true,\n orderPriority: 0,\n padding: \"0 0 0 21px\"\n },\n {\n id: 7,\n field: \"blanco\",\n headName: \"\",\n isSortedUp: null,\n width: \"35px\",\n justifyContent: \"flex-start\",\n isSortable: false,\n orderPriority: 0\n }\n ],\n [\n {\n id: 1,\n field: \"name\",\n headName: \"Name\",\n isSortedUp: null,\n width: \"48%\",\n justifyContent: \"flex-start\",\n margin: \"\",\n isSortable: true,\n orderPriority: 0,\n margin: \"0 0.5% 0 75px\"\n },\n {\n id: 2,\n field: \"tier\",\n headName: \"Tier\",\n isSortedUp: null,\n width: \"10%\",\n justifyContent: \"flex-start\",\n margin: \"0 0 0 1%\",\n isSortable: true,\n orderPriority: 0\n },\n {\n id: 3,\n field: \"tokens\",\n headName: \"Budget\",\n isSortedUp: null,\n width: \"25%\",\n justifyContent: \"flex-start\",\n margin: \"0 0 0 4%\",\n isSortable: false,\n orderPriority: 0,\n Component: \n },\n {\n id: 4,\n field: \"used_budget_percentage\",\n headName: \"Spent(%)\",\n isSortedUp: null,\n width: \"17%\",\n justifyContent: \"flex-start\",\n margin: \"0 0 0 1%\",\n isSortable: true,\n orderPriority: 0\n },\n {\n id: 5,\n field: \"email_confirmed\",\n headName: \"Verified\",\n isSortedUp: null,\n width: \"15%\",\n justifyContent: \"flex-start\",\n margin: \"0 0 0 1%\",\n isSortable: true,\n orderPriority: 0\n },\n {\n id: 6,\n field: \"blanco\",\n headName: \"\",\n isSortedUp: null,\n width: \"2%\",\n justifyContent: \"flex-start\",\n margin: \"0 0 0 3%\",\n isSortable: false,\n orderPriority: 0\n }\n ],\n\n [\n {\n id: 1,\n field: \"name\",\n headName: \"Name\",\n isSortedUp: null,\n width: \"48%\",\n justifyContent: \"flex-start\",\n margin: \"\",\n isSortable: true,\n orderPriority: 0,\n margin: \"0 0.5% 0 51px\"\n },\n {\n id: 2,\n field: \"tier\",\n headName: \"Tier\",\n isSortedUp: null,\n width: \"15%\",\n justifyContent: \"flex-start\",\n margin: \"0 0 0 1%\",\n isSortable: true,\n orderPriority: 0\n },\n {\n id: 3,\n field: \"tokens\",\n headName: \"Budget\",\n isSortedUp: null,\n width: \"30%\",\n justifyContent: \"flex-start\",\n margin: \"0 0 0 4%\",\n isSortable: false,\n orderPriority: 0,\n Component: \n },\n {\n id: 4,\n field: \"email_confirmed\",\n headName: \"Verified\",\n isSortedUp: null,\n width: \"15%\",\n justifyContent: \"flex-start\",\n margin: \"0 0 0 1%\",\n isSortable: true,\n orderPriority: 0\n }\n ],\n []\n];\n","import { tableHeaderListHREmployees } from '../pages/HrPages/EmployeePages/Employees/builderResponsive';\n\n/**Is the type between the limits\n * @param {Number} a - Left border.\n * @param {Number} b - Right border.\n * @param {Number} type - The action to apply.\n * @returns {Boolean} - True if type is between borders. \n */\nconst between = (a, b, type) => type > a && type <= b;\n\n/**Switch state by an action.\n * @param {Number} type - The action type to apply (screen width || column id ).\n * @param {Array} state - An array of objects.\n * @returns {Array} - An array of active objects. \n */\nexport const getTableHeadHREmployees = (type, state = []) => {\n switch(true) {\n case between(1280, 6000, type): // screen width\n return tableHeaderListHREmployees[0];\n case between(960, 1280, type): // screen width\n return tableHeaderListHREmployees[1];\n case between(766, 960, type): // screen width\n return tableHeaderListHREmployees[2];\n case between(10, 766, type): // screen width\n return tableHeaderListHREmployees[0];\n case between(0, 10, type): // column id\n return state;\n case (type === \"unsort\"): // unset sorted column\n return state;\n default: \n throw new Error(); \t\t\t\n };\n};\n","import { getTableHeadHREmployees } from '../../../../../services/getTableHead.util';\n\nlet priorityCounter = 0;\n\n/**Table header reducer. Return state by action type. \n * @param {Array} state - An array of objects.\n * @param {Object} action - An object.\n * @returns {Array} - An array of active objects. \n */\nexport const tableHeaderReducer = (state, action) => {\n const newState = getTableHeadHREmployees(action.type, state);\n \n const tableHeaders = newState.map(tableHeader => {\n if (tableHeader.id === action.type) {\n return {\n ...tableHeader,\n isSortedUp: !tableHeader.isSortedUp,\n orderPriority: priorityCounter\n };\n };\n\n if (action.type === \"unsort\") {\n return {\n ...tableHeader,\n isSortedUp: null,\n orderPriority: priorityCounter\n };\n }\n\n return {\n ...tableHeader\n };\n });\n\n priorityCounter += 1;\n return tableHeaders;\n};\n","import React from \"react\";\n// styles\nimport { AddEmployeeWithCSVErrorStyles } from \"./AddEmployeeWithCSVErrorStyles\";\n// assets\nimport { ErrorIconSvg } from \"../../../../../assets/Icons\";\n// components\nimport { Button } from \"../../../../../components\";\n// utils\nimport { isEmpty } from \"../../../../../services/general.utils\";\nimport { useDispatch } from \"react-redux\";\nimport { setListOfFailedToBulkUpdateUsers } from \"../../../../../actions/hr/employees.actions\";\n\nconst UploadUpdateCSVFailed = ({ users, closeModal, errors }) => {\n const dispatch = useDispatch();\n\n /**\n * Get errors for render.\n * @param {Array} errors\n * @returns {Array}\n */\n const getErrorsForRender = (users, errors) => {\n const errorsToRender = [];\n\n if (!isEmpty(errors)) {\n errors.forEach(error => {\n if (error.email) {\n errorsToRender.push(\n `Email: ${Object.values(error.email.keys).join(\", \")}`\n );\n }\n if (error.tokens) {\n errorsToRender.push(\n `Bonus Amount: ${Object.values(error.tokens.keys).join(\", \")}`\n );\n }\n if (error.startDate) {\n errorsToRender.push(\n `Bonus Start Date: ${Object.values(error.startDate.keys).join(\n \", \"\n )}`\n );\n }\n if (error.endDate) {\n errorsToRender.push(\n `Bonus End Date: ${Object.values(error.endDate.keys).join(\", \")}`\n );\n }\n });\n\n return errorsToRender;\n }\n\n return users.map(user => user.message);\n };\n\n const handleClose = () => {\n closeModal();\n dispatch(setListOfFailedToBulkUpdateUsers([]));\n };\n\n return (\n \n
\n \n
\n
Adding bonus to these users failed
\n
\n {(!isEmpty(users) || !isEmpty(errors)) &&\n getErrorsForRender(users, errors).map((value, index) => {\n return (\n
\n {value}\n
\n );\n })}\n
\n\n \n
\n );\n};\n\nexport default UploadUpdateCSVFailed;\n","import React, {\n useState,\n useEffect,\n useReducer,\n useContext,\n useRef\n} from \"react\";\nimport { connect, useDispatch, useSelector } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { toast } from \"react-toastify\";\nimport { BeatLoader } from \"react-spinners\";\nimport ReactTooltip from \"react-tooltip\";\nimport Pagination from \"react-pagination-js\";\nimport \"react-pagination-js/dist/styles.css\";\nimport SearchIcon from \"@material-ui/icons/Search\";\n// custom components\nimport {\n Header,\n Card,\n Table,\n TableHead,\n TableRow,\n Button,\n Modal,\n SearchInput,\n openModalAnim,\n closeModalAnim,\n MultiselectInput,\n DisableUserModal,\n DisableUsersModal,\n CheckboxInput,\n EmployeeListItem\n} from \"../../../../components\";\nimport AddEmployee from \"./AddEmployee\";\nimport AddEmployeesWithCSV from \"./AddEmployeeWthCSV\";\nimport UpdateEmployeesWithCSV from \"./UpdateEmployeeWithCSV\";\nimport AddEmployeeWithCSVError from \"./errorPopup/AddEmployeeWithCSVError\";\nimport AddBonus from \"./AddBonus\";\n// style component\nimport EmployeesStyles from \"./EmployeesStyles\";\nimport { override } from \"../../../../services/loadingOverride.styles\";\n// assets\nimport {\n EmployeesIcon,\n FilterIconMobileSvg,\n FilterIconSvg,\n SortIconSvg,\n TrashIconSvg,\n AddIconSvg\n} from \"../../../../assets/Icons\";\n// config for table head\nimport { tableHeaderReducer } from \"./builderResponsive\";\nimport { getTableHeadHREmployees } from \"../../../../services/getTableHead.util\";\n// services\nimport { getOrderColumns } from \"../../../../services/getOrderColumns\";\nimport * as employeesService from \"../../../../services/api/hr/employees.service\";\nimport * as usersService from \"../../../../services/api/admin/users.service\";\nimport * as actionCreators from \"../../../../actions/hr/employees.actions\";\n// Hooks\nimport { useDisableBodyScroll } from \"../../../../hooks/useDisableBodyScroll\";\nimport useWindowDimensions from \"../../../../hooks/useWindowDimensions\";\nimport { isEmpty } from \"../../../../services/general.utils\";\nimport ChevronIconDownSvg from \"../../../../assets/Icons/ChevronIconDownSvg\";\nimport useClickOutside from \"../../../../hooks/useClickOutside\";\nimport UploadUpdateCSVFailed from \"./errorPopup/UploadUpdateCSVFailed\";\nimport { useTranslation } from \"react-i18next\";\n// config\nconst LIMIT = 35;\nlet firstSetTimeOut = null;\nlet secondSetTimeOut = null;\n\nconst Employees = ({\n setHrEmployees,\n setHrEmployeePage,\n setHrEmployeeSearch,\n employees,\n count,\n page,\n search\n}) => {\n const reduxDispatch = useDispatch();\n const { t } = useTranslation();\n const history = useHistory();\n\n const [isLoading, setIsLoading] = useState(true);\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isUpdateModalOpen, setIsUpdateModalOpen] = useState(false);\n const [isAddEmployeeOpen, setIsAddEmployeeOpen] = useState(false);\n const [errorPopup, setErrorPopup] = useState(false);\n const [errorMessage, setErrorMessage] = useState({});\n const [errors, setErrors] = useState([]);\n const [tiers, setTiers] = useState([]);\n const [chosenTiers, setChosenTiers] = useState([]);\n const [chosenTierIds, setChosenTierIds] = useState([]);\n const [chosenBudgetRanges, setChosenBudgetRanges] = useState([]);\n const [disableUserPopup, setDisableUserPopup] = useState(false);\n const [disableUsersPopup, setDisableUsersPopup] = useState(false);\n const [selectedUserId, setSelectedUserId] = useState(null);\n const [selectedEmployeeId, setSelectedEmployeeId] = useState(null);\n const [modalType, setModalType] = useState(undefined);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const [isMobileSortWrapperOpen, setIsMobileSortWrapperOpen] = useState(false);\n const [selectedNumber, setSelectedNumber] = useState(0);\n const [isChecked, setIsChecked] = useState(false);\n const [checkedMap, setCheckedMap] = useState(new Map());\n const [headerTitle, setHeaderTitle] = useState(t(\"Employees\"));\n\n const { width } = useWindowDimensions();\n const [tableHeaders, dispatch] = useReducer(\n tableHeaderReducer,\n width,\n getTableHeadHREmployees\n );\n\n const { failedToUpdateUserList } = useSelector(state => state.employees);\n\n const tooltip = useRef(null);\n const tooltipActionsSortWrapper = useRef(null);\n const isMounted = useRef(true);\n const areFiltersLoaded = useRef(false);\n\n useDisableBodyScroll(isModalOpen);\n\n const budgetRangesOptions = [\n {\n id: 1,\n name: \"0% - 25%\",\n from: 0,\n to: 25\n },\n {\n id: 2,\n name: \"25% - 50%\",\n from: 25,\n to: 50\n },\n {\n id: 3,\n name: \"50% - 75%\",\n from: 50,\n to: 75\n },\n {\n id: 4,\n name: \"75% - 100%\",\n from: 75,\n to: 1000\n }\n ];\n\n const fetchEmployees = async (\n searchText = search,\n tierIds = chosenTierIds\n ) => {\n const response = await employeesService.getCompanyEmployees({\n limit: LIMIT,\n page,\n searchText,\n orderColumns: getOrderColumns(tableHeaders),\n tierIds,\n chosenBudgetRanges: chosenBudgetRanges\n });\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n if (isMounted.current && response) {\n firstSetTimeOut = setTimeout(() => {\n setHrEmployees(response.employees, response.count);\n setIsLoading(false);\n secondSetTimeOut = setTimeout(() => {\n const employeesList = document.getElementById(\"employeesList\");\n if (isMounted.current && employeesList) {\n employeesList.style.opacity = 1;\n }\n }, 100);\n }, 100);\n }\n };\n\n /**\n * Fetches tiers for multiselect dropdown.\n * Sets to state.\n */\n const fetchTiers = async () => {\n const response = await usersService.getTierOptions();\n if (response.hasError) {\n return toast.error(\n response.errorMessage ? response.errorMessage : t(\"failed_to_get_tiers\")\n );\n }\n\n setTiers(response);\n\n areFiltersLoaded.current = true;\n };\n\n useEffect(() => {\n fetchEmployees();\n fetchTiers();\n return () => () => {\n isMounted.current = false;\n clearTimeout(firstSetTimeOut);\n clearTimeout(secondSetTimeOut);\n };\n }, [page, tableHeaders]);\n\n /**\n * Opens disable user popup.\n * Sets selected user id to state.\n * @param {number} userId\n */\n const openDisableUserPopup = userId => {\n setSelectedUserId(userId);\n setDisableUserPopup(true);\n\n setTimeout(() => {\n openModalAnim();\n }, 500);\n };\n\n /**\n * Opens disable users popup.\n * Sets selected users ids to state.\n */\n const openDisableUsersPopup = () => {\n if (selectedNumber < 1) {\n return toast.error(t(\"select_users_warning\"));\n }\n\n setDisableUsersPopup(true);\n\n setTimeout(() => {\n openModalAnim();\n }, 500);\n };\n\n useEffect(() => {\n if (areFiltersLoaded.current === true) fetchEmployees();\n }, [chosenTierIds, chosenBudgetRanges]);\n\n // Add CSV Modal\n const openModal = () => {\n setIsModalOpen(true);\n setTimeout(() => {\n openModalAnim();\n }, 100);\n };\n\n const closeModal = () => {\n closeModalAnim();\n setTimeout(() => {\n setIsModalOpen(false);\n }, 350);\n };\n\n // Update CSV Modal\n const openUpdateModal = () => {\n setIsUpdateModalOpen(true);\n setTimeout(() => {\n openModalAnim();\n }, 100);\n };\n\n const closeUpdateModal = () => {\n closeModalAnim();\n setTimeout(() => {\n setIsUpdateModalOpen(false);\n }, 350);\n };\n\n // Add Bonus Modal\n const openAddBonusModal = (type, employeeId = null) => {\n setSelectedEmployeeId(employeeId);\n setModalType(type);\n\n setTimeout(() => {\n openModalAnim();\n }, 100);\n };\n\n const closeAddBonusModal = () => {\n closeModalAnim();\n setTimeout(() => {\n setModalType(undefined);\n }, 350);\n };\n\n // Add Employee\n const openAddEmployee = () => {\n setIsAddEmployeeOpen(true);\n setTimeout(() => {\n const addEmployeeForm = document.getElementById(\"addEmployeeForm\");\n const employeesList = document.getElementById(\"employeesList\");\n if (addEmployeeForm && employeesList && isMounted.current) {\n employeesList.classList.add(\"hideEmployeeList\");\n addEmployeeForm.classList.add(\"showAddEmployeeForm\");\n }\n setHeaderTitle(\n headerTitle === t(\"Employees\") ? t(\"add_employee\") : t(\"Employees\")\n );\n }, 150);\n };\n\n const handleSetChosenBudgetRanges = options => {\n setChosenBudgetRanges(options);\n };\n\n /**\n * Handles chosing tiers.\n * Sets chosen tiers to state.\n * Sets chosen tierIds to state.\n * @param {object} options\n */\n const handleSetChosenTiers = options => {\n let selectedTierIds = [];\n\n if (options && options.length) {\n selectedTierIds = options.map(tier => tier.id);\n }\n\n setChosenTiers(options);\n setChosenTierIds(selectedTierIds);\n };\n\n /**\n * Handles opening of error popup\n * - Sets error popup visibility state to true.\n * - Sets error data object.\n * @param {object} errorData\n */\n const handleOpenErrorPopup = (errorMessage, errors) => {\n setErrorPopup(true);\n setErrorMessage(errorMessage);\n setErrors(errors);\n };\n\n /**\n * Handle closing of modal.\n */\n const handleCloseModal = () => {\n setErrorPopup(false);\n };\n\n const removeTierFilters = tier => {\n const chosenTiersFilters = chosenTiers.filter(el => {\n return tier.id !== el.id;\n });\n const chosenTierIdsFilters = chosenTierIds.filter(el => {\n return tier.id !== el;\n });\n\n setChosenTiers(chosenTiersFilters);\n setChosenTierIds(chosenTierIdsFilters);\n };\n\n const removeBudgetPercentageFilter = budgetRange => {\n const chosenBudgetRangesFilters = chosenBudgetRanges.filter(el => {\n return budgetRange.id !== el.id;\n });\n\n setChosenBudgetRanges(chosenBudgetRangesFilters);\n };\n\n const removeAllFilters = () => {\n setChosenTiers([]);\n setChosenTierIds([]);\n setChosenBudgetRanges([]);\n };\n\n /**\n * Handles opening of dropdown wrapper tooltip.\n * - Sets isDropdownOpen toggled state.\n * @param {Event} event\n */\n const handleDropdownOpen = event => {\n event.preventDefault();\n setIsDropdownOpen(!isDropdownOpen);\n };\n\n useClickOutside([tooltip], () => setIsDropdownOpen(false));\n useEffect(() => {\n dispatch({ type: width });\n }, [width]);\n\n /**\n * Handles opening of sort wrapper tooltip.\n * - Sets isMobileSortWrapperOpen toggled state.\n * @param {Event} event\n */\n const handleSortOpen = event => {\n event.preventDefault();\n setIsMobileSortWrapperOpen(!isMobileSortWrapperOpen);\n };\n\n /**\n * Handles sorting mobile employees columns\n * - If there is a table header that is sorted, unsort it\n * - Dispatch action for table head reducer. Return state by action type.\n * @param {Number} id\n */\n const toggleSortFunc = id => {\n const sortedUpTableHeader = tableHeaders.filter(\n header => header.id !== id && header.isSortedUp !== null\n )[0];\n // if there is a table header that is sorted, unsort it\n !isEmpty(sortedUpTableHeader) && dispatch({ type: \"unsort\" });\n\n dispatch({ type: id });\n };\n\n useClickOutside([tooltipActionsSortWrapper], () =>\n setIsMobileSortWrapperOpen(false)\n );\n\n useEffect(() => {\n ReactTooltip.rebuild();\n }, [employees.length]);\n\n /**\n * Handles the behavior when employees on the active page change\n * Users that are not included in the checkedMap are added with the value false\n * If at least one user is checked on the active page, set isChecked to true, otherwise false.\n */\n useEffect(() => {\n const checked = new Map(checkedMap);\n let numberOfSelectedOnPage = 0;\n employees.forEach(employee =>\n checked.has(employee.user.id)\n ? checked.get(employee.user.id) && numberOfSelectedOnPage++\n : !employee.user.isDisabled && checked.set(employee.user.id, false)\n );\n\n numberOfSelectedOnPage > 0 ? setIsChecked(true) : setIsChecked(false);\n setCheckedMap(checked);\n }, [employees]);\n\n /**\n * Handles the behavior when the checkedMap is change\n * If at least one user is checked on the active page, set isChecked to true, otherwise false.\n */\n useEffect(() => {\n let numberOfSelectedOnPage = 0;\n employees.forEach(employee => {\n checkedMap.has(employee.user.id) &&\n checkedMap.get(employee.user.id) &&\n numberOfSelectedOnPage++;\n });\n\n numberOfSelectedOnPage > 0 ? setIsChecked(true) : setIsChecked(false);\n }, [checkedMap]);\n\n const handleCheckboxOnChange = () => {\n const checked = new Map(checkedMap);\n !isChecked\n ? employees.forEach(\n employee =>\n !employee.user.isDisabled && checked.set(employee.user.id, true)\n )\n : employees.forEach(\n employee =>\n !employee.user.isDisabled && checked.set(employee.user.id, false)\n );\n\n let total = 0;\n for (const x of checked.values()) {\n x && total++;\n }\n\n setSelectedNumber(total);\n setCheckedMap(checked);\n setIsChecked(!isChecked);\n };\n\n const getDropdownEmployees = async () => {\n try {\n const response = await employeesService.getCompanyEmployees({\n limit: 35,\n page: 1,\n searchText: \"\",\n orderColumns: [],\n tierIds: [],\n chosenBudgetRanges: []\n });\n\n reduxDispatch(\n actionCreators.setListOfDropdownEmployees(response.employees)\n );\n reduxDispatch(actionCreators.setDropdownEmployeesMeta(response.page));\n } catch (error) {\n console.log(error);\n\n console.log(\"Unable to get list of employees in dropdown\");\n }\n };\n\n useEffect(() => {\n getDropdownEmployees();\n }, []);\n\n const shouldRedirectToOriginal = () => {\n const addEmployeeForm = document.getElementById(\"addEmployeeForm\");\n const employeesList = document.getElementById(\"employeesList\");\n if (addEmployeeForm && employeesList) {\n employeesList.classList.remove(\"hideEmployeeList\");\n addEmployeeForm.classList.remove(\"showAddEmployeeForm\");\n }\n setTimeout(() => {\n setIsAddEmployeeOpen(false);\n setHeaderTitle(\n headerTitle === t(\"Employees\") ? t(\"add_employee\") : t(\"Employees\")\n );\n }, 300);\n };\n\n return (\n 0 ? \"#668CCC\" : \"#1D1D1D\"}>\n
\n \n {isLoading ? (\n \n \n
\n ) : (\n
\n \n
\n
\n
\n \n
\n \n
\n
\n {width > 960 && (\n \n

+

\n

{t(\"add_employee\")}

\n \n )}\n
\n {width > 960 ? (\n handleDropdownOpen(e)}\n >\n \n \n \n \n ) : (\n handleDropdownOpen(e)}\n borderRadius=\"4px\"\n borderRight=\"1px solid white\"\n >\n

+

\n \n )}\n {isDropdownOpen && (\n
\n \n
\n

+

\n
\n

{t(\"add_employee\")}

\n
\n \n
\n

+

\n
\n

{t(\"add_employees_csv\")}

\n
\n \n
\n

+

\n
\n

\n {t(\"update_employees_csv\")}{\" \"}\n

\n
\n \n openAddBonusModal(\n {\n title: \"Add Bonuses\",\n selectName: \"employees\"\n },\n null\n )\n }\n >\n
\n

+

\n
\n

{t(\"add_bonus\")}

\n \n
\n )}\n
\n
\n
\n
\n
\n handleSetChosenTiers(option)}\n selectedValues={chosenTiers}\n />\n handleSetChosenBudgetRanges(option)}\n selectedValues={chosenBudgetRanges}\n />\n
\n
\n
\n
\n handleSortOpen(e)}\n borderRadius=\"4px\"\n customClass=\"sortMobileButton\"\n >\n \n

{t(\"Sort\")}

\n \n {isMobileSortWrapperOpen && (\n
\n {tableHeaders.map(\n ({ id, isSortable, isSortedUp, headName }) =>\n isSortable && (\n toggleSortFunc(id)}\n transparent\n gap=\"4px\"\n color=\"rgb(7, 6, 6)\"\n customClass=\"sortButton\"\n >\n
\n \n
\n

\n {t(\"sort_by\")} {headName}\n

\n \n )\n )}\n
\n )}\n
\n
\n
\n
\n
\n \n

\n {selectedNumber} {t(\"Selected\")}\n

\n
\n \n \n

{t(\"Delete\")}

\n \n
\n\n
\n
\n handleSetChosenTiers(option)}\n selectedValues={chosenTiers}\n />\n \n handleSetChosenBudgetRanges(option)\n }\n selectedValues={chosenBudgetRanges}\n />\n
\n
\n
\n
\n {tableHeaders.map(\n ({\n id,\n headName,\n isSortable,\n isSortedUp,\n width,\n justifyContent,\n margin,\n textAlign,\n Component\n }) => (\n \n )\n )}\n
\n
\n {!isEmpty(employees) ? (\n employees.map(employee => (\n = 0\n ? employee.remainingTokens\n : 0\n }\n budgetSpentPercentage={`${employee.budgetSpentPercentage}%`}\n userEmail={employee.user.email}\n gender={employee.gender}\n cities={employee.cities}\n team={employee.team}\n relationship={employee.relationship}\n bornDate={employee.bornDate}\n firstDayAtWork={employee.firstDayAtWork}\n fetchData={fetchEmployees}\n contact={employee.contact}\n bonusAmount={employee.bonusAmount}\n setSelectedNumber={setSelectedNumber}\n checkedMap={checkedMap}\n setCheckedMap={setCheckedMap}\n />\n ))\n ) : (\n
\n {t(\"no_result_found\")}\n
\n )}\n
\n
\n setHrEmployeePage(page)}\n theme=\"border-bottom\"\n />\n
\n \n {isAddEmployeeOpen && (\n
\n \n
\n
\n )}\n
\n )}\n
\n {isModalOpen && (\n \n \n \n )}\n {isUpdateModalOpen && (\n \n \n \n )}\n {errorPopup && (\n \n \n \n )}\n {(errorPopup || failedToUpdateUserList.length > 0) && (\n \n \n \n )}\n {disableUserPopup && (\n setDisableUserPopup(false)}\n >\n setDisableUserPopup(false)}\n fetchData={fetchEmployees}\n />\n \n )}\n {disableUsersPopup && (\n setDisableUsersPopup(false)}\n >\n setDisableUsersPopup(false)}\n fetchData={fetchEmployees}\n userIdsMap={checkedMap}\n text=\"employees\"\n setSelectedNumber={setSelectedNumber}\n />\n \n )}\n {modalType && (\n \n \n \n )}\n
\n );\n};\n\nconst mapStateToProps = state => {\n return {\n employees: state.employees.employees,\n page: state.employees.page,\n count: state.employees.count,\n search: state.employees.search\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setHrEmployees: (employees, count) =>\n dispatch(actionCreators.setHrEmployees(employees, count)),\n setHrEmployeePage: page => dispatch(actionCreators.setHrEmployeePage(page)),\n setHrEmployeeSearch: search =>\n dispatch(actionCreators.setHrEmployeeSearch(search))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Employees);\n","import Employees from './Employees'\n\nexport default Employees\n","import styled from \"styled-components\";\n\nconst TierItemStyles = styled.div`\n padding: 20px 15px 15px 15px;\n height: 181px;\n width: 381px;\n margin: 0 16px 16px 0;\n border-radius: 4px;\n border: 1px solid #d8d8d8;\n cursor: pointer;\n\n /* &:hover {\n\t\tbox-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2),0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 4px 5px 0 rgba(0, 0, 0, 0.14);\n\t} */\n\n .titleContainer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .title {\n font-size: 18px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: -0.45px;\n color: #373737;\n }\n }\n\n .tokensMembersContainer {\n display: flex;\n align-items: center;\n\n .tokensAndMembers {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n color: #373737;\n }\n }\n\n .description {\n margin-top: 21px;\n opacity: 0.7;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.5px;\n color: #373737;\n }\n\n .actionsCol {\n display: flex;\n align-items: center;\n background: none;\n border: none;\n outline: none;\n font-size: 16px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #8f8f8f;\n cursor: pointer;\n position: relative;\n }\n\n .tooltip {\n width: 120px;\n /* height: 107px; */\n background: #f7f7f7;\n border: 1px solid #1568bf !important;\n padding: 0;\n border-radius: 4px;\n }\n\n .button {\n width: 100%;\n height: 34px;\n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 0 16px;\n font-size: 12px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #8f8f8f;\n text-transform: capitalize;\n\n &:hover {\n background: #1568bf;\n color: #fff;\n }\n }\n`;\n\nexport default TierItemStyles;\n","export const SET_TIERS = \"HR_SET_TIERS\";\nexport const ADD_TIER = \"HR_ADD_TIER\";\nexport const EDIT_TIER = \"HR_EDIT_TIER\";\nexport const REMOVE_TIER = \"HR_REMOVE_TIER\";\n","import * as actionTypes from \"../../constants/actionTypes/hr/settings.constants\";\n\nexport const setTiers = tiers => {\n return { type: actionTypes.SET_TIERS, tiers };\n};\n\nexport const addTier = tier => {\n return { type: actionTypes.ADD_TIER, tier };\n};\n\nexport const editTier = (tierId, tier) => {\n return { type: actionTypes.EDIT_TIER, tierId, tier };\n};\n\nexport const removeTier = tierId => {\n return { type: actionTypes.REMOVE_TIER, tierId };\n};\n","import React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\nimport ReactTooltip from \"react-tooltip\";\n// assets\nimport { DotsIcon } from \"../../../../assets/Icons\";\n// styles\nimport TierItemStyles from \"./TierItemStyles\";\n// services\nimport * as actionCreators from \"../../../../actions/hr/settings.actions\";\nimport * as settingsService from \"../../../../services/api/hr/settings.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst TierItem = ({ tier, setSelectedTier, removeTier, openModal }) => {\n const { t } = useTranslation();\n\n const [isActive, setIsActive] = useState(false);\n // const myTooltip = useRef()\n\n const onClickDots = () => {\n setIsActive(true);\n ReactTooltip.rebuild();\n };\n\n const handleBlur = () => {\n setIsActive(false);\n // ReactTooltip.hide()\n ReactTooltip.rebuild();\n };\n\n const isInRSD = localStorage.getItem(\"isValueInRsd\");\n\n return (\n {\n setSelectedTier(tier);\n openModal(\"editTier\");\n }}\n >\n
\n

{tier.name}

\n {\n e.stopPropagation();\n onClickDots();\n }}\n onBlur={() => handleBlur()}\n >\n \n \n myTooltip.current = ref}\n className=\"tooltip\"\n getContent={dataTip => (\n
\n {\n e.stopPropagation();\n handleBlur();\n const result = confirm(t(\"delete_tier_alert\"));\n if (result) {\n const response = await settingsService.removeTier(dataTip);\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n removeTier(dataTip);\n ReactTooltip.rebuild();\n }\n }}\n >\n {t(\"Delete\")}\n \n
\n )}\n border\n clickable\n />\n
\n
\n

\n {isInRSD ? `${tier.tokens * 20} RSD` : `${tier.tokens} Tokens`}\n

\n

-

\n

{tier.countEmployee} Members

\n
\n

{tier.description}

\n \n );\n};\n\nTierItem.propTypes = {\n tier: PropTypes.shape(),\n setSelectedTier: PropTypes.func,\n removeTier: PropTypes.func,\n openModal: PropTypes.func\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n removeTier: tierId => dispatch(actionCreators.removeTier(tierId))\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(TierItem);\n","import TierItem from './TierItem'\n\nexport default TierItem\n","import styled from 'styled-components'\n\nconst FormStyles = styled.div`\n\twidth: 545px;\n /* height: 596px; */\n\tpadding: 36px 32px 32px 27px;\n\n\t.title {\n\t\tfont-size: 24px;\n\t\tfont-weight: bold;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.08;\n\t\tletter-spacing: normal;\n\t\tcolor: #4b4b4b;\n\t\tmargin-bottom: 32px;\n\t}\n\n\t.nameContainer {\n\t\twidth: 100%;\n\t\tmargin-bottom: 12px;\n\t}\n\n\t.tokensAndCurrencyContainer {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t}\n\n\t.tokensContainer {\n\t\twidth: 48%;\n\t}\n\n\t.inputContainer {\n\t\twidth: 100%;\n\t\theight: 46px;\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t.descriptionContainer {\n\t\twidth: 100%;\n\t\tmargin-bottom: 12px;\n\t}\n\n\t.labelAndValidation {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t}\n\n\t.label {\n\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.71;\n\t\tletter-spacing: -0.23px;\n\t\tcolor: #373737;\n\t}\n\n\t.numbersInputs {\n\t\twidth: 100%;\n\t\theight: 46px;\n\t\tborder-radius: 4px;\n\t\tborder: solid 1px #d5dbdd;\n\t\tbackground-color: #ffffff;\n\t\tpadding: 0 14px;\n\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.71;\n\t\tletter-spacing: -0.23px;\n\t\tcolor: #373737cc;\n\t\toutline: none;\n\t\tposition: absolute;\n\t}\n\n\t.input {\n\t\twidth: 100%;\n\t\theight: 46px;\n\t\tborder-radius: 4px;\n\t\tborder: solid 1px #d5dbdd;\n\t\tbackground-color: #ffffff;\n\t\tpadding: 0 14px;\n\t\tfont-size: 14px;\n\t\tfont-family: \"Montserrat\", sans-serif !important;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.71;\n\t\tletter-spacing: -0.23px;\n\t\tcolor: #373737;\n\t\toutline: none;\n\t}\n\n\t.textArea {\n\t\tmin-height: 119px;\n\t\tmax-height: 119px;\n\t\tmin-width: 100%;\n\t\tmax-width: 100%;\n\t\tborder-radius: 4px;\n\t\tborder: solid 1px #d5dbdd;\n\t\tbackground-color: #ffffff;\n\t\topacity: 0.8;\n\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.71;\n\t\tletter-spacing: -0.23px;\n\t\tcolor: #373737;\n\t\toutline: none;\n\t\tpadding: 14px;\n\t\tresize: none;\n\t}\n\n\t.tokenWorth {\n\t\tfont-size: 13px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: italic;\n\t\tline-height: 1.85;\n\t\tletter-spacing: -0.22px;\n\t\tcolor: #626262;\n\t}\n\n\tinput[type=number]::-webkit-clear-button {\n\t\tdisplay: none;\n -webkit-appearance: none;\n\t}\n\n\tinput[type=number]::-webkit-inner-spin-button {\n -webkit-appearance: none;\n display: none;\n\t}\n\n\tinput[type=number] {\n\t\t\t-moz-appearance:textfield;\n\t}\n`\n\nexport default FormStyles\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n// assets\nimport { TokenIcon } from \"../../../../assets/Icons\";\n// components\nimport { Button } from \"../../../../components\";\n// styles\nimport FormStyles from \"./FormStyles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Form = ({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n tokenWorth,\n setFieldValue,\n title,\n buttonText,\n disableButton\n}) => {\n const { t } = useTranslation();\n const handleNumberInput = e => {\n let inputValue = e.target.validity.valid\n ? parseInt(e.target.value, 0)\n : values.tokens;\n if (isNaN(inputValue)) {\n inputValue = \"\";\n }\n if (e.target.name === \"tokens\") {\n setFieldValue(\"tokens\", inputValue);\n setFieldValue(\n \"currency\",\n inputValue === \"\" ? \"\" : inputValue * tokenWorth.worth\n );\n }\n if (e.target.name === \"currency\") {\n setFieldValue(\"currency\", inputValue);\n if (inputValue % tokenWorth.worth === 0) {\n setFieldValue(\n \"tokens\",\n inputValue === \"\" ? \"\" : inputValue / tokenWorth.worth\n );\n } else {\n setFieldValue(\"tokens\", \"\");\n }\n }\n };\n\n return (\n \n

{t(title)}

\n
\n
\n

{t(\"Name\")}:

\n
\n {errors.name && touched.name ? errors.name : \"\"}\n
\n
\n \n
\n
\n
\n

{t(\"Description\")}:

\n
\n {errors.description && touched.description\n ? errors.description\n : \"\"}\n
\n
\n \n
\n
\n
\n

{t(\"enter_the_value\")}

\n
\n \n

RSD

\n
\n

1 token = {tokenWorth.worth} RSD

\n
\n
\n
\n

# {t(\"of_tokens\")}:

\n
\n {errors.tokens && touched.tokens ? errors.tokens : \"\"}\n
\n
\n
\n \n \n
\n \n
\n
\n \n
\n {disableButton ? (\n \n ) : (\n \n )}\n
\n
\n );\n};\n\nForm.propTypes = {\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n tokenWorth: PropTypes.shape(),\n handleBlur: PropTypes.func,\n handleChange: PropTypes.func,\n setFieldValue: PropTypes.func,\n title: PropTypes.string,\n buttonText: PropTypes.string,\n disableButton: PropTypes.bool\n};\n\nexport default Form;\n","import Form from './Form'\n\nexport default Form\n","import { findLocales } from \"../../../utils/helpers/findLocales\";\nimport { isEmpty, removeSpacesAndHTML } from \"../../general.utils\";\n\nexport const tierFormValidation = ({ name, description, tokens }) => {\n const errors = {};\n const isInLanguage = findLocales(\"rs\");\n\n if (!name.trim()) {\n errors.name = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (removeSpacesAndHTML(name).length > 20) {\n errors.name = isInLanguage ? \"Predugo\" : \"Too long\";\n } else if (!removeSpacesAndHTML(name)) {\n errors.name = isInLanguage\n ? \"HTML oznaka nije dozvoljena\"\n : \"HTML tag is not allowed\";\n }\n\n if (description && removeSpacesAndHTML(description).length > 100) {\n errors.description = isInLanguage ? \"Predugo\" : \"Too long\";\n }\n\n if (isEmpty(tokens)) {\n errors.tokens = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n return errors;\n};\n","import React, { useContext } from \"react\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport { useFormik } from \"formik\";\nimport { toast } from \"react-toastify\";\n// components\nimport Form from \"./Form\";\n// entity\nimport { TierForm } from \"../../../models/domain\";\n// services\nimport * as actionCreators from \"../../../actions/hr/settings.actions\";\nimport * as userActionCreators from \"../../../actions/app.actions\";\nimport * as settingsService from \"../../../services/api/hr/settings.service\";\nimport { tierFormValidation } from \"../../../services/validations/hr/tierFormValidation\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AddTier = ({\n tokenWorth,\n addTier,\n closeModal,\n user,\n finishOnboarding\n}) => {\n const { t } = useTranslation();\n\n const onboardingDone = async () => {\n if (user.serverOnboarding === false) {\n const response = await settingsService.onboardingFinish();\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n finishOnboarding();\n }\n };\n\n const handleAddTierError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n if (data.errors.companyId) {\n toast.error(`${data.error.message}: ${data.errors.companyId.keys[0]}`);\n }\n if (data.errors.tokens) {\n toast.error(`${data.error.message}: ${data.errors.tokens.keys[0]}`);\n }\n if (data.errors.description) {\n toast.error(\n `${data.error.message}: ${data.errors.description.keys[0]}`\n );\n }\n } else {\n toast.error(data.error.message);\n }\n };\n\n const createTierSubmit = async (values, { setSubmitting }) => {\n setSubmitting(true);\n\n const response = await settingsService.addTier(values);\n\n if (response.hasError) {\n setSubmitting(false);\n return handleAddTierError(response);\n }\n\n addTier(response);\n toast.success(t(\"success_tier_create\"));\n setSubmitting(false);\n closeModal();\n onboardingDone();\n };\n\n const formik = useFormik({\n initialValues: new TierForm(),\n validate: tierFormValidation,\n onSubmit: createTierSubmit\n });\n\n const {\n values,\n errors,\n touched,\n isSubmitting,\n handleSubmit,\n setFieldValue,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n
\n \n \n );\n};\n\nAddTier.propTypes = {\n tokenWorth: PropTypes.shape(),\n addTier: PropTypes.func,\n closeModal: PropTypes.func\n};\n\nconst mapStateToProps = state => {\n return {\n user: state.app.user\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n addTier: tier => dispatch(actionCreators.addTier(tier)),\n finishOnboarding: () => dispatch(userActionCreators.finishOnboarding())\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AddTier);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport { useFormik } from \"formik\";\nimport { toast } from \"react-toastify\";\n// components\nimport Form from \"./Form\";\n// entity\nimport { TierForm } from \"../../../models/domain\";\n// services\nimport * as actionCreators from \"../../../actions/hr/settings.actions\";\nimport * as settingsService from \"../../../services/api/hr/settings.service\";\nimport { tierFormValidation } from \"../../../services/validations/hr/tierFormValidation\";\nimport { useTranslation } from \"react-i18next\";\n\nconst EditTier = ({ tokenWorth, editTier, selectedTier, closeModal }) => {\n const { t } = useTranslation();\n const handleEditTierError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n if (data.errors.companyId) {\n toast.error(`${data.error.message}: ${data.errors.companyId.keys[0]}`);\n }\n if (data.errors.tokens) {\n toast.error(`${data.error.message}: ${data.errors.tokens.keys[0]}`);\n }\n if (data.errors.description) {\n toast.error(\n `${data.error.message}: ${data.errors.description.keys[0]}`\n );\n }\n } else {\n toast.error(data.error.message, {\n autoClose: 10000\n });\n }\n };\n\n const updateTierSubmit = async (values, { setSubmitting }) => {\n setSubmitting(true);\n\n const response = await settingsService.editTier(selectedTier.id, values);\n\n if (response.hasError) {\n setSubmitting(false);\n return handleEditTierError(response);\n }\n\n editTier(selectedTier.id, response);\n toast.success(t(\"success_tier_edit\"));\n setSubmitting(false);\n closeModal();\n };\n\n const updatedSelectedTier = {\n ...selectedTier,\n currency: selectedTier.tokens * tokenWorth.worth\n };\n\n const formik = useFormik({\n initialValues: new TierForm(updatedSelectedTier),\n validate: tierFormValidation,\n onSubmit: updateTierSubmit\n });\n\n const {\n values,\n errors,\n touched,\n isSubmitting,\n handleSubmit,\n setFieldValue,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n
\n \n \n );\n};\n\nEditTier.propTypes = {\n tokenWorth: PropTypes.shape(),\n selectedTier: PropTypes.shape(),\n editTier: PropTypes.func,\n closeModal: PropTypes.func\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n editTier: (tierId, tier) => dispatch(actionCreators.editTier(tierId, tier))\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(EditTier);\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n// componenets\nimport AddTier from \"./AddTier\";\nimport EditTier from \"./EditTier\";\n\nconst FormRenderer = ({ modalType, tokenWorth, selectedTier, closeModal }) => {\n switch (modalType) {\n case \"addTier\":\n return ;\n case \"editTier\":\n return (\n \n );\n default:\n throw new Error(`Unknow action type: ${modalType}`);\n }\n};\n\nFormRenderer.propTypes = {\n modalType: PropTypes.string,\n addTier: PropTypes.func,\n editTier: PropTypes.func,\n selectedTier: PropTypes.shape(),\n closeModal: PropTypes.func,\n tokenWorth: PropTypes.shape()\n};\n\nexport default FormRenderer;\n","import styled from \"styled-components\";\n\nconst BudgetRolloverToggleStyles = styled.div`\n display: flex;\n align-items: center;\n\n .activationCheckBox {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 25px;\n border-radius: 16px;\n border: 2px solid;\n border-color: ${({ enableRollover }) => {\n if (enableRollover) {\n return \"#41c264\";\n }\n return \"#ce1212\";\n }};\n padding: 5px;\n margin-right: 8px;\n position: relative;\n }\n\n .dot {\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: ${({ enableRollover }) => {\n if (enableRollover) {\n return \"#41c264\";\n }\n return \"#ce1212\";\n }};\n cursor: pointer;\n }\n\n .activityOnText {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #41c264;\n }\n\n .activationOffText {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #ce1212;\n }\n\n .benefitActivityStatusText {\n font-size: 16px;\n font-weight: 500;\n width: 209px;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n }\n`;\n\nexport default BudgetRolloverToggleStyles;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport BudgetRolloverToggleStyles from \"./BudgetRolloverToggle.styles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BudgetRolloverToggle = ({ enableRollover, onToggle }) => {\n const { t } = useTranslation();\n\n return (\n \n
\n {enableRollover &&

{t(\"on\")}

}\n
\n {!enableRollover &&

{t(\"off\")}

}\n
\n {enableRollover ? (\n

{t(\"Rollover is enabled\")}

\n ) : (\n

{t(\"Rollover is disabled\")}

\n )}\n \n );\n};\n\nBudgetRolloverToggle.propTypes = {\n enableRollover: PropTypes.bool,\n onToggle: PropTypes.func\n};\n\nexport default BudgetRolloverToggle;\n","import BudgetRolloverToggle from \"./BudgetRolloverToggle\";\n\nexport default BudgetRolloverToggle;\n","import styled from 'styled-components'\n\nconst DetailsSectionStyles = styled.div`\n\t.photoAndStatusContainer {\n\t\tmargin: 30px 0;\n\n\t\t.labelAndValidation {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: space-between;\n \n .errorMsg {\n margin-bottom: 5px;\n }\n\t\t}\n\n .imgContainer {\n & > div {\n width: 360px;\n height: 150px;\n }\n\n .image {\n width: 85%;\n height: 100%; \n object-fit: contain;\n }\n\n svg:hover {\n stroke: #ce1212;\n }\n }\n\t}\n`\n\nexport default DetailsSectionStyles","import React from \"react\";\nimport PropTypes from \"prop-types\";\n// components\nimport { MyDropZone, InputLabel } from \"../../../../../components\";\n// styles\nimport DetailsSectionStyles from \"./DetailsSection.styles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst DetailsSection = ({\n values,\n errors,\n touched,\n setIsDelete,\n setFieldTouched,\n setFieldValue\n}) => {\n const { t } = useTranslation();\n\n return (\n \n
\n
\n \n
\n {errors.photo && touched.photo ? errors.photo : \"\"}\n
\n
\n
\n \n
\n \n
\n
\n );\n};\n\nDetailsSection.propTypes = {\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n setIsDelete: PropTypes.func,\n setFieldTouched: PropTypes.func,\n setFieldValue: PropTypes.func\n};\n\nexport default DetailsSection;\n","import DetailsSection from './DetailsSection'\n\nexport default DetailsSection","import { toast } from \"react-toastify\";\n\nexport const handleCompanyThemeFormError = ({ error }) => {\n const { data } = error;\n if (data.errors) { \n if (data.errors.photo) {\n toast.error(`${data.errors.photo.keys[0]}`);\n }\n } else {\n toast.error(data.error.message);\n }\n};\n","import { findLocales } from \"../../../utils/helpers/findLocales\";\n\nexport const validateCompanyThemeForm = ({ photo }) => {\n const isInLanguage = findLocales(\"rs\");\n\n const errors = {};\n\n if (!photo) {\n errors.photo = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n return errors;\n};\n","import styled from 'styled-components'\n\nconst CompanyThemeFormStyles = styled.section`\n padding: 20px 0;\n\tmargin: 20px 0;\n position: relative;\n\n .themeListContainer {\n\t padding: 20px;\n } \n\n .photoContainer {\n display: flex;\n align-items: center;\n }\n`\n\nexport default CompanyThemeFormStyles ","import React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport { useFormik } from \"formik\";\nimport { toast } from \"react-toastify\";\nimport { BeatLoader } from \"react-spinners\";\n//components\nimport { TextAndLine, Button } from \"../../../../components\";\nimport DetailsSection from \"./detailsSection\";\n// services\nimport * as settingsService from \"../../../../services/api/hr/settings.service\";\nimport { handleCompanyThemeFormError } from \"../../../../services/errors/hr/CompanyThemeFormError\";\nimport { validateCompanyThemeForm } from \"../../../../services/validations/hr/companyThemeFormValidation\";\nimport { isEmpty } from \"../../../../services/general.utils\";\n//actions\nimport * as appActionCreators from \"../../../../actions/app.actions\";\n//styles\nimport CompanyThemeFormStyles from \"./CompanyThemeForm.styles\";\nimport { subscribe } from \"../../../../services/loadingOverride.styles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst CompanyThemeForm = ({ setUserThemes, theme }) => {\n const { t } = useTranslation();\n const [isLoading, setIsLoading] = useState(false);\n const [disableButton, setDisableButton] = useState(false);\n const [isDelete, setIsDelete] = useState(false);\n\n const handleSubmitForm = async (service, message = \"\") => {\n setIsLoading(true);\n setDisableButton(true);\n const response = await service;\n setDisableButton(false);\n setIsLoading(false);\n setIsDelete(false);\n if (response.hasError) {\n return handleCompanyThemeFormError(response);\n }\n if (message) {\n setUserThemes([response]);\n toast.success(message);\n } else {\n setUserThemes([]);\n toast.success(response.data.message);\n }\n return response;\n };\n\n const addCompanyThemeSubmit = async values => {\n await handleSubmitForm(\n settingsService.addCompanyTheme(values),\n \"Company theme added successfully\"\n );\n };\n\n const updateCompanyThemeSubmit = async values => {\n await handleSubmitForm(\n settingsService.editCompanyTheme(values.id, values),\n \"Company theme updated successfully\"\n );\n };\n\n const removeCompanyThemeSubmit = async values => {\n await handleSubmitForm(settingsService.removeCompanyTheme(values.id), \"\");\n };\n\n const handleCancel = () => {\n for (let el in values) {\n setFieldValue(el, theme[el]);\n }\n setIsDelete(false);\n };\n\n const handleOnSubmit = () =>\n isEmpty(theme.photo)\n ? addCompanyThemeSubmit(values)\n : isDelete && isEmpty(values.photo)\n ? removeCompanyThemeSubmit(values)\n : updateCompanyThemeSubmit(values);\n\n const formik = useFormik({\n enableReinitialize: true,\n initialValues: theme,\n validate: !isDelete && validateCompanyThemeForm,\n onSubmit: handleOnSubmit\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n setFieldTouched,\n setFieldError,\n handleChange,\n handleBlur\n } = formik;\n\n const buttonText = isEmpty(theme.photo)\n ? \"Add logo\"\n : isDelete && isEmpty(values.photo)\n ? \"Remove\"\n : \"Update\";\n\n return (\n \n \n
\n handleSubmit(e)}\n >\n
\n \n
\n
\n {disableButton ? (\n \n ) : (\n \n {t(buttonText)}\n \n )}\n \n {t(\"cancel\")}\n \n
\n \n \n
\n
\n );\n};\n\nCompanyThemeForm.propTypes = {\n setUserThemes: PropTypes.func,\n theme: PropTypes.oneOfType([\n PropTypes.shape({\n id: PropTypes.number,\n mode: PropTypes.oneOf([\"light\", \"dark\", \"custom\"]),\n photo: PropTypes.oneOfType([\n PropTypes.shape({}),\n PropTypes.instanceOf(null)\n ]),\n companyId: PropTypes.number,\n color: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(null)])\n }),\n PropTypes.instanceOf(null)\n ])\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setUserThemes: payload => dispatch(appActionCreators.setUserThemes(payload))\n };\n};\n\nexport default connect(null, mapDispatchToProps)(CompanyThemeForm);\n","import CompanyThemeForm from \"./CompanyThemeForm\";\n\nexport default CompanyThemeForm;","import styled from \"styled-components\";\n\nconst SettingsStyles = styled.div`\n .settingsContainer {\n width: calc(100% - 210px);\n margin-left: 210px;\n background: whitesmoke;\n min-height: 100vh;\n }\n\n .globalCompanySettings {\n margin: 20px 0;\n }\n\n .settingsContent {\n padding: 0 30px 30px 30px;\n }\n\n #settingsCard {\n opacity: 0;\n transition: all 0.4s ease-in-out;\n }\n\n .tierListContainer {\n margin: 30px 0;\n display: flex;\n flex-wrap: wrap;\n }\n\n .rolloverContainer {\n display: flex;\n margin: 20px 0 10px 0;\n }\n\n .scheduleDeleteContainer {\n color: #ce1212;\n margin-top: 10px;\n }\n\n .rolloverDisclaimerContainer {\n display: flex;\n justify-content: flex-start;\n align-items: baseline;\n }\n .inputContainerRollover {\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .rolloverResets {\n font-size: 12px;\n }\n }\n\n .rolloverDisclaimer {\n margin-left: 11px;\n opacity: 0.7;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n -webkit-letter-spacing: -0.5px;\n -moz-letter-spacing: -0.5px;\n -ms-letter-spacing: -0.5px;\n letter-spacing: -0.5px;\n color: #373737;\n }\n\n .inputContainer {\n display: flex;\n align-items: center;\n }\n\n .addBenefit {\n width: 191px;\n height: 44px;\n border-radius: 4px;\n border: solid 1px #d8d8d8;\n display: flex;\n align-items: center;\n padding: 0 12px;\n cursor: pointer;\n }\n .circle {\n min-width: 24px;\n min-height: 24px;\n border-radius: 50%;\n background: #1568bf;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #fff;\n margin-right: 13px;\n }\n\n .buttonText {\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.38;\n letter-spacing: -0.4px;\n color: #373737;\n }\n`;\n\nexport default SettingsStyles;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport BudgetRolloverToggleStyles from \"./BudgetRolloverToggle.styles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst CurrencyToggle = ({ enableCurrency, onToggle }) => {\n const { t } = useTranslation();\n\n return (\n \n
\n {enableCurrency &&

{t(\"on\")}

}\n
\n {!enableCurrency &&

{t(\"off\")}

}\n
\n {enableCurrency ? (\n

{t(\"currency is enabled\")}

\n ) : (\n

{t(\"currency is disabled\")}

\n )}\n \n );\n};\n\nCurrencyToggle.propTypes = {\n enableCurrency: PropTypes.bool,\n onToggle: PropTypes.func\n};\n\nexport default CurrencyToggle;\n","import React, { useState, useEffect, useContext, useRef } from \"react\";\nimport { connect, useSelector } from \"react-redux\";\nimport { BeatLoader } from \"react-spinners\";\nimport { toast } from \"react-toastify\";\n// components\nimport {\n Card,\n Header,\n TextAndLine,\n Modal,\n openModalAnim,\n closeModalAnim,\n Input,\n InputLabel,\n Button\n} from \"../../../components\";\nimport TierItem from \"./TierItem\";\nimport FormRenderer from \"./FormRenderer\";\nimport BudgetRolloverToggle from \"./budgetRolloverToggle\";\nimport CompanyThemeForm from \"./companyTheme\";\n// styles\nimport SettingsStyles from \"./SettingsStyles\";\nimport { override } from \"../../../services/loadingOverride.styles\";\n// services\nimport * as actionCreators from \"../../../actions/hr/settings.actions\";\nimport * as settingsService from \"../../../services/api/hr/settings.service\";\n// entity\nimport { CompanyTheme } from \"../../../models/domain\";\n// Hooks\nimport { useDisableBodyScroll } from \"../../../hooks/useDisableBodyScroll\";\nimport { isEmpty } from \"../../../services/general.utils\";\nimport { InfoIconSvg } from \"../../../assets/Icons\";\nimport { apiService } from \"../../../services/api/api.service\";\nimport moment from \"moment\";\nimport { useTranslation } from \"react-i18next\";\nimport CurrencyToggle from \"./budgetRolloverToggle/CurrencyToggle\";\nimport {\n checkIfTheValueIsInRsdOrToken,\n shouldShowInRsd\n} from \"../../../utils/transformTokensToRsd\";\n\nconst Settings = ({ setTiers, removeTier, tiers, user }) => {\n const { t } = useTranslation();\n const [selectedTier, setSelectedTier] = useState(undefined);\n const [tokenWorth, setTokenWorth] = useState(0);\n const [modalType, setModalTypes] = useState(undefined);\n const [isLoading, setIsLoading] = useState(true);\n const [rolloverDuration, setRolloverDuration] = useState(\"\");\n const [rolloverEnabled, setRolloverEnabled] = useState(null);\n const [scheduledDeleteAt, setScheduleDeleteAt] = useState(null);\n const [rolloverInfo, setRolloverInfo] = useState(null);\n const [tokensIntoCurrency, setTokensIntoCurrency] = useState(false);\n\n const { companyId } = useSelector(state => state.app.user);\n\n const isMounted = useRef(true);\n useDisableBodyScroll(modalType);\n\n const openModal = type => {\n setModalTypes(type);\n setTimeout(() => {\n openModalAnim();\n }, 100);\n };\n\n const closeModal = () => {\n closeModalAnim();\n setTimeout(() => {\n setModalTypes(undefined);\n }, 350);\n };\n\n const fetchTiers = async () => {\n const [{ tiers }, responseTokenWorth] = await Promise.all([\n settingsService.getCompanyTiers(),\n settingsService.getTokenWorth()\n ]);\n if (isMounted.current && tiers && responseTokenWorth) {\n setTiers(tiers);\n setTokenWorth(responseTokenWorth);\n setIsLoading(false);\n // setTimeout delays animation untill content is ready to be displayed (set to state)\n setTimeout(() => {\n const settingsCard = document.getElementById(\"settingsCard\");\n if (settingsCard && isMounted.current) {\n settingsCard.style.opacity = 1;\n }\n }, 100);\n }\n };\n\n const fetchCompanyBudgetRolloverData = async () => {\n const response = await settingsService.getCompanyWithBudgetRollover();\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage ? response.errorMessage : \"Something went wrong\"\n );\n }\n\n setRolloverEnabled(response.isRolloverEnabled);\n if (!isEmpty(response.companyBudgetRollover)) {\n setRolloverDuration(response.companyBudgetRollover.rolloverDuration);\n setScheduleDeleteAt(response.companyBudgetRollover.scheduleDeleteAt);\n }\n };\n\n useEffect(() => {\n fetchTiers();\n fetchCompanyBudgetRolloverData();\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n /**\n * Handles number input on change.\n * Sets rollover duration number in months.\n * @param {Event} e\n */\n const handleNumberInput = e => {\n let inputValue;\n if (e.target.validity.valid) {\n let replacedValue = e.target.value.replace(/[^0-9]*/g, \"\");\n inputValue = parseInt(replacedValue);\n }\n if (isNaN(inputValue)) {\n inputValue = \"\";\n }\n\n setRolloverDuration(inputValue);\n };\n\n const handleKeyDown = e => {\n if (e.key === \".\" || e.key === \",\" || e.key === \"-\" || e.key === \"e\") {\n e.preventDefault();\n }\n };\n\n const handleRolloverToggle = () => {\n if (rolloverEnabled) {\n setRolloverEnabled(false);\n }\n if (!rolloverEnabled) {\n setRolloverEnabled(true);\n }\n };\n\n const handleTokensIntoCurrencyToggle = async () => {\n try {\n const response = await apiService.put(\n `/company/${companyId}/toggle-global-currency?toggle=${!tokensIntoCurrency}`\n );\n\n setTokensIntoCurrency(response.data.viewInRsd);\n await shouldShowInRsd(companyId);\n } catch (error) {\n toast.error(t(\"failed_to_currency_change\"));\n }\n };\n\n const updateCompanyBudgetRollover = async () => {\n const response = await settingsService.updateBudgetRollover({\n rolloverEnabled: rolloverEnabled,\n companyId: user.companyId,\n rolloverDuration: rolloverDuration\n });\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage ? response.errorMessage : \"Something went wrong\"\n );\n }\n\n toast.success(response.data.message);\n\n if (!rolloverEnabled) {\n setRolloverDuration(\"\");\n }\n };\n\n const getIfCompanyHasRollover = async companyId => {\n try {\n const response = await apiService.get(\n `/settings/company-rollover?companyId=${companyId}`\n );\n\n setRolloverInfo(response.data.companyRollover);\n } catch (error) {\n console.log(error);\n }\n };\n\n const getCompanyCurrency = async companyId => {\n try {\n const currency = await checkIfTheValueIsInRsdOrToken(companyId);\n setTokensIntoCurrency(currency);\n } catch (error) {\n console.log(\"Unable to get company currency.\");\n }\n };\n\n useEffect(() => {\n if (!companyId) return;\n getIfCompanyHasRollover(companyId);\n getCompanyCurrency(companyId);\n }, [companyId]);\n\n return (\n \n
\n
\n
\n {isLoading ? (\n \n \n
\n ) : (\n \n \n
\n \n
\n \n
\n \n {rolloverInfo && (\n

\n {t(\"Rollover resets on\")}{\" \"}\n \n {moment(rolloverInfo.rolloverEndDate).format(\n \"DD.MM.YYYY\"\n )}\n \n

\n )}\n
\n
\n\n \n {t(\"submit_1\")}\n \n
\n
\n \n \n {t(\"turned_on_rollover_info\")}\n
\n {t(\"max_budget_info\")}\n
\n
\n {scheduledDeleteAt && (\n
\n {t(\"Scheduled rollover deletion\")} : {scheduledDeleteAt}\n
\n )}\n
\n {tiers.map(tier => (\n \n ))}\n
\n
openModal(\"addTier\")}>\n
\n

+

\n
\n

{t(\"Add Tier\")}

\n
\n
\n \n
\n \n
\n
\n {user.authenticatedRole && (\n \n )}\n
\n )}\n
\n
\n {modalType && (\n \n \n \n )}\n \n );\n};\n\nconst mapStateToProps = state => {\n return {\n user: state.app.user,\n tiers: state.tiers.tiers\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setTiers: tiers => dispatch(actionCreators.setTiers(tiers)),\n removeTier: tierId => dispatch(actionCreators.removeTier(tierId))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Settings);\n","import Settings from './Settings'\n\nexport default Settings\n","import React from \"react\";\nimport { getIn } from \"formik\";\nimport PropTypes from \"prop-types\";\n\nconst TierItem = ({\n field: { name, value },\n form: { errors, touched, setFieldValue, handleChange, handleBlur },\n type,\n cssClass,\n containerWidth,\n placeholder,\n label = false,\n Icon,\n currencyValueName,\n tokenValue,\n labelName\n}) => {\n const errorMessage = getIn(errors, name);\n const touchedInput = getIn(touched, name);\n\n const handleNumberInput = (e, previousValue) => {\n let inputValue = e.target.validity.valid\n ? parseInt(e.target.value, 0)\n : previousValue;\n if (isNaN(inputValue)) {\n inputValue = \"\";\n }\n setFieldValue(e.target.name, inputValue);\n setFieldValue(\n currencyValueName,\n inputValue === \"\" ? \"\" : inputValue * tokenValue.worth\n );\n };\n\n return (\n
\n

\n {touchedInput ? errorMessage : \"\"}\n

\n
\n {Icon && (\n \n {Icon}\n
\n )}\n \n labelName === \"tokens\"\n ? handleNumberInput(e, value)\n : handleChange(e)\n }\n value={value}\n placeholder={placeholder}\n />\n {/* {label &&

{labelName}

} */}\n
\n
\n );\n};\n\nTierItem.propTypes = {\n field: PropTypes.shape(),\n form: PropTypes.shape(),\n type: PropTypes.string,\n cssClass: PropTypes.string,\n containerWidth: PropTypes.number,\n placeholder: PropTypes.string,\n labelName: PropTypes.string,\n label: PropTypes.bool,\n Icon: PropTypes.node,\n currencyValueName: PropTypes.string,\n tokenValue: PropTypes.shape()\n};\n\nexport default TierItem;\n","import React from \"react\";\nimport { getIn } from \"formik\";\nimport PropTypes from \"prop-types\";\n\nconst CurrencyField = ({\n field: { name, value },\n form: { errors, touched, setFieldValue, handleChange, handleBlur },\n tokenValue,\n tokenValueName\n}) => {\n const errorMessage = getIn(errors, name);\n const touchedInput = getIn(touched, name);\n\n const handleNumberInput = (e, previousValue) => {\n let inputValue = e.target.validity.valid\n ? parseInt(e.target.value, 0)\n : previousValue;\n if (isNaN(inputValue)) {\n inputValue = \"\";\n }\n setFieldValue(e.target.name, inputValue);\n if (inputValue % tokenValue.worth === 0) {\n setFieldValue(\n tokenValueName,\n inputValue === \"\" ? \"\" : inputValue / tokenValue.worth\n );\n } else {\n setFieldValue(tokenValueName, \"\");\n }\n };\n\n return (\n
\n

\n {touchedInput ? errorMessage : \"\"}\n

\n
\n \n

{tokenValue.currency}

\n
\n
\n );\n};\n\nCurrencyField.propTypes = {\n field: PropTypes.shape(),\n form: PropTypes.shape(),\n tokenValue: PropTypes.shape(),\n tokenValueName: PropTypes.string\n};\n\nexport default CurrencyField;\n","import styled from \"styled-components\";\n\nconst TiersFormStyles = styled.div`\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: center;\n width: 500px;\n\n .circleLogoContainer {\n width: 126px;\n height: 126px;\n margin-bottom: 30px;\n }\n\n .title {\n font-size: 32px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 0.81;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n margin-bottom: 30px;\n }\n\n .text {\n width: 532px;\n padding: 0 20px;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n margin-bottom: 10px;\n }\n\n .tiersContainer {\n padding-top: 10px;\n max-height: 180px;\n width: 500px;\n overflow-y: auto;\n overflow-x: hidden;\n border-radius: 4px;\n margin-bottom: 20px;\n background-color: #f7f7f7;\n }\n\n .labelsContainer {\n display: flex;\n align-items: center;\n justify-content: space-evenly;\n width: 100%;\n font-size: 11px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 2.18;\n letter-spacing: -0.18px;\n color: #373737;\n\n .firstLabel {\n width: 138px;\n }\n\n .secondLabel {\n width: 138px;\n }\n\n .thirdLabel {\n width: 100px;\n display: flex;\n align-items: center;\n\n .iconContainer {\n width: 12px;\n height: 12px;\n background: #a1a3a7;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #ffffff;\n font-size: 6px;\n font-weight: bold;\n margin-left: 8px;\n }\n\n .tooltip {\n width: 118px;\n /* height: 107px; */\n background: #282a3b !important;\n border: 1px solid #282a3b !important;\n padding: 0;\n border-radius: 4px;\n font-size: 13px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.85;\n letter-spacing: -0.22px;\n color: #ffffff;\n text-align: center;\n }\n\n .tooltip:after {\n border-top: 8px solid #282a3b !important;\n margin-left: -3px !important;\n }\n }\n\n .forthLabel {\n width: 37px;\n }\n }\n\n .tierItem {\n display: flex;\n align-items: center;\n justify-content: space-evenly;\n height: 37px;\n margin-bottom: 20px;\n }\n\n .tierNameInput {\n width: 138px;\n height: 34px;\n border: solid 1px #979797;\n border-radius: 4px;\n outline: none;\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #1568bf;\n padding: 0 5px;\n }\n\n .tokensContainer {\n display: flex;\n align-items: center;\n height: 42px;\n position: relative;\n width: 100px;\n\n .tokenValueInput {\n width: 100%;\n height: 34px;\n margin-right: 11px;\n border-radius: 4px;\n border: solid 1px #979797;\n outline: none;\n padding: 0 5px 0 37px;\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n position: absolute;\n }\n }\n\n .currencyContainer {\n height: 42px;\n display: flex;\n align-items: center;\n position: relative;\n width: 150px;\n\n .currencyValueInput {\n width: 100%;\n height: 34px;\n margin-right: 11px;\n border-radius: 4px;\n border: solid 1px #979797;\n outline: none;\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n position: absolute;\n padding: 0 38px 0 10px;\n }\n }\n\n .label {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n position: absolute;\n right: 10px;\n }\n\n .removeTierButton {\n width: 34px;\n height: 34px;\n border-radius: 4px;\n border: 1px solid #1568bf;\n background-color: #1568bf;\n display: flex;\n align-items: center;\n justify-content: center;\n outline: none;\n cursor: pointer;\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n color: #ffffff;\n display: flex;\n align-items: center;\n margin: 11px 0 0 10px;\n }\n\n .addTierButton {\n width: 209px;\n min-height: 27px;\n border-radius: 4px;\n border: 1px solid #1568bf;\n background-color: #1568bf;\n display: flex;\n align-items: center;\n justify-content: center;\n outline: none;\n cursor: pointer;\n\n p {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n color: #ffffff;\n display: flex;\n align-items: center;\n }\n }\n\n input::placeholder {\n color: #0000004d;\n }\n\n input[type=\"number\"]::-webkit-inner-spin-button {\n -webkit-appearance: none;\n display: none;\n }\n`;\n\nexport default TiersFormStyles;\n","import { apiService } from \"../api.service\";\nimport { TokenValue } from \"../../../models/domain\";\nimport { HrOnboardingPayload } from \"../../../models/server/payloads\";\nimport { HrOnboardingResponse } from \"../../../models/server/responses\";\n\nexport const getTokenValue = async () => {\n const response = await apiService.get(\"/hr/token\");\n if (response.hasError) return response;\n\n return new TokenValue(response.data);\n};\n\nexport const submitOnboarding = async values => {\n const payloadData = new HrOnboardingPayload(values);\n const response = await apiService.post(\n \"/hr/add-employee-from-excel\",\n payloadData.payload\n );\n if (response.hasError) return response;\n return new HrOnboardingResponse(response);\n};\n\nexport const finishOnboarding = async () => {\n const response = await apiService.patch(\"/users/hr/onboarding\");\n return response;\n};\n","import React, { useEffect, useState, useRef } from \"react\";\nimport ReactTooltip from \"react-tooltip\";\nimport { toast } from \"react-toastify\";\nimport { FieldArray, Field } from \"formik\";\nimport PropTypes from \"prop-types\";\n// assets\nimport {\n BenefitLogoIcon,\n TokenIcon,\n InfoIconSvg\n} from \"../../../../assets/Icons\";\n// components\nimport TierItem from \"./TierItem\";\nimport CurrencyField from \"./CurrencyField\";\n// styles\nimport TiersFormStyles from \"./TierFormStyles\";\n// services\nimport * as api from \"../../../../services/api/hr/onboarding.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst TiersForm = ({ values, errors }) => {\n const { t } = useTranslation();\n const [tokenValue, setTokenValue] = useState({ currency: \"RSD\", worth: 0 });\n const isMounted = useRef(true);\n\n const fetchTokenValue = async () => {\n const response = await api.getTokenValue();\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_token_value\")\n );\n }\n if (isMounted.current) {\n setTokenValue(response);\n }\n };\n\n useEffect(() => {\n fetchTokenValue();\n\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return (\n \n
\n \n
\n

Benefiti

\n

{t(\"benefiti_welcome\")}

\n

{t(\"first_time_setup\")}

\n

{t(\"add_tiers_info\")}

\n

\n {errors && errors.tiers && typeof errors.tiers === \"string\"\n ? errors.tiers\n : \"\"}\n

\n \n {({ push, remove }) => (\n <>\n {values.tiers.length > 0 && (\n <>\n
\n
\n
Value (RSD)
\n
\n {t(\"Tokens\")}\n \n {\" \"}\n {\" \"}\n \n \n 1 token = {tokenValue.worth} RSD\n \n
\n
\n
\n
\n {values.tiers.map((tier, index) => (\n // eslint-disable-next-line\n
\n \n \n }\n labelName=\"tokens\"\n />\n\n
\n remove(index)}\n className=\"removeTierButton\"\n >\n X\n \n
\n
\n ))}\n
\n \n )}\n\n {\n push({ name: \"\", tokens: \"\", currency: \"\" });\n setTimeout(() => {\n const tiersContainer = document.getElementById(\n \"tiersContainer\"\n );\n\n if (tiersContainer) {\n tiersContainer.scrollTop = tiersContainer.scrollHeight;\n }\n }, 0);\n }}\n >\n

+

\n

{t(\"Add Tier\")}

\n \n \n )}\n \n \n );\n};\n\nTiersForm.propTypes = {\n values: PropTypes.shape(),\n errors: PropTypes.shape()\n};\n\nexport default TiersForm;\n","const collapseSection = element => {\n const sectionHeight = element.scrollHeight;\n const elementTransition = element.style.transition;\n element.style.transition = \"\";\n requestAnimationFrame(() => {\n element.style.height = `${sectionHeight}px`;\n element.style.transition = elementTransition;\n requestAnimationFrame(() => {\n element.style.height = `${0}px`;\n });\n });\n};\n\nconst expandSection = element => {\n // const allElemements = document.getElementsByClassName('testDiv')\n // const rows = document.getElementsByClassName('row')\n // for (let i = 0; i < allElemements.length; i++) {\n // \tallElemements[i].style.height = '0px'\n // \tallElemements[i].style.borderTop = '0px solid #d8d8d8'\n // }\n\n // for (let i = 0; i < rows.length; i++) {\n // \tif (rows[i].classList.contains('cardView')) {\n // \t\trows[i].classList.remove('cardView')\n // \t}\n // }\n\n const sectionHeight = element.scrollHeight;\n element.style.height = `${sectionHeight}px`;\n};\n\nconst addHeightOnClick = element => {\n expandSection(element);\n};\n\nconst removeHeightOnClick = element => {\n collapseSection(document.getElementById(`test${element}`));\n};\n\nexport { addHeightOnClick, removeHeightOnClick };\n","import styled from \"styled-components\";\n\nconst AddEmployeesWithCSVStyles = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n /* justify-content: center; */\n width: 500px;\n\n .title {\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.08;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n margin-bottom: 30px;\n }\n\n .employeesForm {\n width: 403px;\n }\n\n .step1Container {\n position: relative;\n }\n\n .step1 {\n border-left: 3px solid\n ${({ steps: { step1Status } }) => {\n if (step1Status === \"completed\") {\n return \"#1568bf\";\n }\n return \"#d8d8d8\";\n }};\n padding: 0 0 25px 63px;\n transition: 0.3s all ease-in-out;\n\n .step1Circle {\n width: 50px;\n height: 50px;\n border: 3px solid\n ${({ steps: { step1Status } }) => {\n if (step1Status === \"completed\") {\n return \"#1568bf\";\n }\n if (step1Status === \"active\") {\n return \"#1568bf\";\n }\n return \"#d8d8d8\";\n }};\n border-radius: 25px;\n background-color: ${({ steps: { step1Status } }) => {\n if (step1Status === \"completed\") {\n return \"#1568bf\";\n }\n return \"#fff\";\n }};\n position: absolute;\n color: #1568bf;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.23px;\n left: -23px;\n top: -15px;\n }\n\n .step1Title {\n font-size: 14px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.18px;\n color: #4b4b4b;\n margin-bottom: 15px;\n }\n\n .step1Text {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.18px;\n color: #4b4b4b;\n margin-bottom: 15px;\n }\n\n .downloadButton {\n min-width: 130px;\n height: 40px;\n border-radius: 4px;\n border: 1px solid #1568bf;\n background-color: #1568bf;\n display: flex;\n font-size: 14px;\n align-items: center;\n justify-content: center;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.18px;\n outline: none;\n color: #ffffff;\n cursor: pointer;\n }\n }\n\n .step2Container {\n position: relative;\n z-index: 3;\n }\n\n .step2 {\n border-left: 3px solid\n ${({ steps: { step2Status } }) => {\n if (step2Status === \"completed\") {\n return \"#1568bf\";\n }\n return \"#d8d8d8\";\n }};\n padding: 0 0 25px 63px;\n height: 0;\n overflow: hidden;\n transition: 0.3s all ease-in-out;\n\n .step2Circle {\n width: 50px;\n height: 50px;\n border: 3px solid\n ${({ steps: { step2Status } }) => {\n if (step2Status === \"completed\") {\n return \"#1568bf\";\n }\n if (step2Status === \"active\") {\n return \"#1568bf\";\n }\n return \"#d8d8d8\";\n }};\n border-radius: 25px;\n background-color: ${({ steps: { step2Status } }) => {\n if (step2Status === \"completed\") {\n return \"#1568bf\";\n }\n return \"#ffffff\";\n }};\n position: absolute;\n color: ${({ steps: { step2Status } }) => {\n if (step2Status === \"active\") {\n return \"#1568bf\";\n }\n return \"#d8d8d8\";\n }};\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.23px;\n left: -23px;\n top: -15px;\n }\n\n .step2Content {\n opacity: 0;\n transition: 0.3s all ease-in-out;\n }\n\n .step2Title {\n font-size: 14px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.18px;\n color: #4b4b4b;\n margin-bottom: 15px;\n transition: opacity 0.3s ease-in-out;\n }\n\n .step2Text {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.18px;\n color: #4b4b4b;\n margin-bottom: 15px;\n }\n\n .step2TextTwo {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.18px;\n color: #1568bf;\n margin-bottom: 15px;\n }\n\n .requiredFields {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: -0.18px;\n\t\t\tcolor: red;\n\t\t\tmargin-bottom: 15px;\n\t\t} \n\n .uploadButton {\n min-width: 130px;\n height: 40px;\n border-radius: 4px;\n border: 1px solid #1568bf;\n background-color: #1568bf;\n display: flex;\n font-size: 14px;\n align-items: center;\n justify-content: center;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.18px;\n color: #ffffff;\n cursor: pointer;\n outline: none;\n }\n\n .fileName {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.18px;\n color: #4b4b4b;\n }\n }\n\n .step3Container {\n position: relative;\n z-index: 4;\n }\n\n .step3 {\n padding: 0 0 0 63px;\n border-left: 3px solid\n ${({ steps: { step3Status } }) => {\n if (step3Status === \"completed\") {\n return \"#1568bf\";\n }\n if (step3Status === \"active\") {\n return \"#1568bf\";\n }\n return \"#d8d8d8\";\n }};\n height: 0;\n overflow: hidden;\n transition: 0.3s all ease-in-out;\n\n .step3Circle {\n width: 50px;\n height: 50px;\n border: 3px solid\n ${({ steps: { step3Status } }) => {\n if (step3Status === \"completed\") {\n return \"#1568bf\";\n }\n if (step3Status === \"active\") {\n return \"#1568bf\";\n }\n return \"#d8d8d8\";\n }};\n border-radius: 25px;\n background-color: ${({ steps: { step3Status } }) => {\n if (step3Status === \"completed\") {\n return \"#1568bf\";\n }\n return \"#fff\";\n }};\n position: absolute;\n color: ${({ steps: { step3Status } }) => {\n if (step3Status === \"active\") {\n return \"#1568bf\";\n }\n return \"#d8d8d8\";\n }};\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.23px;\n left: -23px;\n bottom: -60px;\n transition: 0.3s all ease-in-out;\n }\n\n .step3Content {\n opacity: 1;\n transition: 0.3s all ease-in-out;\n }\n\n .step3Title {\n font-size: 14px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.18px;\n color: #4b4b4b;\n margin-bottom: 15px;\n transition: opacity 0.3s ease-in-out;\n }\n\n .finish {\n min-width: 130px;\n height: 40px;\n border-radius: 4px;\n border: 1px solid #1568bf;\n background-color: #1568bf;\n outline: none;\n display: flex;\n font-size: 14px;\n align-items: center;\n justify-content: center;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.18px;\n color: #ffffff;\n cursor: pointer;\n }\n\n .finish:disabled {\n background: #d8d8d8;\n color: #989898;\n border: 1px solid #d8d8d8;\n }\n }\n`;\n\nexport default AddEmployeesWithCSVStyles;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\n\nimport { CheckIcon } from \"../../../../assets/Icons\";\nimport { addHeightOnClick } from \"./addEmployeeWithCSV.services\";\n\nimport AddEmployeesWithCSVStyles from \"./AddEmployeeWithCSVStyles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AddEmployeesWithCSV = ({\n values,\n setFieldValue,\n errors,\n touched,\n handleBlur,\n disableButton,\n stepStatusState,\n setStepStatusState\n}) => {\n const { t } = useTranslation();\n const downloadCSV = () => {\n let validator = true;\n if (values.tiers.length === 0) {\n validator = false;\n }\n if (values.tiers.length > 0) {\n values.tiers.forEach(tier => {\n if (tier.name === \"\") {\n validator = false;\n }\n if (tier.tokens === \"\") {\n validator = false;\n }\n\n if (tier.currency === 0 || tier.currency === \"0,00\") {\n validator = false;\n }\n });\n }\n\n if (validator) {\n window.location =\n \"https://app-backend.benefiti.rs/content/benefit_example.csv\";\n setStepStatusState({\n ...stepStatusState,\n step1Status: \"completed\",\n step2Status: \"active\"\n });\n addHeightOnClick(document.getElementById(\"step2\"));\n document.getElementById(\"step3Circle\").style.transform =\n \"translateY(-20px)\";\n document.getElementById(\"step2Content\").style.opacity = 1;\n } else {\n toast.warning(t(\"step_1_must_be_filled_warning\"));\n }\n };\n\n const uploadCSV = e => {\n if (e.target.files.length > 0) {\n setFieldValue(e.target.name, e.target.files[0]);\n setStepStatusState({\n ...stepStatusState,\n step2Status: \"completed\",\n step3Status: \"active\"\n });\n addHeightOnClick(document.getElementById(\"step3\"));\n document.getElementById(\"step3Circle\").style.transform =\n \"translateY(-60px)\";\n document.getElementById(\"step3Content\").style.opacity = 1;\n }\n };\n\n return (\n \n

{t(\"add_employees\")}

\n
\n
\n
\n
\n {stepStatusState.step1Status === \"completed\" ? (\n \n ) : (\n 1\n )}\n
\n

{t(\"download_template\")}

\n

{t(\"download_template_info\")}

\n downloadCSV()}\n >\n {t(\"download\")}\n \n
\n
\n
\n
\n
\n {stepStatusState.step2Status === \"completed\" ? (\n \n ) : (\n 2\n )}\n
\n
\n

{t(\"step2_title_employees\")}

\n

{t(\"step2_text_1\")}

\n

{t(\"step2_text_2\")}

\n

{t(\"required_fields_employees\")}

\n

{t(\"step2_title_bonuses\")}

\n

{t(\"step2_text_3\")}

\n
    \n
  • {t(\"bonus_type_info\")}
  • \n
  • {t(\"bonus_start_date_info\")}
  • \n
  • {t(\"bonus_end_date_info\")}
  • \n
  • {t(\"bonus_type_default_info\")}
  • \n
  • \n {t(\"required_fields_bonuses\")}\n
  • \n
\n

{t(\"upload_the_file\")}

\n
\n {\n document.getElementById(\"csv\").click();\n }}\n onBlur={() => handleBlur(\"csvFile\", true)}\n className=\"uploadButton\"\n type=\"button\"\n >\n {t(\"upload\")}\n \n
\n {values.csvFile && (\n

{values.csvFile.name}

\n )}\n {errors.csvFile && (\n

\n {errors.csvFile && touched.csvFile ? errors.csvFile : \"\"}\n

\n )}\n
\n
\n {\n e.target.value = null;\n }}\n onChange={e => uploadCSV(e)}\n style={{ display: \"none\" }}\n />\n
\n
\n
\n
\n
\n
\n {stepStatusState.step3Status === \"completed\" ? (\n \n ) : (\n 3\n )}\n
\n
\n

{t(\"submit_the_file\")}

\n {disableButton ? (\n \n ) : (\n \n )}\n
\n
\n
\n
\n
\n );\n};\n\nAddEmployeesWithCSV.propTypes = {\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n setFieldValue: PropTypes.func,\n handleBlur: PropTypes.func,\n disableButton: PropTypes.bool\n};\n\nexport default AddEmployeesWithCSV;\n","import AddEmployeesWithCSV from \"./AddEmployeesWithCSV\";\n\nexport default AddEmployeesWithCSV;\n","import styled from \"styled-components\";\n\nconst FinishStepStyles = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 500px;\n\n .title {\n width: 213px;\n height: 27px;\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.08;\n letter-spacing: normal;\n color: #4b4b4b;\n margin-bottom: 30px;\n }\n .text {\n width: 531px;\n height: 66px;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n margin-bottom: 84px;\n }\n\n .recapSection {\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: center;\n }\n\n .recapTitle {\n font-size: 14px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n margin-bottom: 30px;\n }\n\n .recapText {\n font-size: 14px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n }\n\n .finishButton {\n width: 111px;\n height: 40px;\n border-radius: 4px;\n border: 1px solid #1568bf;\n background: #1568bf;\n display: flex;\n font-size: 14px;\n align-items: center;\n justify-content: center;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.18px;\n color: #ffffff;\n outline: none;\n cursor: pointer;\n margin-top: 84px;\n }\n\n .finishButton:disabled {\n background: #d8d8d8;\n border: 1px solid #d8d8d8;\n color: #989898;\n pointer-events: none;\n }\n`;\n\nexport default FinishStepStyles;\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { toast } from \"react-toastify\";\n\nimport PropTypes from \"prop-types\";\nimport FinishStepStyles from \"./FinishStepStyles\";\nimport * as actionCreators from \"../../../../actions/app.actions\";\nimport * as api from \"../../../../services/api/hr/onboarding.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst FinishStep = ({ finishOnboarding, newTiersAndEmployees }) => {\n const { t } = useTranslation();\n const history = useHistory();\n\n const submitOnboarding = async () => {\n const response = await api.finishOnboarding();\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_finish_onboarding\")\n );\n }\n\n finishOnboarding();\n history.push(\"/\");\n };\n\n return (\n \n

You are all done!

\n

\n {/* Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\t\t\t\tNam condimentum elit vel diam mattis, quis faucibus dolor dignissim.\n\t\t\t\tNam condimentum elit vel diam mattis. Morbi congue blandit turpis. */}\n

\n
\n
Recap:
\n

\n {newTiersAndEmployees ? newTiersAndEmployees.newTiers : 0} tiers made\n

\n

\n {newTiersAndEmployees ? newTiersAndEmployees.newEmployees : 0}{\" \"}\n employees added\n

\n
\n submitOnboarding()}\n type=\"button\"\n >\n Finish\n \n
\n );\n};\n\nFinishStep.propTypes = {\n newTiersAndEmployees: PropTypes.shape()\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n finishOnboarding: () => dispatch(actionCreators.finishOnboarding())\n };\n};\n\nexport default connect(null, mapDispatchToProps)(FinishStep);\n","import FinishStep from \"./FinishStep\";\n\nexport default FinishStep;\n","import styled from \"styled-components\";\n\nconst OnboardingStyles = styled.section`\n background: #f7f7f7;\n width: 100%;\n height: 100vh;\n padding: 20px;\n\n .cardComponent {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n }\n\n .content {\n height: calc(100vh - 80px);\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n position: relative;\n }\n\n .skipOnboarding {\n position: absolute;\n right: 0;\n top: 0;\n color: #0000ee;\n text-decoration: underline;\n text-transform: uppercase;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 12px;\n font-weight: 300;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n outline: none;\n }\n\n .onboardingContent {\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: center;\n\n .stepsSlider {\n width: 500px;\n height: 590px;\n overflow-x: hidden;\n }\n\n .stepsContainer {\n width: 1520px;\n height: 590px;\n display: flex;\n transition: 0.3s all ease-in-out;\n overflow-y: auto;\n overflow-x: hidden;\n }\n }\n\n .onboardingSlider {\n display: flex;\n width: 400px;\n height: 25px;\n align-items: center;\n justify-content: space-between;\n position: absolute;\n bottom: -15px;\n left: calc(50% - 200px);\n }\n\n .dotsContainer {\n width: 70px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .dots {\n width: 7px;\n height: 7px;\n border-radius: 3.5px;\n border: 1px solid #4b4b4b;\n }\n\n .activeDot {\n border: 1px solid #1568bf;\n background: #1568bf;\n }\n\n .button {\n background: none;\n border: none;\n outline: none;\n cursor: pointer;\n }\n`;\n\nexport default OnboardingStyles;\n","import * as yup from \"yup\";\n\nconst SUPPORTED_FORMATS = [\"csv\"];\n\nyup.addMethod(yup.array, \"unique\", function (message, mapper = a => a) {\n return this.test(\n \"unique\",\n message,\n list => list.length === new Set(list.map(mapper)).size\n );\n});\n\nexport const onboardingValidationsSchema = yup.object().shape({\n tiers: yup\n .array()\n .of(\n yup.object().shape({\n name: yup\n .string()\n .required(\"* Required\")\n .max(20, \"Too long\"),\n currency: yup\n .number()\n .required(\"* Required\")\n .test(\n \"is-incorrect\",\n \"Must be divisible by 20\",\n val => val % 20 === 0\n ),\n tokens: yup.string().required(\"* Required\")\n })\n )\n .unique(\"Tier name is taken\", a => a.name)\n .min(1, \"There must be at least 1 tier created\"),\n csvFile: yup\n .mixed()\n .required(\"A file is required\")\n .test(\n \"fileFormat\",\n \"You can upload only .csv file format\",\n value =>\n value &&\n value.name &&\n SUPPORTED_FORMATS.includes(value.name.split(\".\").pop())\n )\n});\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { toast } from \"react-toastify\";\nimport { Formik, Form } from \"formik\";\n// components\nimport { LeftArrowIcon } from \"../../../assets/Icons\";\nimport { Card, Modal } from \"../../../components\";\nimport TiersForm from \"./TierForm/TierForm\";\nimport AddEmployeesWithCSV from \"./EmployeesForm\";\nimport AddEmployeeWithCSVError from \"../EmployeePages/Employees/errorPopup/AddEmployeeWithCSVError\";\nimport FinishStep from \"./FinishStep\";\n// styles\nimport OnboardingStyles from \"./OnboardingStyles\";\n// services\nimport { onboardingValidationsSchema } from \"../../../services/validations/hr/onboardingValidation\";\nimport { changeFormSteps } from \"./onboarding.services\";\nimport * as api from \"../../../services/api/hr/onboarding.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst formSteps = [1, 2, 3];\n\nconst Onboarding = ({ isOnboardingDone }) => {\n const { t } = useTranslation();\n const history = useHistory();\n const [formStep, setFormStep] = useState(1);\n const [newTiersAndEmployees, setNewTiersAndEmployees] = useState(undefined);\n const [stepStatusState, setStepStatusState] = useState({\n step1Status: \"active\",\n step2Status: \"inactive\",\n step3Status: \"inactive\"\n });\n const [errorPopup, setErrorPopup] = useState(false);\n const [errorMessage, setErrorMessage] = useState({});\n const [errors, setErrors] = useState([]);\n\n /**\n * Skips onboarding.\n * Sends patch request to update user hr onboarding status.\n * Reroutes to dashboard.\n */\n const skipOnboarding = () => {\n api.finishOnboarding();\n history.push(\"/\");\n };\n\n useEffect(() => {\n if (isOnboardingDone) {\n history.push(\"/\");\n // setTimeout used to call toaster message after redirect\n setTimeout(() => {\n toast.success(t(\"success_onboarding_finish\"));\n }, 0);\n }\n document.addEventListener(\"keypress\", function(e) {\n if (e.keyCode === 13 || e.which === 13) {\n e.preventDefault();\n return false;\n }\n });\n }, []);\n\n useEffect(() => {\n changeFormSteps(formStep);\n }, [formStep]);\n\n const submitForm = async (values, { setSubmitting }) => {\n setSubmitting(true);\n const response = await api.submitOnboarding(values);\n if (response.hasError) {\n return handleCreateEmployeeError(response);\n }\n\n setNewTiersAndEmployees(response);\n setStepStatusState({\n ...stepStatusState,\n step3Status: \"completed\"\n });\n setFormStep(3);\n setSubmitting(false);\n };\n\n const handleCreateEmployeeError = ({ error }) => {\n const { data } = error;\n if (data) {\n if (data.errors && data.error) {\n handleOpenErrorPopup(data.error, data.errors.csv.errors);\n } else {\n handleOpenErrorPopup(data.error);\n }\n }\n };\n\n /**\n * Handles opening of error popup\n * - Sets error popup visibility state to true.\n * - Sets error data object.\n * @param {object} errorData\n */\n const handleOpenErrorPopup = (errorMessage, errors) => {\n setErrorPopup(true);\n setErrorMessage(errorMessage);\n setErrors(errors);\n };\n\n /**\n * Handle closing of modal.\n */\n const handleCloseModal = () => {\n setErrorPopup(false);\n };\n\n return (\n \n \n
\n {newTiersAndEmployees === undefined && (\n skipOnboarding()}\n >\n Skip onboarding {\">>\"}\n \n )}\n
\n
\n submitForm(values, actions)}\n validationSchema={onboardingValidationsSchema}\n >\n {({\n values,\n handleChange,\n errors,\n setFieldValue,\n touched,\n setFieldTouched,\n handleSubmit,\n isSubmitting\n }) => (\n <>\n {\n e.preventDefault();\n if (JSON.stringify(errors) !== \"{}\") {\n return toast.warning(t(\"fill_form_warning\"));\n }\n handleSubmit();\n }}\n autoComplete=\"off\"\n >\n
\n \n \n \n
\n \n\n
\n setFormStep(formStep - 1)}\n >\n \n \n
\n {formSteps.map(state => (\n \n ))}\n
\n setFormStep(formStep + 1)}\n disabled={\n newTiersAndEmployees !== undefined || formStep === 3\n }\n >\n \n \n
\n \n )}\n \n
\n
\n
\n
\n\n {errorPopup && (\n \n \n \n )}\n
\n );\n};\n\nconst mapStateToProps = state => {\n return {\n isOnboardingDone: state.app.user.isOnboardingDone\n };\n};\n\nexport default connect(mapStateToProps, null)(Onboarding);\n","import Onboarding from \"./Onboarding\";\n\nexport default Onboarding;\n","export const changeFormSteps = formStep => {\n const container = document.getElementById(\"stepsContainer\");\n switch (formStep) {\n case 1:\n container.style.transform = \"translate(0px)\";\n break;\n case 2:\n container.style.transform = \"translate(-500px)\";\n break;\n case 3:\n container.style.transform = \"translate(-1000px)\";\n break;\n default:\n console.log(`Step doesn't exists`);\n }\n};\n","import styled from \"styled-components\";\n\nconst FormModalStyles = styled.div`\n position: fixed;\n width: 100%;\n height: 100vh;\n background: #0000004d;\n z-index: 5;\n top: 0;\n left: 0;\n display: flex;\n justify-content: flex-end;\n\n .modal {\n width: 545px;\n height: 100%;\n position: relative;\n background: #fff;\n border-radius: 4px;\n padding: 0 0 20px 30px;\n opacity: 0;\n transform: translateX(100%);\n transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;\n\n :focus-visible {\n outline: unset;\n }\n\n .closeButton {\n background-color: #fff;\n border-radius: 50%;\n cursor: pointer;\n height: 40px;\n opacity: 0;\n overflow: hidden;\n text-align: center;\n transform: translateY(-100%);\n transition: transform 0.2s ease, opacity 0.2s ease, visibility 0.2s ease;\n visibility: hidden;\n width: 40px;\n position: absolute;\n font-size: 20px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #737373;\n left: -59px;\n top: 0;\n }\n }\n\n .showModal {\n opacity: 1 !important;\n transform: translateX(0) !important;\n }\n\n .showCloseButton {\n opacity: 1 !important;\n transform: translateY(21px) !important;\n visibility: visible !important;\n }\n`;\n\nexport default FormModalStyles;\n","import React, { useEffect, useRef } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport FormModalStyles from \"./FormModalStyles\";\n\nconst FormModal = ({ closeModal, children }) => {\n const ref = useRef(null);\n\n const handleKeyDown = event => {\n if (event.key !== \"Escape\") return;\n\n closeModal();\n };\n\n useEffect(() => {\n ref.current.focus();\n }, []);\n\n return (\n \n e.stopPropagation()}\n tabIndex={-1}\n onKeyDown={handleKeyDown}\n >\n
\n X\n
\n {children}\n
\n \n );\n};\n\nFormModal.propTypes = {\n closeModal: PropTypes.func,\n children: PropTypes.node\n};\n\nexport default FormModal;\n","import FormModal from './FormModal'\n\nexport default FormModal\n","const openModalAnim = () => {\n\tconst modal = document.getElementById('modal')\n\tconst closeButton = document.getElementById('closeButton')\n\tmodal.classList.add('showModal')\n\tsetTimeout(() => {\n\t\tcloseButton.classList.add('showCloseButton')\n\t}, 200)\n}\n\n\nconst closeModalAnim = () => {\n\tconst modal = document.getElementById('modal')\n\tconst closeButton = document.getElementById('closeButton')\n\tif (closeButton && closeButton.classList.contains('showCloseButton')) {\n\t\tcloseButton.classList.remove('showCloseButton')\n\t}\n\tif (modal && modal.classList.contains('showModal')) {\n\t\tsetTimeout(() => {\n\t\t\tmodal.classList.remove('showModal')\n\t\t}, 300)\n\t}\n}\n\nexport { openModalAnim, closeModalAnim }\n","import { apiService } from \"../api.service\";\nimport Category from \"../../../models/domain/Category.entity\";\nimport CategoriesResponse from \"../../../models/server/responses/Categories.response\";\nimport { CategoryPayload } from \"../../../models/server/payloads\";\n\nexport const getCategories = async () => {\n let response = await apiService.get(`/benefit-group/categories`);\n\n if (response.hasError) return response;\n\n return new CategoriesResponse(response);\n};\n\nexport const addCategory = async values => {\n let response = await apiService.post(\n \"/benefit-group/category/create\",\n new CategoryPayload(values)\n );\n\n if (response.hasError) return response;\n\n return new Category(response.data);\n};\n\nexport const editCategory = async (values, chosenId) => {\n let response = await apiService.put(\n `/benefit-group/category/${chosenId}`,\n new CategoryPayload(values)\n );\n\n if (response.hasError) return response;\n\n return new Category(response.data);\n};\n\nexport const removeCategory = async id => {\n let response = await apiService.delete(`/benefit-group/category/${id}`);\n\n return response;\n};\n","import * as actionTypes from \"../../constants/actionTypes/admin/categories.constants\";\n\nexport const setCategories = categories => {\n return { type: actionTypes.SET_CATEGORIES, categories };\n};\n\nexport const addCategory = category => {\n return { type: actionTypes.ADD_CATEGORY, category };\n}\n\nexport const editCategory = category => {\n return { type: actionTypes.EDIT_CATEGORY, category };\n}\n\nexport const deleteCategory = id => {\n return { type: actionTypes.DELETE_CATEGORY, id };\n}","export const SET_CATEGORIES = 'SET_CATEGORIES';\nexport const ADD_CATEGORY = 'ADD_CATEGORY';\nexport const EDIT_CATEGORY = 'EDIT_CATEGORY';\nexport const DELETE_CATEGORY = 'DELETE_CATEGORY';","import React, { useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\nimport { Editor } from \"react-draft-wysiwyg\";\nimport \"react-draft-wysiwyg/dist/react-draft-wysiwyg.css\";\n\n// Components\nimport {\n TextAndLine,\n Input,\n InputLabel,\n MyDropZone,\n Button,\n MultiselectInput\n} from \"../../../../../components\";\n// Services\nimport * as categoriesService from \"../../../../../services/api/admin/categories.service\";\nimport * as categoriesActionCreators from \"../../../../../actions/admin/categories.actions\";\n// Utils\nimport { convertStringToEditorState } from \"../../../../../services/textEditor.utils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BenefitGroupFormStyles = styled.div`\n .basicInfo {\n margin: 20px 0 30px 0;\n }\n\n .labelStyles {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n color: #373737;\n }\n\n .inputStyles {\n height: 46px;\n border-radius: 4px;\n border: solid 1px #d5dbdd;\n background-color: #ffffff;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n color: #373737;\n }\n\n .capacityInput {\n position: absolute;\n text-align: center;\n padding: 0 46px;\n }\n\n .decrementButton {\n position: absolute;\n left: 0;\n z-index: 2;\n width: 46px;\n height: 46px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #fff;\n border: 1px solid #1568bf;\n border-radius: 4px;\n outline: none;\n cursor: pointer;\n }\n\n .incrementButton {\n position: absolute;\n right: 0;\n z-index: 2;\n width: 46px;\n height: 46px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #fff;\n border: 1px solid #1568bf;\n border-radius: 4px;\n outline: none;\n cursor: pointer;\n }\n\n .labelAndValidation {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 24px;\n }\n\n .photoContainer {\n margin: 20px 0;\n }\n\n .buttonContainer {\n display: flex;\n margin-bottom: 10px;\n }\n\n .summary {\n width: 100%;\n min-width: 100%;\n max-width: 100%;\n height: 139px;\n overflow-y: auto;\n min-height: 139px;\n max-height: 139px;\n border-radius: 4px;\n border: solid 1px #d5dbdd;\n background-color: #ffffff;\n padding: 12px 14px;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n color: #373737;\n outline: none;\n resize: none;\n }\n\n .descriptionContainer {\n width: 100%;\n margin: 10px 0;\n\n .rdw-editor-wrapper {\n .rdw-editor-toolbar {\n .rdw-emoji-wrapper {\n .rdw-emoji-modal {\n left: -20px !important;\n }\n }\n .rdw-link-wrapper {\n .rdw-link-modal {\n font-size: 14px;\n .rdw-link-modal-label {\n font-size: 14px;\n }\n }\n }\n }\n .rdw-editor-main {\n width: 100%;\n min-width: 100%;\n max-width: 100%;\n height: 150px;\n overflow-y: auto;\n min-height: 150px;\n border-radius: 4px;\n border: solid 1px #d5dbdd;\n background-color: #ffffff;\n padding: 12px 14px;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n color: #373737;\n outline: none;\n resize: none;\n .DraftEditor-root {\n z-index: 0;\n }\n }\n }\n }\n`;\n\nconst BenefitGroupForm = ({\n closeModal,\n values,\n handleChange,\n setFieldValue,\n errors,\n touched,\n handleBlur,\n setFieldTouched,\n setFieldError,\n buttonText,\n disableButton,\n isHr = false,\n categories,\n setCategories\n}) => {\n const { t } = useTranslation();\n const fetchCategories = async () => {\n const response = await categoriesService.getCategories();\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n setCategories(response.categories);\n };\n\n useEffect(() => {\n fetchCategories();\n }, []);\n\n return (\n \n \n
\n
\n \n
\n {errors.name && touched.name ? errors.name : \"\"}\n
\n
\n \n \n
\n \n \n
\n {errors.categories && touched.categories\n ? errors.categories\n : \"\"}\n
\n
\n setFieldValue(\"categories\", option)}\n selectedValues={values.categories}\n shouldHaveFullWidth\n shouldHaveFullHeigth\n />\n
\n
\n {!isHr && (\n
\n \n \n
\n \n \n )}\n
\n \n
\n {errors.summary && touched.summary ? errors.summary : \"\"}\n
\n
\n \n
\n \n \n
\n {errors.description && touched.description\n ? errors.description\n : \"\"}\n
\n
\n {\n setFieldTouched(\"description\", true);\n }}\n editorState={convertStringToEditorState(values.description)}\n editorStyle={{\n fontSize: 14\n }}\n stripPastedStyles={true}\n onEditorStateChange={editorState =>\n setFieldValue(\"description\", editorState)\n }\n toolbar={{\n options: [\n \"inline\",\n \"fontSize\",\n \"list\",\n \"textAlign\",\n \"colorPicker\",\n \"link\",\n \"emoji\",\n \"remove\",\n \"history\"\n ],\n fontSize: {\n options: [10, 11, 12, 13, 14, 16, 18]\n }\n }}\n />\n \n \n\n \n
\n
\n \n
\n {errors.photo && touched.photo ? errors.photo : \"\"}\n
\n
\n \n {/* */}\n
\n\n
\n {disableButton ? (\n \n ) : (\n \n )}\n \n
\n \n );\n};\n\nBenefitGroupForm.propTypes = {\n closeModal: PropTypes.func,\n handleChange: PropTypes.func,\n setFieldValue: PropTypes.func,\n handleBlur: PropTypes.func,\n setFieldTouched: PropTypes.func,\n setFieldError: PropTypes.func,\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n buttonText: PropTypes.string,\n disableButton: PropTypes.bool\n};\n\nconst mapStateToProps = state => {\n return {\n categories: state.categories.categories\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setCategories: categories =>\n dispatch(categoriesActionCreators.setCategories(categories))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BenefitGroupForm);\n","import { convertEditorStateToString } from \"../../textEditor.utils\";\nimport { isEmpty, removeSpacesAndHTML } from \"../../general.utils\";\nimport { findLocales } from \"../../../utils/helpers/findLocales\";\n\nexport const validateHrLocalBenefitGroupCreate = ({\n name,\n categories,\n description,\n photo,\n capacity,\n summary\n}) => {\n const errors = {};\n const isInLanguage = findLocales(\"rs\");\n\n if (!name.trim()) {\n errors.name = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (removeSpacesAndHTML(name).length > 30) {\n errors.name = isInLanguage ? \"Predugo\" : \"Too long\";\n } else if (!removeSpacesAndHTML(name)) {\n errors.name = isInLanguage\n ? \"HTML oznaka nije dozvoljena\"\n : \"HTML tag is not allowed\";\n }\n\n if (isEmpty(categories)) {\n errors.categories = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n const descriptionString = convertEditorStateToString(description);\n const tagRegex = /<.+?>/g;\n const formattedDescription = descriptionString.replace(tagRegex, \"\").trim();\n if (formattedDescription.length > 1001) {\n errors.description = isInLanguage ? \"Predugo\" : \"Too long\";\n }\n\n if (!summary.trim()) {\n errors.summary = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (removeSpacesAndHTML(summary).length < 20) {\n errors.summary = isInLanguage ? \"Prekratko\" : \"Too short\";\n } else if (removeSpacesAndHTML(summary).length > 90) {\n errors.summary = isInLanguage ? \"Predugo\" : \"Too long\";\n } else if (!removeSpacesAndHTML(summary)) {\n errors.summary = isInLanguage\n ? \"HTML oznaka nije dozvoljena\"\n : \"HTML tag is not allowed\";\n }\n\n if (!photo) {\n errors.photo = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n return errors;\n};\nexport const validateHrLocalBenefitCreate = ({\n title,\n tokenPrice,\n expiration,\n description,\n summary,\n vouchers,\n quantity\n}) => {\n const errors = {};\n const isInLanguage = findLocales(\"rs\");\n\n if (!title.trim()) {\n errors.title = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (removeSpacesAndHTML(title).length > 30) {\n errors.title = isInLanguage ? \"Predugo\" : \"Too long\";\n } else if (!removeSpacesAndHTML(title)) {\n errors.title = isInLanguage\n ? \"HTML oznaka nije dozvoljena\"\n : \"HTML tag is not allowed\";\n }\n\n if (!expiration) {\n errors.expiration = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n if (expiration !== \"voucher\") {\n if (tokenPrice === \"\" || tokenPrice === null || tokenPrice === undefined) {\n errors.tokenPrice = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n }\n\n if (expiration === \"voucher\") {\n if (vouchers.length === 0) {\n errors.vouchers = isInLanguage ? \"Dodajte vaučer\" : \"Please add voucher\";\n } else {\n vouchers.forEach(voucher => {\n if (voucher.name === \"\" || voucher.price === \"\") {\n errors.vouchers = isInLanguage\n ? \"Morate popuniti sva polja\"\n : \"You need to fill all the fields\";\n }\n });\n }\n }\n\n const descriptionString = convertEditorStateToString(description);\n const tagRegex = /<.+?>/g;\n const formattedDescription = descriptionString.replace(tagRegex, \"\").trim();\n if (formattedDescription.length > 1001) {\n errors.description = isInLanguage ? \"Predugo\" : \"Too long\";\n }\n\n if (!summary.trim()) {\n errors.summary = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (removeSpacesAndHTML(summary).length < 20) {\n errors.summary = isInLanguage ? \"Prekratko\" : \"Too short\";\n } else if (removeSpacesAndHTML(summary).length > 90) {\n errors.summary = isInLanguage ? \"Predugo\" : \"Too long\";\n } else if (!removeSpacesAndHTML(summary)) {\n errors.summary = isInLanguage\n ? \"HTML oznaka nije dozvoljena\"\n : \"HTML tag is not allowed\";\n }\n\n if (!isEmpty(quantity) && quantity <= 0) {\n errors.quantity = isInLanguage\n ? \"Minimalna vrednost za količinu je 1\"\n : \"Minimum value for quantity is 1\";\n }\n\n // if (!photo) {\n // errors.photo = '* Required';\n // }\n\n return errors;\n};\n","import React, { useState, useContext } from \"react\";\nimport { useFormik } from \"formik\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\nimport styled from \"styled-components\";\n// components\nimport BenefitGroupForm from \"./BenefitGroupForm\";\n// entity\nimport { LocalBenefitGroupForm } from \"../../../../../models/domain\";\n// validation\nimport { validateHrLocalBenefitGroupCreate } from \"../../../../../services/validations/hr/hrLocalBenefitValidation\";\n// services\nimport * as localBenefitsService from \"../../../../../services/api/hr/localBenefits.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AddLocalBenefitGroupStyles = styled.div`\n .title {\n width: 100%;\n font-size: 24px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n margin: 30px 0;\n }\n\n .form {\n width: 481px;\n height: calc(100vh - 120px);\n overflow-y: auto;\n overflow-x: hidden;\n }\n`;\n\nconst AddLocalBenefitGroup = ({\n closeModal,\n setCurrentPage,\n fetchLocalBenefitGroups\n}) => {\n const { t } = useTranslation();\n // const { localBenefitsActions } = useContext(HrLocalBenefitsContext);\n const [disableButton, setDisableButton] = useState(false);\n\n const handleCreateBenefitGroupError = ({ error }) => {\n const { data } = error;\n if (data) {\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n if (data.errors.description) {\n toast.error(\n `${data.error.message}: ${data.errors.description.keys[0]}`\n );\n }\n if (data.errors.summary) {\n toast.error(`${data.error.message}: ${data.errors.summary.keys[0]}`);\n }\n if (data.errors.photo) {\n toast.error(`${data.error.message}: ${data.errors.photo.keys[0]}`);\n }\n } else {\n toast.error(data.error.message);\n }\n } else {\n toast.error(\"Something went wrong!\");\n }\n };\n\n const handleCreateBenefitGroup = async values => {\n setDisableButton(true);\n\n const response = await localBenefitsService.addLocalBenefitGroup(values);\n\n if (response.hasError) {\n setTimeout(() => {\n setDisableButton(false);\n }, 1000);\n return handleCreateBenefitGroupError(response);\n }\n\n setCurrentPage(1);\n fetchLocalBenefitGroups();\n toast.success(t(\"success_add_company_benefit_group\"));\n closeModal();\n setTimeout(() => {\n setDisableButton(false);\n }, 550);\n };\n\n const formik = useFormik({\n initialValues: new LocalBenefitGroupForm(),\n validate: validateHrLocalBenefitGroupCreate,\n onSubmit: handleCreateBenefitGroup\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n setFieldTouched,\n setFieldError,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"add_local_benefit_groups\")}

\n {/* */}\n
\n \n \n {/*
*/}\n
\n );\n};\n\nAddLocalBenefitGroup.propTypes = {\n closeModal: PropTypes.func,\n setCurrentPage: PropTypes.func,\n fetchLocalBenefitGroups: PropTypes.func\n};\n\nexport default AddLocalBenefitGroup;\n","import { apiService } from \"../api.service\";\nimport { LocalBenefitsResponse } from \"../../../models/server/responses\";\nimport {\n LocalBenefitGroupPayload,\n LocalBenefitPayload\n} from \"../../../models/server/payloads\";\nimport { LocalBenefitGroup, LocalBenefit } from \"../../../models/domain\";\n\nexport const getLocalBenefitGroups = async ({ limit, page, searchQuery }) => {\n const response = await apiService.get(\n `/benefit-group/local?limit=${limit}&page=${page}&search=${searchQuery}`\n );\n\n if (response.hasError) return response;\n\n return new LocalBenefitsResponse(response);\n};\n\nexport const addLocalBenefitGroup = async values => {\n const payloadData = new LocalBenefitGroupPayload(values);\n\n const response = await apiService.post(\n \"/benefit-group/local/create\",\n payloadData.payload\n );\n\n if (response.hasError) return response;\n\n return new LocalBenefitGroup(response.data);\n};\n\nexport const editLocalBenefitGroup = async (values, chosenBenefitGroupId) => {\n const payloadData = new LocalBenefitGroupPayload(values);\n\n const response = await apiService.put(\n `/benefit-group/local/${chosenBenefitGroupId}`,\n payloadData.payload\n );\n\n if (response.hasError) return response;\n\n return new LocalBenefitGroup(response.data);\n};\n\nexport const deleteBenefitGroup = async benefitGroupId => {\n const response = await apiService.delete(`/benefit-group/local/${benefitGroupId}`);\n\n return response;\n};\n\nexport const createNewLocalBenefit = async (values, chosenBenefitGroupId) => {\n const payloadData = new LocalBenefitPayload(chosenBenefitGroupId, values);\n\n const response = await apiService.post(\n \"/benefit/local/create\",\n payloadData.payload\n );\n\n if (response.hasError) return response;\n\n return new LocalBenefit(response.data);\n};\n\nexport const editLocalBenefit = async (\n values,\n chosenBenefitId,\n chosenBenefitGroupId\n) => {\n const payloadData = new LocalBenefitPayload(chosenBenefitGroupId, values);\n\n const response = await apiService.put(\n `/benefit/local/update/${chosenBenefitId}`,\n payloadData.payload\n );\n\n if (response.hasError) return response;\n\n return new LocalBenefit(response.data);\n};\n\nexport const deleteLocalBenefit = async benefitId => {\n const response = await apiService.delete(`/benefit/local/delete/${benefitId}`);\n\n return response;\n};\n","import React, { useState, useContext } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n// components\nimport BenefitGroupForm from \"./BenefitGroupForm\";\n// entity\nimport { LocalBenefitGroupForm } from \"../../../../../models/domain\";\n// validation\nimport { validateHrLocalBenefitGroupCreate } from \"../../../../../services/validations/hr/hrLocalBenefitValidation\";\n// services\nimport * as actionCreators from \"../../../../../actions/hr/localBenefits.actions\";\nimport * as localBenefitsService from \"../../../../../services/api/hr/localBenefits.service\";\n// context\nimport { useTranslation } from \"react-i18next\";\n\nconst EditLocalBenefitGroupStyles = styled.div`\n .title {\n width: 100%;\n font-size: 24px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n margin: 30px 0;\n }\n\n .form {\n width: 481px;\n height: calc(100vh - 120px);\n overflow-y: auto;\n overflow-x: hidden;\n }\n`;\n\nconst EditLocalBenefitGroup = ({\n closeModal,\n fetchLocalBenefitGroups,\n chosenBenefitGroupId,\n editLocalBenefitGroup,\n localBenefitGroups\n}) => {\n const { t } = useTranslation();\n const [disableButton, setDisableButton] = useState(false);\n\n const handleUpdateBenefitGroupError = ({ error }) => {\n const { data } = error;\n if (data) {\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n if (data.errors.description) {\n toast.error(\n `${data.error.message}: ${data.errors.description.keys[0]}`\n );\n }\n if (data.errors.summary) {\n toast.error(`${data.error.message}: ${data.errors.summary.keys[0]}`);\n }\n if (data.errors.photo) {\n toast.error(`${data.errors.photo.keys[0]}`);\n }\n if (data.errors.taxes) {\n toast.error(`${data.errors.taxes.keys[0]}`);\n }\n } else {\n toast.error(data.error.message);\n }\n } else {\n toast.error(\"Something went wrong!\");\n }\n };\n\n const handleUpdateBenefitGroup = async values => {\n setDisableButton(true);\n\n const response = await localBenefitsService.editLocalBenefitGroup(\n values,\n chosenBenefitGroupId\n );\n\n if (response.hasError) {\n setTimeout(() => {\n setDisableButton(false);\n }, 1000);\n return handleUpdateBenefitGroupError(response);\n }\n\n editLocalBenefitGroup(response);\n fetchLocalBenefitGroups();\n toast.success(t(\"success_edit_company_benefit_group\"));\n closeModal();\n setTimeout(() => {\n setDisableButton(false);\n }, 550);\n };\n\n const formik = useFormik({\n initialValues:\n localBenefitGroups.find(\n benefitGroup => benefitGroup.id === chosenBenefitGroupId\n ) || new LocalBenefitGroupForm(),\n validate: validateHrLocalBenefitGroupCreate,\n onSubmit: handleUpdateBenefitGroup\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n setFieldTouched,\n setFieldError,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"edit_local_benefit_group\")}

\n
\n \n \n
\n );\n};\n\nEditLocalBenefitGroup.propTypes = {\n closeModal: PropTypes.func,\n chosenBenefitGroupId: PropTypes.number\n};\n\nconst mapStateToProps = state => {\n return {\n localBenefitGroups: state.localBenefits.localBenefitGroups\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n editLocalBenefitGroup: benefitGroup =>\n dispatch(actionCreators.editLocalBenefitGroup(benefitGroup))\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(EditLocalBenefitGroup);\n","import * as actionTypes from \"../../constants/actionTypes/hr/localBenefits.constants\";\n\nexport const setLocalBenefitGroups = (benefitGroups, count) => {\n return { type: actionTypes.SET_LOCAL_BENEFIT_GROUPS, benefitGroups, count };\n};\n\nexport const setLocalBenefitGroupPage = page => {\n return { type: actionTypes.SET_LOCAL_BENEFIT_GROUPS_PAGE, page };\n};\n\nexport const editLocalBenefitGroup = benefitGroup => {\n return { type: actionTypes.EDIT_LOCAL_BENEFIT_GROUP, benefitGroup };\n};\n\nexport const addNewBenefitToBenefitGroup = (benefitGroupId, benefit) => {\n return {\n type: actionTypes.ADD_NEW_LOCAL_BENEFIT_TO_LOCAL_BENEFIT_GROUP,\n benefitGroupId,\n benefit\n };\n};\n\nexport const editLocalBenefit = (benefitGroupId, benefit) => {\n return { type: actionTypes.EDIT_LOCAL_BENEFIT, benefitGroupId, benefit };\n};\n\nexport const removeLocalBenefit = (benefitGroupId, benefitId) => {\n return { type: actionTypes.DELETE_LOCAL_BENEFIT, benefitGroupId, benefitId };\n};\n","export const SET_LOCAL_BENEFIT_GROUPS = \"SET_LOCAL_BENEFIT_GROUPS\";\nexport const SET_LOCAL_BENEFIT_GROUPS_PAGE = \"SET_LOCAL_BENEFIT_GROUPS_PAGE\";\nexport const EDIT_LOCAL_BENEFIT_GROUP = \"EDIT_LOCAL_BENEFIT_GROUP\";\nexport const ADD_NEW_LOCAL_BENEFIT_TO_LOCAL_BENEFIT_GROUP =\n \"ADD_NEW_LOCAL_BENEFIT_TO_LOCAL_BENEFIT_GROUP\";\nexport const EDIT_LOCAL_BENEFIT = \"EDIT_LOCAL_BENEFIT\";\nexport const DELETE_LOCAL_BENEFIT = \"DELETE_LOCAL_BENEFIT\";\n","import styled from 'styled-components'\n\nexport const VouchersStyles = styled.div`\n width: 100%;\n\n .voucherContainer {\n padding: 20px 0;\n\n .voucherHead {\n display: flex;\n align-items: center;\n margin-bottom: 9px;\n }\n\n .voucher {\n display: flex;\n align-items: center;\n background: #F7F7F7;\n border-radius: 4px;\n margin-bottom: 5px;\n padding: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n\n .voucherNameContainer {\n width: 381px;\n background: #FFFFFF;\n border: 1px solid #D5DBDD;\n border-radius: 4px;\n margin: 0 5px 0 0;\n display: flex;\n align-items: center;\n height: 34px;\n padding: 0 8px;\n\n .voucherNameInput {\n width: 100%;\n outline: none;\n border: none;\n font-style: normal;\n font-weight: normal;\n font-size: 16px;\n line-height: 20px;\n color: #1568BF;\n }\n }\n\n .voucherPriceContainer {\n width: 84px;\n background: #FFFFFF;\n border: 1px solid #D5DBDD;\n border-radius: 4px;\n margin: 0 5px 0 0;\n display: flex;\n align-items: center;\n height: 34px;\n padding: 0 8px;\n\n svg {\n width: 40px;\n }\n\n .voucherPriceInput {\n margin-left: 10px;\n width: 100%;\n outline: none;\n border: none;\n font-style: normal;\n font-weight: normal;\n font-size: 14px;\n line-height: 24px;\n letter-spacing: -0.233333px;\n color: #373737;\n mix-blend-mode: normal;\n opacity: 0.8;\n }\n }\n\n .removeTierButton {\n width: 32px;\n height: 32px;\n border-radius: 4px;\n border: 1px solid #1568bf;\n background-color: #1568bf;\n display: flex;\n align-items: center;\n justify-content: center;\n outline: none;\n cursor: pointer;\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n color: #ffffff;\n display: flex;\n align-items: center;\n }\n }\n\n .addVoucherButton {\n background: #FFFFFF;\n border: 1px solid #1568BF;\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 34px;\n width: 381px;\n color: #1568BF;\n font-size: 14px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n margin-top: 20px;\n }\n }\n`\n","import React from \"react\";\n\nimport {\n InputLabel,\n TextAndLine,\n CheckboxInput\n} from \"../../../../../../components\";\nimport { Voucher } from \"../../../../../../models/domain\";\n\nimport { TokenIcon } from \"../../../../../../assets/Icons\";\n\nimport { VouchersStyles } from \"./voucher.styles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Vouchers = ({\n values,\n setFieldValue,\n errors,\n touched,\n isAdmin = false\n}) => {\n const { t } = useTranslation();\n\n const addNewVoucher = () => {\n setFieldValue(\"vouchers\", [...values.vouchers, new Voucher()]);\n };\n\n const handleNameChange = (e, index) => {\n const updatedVouchers = values.vouchers.map((voucher, i) => {\n if (i === index) {\n return new Voucher({ ...voucher, name: e.target.value });\n } else {\n return voucher;\n }\n });\n setFieldValue(\"vouchers\", updatedVouchers);\n };\n\n const handlePriceChange = (e, index) => {\n let inputValue = e.target.validity.valid ? parseInt(e.target.value, 0) : \"\";\n const updatedVouchers = values.vouchers.map((voucher, i) => {\n if (i === index) {\n return new Voucher({ ...voucher, price: inputValue });\n } else {\n return voucher;\n }\n });\n setFieldValue(\"vouchers\", updatedVouchers);\n };\n\n const handleBenefitPredefinedValuesChange = (e, index, value, type) => {\n const updatedVouchers = values.vouchers.map((voucher, i) => {\n if (i === index) {\n return new Voucher({\n ...voucher,\n predefinedValuesOnly:\n type === \"predefined\" ? value : voucher.predefinedValuesOnly,\n isReimbursement: type === \"refund\" ? value : voucher.isReimbursement\n });\n } else {\n return voucher;\n }\n });\n setFieldValue(\"vouchers\", updatedVouchers);\n };\n\n const removeVoucher = voucherId => {\n const updatedVouchers = values.vouchers.filter(\n voucher => voucher.id !== voucherId\n );\n setFieldValue(\"vouchers\", updatedVouchers);\n };\n\n return (\n \n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n {values.vouchers.map((voucher, i) => (\n <>\n
\n \n handleBenefitPredefinedValuesChange(\n e,\n i,\n !voucher.predefinedValuesOnly,\n \"predefined\"\n )\n }\n />\n \n \n
\n
\n {isAdmin && (\n
\n \n handleBenefitPredefinedValuesChange(\n e,\n i,\n !voucher.isReimbursement,\n \"refund\"\n )\n }\n />\n \n \n
\n
\n )}\n
\n
\n handleNameChange(e, i)}\n className=\"voucherNameInput\"\n />\n
\n
\n \n handlePriceChange(e, i)}\n value={voucher.price}\n className=\"voucherPriceInput\"\n />\n
\n removeVoucher(voucher.id)}\n className=\"removeTierButton\"\n >\n X\n \n
\n \n ))}\n \n
\n
\n {errors.vouchers && touched.vouchers ? errors.vouchers : \"\"}\n
\n
\n \n +\n \n \n
\n );\n};\n\nexport default Vouchers;\n","import styled from 'styled-components'\n\nconst BenefitFormStyles = styled.div`\n\n\t.publishBenefitLink {\n color: #1e3c72;\n cursor: pointer;\n font-size: 15px;\n }\n\t.basicInfoSection {\n\t\tmargin: 20px 0;\n\t\twidth: 100%;\n\t}\n\n\t.labelAndValidation {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\theight: 24px;\n\t}\n\n\t.labelStyles {\n\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.71;\n\t\tletter-spacing: -0.23px;\n\t\tcolor: #373737;\n\t}\n\n\t.inputStyles {\n\t\theight: 46px;\n\t\tborder-radius: 4px;\n\t\tborder: solid 1px #d5dbdd;\n\t\tbackground-color: #ffffff;\n\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.71;\n\t\tletter-spacing: -0.23px;\n\t\tcolor: #373737;\n\t}\n\n\t.topInputsContainer {\n\t\t\n\n\t\t.inputContainer {\n\t\t\tmin-width: 195px;\n\t\t\twidth: 100%;\n\t\t\tmargin-bottom: 10px;\n\t\t}\n\t}\n\n\t.middleInputContainer {\n\t\tmargin-bottom: 10px;\n\n\n\t\t.react-dropdown-select {\n\t\t\theight: 46px;\n\t\t\tborder-radius: 4px;\n\t\t\tborder: solid 1px #d5dbdd !important;\n\t\t\tbackground-color: #ffffff;\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: 1.71;\n\t\t\tletter-spacing: -0.23px;\n\t\t\tcolor: #373737;\n\t\t\twidth: 100%;\n\t\t\tbox-shadow: none !important;\n\t\t\tcursor: pointer;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\n\t\t\t.react-dropdown-select-content {\n\t\t\t\theight: 100%;\n\t\t\t\tdisplay: flex;\n\t\t\t\tpadding: 0 5px;\n\t\t\t\talign-items: center;\n\t\t\t\tflex-wrap: nowrap;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\toverflow-x: hidden;\n\t\t\t\twidth: 70px;\n\t\t\t\twhite-space: nowrap;\n\n\t\t\t\tinput {\n\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\tfont-stretch: normal;\n\t\t\t\t\tfont-style: normal;\n\t\t\t\t\tline-height: normal;\n\t\t\t\t\tletter-spacing: normal;\n\t\t\t\t\tcolor: #5d5d5d;\n\t\t\t\t\toverflow-x: scroll;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.react-dropdown-select-dropdown-handle {\n\t\t\t\theight: 100%;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tmargin: 0 !important;\n\t\t\t}\n\t\t}\n\n\t\t.react-dropdown-select-dropdown {\n\t\t\tmax-height: 150px;\n\t\t}\n\n\t\t.itemContainer {\n\n\t\t\t&:hover {\n\t\t\t\tbackground: #1568bf;\n\n\t\t\t\t.dropDownItem {\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.dropDownItem {\n\t\t\t\tfont-size: 12px;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tfont-stretch: normal;\n\t\t\t\tfont-style: normal;\n\t\t\t\tline-height: normal;\n\t\t\t\tletter-spacing: normal;\n\t\t\t\tcolor: #5d5d5d;\n\t\t\t}\n\t\t}\n\t}\n\n\t.bottomInputContainer {\n\t\twidth: 100%;\n\n\t\t.summary {\n\t\t\twidth: 100%;\n\t\t\tmin-width: 100%;\n\t\t\tmax-width: 100%;\n\t\t\theight: 100px;\n\t\t\toverflow-y: auto;\n\t\t\tmin-height: 100px;\n\t\t\tmax-height: 100px;\n\t\t\tborder-radius: 4px;\n\t\t\tborder: solid 1px #d5dbdd;\n\t\t\tbackground-color: #ffffff;\n\t\t\tpadding: 12px 14px;\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: 1.71;\n\t\t\tletter-spacing: -0.23px;\n\t\t\tcolor: #373737;\n\t\t\toutline: none;\n\t\t\tresize: none;\n\t\t}\n\t}\n\n\t.photoSectionContainer {\n\t\tmargin: 20px 0;\n\t\twidth: 100%;\n\t}\n\n\t.buttonContainer {\n\t\tdisplay: flex;\n\t\tmargin-bottom: 10px;\n\t}\n\t\n\t.descriptionContainer {\n\t\twidth: 100%;\n\t\tmargin: 10px 0;\n\n\t\t.rdw-editor-wrapper {\n\t\t\t.rdw-editor-toolbar {\n\t\t\t\t.rdw-emoji-wrapper {\n\t\t\t\t\t.rdw-emoji-modal {\n\t\t\t\t\t\tleft: -20px !important;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t\t.rdw-link-wrapper {\n\t\t\t\t\t.rdw-link-modal {\n\t\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\t\t.rdw-link-modal-label {\n\t\t\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t.rdw-editor-main {\n\t\t\t\twidth: 100%;\n\t\t\t\tmin-width: 100%;\n\t\t\t\tmax-width: 100%;\n\t\t\t\theight: 150px;\n\t\t\t\toverflow-y: auto;\n\t\t\t\tmin-height: 150px;\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tborder: solid 1px #d5dbdd;\n\t\t\t\tbackground-color: #ffffff;\n\t\t\t\tpadding: 12px 14px;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tfont-stretch: normal;\n\t\t\t\tfont-style: normal;\n\t\t\t\tline-height: 1.71;\n\t\t\t\tletter-spacing: -0.23px;\n\t\t\t\tcolor: #373737;\n\t\t\t\toutline: none;\n\t\t\t\tresize: none;\n\t\t\t\t.DraftEditor-root {\n\t\t\t\t\tz-index: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n`\n\nexport default BenefitFormStyles\n","import { apiService } from \"../api.service\";\nimport { ProvidersResponse } from \"../../../models/server/responses\";\nimport {\n ProviderPayload,\n BenefitGroupPayload,\n BenefitPayload\n} from \"../../../models/server/payloads\";\nimport { BenefitGroup, Benefit, Provider } from \"../../../models/domain\";\nimport { isEmpty } from \"../../general.utils\";\n\nexport const getInitProviders = async ({ limit, page, searchText, order, key, categoryIds }) => {\n let categoriesQuery = \"\";\n let queryParams = \"\";\n\n if (limit) {\n queryParams += `limit=${limit}`;\n }\n\n if (page) {\n queryParams += `${!isEmpty(queryParams) ? \"&\" : \"\"}page=${page}`;\n }\n\n\n if (key && order) {\n queryParams += `${!isEmpty(key) && !isEmpty(order) ? \"&\" : \"\"}order=${key} ${order}`;\n }\n\n if (!isEmpty(categoryIds) && Array.isArray(categoryIds)) {\n categoriesQuery = categoryIds.reduce(\n (query, category) =>\n `${!isEmpty(query) ? `${query}&` : \"\"}category_id=${category}`,\n \"\"\n );\n }\n\n if (!isEmpty(categoriesQuery)) {\n queryParams += `${!isEmpty(queryParams) && \"&\"}${categoriesQuery}`;\n }\n\n const response = await apiService.get(\n `/provider?${queryParams}&search=${searchText}`\n );\n\n if (response.hasError) return response;\n\n return new ProvidersResponse(response);\n};\n\nexport const createProvider = async values => {\n let payloadData = new ProviderPayload(values);\n\n const response = await apiService.post(\n \"/provider/create\",\n payloadData.payload\n );\n\n if (response.hasError) return response;\n\n return new Provider(response.data);\n};\n\nexport const editProvider = async (values, providerId) => {\n let payloadData = new ProviderPayload(values);\n\n const response = await apiService.put(\n `/provider/update/${providerId}`,\n payloadData.payload\n );\n\n if (response.hasError) return response;\n\n return new Provider(response.data);\n};\n\nexport const deleteProvider = async providerId => {\n const response = await apiService.delete(`/provider/${providerId}`);\n\n return response;\n};\n\nexport const addBenefitGroup = async (providerId, values) => {\n const payloadData = new BenefitGroupPayload(providerId, values);\n\n const response = await apiService.post(\n \"/benefit-group/create\",\n payloadData.payload\n );\n\n if (response.hasError) return response;\n\n return new BenefitGroup(response.data);\n};\n\nexport const editBenefitGroup = async (providerId, benefitGroupId, values) => {\n const payloadData = new BenefitGroupPayload(providerId, values);\n\n const response = await apiService.put(\n `/benefit-group/${benefitGroupId}`,\n payloadData.payload\n );\n\n if (response.hasError) return response;\n\n return new BenefitGroup(response.data);\n};\n\nexport const deleteBenefitGroup = async benefitGroupId => {\n const response = await apiService.delete(`/benefit-group/${benefitGroupId}`);\n\n return response;\n};\n\nexport const addBenefit = async (benefitGroupId, values) => {\n const payloadData = new BenefitPayload(benefitGroupId, values);\n\n const response = await apiService.post(\n \"/benefit/create\",\n payloadData.payload\n );\n\n if (response.hasError) return response;\n\n return new Benefit(response.data);\n};\n\nexport const editBenefit = async (\n providerId,\n benefitGroupId,\n benefitId,\n values\n) => {\n const payloadData = new BenefitPayload(benefitGroupId, values, providerId);\n\n const response = await apiService.put(\n `/benefit/update/${benefitId}`,\n payloadData.payload\n );\n\n if (response.hasError) return response;\n\n return new Benefit(response.data);\n};\n\nexport const deleteBenefit = async benefitId => {\n const response = await apiService.delete(`/benefit/${benefitId}`);\n\n return response;\n};\n\nexport const getChosenBenefit = async benefitId => {\n const response = await apiService.get(`/benefit/${benefitId}`);\n\n if (response.hasError) return response;\n\n return new Benefit(response.data);\n};\n\n/**\n * Request for publishing drafted benefit.\n * @param {number} benefitId \n * @returns {Response}\n */\nexport const publishBenefit = async benefitId => {\n const response = await apiService.patch(`/benefit/publish/${benefitId}`);\n\n return response;\n}\n\n/**\n * Request for publishing drafted benefit grou[].\n * @param {number} benefitGroupId \n * @returns {Response}\n */\nexport const publishBenefitGroup = async benefitGroupId => {\n const response = await apiService.patch(`/benefit-group/publish/${benefitGroupId}`);\n\n return response;\n}\n\n/**\n * Returns vendor report data (providers, benefit groups & benefits)\n * @returns {Response}\n */\nexport const getVendorReport = async () => {\n const response = await apiService.get('/provider/vendor-report');\n\n return response;\n}\n","export const EXPIRATION_OPTIONS = [\n { id: 1, name: \"month\" },\n {\n id: 2,\n name: \"one time\"\n },\n {\n id: 3,\n name: \"voucher\"\n }\n];\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Editor } from \"react-draft-wysiwyg\";\nimport { toast } from \"react-toastify\";\nimport \"react-draft-wysiwyg/dist/react-draft-wysiwyg.css\";\n\n// Components\nimport {\n TextAndLine,\n Input,\n InputLabel,\n Button,\n CheckboxInput,\n SelectInput\n} from \"../../../../../components\";\nimport Vouchers from \"../../../../SuperAdminPages/Providers/shared/Benefit/BenefitForm/Vouchers\";\nimport BenefitFormStyles from \"./BenefitFormStyles\";\n\n// Services\nimport * as providersService from \"../../../../../services/api/admin/providers.service\";\n\n// Utils\nimport { convertStringToEditorState } from \"../../../../../services/textEditor.utils\";\n\n// Constants\nimport { EXPIRATION_OPTIONS } from \"../../../../../constants/benefitExpiration.constants\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BenefitForm = ({\n closeModal,\n buttonText,\n values,\n errors,\n touched,\n setFieldValue,\n setFieldTouched,\n handleChange,\n handleBlur,\n disableButton,\n isEdit = false\n}) => {\n const { t } = useTranslation();\n /**\n * Handles change of draft status for benefit.\n */\n const handleBenefitPublishedStatus = () => {\n const draft = !values.isDraft;\n setFieldValue(\"isDraft\", draft);\n };\n\n const handleNumberInput = e => {\n let inputValue = e.target.validity.valid\n ? parseInt(e.target.value, 0)\n : values.tokenPrice;\n if (isNaN(inputValue)) {\n inputValue = \"\";\n }\n setFieldValue(\"tokenPrice\", inputValue);\n };\n\n const handleMcpNumberInput = e => {\n let inputValue = e.target.validity.valid\n ? parseInt(e.target.value, 0)\n : values.minimumContractPeriod;\n if (isNaN(inputValue)) {\n inputValue = \"\";\n }\n setFieldValue(\"minimumContractPeriod\", inputValue);\n };\n\n /**\n * Published drafted benefit.\n * If request fails, returns toast error message.\n * If request is successful, fires toast message, closes modal.\n */\n const publishBenefit = async () => {\n const response = await providersService.publishBenefit(values.id);\n\n if (response.hasError) {\n return toast.error(t(\"failed_to_publish_benefit\"));\n }\n\n toast.success(t(\"success_publish_benefit\"));\n closeModal();\n };\n\n const filteredEXPOptions = () => {\n if (values.expiration === \"voucher\") {\n return EXPIRATION_OPTIONS.filter(o => o.name === \"voucher\");\n } else {\n return EXPIRATION_OPTIONS.filter(o => o.name !== \"voucher\");\n }\n };\n\n return (\n \n \n
\n
\n
\n
\n \n
\n {errors.title && touched.title ? errors.title : \"\"}\n
\n
\n \n
\n
\n
\n \n \n
\n {errors.expiration && touched.expiration ? errors.expiration : \"\"}\n
\n
\n setFieldValue(\"expiration\", option.name)}\n customId=\"expirationId\"\n shouldHaveHight={false}\n />\n
\n {values.expiration === \"month\" && (\n
\n \n \n
\n \n \n )}\n {values.expiration !== \"voucher\" && (\n
\n \n \n
\n {errors.tokenPrice && touched.tokenPrice\n ? errors.tokenPrice\n : \"\"}\n
\n
\n \n \n )}\n
\n
\n \n
\n {errors.summary && touched.summary ? errors.summary : \"\"}\n
\n
\n \n
\n
\n \n \n
\n {errors.description && touched.description\n ? errors.description\n : \"\"}\n
\n
\n {\n setFieldTouched(\"description\", true);\n }}\n editorState={convertStringToEditorState(values.description)}\n editorStyle={{\n fontSize: 14\n }}\n stripPastedStyles={true}\n onEditorStateChange={editorState =>\n setFieldValue(\"description\", editorState)\n }\n toolbar={{\n options: [\n \"inline\",\n \"fontSize\",\n \"list\",\n \"textAlign\",\n \"colorPicker\",\n \"link\",\n \"emoji\",\n \"remove\",\n \"history\"\n ],\n fontSize: {\n options: [10, 11, 12, 13, 14, 16, 18]\n }\n }}\n />\n \n {values.expiration === \"voucher\" && (\n \n )}\n {!isEdit && (\n
\n handleBenefitPublishedStatus()}\n />\n \n \n
\n \n )}\n {isEdit && values.isDraft && (\n publishBenefit()}>\n {t(\"publish_benefit\")}\n \n )}\n \n
\n {disableButton ? (\n \n ) : (\n \n )}\n closeModal()}\n margin=\"0 0 0 0\"\n outline\n >\n {t(\"cancel\")}\n \n
\n
\n );\n};\n\nBenefitForm.propTypes = {\n closeModal: PropTypes.func,\n buttonText: PropTypes.string,\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n setFieldValue: PropTypes.func,\n setFieldTouched: PropTypes.func,\n setFieldError: PropTypes.func,\n handleChange: PropTypes.func,\n handleBlur: PropTypes.func,\n disableButton: PropTypes.bool\n};\n\nexport default BenefitForm;\n","import React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\nimport { useFormik } from \"formik\";\nimport styled from \"styled-components\";\n// components\nimport BenefitForm from \"./BenefitForm\";\n// entity\nimport { LocalBenefitForm } from \"../../../../../models/domain\";\n// services\nimport { validateHrLocalBenefitCreate } from \"../../../../../services/validations/hr/hrLocalBenefitValidation\";\nimport * as actionCreators from \"../../../../../actions/hr/localBenefits.actions\";\nimport * as localBenefitsService from \"../../../../../services/api/hr/localBenefits.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AddBenefitStyles = styled.div`\n .title {\n width: 100%;\n font-size: 24px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n margin: 30px 0;\n }\n\n .form {\n width: 481px;\n height: calc(100vh - 120px);\n overflow-y: auto;\n overflow-x: hidden;\n }\n`;\n\nconst AddBenefit = ({\n closeModal,\n chosenBenefitGroupId,\n addNewBenefitToBenefitGroup\n}) => {\n const { t } = useTranslation();\n const handleCreateBenefitError = ({ error }) => {\n const { data } = error;\n if (data) {\n if (data.errors && data.error) {\n if (data.errors.restrict) {\n toast.error(`${data.error.message}: ${data.errors.restrict.keys[0]}`);\n }\n if (data.errors.title) {\n toast.error(`${data.error.message}: ${data.errors.title.keys[0]}`);\n }\n if (data.errors.photo) {\n toast.error(`${data.errors.photo.keys[0]}`);\n }\n if (data.errors.expiration) {\n toast.error(\n `${data.error.message}: ${data.errors.expiration.keys[0]}`\n );\n }\n if (data.errors.tokenPrice) {\n toast.error(\n `${data.error.message}: ${data.errors.tokenPrice.keys[0]}`\n );\n }\n if (data.errors.description) {\n toast.error(\n `${data.error.message}: ${data.errors.description.keys[0]}`\n );\n }\n if (data.errors.minimumContractPeriod) {\n toast.error(`${data.errors.minimumContractPeriod.keys[0]}`);\n }\n if (data.errors.summary) {\n toast.error(`${data.error.message}: ${data.errors.summary.keys[0]}`);\n }\n if (data.errors.benefitGroupId) {\n toast.error(\n `${data.error.message}: ${data.errors.benefitGroupId.keys[0]}`\n );\n }\n if (data.errors.isDraft) {\n toast.error(`${data.error.message}: ${data.errors.isDraft.keys[0]}`);\n }\n } else {\n toast.error(data.error.message);\n }\n } else {\n toast.error(\"Something went wrong!\");\n }\n };\n\n const createNewBenefit = async (values, { setSubmitting }) => {\n setSubmitting(true);\n const response = await localBenefitsService.createNewLocalBenefit(\n values,\n chosenBenefitGroupId\n );\n\n setSubmitting(false);\n\n if (response.hasError) {\n return handleCreateBenefitError(response);\n }\n\n addNewBenefitToBenefitGroup(chosenBenefitGroupId, response);\n toast.success(t(\"success_add_benefit\"));\n closeModal();\n };\n\n const formik = useFormik({\n initialValues: new LocalBenefitForm(),\n validate: validateHrLocalBenefitCreate,\n onSubmit: createNewBenefit\n });\n\n const {\n values,\n errors,\n touched,\n isSubmitting,\n handleSubmit,\n setFieldValue,\n setFieldTouched,\n setFieldError,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"add_local_benefit\")}

\n
\n \n \n
\n );\n};\n\nAddBenefit.propTypes = {\n chosenBenefitGroupId: PropTypes.number,\n closeModal: PropTypes.func\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n addNewBenefitToBenefitGroup: (benefitGroupId, benefit) =>\n dispatch(\n actionCreators.addNewBenefitToBenefitGroup(benefitGroupId, benefit)\n )\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(AddBenefit);\n","import React, { useState, useContext } from \"react\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\nimport { useFormik } from \"formik\";\nimport styled from \"styled-components\";\n// components\nimport BenefitForm from \"./BenefitForm\";\n// entity\nimport { LocalBenefitForm } from \"../../../../../models/domain\";\n// services\nimport { validateHrLocalBenefitCreate } from \"../../../../../services/validations/hr/hrLocalBenefitValidation\";\nimport * as actionCreators from \"../../../../../actions/hr/localBenefits.actions\";\nimport * as localBenefitsService from \"../../../../../services/api/hr/localBenefits.service\";\n// context\nimport { useTranslation } from \"react-i18next\";\n\nconst EditBenefitStyles = styled.div`\n .title {\n width: 100%;\n font-size: 24px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n margin: 30px 0;\n }\n\n .form {\n width: 481px;\n height: calc(100vh - 120px);\n overflow-y: auto;\n overflow-x: hidden;\n }\n`;\n\nconst EditBenefit = ({\n closeModal,\n chosenBenefitGroupId,\n chosenBenefitId,\n localBenefitGroups,\n editLocalBenefit,\n refetchData\n}) => {\n const { t } = useTranslation();\n\n const handleUpdateLocalBenefitError = ({ data }) => {\n if (data) {\n if (data.errors && data.error) {\n if (data.errors.restrict) {\n toast.error(`${data.error.message}: ${data.errors.restrict.keys[0]}`);\n }\n if (data.errors.title) {\n toast.error(`${data.error.message}: ${data.errors.title.keys[0]}`);\n }\n if (data.errors.photo) {\n toast.error(`${data.error.message}: ${data.errors.photo.keys[0]}`);\n }\n if (data.errors.expiration) {\n toast.error(\n `${data.error.message}: ${data.errors.expiration.keys[0]}`\n );\n }\n if (data.errors.tokenPrice) {\n toast.error(\n `${data.error.message}: ${data.errors.tokenPrice.keys[0]}`\n );\n }\n if (data.errors.description) {\n toast.error(\n `${data.error.message}: ${data.errors.description.keys[0]}`\n );\n }\n if (data.errors.summary) {\n toast.error(`${data.error.message}: ${data.errors.summary.keys[0]}`);\n }\n if (data.errors.benefitGroupId) {\n toast.error(\n `${data.error.message}: ${data.errors.benefitGroupId.keys[0]}`\n );\n }\n } else {\n toast.error(data.error.message);\n }\n } else {\n toast.error(\"Something went wrong!\");\n }\n };\n\n const updateBenfit = async (values, { setSubmitting }) => {\n setSubmitting(true);\n\n const response = await localBenefitsService.editLocalBenefit(\n values,\n chosenBenefitId,\n chosenBenefitGroupId\n );\n\n setSubmitting(false);\n\n if (response.hasError) {\n return handleUpdateLocalBenefitError(response);\n }\n\n editLocalBenefit(chosenBenefitGroupId, response);\n refetchData();\n toast.success(t(\"success_edit_benefit\"));\n closeModal();\n };\n\n const formik = useFormik({\n initialValues:\n localBenefitGroups\n .find(benefitGroup => benefitGroup.id === chosenBenefitGroupId)\n .benefits.find(benefit => benefit.id === chosenBenefitId) ||\n new LocalBenefitForm(),\n validate: validateHrLocalBenefitCreate,\n onSubmit: updateBenfit\n });\n\n const {\n values,\n errors,\n touched,\n isSubmitting,\n handleSubmit,\n setFieldValue,\n setFieldTouched,\n setFieldError,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"edit_local_benefit\")}

\n
\n \n \n
\n );\n};\n\nEditBenefit.propTypes = {\n chosenBenefitGroupId: PropTypes.number,\n chosenBenefitId: PropTypes.number,\n closeModal: PropTypes.func\n};\n\nconst mapStateToProps = state => {\n return {\n localBenefitGroups: state.localBenefits.localBenefitGroups\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n editLocalBenefit: (benefitGroupId, benefit) =>\n dispatch(actionCreators.editLocalBenefit(benefitGroupId, benefit))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(EditBenefit);\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { AddLocalBenefitGroup, EditLocalBenefitGroup } from \"../BenefitGroup\";\nimport { AddBenefit, EditBenefit } from \"../Benefit\";\n\nconst FormRenderer = ({\n modalFormType,\n setCurrentPage,\n fetchLocalBenefitGroups,\n closeModal,\n chosenBenefitGroupId,\n chosenBenefitId\n}) => {\n switch (modalFormType) {\n case \"addLocalBenefitGroup\":\n return (\n \n );\n case \"editLocalBenefitGroup\":\n return (\n \n );\n case \"addLocalBenefitTobenefitGroup\":\n return (\n \n );\n case \"editLocalBenefitOfBenefitGroup\":\n return (\n \n );\n default:\n return null;\n }\n};\n\nFormRenderer.propTypes = {\n modalFormType: PropTypes.string.isRequired,\n closeModal: PropTypes.func,\n chosenBenefitGroupId: PropTypes.number,\n chosenBenefitId: PropTypes.number,\n setCurrentPage: PropTypes.func,\n fetchLocalBenefitGroups: PropTypes.func\n};\n\nexport default FormRenderer;\n","import FormRender from './FormRenderer'\n\nexport default FormRender\n","import styled from 'styled-components'\n\nconst BenefitGroupRowStyles = styled.div`\n\t\tborder-bottom: 1px solid #d8d8d8;\n\t\t\n\t\t&:hover {\n\t\t\t\ttransform: scale(30px);\n\t\t\t\tbox-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2),\n\t\t\t\t\t0 1px 10px 0 rgba(0, 0, 0, 0.12),\n\t\t\t\t\t0 4px 5px 0 rgba(0, 0, 0, 0.14);\n\t\t}\n\n\n\t.benefitRowContainer {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tborder-top: 1px solid #d8d8d8;\n\t\tpadding: 30px;\n\t\tmargin-top: -1px;\n\t\twidth: 100%;\n\t\tcursor: pointer;\n\t}\n\n\t.imgAndTitle {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\twidth: 320px;\n\n\t\t\t.imgContainer {\n\t\t\t\tmin-height: 90px;\n\t\t\t\tmin-width: 90px;\n\t\t\t\tmax-height: 90px;\n\t\t\t\tmax-width: 90px;\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tbackground: #1568bf;\n\t\t\t\tmargin-right: 20px;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\toverflow: hidden;\n\n\t\t\t\t.image {\n\t\t\t\t\tobject-fit: cover;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.providerNameAndCategory {\n\t\t\t\t.providerName {\n\t\t\t\t\tfont-size: 20px;\n\t\t\t\t\tfont-weight: 600;\n\t\t\t\t\tfont-stretch: normal;\n\t\t\t\t\tfont-style: normal;\n\t\t\t\t\tline-height: normal;\n\t\t\t\t\tletter-spacing: normal;\n\t\t\t\t\tcolor: #373737;\n\t\t\t\t\tmargin: 0 0 5px 0;\n\t\t\t\t}\n\n\t\t\t\t.category {\n\t\t\t\t\tfont-size: 16px;\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\tfont-stretch: normal;\n\t\t\t\t\tfont-style: normal;\n\t\t\t\t\tline-height: normal;\n\t\t\t\t\tletter-spacing: normal;\n\t\t\t\t\tcolor: #373737;\n\t\t\t\t\ttext-transform: capitalize;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.actionsContainer {\n\t\t\tdisplay: flex;\n\t\t\twidth: 140px;\n\t\t\tjustify-content: space-between;\n\t\t}\n`\n\nexport default BenefitGroupRowStyles\n","// This is the important part!\n\nconst collapseSection = (element) => {\n\tconst sectionHeight = element.scrollHeight\n\tconst elementTransition = element.style.transition\n\telement.style.transition = ''\n\trequestAnimationFrame(() => {\n\t\telement.style.height = `${sectionHeight}px`\n\t\telement.style.transition = elementTransition\n\t\trequestAnimationFrame(() => {\n\t\t\telement.style.height = `${0}px`\n\t\t})\n\t})\n}\n\nconst expandSection = (element) => {\n\tconst allElemements = document.getElementsByClassName('subRowContentContainer')\n\tconst rows = document.getElementsByClassName('benefitGroupRow')\n\tfor (let i = 0; i < allElemements.length; i++) {\n\t\tallElemements[i].style.height = '0px'\n\t\tallElemements[i].style.borderTop = '0px solid #d8d8d8'\n\t}\n\n\tfor (let i = 0; i < rows.length; i++) {\n\t\tif (rows[i].classList.contains('cardView')) {\n\t\t\trows[i].classList.remove('cardView')\n\t\t}\n\t}\n\n\tconst sectionHeight = element.scrollHeight\n\telement.style.height = `${sectionHeight}px`\n\telement.style.borderTop = '1px solid #d8d8d8'\n}\n\nconst removeCardView = (index) => {\n\tconst row = document.getElementById(`benefitGroupRow${index}`)\n\tif (row && row.classList.contains('cardView')) {\n\t\trow.classList.remove('cardView')\n\t}\n}\n\nconst addCardView = (index) => {\n\tconst row = document.getElementById(`benefitGroupRow${index}`)\n\tif (row) {\n\t\trow.classList.add('cardView')\n\t}\n}\n\nconst addHeightOnClick = (element) => {\n\texpandSection(document.getElementById(`subRowContentContainer${element}`))\n}\n\nconst removeHeightOnClick = (element) => {\n\tcollapseSection(document.getElementById(`subRowContentContainer${element}`))\n}\n\nexport { removeCardView, addHeightOnClick, removeHeightOnClick, addCardView }\n","import React, { useContext } from \"react\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\n// icons\nimport { EditIconSvg, TrashIcon } from \"../../../../assets/Icons\";\n// styles\nimport BenefitGroupRowStyles from \"./BenefitGroupRowStyles\";\n// services\nimport * as localBenefitsService from \"../../../../services/api/hr/localBenefits.service\";\nimport {\n addHeightOnClick,\n addCardView\n} from \"./benefitGroupRowAnimation.services\";\nimport { getUrl } from \"../../../../services/imageHandler\";\n// context\nimport { useTranslation } from \"react-i18next\";\n\nconst BenefitGroupRow = ({\n benefitGroup,\n children,\n openModal,\n setChosenBenefitGroupId,\n setChosenBenefitId,\n fetchLocalBenefitGroups\n}) => {\n const { t } = useTranslation();\n return (\n \n {\n setChosenBenefitId(undefined);\n setChosenBenefitGroupId(benefitGroup.id);\n addHeightOnClick(benefitGroup.id);\n addCardView(benefitGroup.id);\n }}\n >\n
\n
\n \n
\n
\n

{benefitGroup.name}

\n

\n {benefitGroup.benefits.length} {t(\"benefits\")}\n

\n
\n
\n
\n {\n e.stopPropagation();\n setChosenBenefitGroupId(benefitGroup.id);\n openModal(\"editLocalBenefitGroup\");\n }}\n >\n \n
\n {\n e.stopPropagation();\n if (benefitGroup.benefits.length > 0) {\n toast.info(t(\"delete_benefit_group_info\"));\n } else {\n const result = confirm(t(\"delete_benefit_group_alert\"));\n if (result) {\n const response = await localBenefitsService.deleteBenefitGroup(\n benefitGroup.id\n );\n\n if (response.hasEror) {\n return toast.error(response.error.data.error.message);\n }\n\n fetchLocalBenefitGroups();\n }\n }\n }}\n >\n \n \n \n \n {children}\n \n );\n};\nBenefitGroupRow.propTypes = {\n benefitGroup: PropTypes.shape(),\n openModal: PropTypes.func,\n setChosenBenefitId: PropTypes.func,\n setChosenBenefitGroupId: PropTypes.func,\n children: PropTypes.node\n};\n\nexport default BenefitGroupRow;\n","import BenefitGroupRow from './BenefitGroupRow'\n\nexport default BenefitGroupRow\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst StarIconStyles = styled.div`\n\twidth: 100%;\n\theight: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tsvg {\n\t\twidth: 25px;\n\t\theight: 25px;\n\t}\n`\n\nconst StarIcon = () => (\n\t\n\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\n)\n\nexport default StarIcon\n","import styled from 'styled-components'\n\nconst BenefitsListStyles = styled.div`\n\twidth: 48%;\n\tpadding-right: 30px;\n\tmargin-right: 30px;\n\tborder-right: 1px solid #d8d8d8;\n\n\t/* list */\n\t.benefitList {\n\t\tmin-width: 300px;\n\t\twidth: 100%;\n\t\theight: 300px;\n\t\tpadding: 4px;\n\t\toverflow-y: auto;\n\t}\n\n\t/* item */\n\n\t.item {\n\t\twidth: 100%;\n\t\theight: 70px;\n\t\tborder-radius: 4px;\n\t\tborder: solid 1px #d8d8d8;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tpadding: 0 10px;\n\t\tmargin-top: 30px;\n\t\tcursor: pointer;\n\n\t\t&:first-child {\n\t\t\tmargin-top: 0;\n\t\t}\n\n\t\t.title {\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: 500;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: 1.38;\n\t\t\tletter-spacing: -0.4px;\n\t\t\tcolor: #373737;\n\t\t}\n\n\t\t.desc {\n\t\t\tfont-size: 12px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: 1.33;\n\t\t\tletter-spacing: -0.2px;\n\t\t\tcolor: #373737;\n\t\t\twidth: 160px;\n\t\t\twhite-space: nowrap;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\t}\n\n\t.addBenefit {\n\t\twidth: calc(100% - 8px);\n\t\tmin-width: 300px;\n\t\theight: 44px;\n\t\tborder-radius: 4px;\n\t\tborder: solid 1px #d8d8d8;\n\t\tmargin: 20px 0 0 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpadding: 0 12px;\n\t\tcursor: pointer;\n\t\tposition: relative;\n\n\t}\n\t.circle {\n\t\tmin-width: 24px;\n\t\tmin-height: 24px;\n\t\tborder-radius: 50%;\n\t\tbackground: #1568bf;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tcolor: #fff;\n\t\tmargin-right: 13px;\n\t}\n\n\t.buttonText {\n\t\tfont-size: 16px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.38;\n\t\tletter-spacing: -0.4px;\n\t\tcolor: #373737;\n\t\ttext-align: center;\n\t\tposition: absolute;\n\t\twidth: 100%;\n\t}\n\n`\n\nexport default BenefitsListStyles\n","import React, { useContext } from \"react\";\nimport { toast } from \"react-toastify\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\n// assets\nimport { EditIconSvg, TrashIcon } from \"../../../../../assets/Icons\";\nimport StarIcon from \"../../../../../assets/Icons/StarIcon\";\n// styles\nimport BenefitsListStyles from \"./BenefitsListStyles\";\n// services\nimport * as localBenefitsService from \"../../../../../services/api/hr/localBenefits.service\";\nimport * as actionCreators from \"../../../../../actions/hr/localBenefits.actions\";\n// context\nimport { useTranslation } from \"react-i18next\";\n\nconst BenefitsList = ({\n benefits,\n openModal,\n setChosenBenefitId,\n setBenefit,\n chosenBenefitId,\n chosenBenefitGroupId,\n removeLocalBenefit\n}) => {\n const { t } = useTranslation();\n\n return (\n \n
\n {benefits.map(benefit => (\n {\n setChosenBenefitId(benefit.id);\n setBenefit(benefit);\n }}\n key={benefit.id}\n >\n \n \n \n
\n
\n

{benefit.title}

\n

{benefit.summary}

\n
\n \n
\n {\n e.stopPropagation();\n setChosenBenefitId(benefit.id);\n setBenefit(benefit);\n openModal(\"editLocalBenefitOfBenefitGroup\");\n }}\n >\n \n
\n {\n const result = confirm(t(\"delete_benefit_alert\"));\n if (result) {\n const response = await localBenefitsService.deleteLocalBenefit(\n benefit.id\n );\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n removeLocalBenefit(chosenBenefitGroupId, benefit.id);\n }\n }}\n >\n \n \n \n \n ))}\n \n {\n e.stopPropagation();\n openModal(\"addLocalBenefitTobenefitGroup\");\n }}\n >\n
\n

+

\n
\n

{t(\"add_benefit\")}

\n \n
\n );\n};\n\nBenefitsList.propTypes = {\n openModal: PropTypes.func,\n setBenefit: PropTypes.func,\n chosenBenefitId: PropTypes.number,\n setChosenBenefitId: PropTypes.func,\n chosenBenefitGroupId: PropTypes.number,\n benefits: PropTypes.arrayOf(PropTypes.shape())\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n removeLocalBenefit: (chosenBenefitGroupId, benefitId) =>\n dispatch(\n actionCreators.removeLocalBenefit(chosenBenefitGroupId, benefitId)\n )\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(BenefitsList);\n","import BenefitsList from './BenefitsList'\n\nexport default BenefitsList\n","import styled from \"styled-components\";\n\nconst BenefitDetailsActionsStyles = styled.div`\n width: 100%;\n height: 100%;\n\n .tooltipLink {\n text-decoration: none;\n width: 100%;\n height: 34px;\n }\n\n .button {\n width: 100%;\n height: 34px;\n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 0 16px;\n font-size: 11px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #8f8f8f;\n text-transform: capitalize;\n\n &:hover {\n background: #1568bf;\n color: #fff;\n }\n }\n\n .hr {\n width: 100%;\n border: 0.25px solid #1568bf;\n }\n`;\n\nexport default BenefitDetailsActionsStyles;\n","import React from \"react\";\nimport { toast } from \"react-toastify\";\n\nimport BenefitDetailsActionsStyles from \"./BenefitDetailsActionsStyles\";\n\n// Services\nimport * as providersService from \"../../../../../../services/api/admin/providers.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BenefitDetailsActions = ({\n openEditBenefit,\n benefitId,\n isDraft,\n hideTooltip,\n fetchData\n}) => {\n const { t } = useTranslation();\n\n /**\n * Published drafted benefit.\n * If request fails, returns toast error message.\n * If request is successfull, fires toast message, closes modal & refetches data.\n */\n const publishBenefit = async () => {\n const response = await providersService.publishBenefit(benefitId);\n\n if (response.hasError) {\n return toast.error(t(\"failed_to_publish_benefit\"));\n }\n\n toast.success(t(\"success_publish_benefit\"));\n fetchData();\n };\n\n return (\n \n {isDraft && (\n {\n e.stopPropagation();\n hideTooltip();\n publishBenefit();\n }}\n >\n {t(\"Publish\")}\n \n )}\n {\n e.stopPropagation();\n hideTooltip();\n openEditBenefit();\n }}\n >\n {t(\"Edit\")}\n \n \n );\n};\n\nexport default BenefitDetailsActions;\n","import styled from 'styled-components'\n\nconst BenefitDetailsStyles = styled.div`\n\t.benefitDetailsContet {\n\t\theight: 300px;\n\t\tmin-width: 200px;\n\t}\n\n\t.detailsActionsButton {\n border: 0;\n background-color: white;\n }\n\n\t.titleAndIcons {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tposition: relative;\n\n\t\t.title {\n\t\t\tfont-size: 20px;\n\t\t\tfont-weight: 600;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: normal;\n\t\t\tcolor: #373737;\n\t\t}\n\n\t\t.__react_component_tooltip.type-dark.border {\n padding: 0;\n min-width: 120px;\n border-radius: 5px;\n border: 1px solid #1568bf !important;\n & > div {\n display: flex;\n align-items: center;\n flex-direction: column;\n }\n }\n\t}\n\n\t.description {\n\t\theight: 144px;\n\t\toverflow-y: auto;\n\t\tfont-size: 12px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.83;\n\t\tletter-spacing: normal;\n\t\tcolor: #4b4b4b;\n\t\tmargin: 10px 0;\n\n\t\tul {\n margin-left: 18px;\n }\n ol {\n margin-left: 18px;\n }\n\t}\n\n\t.tokensContainer {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmargin: 30px 0 40px 0;\n\t}\n\n\t.tokens {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\tcolor: #373737;\n\t}\n\n\t.durationContainer {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t.duration {\n\t\tfont-size: 14px;\n\t\tfont-weight: 500;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\tcolor: #373737;\n\t}\n\n\t.durationValue {\n\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\ttext-align: right;\n\t\tcolor: #373737;\n\t\tmargin-left: 10px;\n\t}\n\n\t.draftIndicator {\n display: flex;\n background: #DCDCDC;\n border-radius: 4px;\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-size: 14px;\n color: #737373;\n padding: 5px;\n\t\tposition: absolute;\n right: 25px;\n }\n`\n\nexport default BenefitDetailsStyles\n","import React, { useState, useRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport ReactTooltip from \"react-tooltip\";\nimport { Card } from \"../../../../../components\";\n\n// Services\nimport { truncate } from \"../../../../../services/truncateString\";\n\n// Components\nimport BenefitDetailsActions from \"../../../../SuperAdminPages/Providers/shared/BenefitDetails/BenefitDetailsActions/BenefitDetailsActions\";\n// Icons\nimport { TokenIcon, DotsIcon } from \"../../../../../assets/Icons\";\n\nimport BenefitDetailsStyles from \"./BenefitDetailsStyles\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n transformTokenCurrencyIcons,\n transformTokensToRsd\n} from \"../../../../../utils/transformTokensToRsd\";\n\nconst BenefitDetails = ({\n benefit,\n setChosenBenefitId,\n openModal,\n fetchData\n}) => {\n const { t } = useTranslation();\n const [isActive, setIsActive] = useState(false);\n const myTooltip = useRef();\n\n const onClickDots = () => {\n setIsActive(true);\n ReactTooltip.rebuild();\n };\n\n const handleBlur = () => {\n setIsActive(false);\n ReactTooltip.rebuild();\n };\n\n const openEditBenefit = benefitId => {\n setChosenBenefitId(Number(benefitId));\n openModal(\"editLocalBenefitOfBenefitGroup\");\n };\n\n const isInRSD = localStorage.getItem(\"isValueInRsd\");\n\n return (\n \n {benefit && (\n \n
\n
\n

{truncate(benefit.title, 20)}

\n {benefit.isDraft && (\n {t(\"Draft\")}\n )}\n {\n e.stopPropagation();\n onClickDots();\n }}\n onBlur={() => handleBlur()}\n >\n \n \n (myTooltip.current = ref)}\n className=\"tooltip\"\n getContent={dataTip => {\n if (!dataTip) {\n return \"\";\n }\n\n const [id, draft] = dataTip.split(\"|\");\n\n return (\n openEditBenefit(id)}\n benefitId={id}\n isDraft={JSON.parse(draft)}\n hideTooltip={() => {\n myTooltip.current.tooltipRef = null;\n ReactTooltip.hide();\n }}\n fetchData={fetchData}\n />\n );\n }}\n border\n clickable\n />\n
\n

{benefit.summary}

\n
\n

\n {t(\"Budget\")}:\n

\n

\n {transformTokensToRsd(benefit.tokenPrice)}\n

\n {transformTokenCurrencyIcons()}\n
\n
\n

{t(\"duration_type\")}:

\n

{t(benefit.expiration)}

\n
\n
\n \n )}\n
\n );\n};\n\nBenefitDetails.propTypes = {\n benefit: PropTypes.shape(),\n setChosenBenefitId: PropTypes.func,\n openModal: PropTypes.func\n};\n\nexport default BenefitDetails;\n","import BenefitDetails from './BenefitDetails'\n\nexport default BenefitDetails\n","import React, { useEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n// components\nimport BenefitsList from \"./BenefitsList\";\nimport BenefitDetails from \"./BenefitDetails\";\n// services\nimport {\n removeHeightOnClick,\n removeCardView\n} from \"../BenefitGropRow/benefitGroupRowAnimation.services\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BenefitGroupSubRowStyles = styled.div`\n .subRowContainer {\n padding: 5px 30px 0 30px;\n }\n\n .subRowContentContainer {\n overflow: hidden;\n transition: height 0.3s ease-out, border-width 0.1s linear;\n height: 0;\n position: relative;\n }\n\n .subRowContent {\n display: flex;\n }\n`;\n\nconst BenefitGroupSubRow = ({\n benefitGroup,\n openModal,\n setChosenBenefitId,\n chosenBenefitGroupId,\n chosenBenefitId,\n fetchData\n}) => {\n const { t } = useTranslation();\n const [chosenBenefit, setChosenBenefit] = useState(undefined);\n\n useEffect(() => {\n if (benefitGroup.benefits.length > 0) {\n const findChosenBenefit = benefitGroup.benefits.find(\n benefit => benefit.id === chosenBenefitId\n );\n\n if (findChosenBenefit) {\n setChosenBenefit(findChosenBenefit);\n setChosenBenefitId(findChosenBenefit.id);\n } else {\n setChosenBenefit(benefitGroup.benefits[0]);\n setChosenBenefitId(benefitGroup.benefits[0].id);\n }\n } else {\n setChosenBenefit(undefined);\n setChosenBenefitId(undefined);\n }\n }, [chosenBenefitGroupId, benefitGroup]);\n\n const setBenefit = benefit => {\n setChosenBenefit(benefit);\n };\n return (\n \n
\n \n \n {\n removeHeightOnClick(benefitGroup.id);\n removeCardView(benefitGroup.id);\n document.getElementById(\n `subRowContentContainer${benefitGroup.id}`\n ).style.borderTop = \"\";\n }}\n >\n x\n
\n \n
\n \n
\n {chosenBenefit && (\n \n )}\n
\n
\n
\n
\n \n
\n );\n};\n\nBenefitGroupSubRow.propTypes = {\n benefitGroup: PropTypes.shape(),\n setChosenBenefitId: PropTypes.func,\n openModal: PropTypes.func,\n chosenBenefitGroupId: PropTypes.number,\n chosenBenefitId: PropTypes.number\n};\n\nexport default BenefitGroupSubRow;\n","import BenefitGroupSubRow from './BenefitGroupSubRow'\n\nexport default BenefitGroupSubRow\n","import styled from 'styled-components'\n\nconst LocalBenefitsStyles = styled.section`\n\twidth: calc(100% - 210px);\n\tmargin-left: 210px;\n\tbackground: whitesmoke;\n\tmin-height: 100vh;\n\toverflow-x: hidden;\n\n\t.localBenefitsContent {\n\t\tpadding: 0 30px 30px 30px;\n\t}\n\n\t#localBenefitsList {\n\t\topacity: 0;\n\t\ttransition: all 0.4s ease-in-out;\n\t}\n\n\t.addContainer {\n\t\twidth: 24px;\n height: 24px;\n background: #fff;\n border-radius: 50%;\n color: #373737;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-right: 10px;\n\t}\n\n\t.buttonText {\n\t\tfont-size: 14px;\n font-weight: 500;\n line-height: 24px;\n\t}\n\n\t.localBenefitsList {\n\t\tmargin: 30px 0;\n\t}\n\n\t.cardView {\n\t\t\ttransform: scale(30px);\n\t\t\t/* box-shadow: 2px 2px 20px 0 rgba(0, 0, 0, 0.08);\t */\n\t\t\tbox-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2),\n\t\t\t\t\t0 1px 10px 0 rgba(0, 0, 0, 0.12),\n\t\t\t\t\t0 4px 5px 0 rgba(0, 0, 0, 0.14);\n\t}\n\n\t.chosenBenefit {\n\t\t/* box-shadow: 2px 2px 10px 4px rgba(0, 0, 0, 0.25); */\n\t\t/* box-shadow: 2px 2px 20px 0 rgba(0, 0, 0, 0.08);\t */\n\t\tbox-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 4px 5px 0 rgba(0, 0, 0, 0.14);\n\t}\n`\n\nexport default LocalBenefitsStyles\n","import { BenefitGroup, LocalBenefitGroupForm, Benefit } from '../localBenefits.entity'\n\nconst initialState = {\n\tlocalBenefitGroups: [],\n\tlocalBenefitGroupForm: new LocalBenefitGroupForm(),\n\tlocalBenefit: null\n}\n\nconst actionTypes = {\n\tsetLocalBenefitGroups: 'SET_LOCAL_BENEFIT_GROUPS',\n\taddNewLocalBenefitGroup: 'ADD_NEW_LOCAL_BENEFIT_GROUP',\n\teditLocalBenefitGroup: 'EDIT_LOCAL_BENEFIT_GROUP',\n\tdeleteLocalBenefitGroup: 'DELETE_LOCAL_BENEFIT_GROUP',\n\taddNewLocalBenefitToBenefitGroup: 'ADD_NEW_LOCAL_BENEFIT_TO_LOCAL_BENEFIT_GROUP',\n\teditLocalBenefit: 'EDIT_LOCAL_BENEFIT',\n\tremoveLocalBenefit: 'DELETE_LOCAL_BENEFIT'\n}\n\nconst localBenefitsReducer = (state = initialState, action) => {\n\tswitch (action.type) {\n\t\tcase actionTypes.setLocalBenefitGroups:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tlocalBenefitGroups: action.payload.map(benefitGroup => new BenefitGroup(benefitGroup))\n\t\t\t}\n\t\tcase actionTypes.addNewLocalBenefitGroup:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tlocalBenefitGroups: [...state.localBenefitGroups, new BenefitGroup(action.payload)]\n\t\t\t}\n\t\tcase actionTypes.editLocalBenefitGroup:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tlocalBenefitGroups: state.localBenefitGroups.map(benefitGroup =>\n\t\t\t\t\t(benefitGroup.id === action.chosenId ?\n\t\t\t\t\t\tnew BenefitGroup(action.payload)\n\t\t\t\t\t\t:\n\t\t\t\t\t\tbenefitGroup)\n\t\t\t\t)\n\t\t\t}\n\t\tcase actionTypes.deleteLocalBenefitGroup:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tlocalBenefitGroups: state.localBenefitGroups\n\t\t\t\t\t.filter(benefitGroup => benefitGroup.id !== action.chosenBenefitGroupId)\n\t\t\t}\n\t\tcase actionTypes.addNewLocalBenefitToBenefitGroup:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tlocalBenefitGroups: state.localBenefitGroups.map(benefitGroup =>\n\t\t\t\t\t(benefitGroup.id === action.benefitGroupId ?\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...benefitGroup,\n\t\t\t\t\t\t\tbenefits: [...benefitGroup.benefits, new Benefit(action.payload)]\n\t\t\t\t\t\t}\n\t\t\t\t\t\t:\n\t\t\t\t\t\tbenefitGroup)\n\t\t\t\t)\n\t\t\t}\n\t\tcase actionTypes.editLocalBenefit:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tlocalBenefitGroups: state.localBenefitGroups.map(benefitGroup =>\n\t\t\t\t\t(benefitGroup.id === action.benefitGroupId ?\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...benefitGroup,\n\t\t\t\t\t\t\tbenefits: benefitGroup.benefits.map(benefit =>\n\t\t\t\t\t\t\t\t(benefit.id === action.benefitId ?\n\t\t\t\t\t\t\t\t\tnew Benefit(action.payload)\n\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\tbenefit)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t:\n\t\t\t\t\t\tbenefitGroup)\n\t\t\t\t)\n\t\t\t}\n\t\tcase actionTypes.removeLocalBenefit:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tlocalBenefitGroups: state.localBenefitGroups\n\t\t\t\t\t.map(benefitGroup => (benefitGroup.id === action.benefitGroupId ?\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...benefitGroup,\n\t\t\t\t\t\t\tbenefits: benefitGroup.benefits.filter(benefit => benefit.id !== action.benefitId)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t:\n\t\t\t\t\t\tbenefitGroup)\n\t\t\t\t\t)\n\t\t\t}\n\t\tdefault:\n\t\t\tthrow new Error(`Unknow action type: ${action.type}`)\n\t}\n}\n\nexport { initialState, actionTypes, localBenefitsReducer }\n","import { JpgPhoto } from '../../../services/global.entities';\n\nclass Benefit {\n constructor(benefit = {}) {\n this.id = benefit.id || null;\n this.title = benefit.title || '';\n this.description = benefit.description || '';\n this.expiration = benefit.expiration || '';\n this.tokenPrice = benefit.tokenPrice || 0;\n // this.photo = benefit.Photo ? new JpgPhoto(benefit.Photo) : null;\n this.benefit_group_id = benefit.benefitGroupId || null;\n }\n}\n\nclass LocalBenefitGroupForm {\n constructor(benefitGroupFormData = {}) {\n this.name = benefitGroupFormData.name || '';\n this.description = benefitGroupFormData.description || '';\n this.photo = benefitGroupFormData.Photo\n ? new JpgPhoto(benefitGroupFormData.Photo)\n : undefined;\n }\n}\n\nclass LocalBenefitForm {\n constructor(localBenefitFormData = {}) {\n this.id = localBenefitFormData.id || null;\n this.title = localBenefitFormData.title || '';\n this.description = localBenefitFormData.description || '';\n this.expiration = localBenefitFormData.expiration || '';\n // this.photo = localBenefitFormData.Photo\n // ? new JpgPhoto(localBenefitFormData.Photo)\n // : null;\n this.benefit_group_id = localBenefitFormData.benefitGroupId || null;\n }\n}\n\nclass BenefitGroup {\n constructor(benefitGroupData = {}) {\n this.id = benefitGroupData.id || null;\n this.name = benefitGroupData.name || '';\n this.description = benefitGroupData.description || '';\n this.capacity = benefitGroupData.capacity || parseInt(0, 0);\n this.photo = benefitGroupData.Photo\n ? new JpgPhoto(benefitGroupData.Photo)\n : new JpgPhoto();\n this.benefits = benefitGroupData.Benefit\n ? benefitGroupData.Benefit.map(benefit => new Benefit(benefit))\n : [];\n }\n}\n\nexport { BenefitGroup, LocalBenefitGroupForm, LocalBenefitForm, Benefit };\n","import React, { createContext, useEffect, useReducer } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { initialState, localBenefitsReducer } from './localBenefits.reducer'\nimport { useHrLocalBenefitsActions } from './localBenefits.actions'\n\nconst HrLocalBenefitsContext =\n\tcreateContext({ ...initialState })\n\n\nconst HrLocalBenefitsProvider = ({ children }) => {\n\tconst [localBenefitsState, dispatch] = useReducer(localBenefitsReducer, initialState)\n\tconst localBenefitsActions = useHrLocalBenefitsActions(dispatch)\n\n\tuseEffect(() => () => {}, [initialState])\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t)\n}\n\nHrLocalBenefitsProvider.propTypes = {\n\tchildren: PropTypes.node\n}\n\nexport { HrLocalBenefitsProvider, HrLocalBenefitsContext }\n","import React, { useContext, useState, useEffect, useRef } from \"react\";\nimport { connect } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport { BeatLoader } from \"react-spinners\";\nimport Pagination from \"react-pagination-js\";\n// components\nimport { Header, Card, Button, SearchInput } from \"../../../components\";\nimport {\n FormModal,\n openModalAnim,\n closeModalAnim,\n FormRenderer\n} from \"./shared\";\nimport BenefitGroupRow from \"./BenefitGropRow\";\nimport BenefitGroupSubRow from \"./BenefitGroupSubRow\";\n// styles\nimport LocalBenefitsStyles from \"./LocalBenefitStyles\";\nimport { override } from \"../../../services/loadingOverride.styles\";\n// context\nimport { UserContext } from \"../../../modules/user/context/user.context\";\nimport { HrLocalBenefitsContext } from \"../../../modules/hr/hrLocalBenefits/context/localBenefits.context\";\n// services\nimport * as localBenefitsService from \"../../../services/api/hr/localBenefits.service\";\nimport * as actionCreators from \"../../../actions/hr/localBenefits.actions\";\n// hooks\nimport { useDisableBodyScroll } from \"../../../hooks/useDisableBodyScroll\";\nimport { useTranslation } from \"react-i18next\";\n\nconst LIMIT = 4;\n\nconst LocalBenefits = ({\n setLocalBenefitGroups,\n setLocalBenefitGroupPage,\n localBenefitGroups,\n page,\n count\n}) => {\n const { t } = useTranslation();\n const [isFormModalOpen, setIsFormModalOpen] = useState(false);\n const [modalFormType, setModalFormType] = useState(\"\");\n const [chosenBenefitGroupId, setChosenBenefitGroupId] = useState(undefined);\n const [chosenBenefitId, setChosenBenefitId] = useState(undefined);\n const [keywordSearch, setKeywordSearch] = useState(\"\");\n\n const [isLoading, setIsLoading] = useState(true);\n const isMounted = useRef(true);\n\n useDisableBodyScroll(isFormModalOpen);\n\n const handleSearch = searchText => {\n setKeywordSearch(searchText);\n };\n\n const handleFetchAfterSearch = () => {\n fetchLocalBenefitGroups();\n };\n\n const openModal = type => {\n setIsFormModalOpen(true);\n setModalFormType(type);\n setTimeout(() => {\n openModalAnim();\n }, 100);\n };\n\n const closeModal = () => {\n closeModalAnim();\n setTimeout(() => {\n setIsFormModalOpen(false);\n setModalFormType(\"\");\n }, 600);\n };\n\n const fetchLocalBenefitGroups = async () => {\n const response = await localBenefitsService.getLocalBenefitGroups({\n limit: LIMIT,\n page,\n searchQuery: keywordSearch\n });\n\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n if (isMounted.current) {\n setTimeout(() => {\n setLocalBenefitGroups(response.groups, response.count);\n setIsLoading(false);\n setTimeout(() => {\n const localBenefitsList = document.getElementById(\n \"localBenefitsList\"\n );\n if (isMounted.current && localBenefitsList) {\n localBenefitsList.style.opacity = 1;\n }\n }, 100);\n }, 100);\n }\n };\n\n useEffect(() => {\n fetchLocalBenefitGroups();\n }, [page]);\n\n useEffect(() => {\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return (\n \n
\n\n
\n {isLoading ? (\n \n \n
\n ) : (\n \n \n openModal(\"addLocalBenefitGroup\")}\n >\n
\n

+

\n
\n

{t(\"add_local_benefit_groups\")}

\n \n \n \n\n {localBenefitGroups && localBenefitGroups.length > 0 && (\n
\n {localBenefitGroups.map(benefitGroup => (\n \n \n \n ))}\n
\n )}\n\n \n setLocalBenefitGroupPage(page)}\n theme=\"border-bottom\"\n />\n \n
\n )}\n \n {isFormModalOpen && (\n \n \n \n )}\n \n );\n};\n\nconst mapStateToProps = state => {\n return {\n localBenefitGroups: state.localBenefits.localBenefitGroups,\n page: state.localBenefits.page,\n count: state.localBenefits.count\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setLocalBenefitGroups: (benefitGroups, count) =>\n dispatch(actionCreators.setLocalBenefitGroups(benefitGroups, count)),\n setLocalBenefitGroupPage: page =>\n dispatch(actionCreators.setLocalBenefitGroupPage(page))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(LocalBenefits);\n","import LocalBenefit from './LocalBenefit'\n\nexport default LocalBenefit\n","import { apiService } from \"../api.service\";\nimport { LogsResponse } from \"../../../models/server/responses\";\nimport { isEmpty } from \"../../general.utils\";\n\nexport const getLogs = async ({\n dateQuery,\n limit,\n page,\n searchText,\n companyIds,\n roleIds\n}) => {\n let queryParams = \"\";\n let companiesQuery = \"\";\n let rolesQuery = \"\";\n\n if (dateQuery) {\n queryParams += `date=${dateQuery}&order=created desc&`;\n }\n\n if (limit) {\n queryParams += `limit=${limit}`;\n }\n\n if (page) {\n queryParams += `${!isEmpty(queryParams) ? \"&\" : \"\"}page=${\n searchText !== \"\" ? 1 : page\n }`;\n }\n\n if (!isEmpty(companyIds) && Array.isArray(companyIds)) {\n companiesQuery = companyIds.reduce(\n (query, company) =>\n `${!isEmpty(query) ? `${query}&` : \"\"}company_id=${company}`,\n \"\"\n );\n }\n\n if (!isEmpty(roleIds) && Array.isArray(roleIds)) {\n rolesQuery = roleIds.reduce(\n (query, role) => `${!isEmpty(query) ? `${query}&` : \"\"}role_id=${role}`,\n \"\"\n );\n }\n\n if (!isEmpty(companiesQuery)) {\n queryParams += `${!isEmpty(queryParams) ? \"&\" : null}${companiesQuery}`;\n }\n\n if (!isEmpty(rolesQuery)) {\n queryParams += `${!isEmpty(queryParams) ? \"&\" : null}${rolesQuery}`;\n }\n\n if (searchText !== \"\") queryParams += `&search=${searchText}`;\n\n const response = await apiService.get(\n `/dashboard/log-activity?${queryParams}`\n );\n\n if (response.hasError) {\n return response;\n }\n\n return new LogsResponse(response);\n};\n","import React, {\n useEffect,\n useState,\n useContext,\n useRef,\n useCallback\n} from \"react\";\nimport { toast } from \"react-toastify\";\nimport { BeatLoader } from \"react-spinners\";\nimport DatePicker from \"react-datepicker\";\n// assets\nimport ActivityLog from \"../../../assets/images/activity-log.png\";\n// components\nimport {\n Header,\n Card,\n SearchInput,\n MultiselectInput\n // IntitialsCircle\n} from \"../../../components\";\n// styles\nimport { override } from \"../../../services/loadingOverride.styles\";\nimport ActivityStyles from \"./ActivityStyles\";\n// services\nimport * as activityService from \"../../../services/api/admin/activity.service\";\nimport * as api from \"../../../services/api/admin/users.service\";\nimport { isEmpty } from \"../../../services/general.utils\";\n//utils\nimport {\n formatDateForPlaceholder,\n formatDateForSearch\n} from \"../../../services/date.utils\";\nimport debounce from \"../../../utils/helpers/debounce\";\n// consts\nconst initalDate = new Date();\nconst initalSearchDateString = formatDateForSearch(initalDate);\nconst LIMIT = 20;\nimport { useTranslation } from \"react-i18next\";\n\nconst Activity = () => {\n const { t } = useTranslation();\n const [logs, setLogs] = useState([]);\n const [isLoading, setIsLoading] = useState(true);\n const [date, setDate] = useState(initalDate);\n const [pageNumber, setPageNumber] = useState(1);\n const [totalPages, setTotalPages] = useState(1);\n const [searchDateString, setSearchDateString] = useState(\n initalSearchDateString\n );\n const [isNextDayDisabled, setIsNextDayDisabled] = useState(false);\n const [companies, setCompanies] = useState([]);\n const [chosenCompanies, setChosenCompanies] = useState([]);\n const [chosenCompanyIds, setChosenCompanyIds] = useState([]);\n const [companiesPage, setCompaniesPage] = useState(1);\n const [totalCompaniesPages, setTotalCompaniesPages] = useState(1);\n const [roles, setRoles] = useState([]);\n const [chosenRoles, setChosenRoles] = useState([]);\n const [chosenRoleIds, setChosenRoleIds] = useState([]);\n const [keywordSearch, setKeywordSearch] = useState(\"\");\n\n const isMounted = useRef(true);\n const observer = useRef();\n const areFiltersLoaded = useRef(false);\n const lastActivityLogRef = useCallback(\n node => {\n if (observer.current) observer.current.disconnect();\n observer.current = new IntersectionObserver(entries => {\n if (entries[0].isIntersecting && pageNumber < totalPages) {\n setPageNumber(prevPageNumber => prevPageNumber + 1);\n }\n });\n if (node) observer.current.observe(node);\n },\n [pageNumber, totalPages]\n );\n\n const toggleDisableNextDayButton = (date, setIsNextDayDisabled) => {\n if (date.setHours(0, 0, 0, 0) >= new Date().setHours(0, 0, 0, 0)) {\n setIsNextDayDisabled(true);\n } else {\n setIsNextDayDisabled(false);\n }\n };\n\n const fetchFilters = async () => {\n await fetchCompanies();\n await fetchRoles();\n\n areFiltersLoaded.current = true;\n };\n\n const fetchCompanies = async () => {\n const response = await api.getCompanyOptions(companiesPage);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n setCompanies(response.companies);\n setTotalCompaniesPages(response.pages);\n };\n\n /**\n * Refetches paginated companies.\n * Fired from on scroll event from select input.\n * Sets new companies to state, along with page number.\n */\n const refetchCompanies = async () => {\n let currentPage = companiesPage;\n let newPage = (currentPage += 1);\n\n if (newPage > totalCompaniesPages) return;\n\n setCompaniesPage(newPage);\n\n const response = await api.getCompanyOptions(newPage);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n let newCompanies = [];\n setTimeout(() => {\n newCompanies = [...companies, ...response.companies];\n setTimeout(() => {\n setCompanies(newCompanies);\n }, 100);\n }, 100);\n };\n\n const fetchRoles = async () => {\n const response = await api.getRolesForDropdown();\n if (response.hasError) {\n return toast.error(\n response.errorMessage ? response.errorMessage : t(\"failed_to_get_roles\")\n );\n }\n\n setRoles(response);\n };\n\n /**\n * Handles select of element from multiselect.\n * Sets selected elements' ids to state.\n * @param {Company} options - Selected options, emmited from multiselect.\n */\n const handleSetChosenCompanies = options => {\n let selectedCompanyIds = [];\n\n if (options && options.length) {\n selectedCompanyIds = options.map(category => category.id);\n }\n\n setChosenCompanies(options);\n setChosenCompanyIds(selectedCompanyIds);\n };\n\n /**\n * Handles select of element from multiselect.\n * Sets selected elements' ids to state.\n * @param {UserRole} options - Selected options, emmited from multiselect.\n */\n const handleSetChosenRoles = options => {\n let selectedRoleIds = [];\n\n if (options && options.length) {\n selectedRoleIds = options.map(role => role.id);\n }\n\n setChosenRoles(options);\n setChosenRoleIds(selectedRoleIds);\n };\n\n const handleDateChange = chosenDate => {\n setDate(chosenDate);\n setSearchDateString(formatDateForSearch(chosenDate));\n };\n\n const nextDay = () => {\n const incrementedDay = new Date(date.setDate(date.getDate() + 1));\n setDate(incrementedDay);\n setSearchDateString(formatDateForSearch(incrementedDay));\n };\n\n const prevDay = () => {\n const decrementedDate = new Date(date.setDate(date.getDate() - 1));\n setDate(decrementedDate);\n setSearchDateString(formatDateForSearch(decrementedDate));\n };\n\n const handleFetchAfterSearch = search => {\n setKeywordSearch(search);\n fetchLogs(undefined, undefined, undefined, undefined, search);\n };\n\n const debouncedSearch = debounce(handleFetchAfterSearch, 500);\n\n const fetchLogs = async (\n dateQuery = searchDateString,\n page = pageNumber,\n companyIds = chosenCompanyIds,\n roleIds = chosenRoleIds,\n searchText = keywordSearch\n ) => {\n const response = await activityService.getLogs({\n page,\n limit: LIMIT,\n companyIds,\n roleIds,\n dateQuery,\n searchText\n });\n\n if (response && isMounted.current) {\n setLogs(response.logs);\n setTotalPages(response.pages);\n setIsLoading(false);\n setTimeout(() => {\n const logsCard = document.getElementById(\"logsCard\");\n if (logsCard && isMounted.current) {\n logsCard.style.opacity = 1;\n }\n }, 100);\n }\n };\n\n const fetchAditionalLogs = async (\n page = pageNumber,\n companyIds = chosenCompanyIds,\n roleIds = chosenRoleIds,\n searchText = keywordSearch,\n dateQuery = searchDateString\n ) => {\n const dto = {\n page,\n limit: LIMIT,\n companyIds,\n roleIds,\n dateQuery,\n searchText\n };\n const response = await activityService.getLogs(dto);\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_additional_logs\")\n );\n }\n\n setLogs(prevLogs => [...prevLogs, ...response.logs]);\n };\n\n const renderLog = log => {\n if (isEmpty(log.user.roles)) {\n if (log.model === \"\") {\n return log.user.company.id !== null\n ? `${log.user.firstName} ${log.user.lastName} (${\n log.user.company.name\n }) ${log.action}. ${\n !isEmpty(log.description)\n ? ` Changed fields: ${log.description}.`\n : \"\"\n } `\n : `${log.user.firstName} ${log.user.lastName} ${log.action}. ${\n !isEmpty(log.description)\n ? ` Changed fields: ${log.description}.`\n : \"\"\n }`;\n }\n\n return log.user.company.id !== null\n ? `${log.user.firstName} ${log.user.lastName} (${\n log.user.company.name\n }) ${log.action} ${log.model}. ${\n !isEmpty(log.description)\n ? ` Changed fields: ${log.description}.`\n : \"\"\n }`\n : `${log.user.firstName} ${log.user.lastName} ${log.action} ${\n log.model\n }. ${\n !isEmpty(log.description)\n ? ` Changed fields: ${log.description}.`\n : \"\"\n }`;\n }\n\n if (log.model === \"\") {\n return log.user.company.id !== null\n ? `${log.user.firstName} ${log.user.lastName} (${log.user.roles\n .map(role => role.name)\n .join(\", \")}, ${log.user.company.name}) ${log.action}. ${\n !isEmpty(log.description)\n ? ` Changed fields: ${log.description}.`\n : \"\"\n }`\n : `${log.user.firstName} ${log.user.lastName} (${log.user.roles\n .map(role => role.name)\n .join(\", \")}) ${log.action}. ${\n !isEmpty(log.description)\n ? ` Changed fields: ${log.description}.`\n : \"\"\n }`;\n }\n\n return log.user.company.id !== null\n ? `${log.user.firstName} ${log.user.lastName} (${log.user.roles\n .map(role => role.name)\n .join(\", \")}, ${log.user.company.name}) ${log.action} ${\n log.model\n }. ${\n !isEmpty(log.description)\n ? ` Changed fields: ${log.description}.`\n : \"\"\n }`\n : `${log.user.firstName} ${log.user.lastName} (${log.user.roles\n .map(role => role.name)\n .join(\", \")}) ${log.action} ${log.model}. ${\n !isEmpty(log.description)\n ? ` Changed fields: ${log.description}.`\n : \"\"\n }`;\n };\n\n useEffect(() => {\n fetchAditionalLogs();\n }, [pageNumber]);\n\n useEffect(() => {\n setPageNumber(1);\n fetchLogs();\n fetchFilters();\n toggleDisableNextDayButton(date, setIsNextDayDisabled);\n }, [date]);\n\n useEffect(() => {\n if (areFiltersLoaded.current === true) fetchLogs();\n }, [chosenCompanyIds, chosenRoleIds]);\n\n useEffect(() => {\n if (isLoading === false) {\n const datePicker = document.getElementById(\"datePicker\");\n datePicker.setAttribute(\"readOnly\", true);\n }\n }, [isLoading]);\n\n useEffect(\n () => () => {\n isMounted.current = false;\n },\n []\n );\n\n return (\n \n
\n
\n
\n {isLoading ? (\n \n \n
\n ) : (\n \n
\n \n
\n handleSetChosenCompanies(option)}\n selectedValues={chosenCompanies}\n fetchMoreData={refetchCompanies}\n />\n
\n
\n handleSetChosenRoles(option)}\n selectedValues={chosenRoles}\n />\n
\n
\n \n
\n
\n
\n prevDay()}\n >\n {t(\"prev_day\")}\n \n handleDateChange(chosenDate)}\n required\n maxDate={new Date()}\n value={date}\n />\n nextDay()}\n >\n {t(\"next_day\")}\n \n
\n
\n
\n {logs.length > 0 ? (\n
\n
\n
\n {logs.map((log, index) => {\n if (logs.length === index + 1) {\n return (\n \n
\n

\n {`${`0${log.createdAt.getHours()}`.slice(\n -2\n )}:${`0${log.createdAt.getMinutes()}`.slice(\n -2\n )}`}\n

\n
\n
\n
\n
\n
\n

{renderLog(log)}

\n
\n
\n );\n }\n return (\n
\n
\n

\n {`${`0${log.createdAt.getHours()}`.slice(\n -2\n )}:${`0${log.createdAt.getMinutes()}`.slice(\n -2\n )}`}\n

\n
\n
\n
\n
\n
\n

{renderLog(log)}

\n
\n
\n );\n })}\n
\n
\n
\n ) : (\n \n \"activity\n

\n {t(\"no_activity_logs\")}\n {formatDateForPlaceholder(date)}\n

\n
\n )}\n
\n \n )}\n \n \n
\n );\n};\n\nexport default Activity;\n","import styled from 'styled-components'\n\nconst ProviderRowStyles = styled.div`\n\tborder-bottom: 1px solid #d8d8d8;\n\t\t&:hover {\n\t\t\t\ttransform: scale(30px);\n\t\t\t\tbox-shadow: 2px 2px 10px 4px rgba(0, 0, 0, 0.25);\n\t\t}\n\n\t\t.providersRowContainer {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: space-between;\n\t\t\tborder-top: 1px solid #d8d8d8;\n\t\t\tpadding: 30px;\n\t\t\tmargin-top: -1px;\n\t\t\tcursor: pointer;\n\t\t}\n\t\t\n\n\t\t.imgAndTitle {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\n\t\t\t.imgContainer {\n\t\t\t\tmin-height: 90px;\n\t\t\t\tmin-width: 90px;\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tbackground: #1568bf;\n\t\t\t\tmargin-right: 20px;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t}\n\n\t\t\t.providerNameAndCategory {\n\t\t\t\t.providerName {\n\t\t\t\t\tfont-size: 20px;\n\t\t\t\t\tfont-weight: 600;\n\t\t\t\t\tfont-stretch: normal;\n\t\t\t\t\tfont-style: normal;\n\t\t\t\t\tline-height: normal;\n\t\t\t\t\tletter-spacing: normal;\n\t\t\t\t\tcolor: #373737;\n\t\t\t\t\tmargin: 0 0 5px 0;\n\t\t\t\t}\n\n\t\t\t\t.category {\n\t\t\t\t\tfont-size: 16px;\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\tfont-stretch: normal;\n\t\t\t\t\tfont-style: normal;\n\t\t\t\t\tline-height: normal;\n\t\t\t\t\tletter-spacing: normal;\n\t\t\t\t\tcolor: #373737;\n\t\t\t\t\ttext-transform: capitalize;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.rightSideContainer {\n\t\t\twidth: 100px;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: space-between;\n\t\t}\n\n\t\t/* .status {\n\t\t\twidth: 100px;\n\t\t\theight: 30px;\n\t\t\tborder-radius: 12.5px;\n\t\t\tborder: solid 1px ${({ status }) => {\n\t\tswitch (status) {\n\t\t\tcase 'active':\n\t\t\t\treturn\t'#41c264;'\n\t\t\tcase 'disabled':\n\t\t\t\treturn '#e80000;'\n\t\t\tdefault:\n\t\t\t\tbreak\n\t\t}\n\t}};\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 500;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: normal;\n\t\t\tcolor: ${({ status }) => {\n\t\tswitch (status) {\n\t\t\tcase 'active':\n\t\t\t\treturn '#41c264'\n\t\t\tcase 'disabled':\n\t\t\t\treturn '#e80000'\n\t\t\tdefault:\n\t\t\t\tbreak\n\t\t}\n\t}};\n\t\t\ttext-transform: capitalize;\n\t\t}\n\n\t\t.reviewsText {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 300;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: normal;\n\t\t\tcolor: #373737;\n\t\t}\n\t\n\t\t\t.usersContianer {\n\t\t\t\twidth: 91px;\n\n\t\t\t\t.userNumber {\n\t\t\t\t\tfont-size: 20px;\n\t\t\t\t\tfont-weight: 500;\n\t\t\t\t\tfont-stretch: normal;\n\t\t\t\t\tfont-style: normal;\n\t\t\t\t\tline-height: normal;\n\t\t\t\t\tletter-spacing: normal;\n\t\t\t\t\tcolor: #373737;\n\t\t\t\t\theight: 25px;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\talign-items: center;\n\n\t\t\t\t.newUsers {\n\t\t\t\t\tcolor: #41c264;\n\t\t\t\t\tpadding-left: 5px;\n\t\t\t\t\theight: 25px;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\talign-items: center;\n\n\t\t\t\t\t.arrow {\n\t\t\t\t\t\tfont-size: 23px;\n\t\t\t\t\t\theight: 25px;\n\t\t\t\t\t\tline-height: 25px;\n\t\t\t\t\t\tmargin-bottom: 3px;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t.leftUsers {\n\t\t\t\t\tcolor: #e80000;\t\n\t\t\t\t\tpadding-left: 5px;\n\t\t\t\t\theight: 25px;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\talign-items: center;\n\n\t\t\t\t\t.arrow {\n\t\t\t\t\t\tfont-size: 23px;\n\t\t\t\t\t\theight: 25px;\n\t\t\t\t\t\tline-height: 25px;\n\t\t\t\t\t\tmargin-bottom: 3px;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\n\t\t\t.label {\n\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\tfont-weight: 300;\n\t\t\t\t\tfont-stretch: normal;\n\t\t\t\t\tfont-style: normal;\n\t\t\t\t\tline-height: normal;\n\t\t\t\t\tletter-spacing: normal;\n\t\t\t\t\tcolor: #373737;\n\t\t\t\t}\t\n\t\t}\t */\n`\n\nexport default ProviderRowStyles\n","export const SET_INITAL_PROVIDERS = \"SET_INITAL_PROVIDERS\";\nexport const SET_PROVIDERS_PAGE = \"SET_PROVIDERS_PAGE\";\nexport const SET_PROVIDERS_SEARCH = \"SET_PROVIDERS_SEARCH\";\nexport const ADD_PROVIDER = \"ADD_PROVIDER\";\nexport const EDIT_PROVIDER = \"EDIT_PROVIDER\";\nexport const REMOVE_PROVIDER = \"REMOVE_PROVIDER\";\nexport const ADD_BENEFIT_GROUP = \"PROVIDERS_ADD_BENEFIT_GROUP\";\nexport const EDIT_BENEFIT_GROUP = \"PROVIDERS_EDIT_BENEFIT_GROUP\";\nexport const REMOVE_BENEFIT_GROUP = \"PROVIDERS_REMOVE_BENEFIT_GROUP\";\nexport const ADD_BENEFIT = \"PROVIDERS_ADD_BENEFIT\";\nexport const EDIT_BENEFIT = \"PROVIDERS_EDIT_BENEFIT\";\nexport const REMOVE_BENEFIT = \"PROVIDERS_REMOVE_BENEFIT\";\n","// This is the important part!\n\nconst collapseSection = (element) => {\n\tconst sectionHeight = element.scrollHeight\n\tconst elementTransition = element.style.transition\n\telement.style.transition = ''\n\trequestAnimationFrame(() => {\n\t\telement.style.height = `${sectionHeight}px`\n\t\telement.style.transition = elementTransition\n\t\trequestAnimationFrame(() => {\n\t\t\telement.style.height = `${0}px`\n\t\t\telement.style.borderTop = '0px solid #d8d8d8'\n\t\t})\n\t})\n}\n\nconst expandSection = (element) => {\n\tconst allElemements = document.getElementsByClassName('testDiv')\n\tconst rows = document.getElementsByClassName('row')\n\tfor (let i = 0; i < allElemements.length; i++) {\n\t\tallElemements[i].style.height = '0px'\n\t\tallElemements[i].style.borderTop = '0px solid #d8d8d8'\n\t}\n\n\tfor (let i = 0; i < rows.length; i++) {\n\t\tif (rows[i].classList.contains('cardView')) {\n\t\t\trows[i].classList.remove('cardView')\n\t\t}\n\t}\n\n\tconst sectionHeight = element.scrollHeight\n\telement.style.height = `${sectionHeight}px`\n\telement.style.borderTop = '1px solid #d8d8d8'\n}\n\nconst addCardView = (index) => {\n\tconst row = document.getElementById(`providerRow${index}`)\n\tif (row) {\n\t\trow.classList.add('cardView')\n\t}\n}\n\nconst removeCardView = (index) => {\n\tconst row = document.getElementById(`providerRow${index}`)\n\tif (row && row.classList.contains('cardView')) {\n\t\trow.classList.remove('cardView')\n\t}\n}\n\nconst addHeightOnClick = (element) => {\n\texpandSection(document.getElementById(`test${element}`))\n}\n\nconst removeHeightOnClick = (element) => {\n\tcollapseSection(document.getElementById(`test${element}`))\n}\n\nexport { removeCardView, addCardView, addHeightOnClick, removeHeightOnClick, collapseSection }\n","import React, { useContext } from \"react\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\n// import StarRatings from 'react-star-ratings'\n// assets\nimport { TrashIcon, EditIconSvg } from \"../../../../assets/Icons\";\n// styles\nimport ProviderRowStyles from \"./ProviderRowStyles\";\n// services\nimport * as providerService from \"../../../../services/api/admin/providers.service\";\nimport * as actionCreators from \"../../../../actions/admin/providers.actions\";\nimport { addHeightOnClick, addCardView } from \"../providersAnimations\";\nimport { getUrl } from \"../../../../services/imageHandler\";\n// context\nimport { useTranslation } from \"react-i18next\";\n\nconst ProviderRow = ({\n provider,\n children,\n openModal,\n setChosenProvider,\n setChosenBenefitGroup,\n setChosenBenefit,\n removeProvider\n}) => {\n const { t } = useTranslation();\n\n return (\n \n {\n setChosenProvider();\n if (provider.benefitGroups.length > 0) {\n setChosenBenefitGroup(provider.benefitGroups[0].id);\n if (provider.benefitGroups[0].benefits.length > 0) {\n setChosenBenefit(provider.benefitGroups[0].benefits[0].id);\n } else {\n setChosenBenefit(null);\n }\n } else {\n setChosenBenefitGroup(null);\n setChosenBenefit(null);\n }\n addHeightOnClick(provider.id);\n addCardView(provider.id);\n }}\n >\n
\n
\n \n
\n
\n

{provider.name}

\n {/*

{provider.category}

*/}\n
\n
\n\n
\n {\n e.stopPropagation();\n setChosenProvider();\n openModal(\"editProvider\");\n }}\n >\n \n
\n {\n e.stopPropagation();\n if (provider.benefitGroups.length > 0) {\n toast.info(t(\"provider_delete_info\"));\n } else {\n const result = confirm(t(\"proved_delete_question\"));\n if (result) {\n const response = await providerService.deleteProvider(\n provider.id\n );\n\n if (response.hasError) {\n return toast.error(response.error.data.error.messagee);\n }\n\n removeProvider(provider.id);\n }\n }\n }}\n >\n \n \n \n \n {children}\n \n );\n};\n\nProviderRow.propTypes = {\n provider: PropTypes.shape(),\n children: PropTypes.node,\n // openSubRow: PropTypes.func,\n // index: PropTypes.number,\n openModal: PropTypes.func,\n setChosenProvider: PropTypes.func,\n // deleteProvider: PropTypes.func,\n setChosenBenefitGroup: PropTypes.func,\n setChosenBenefit: PropTypes.func\n // chosenBenefitGroupId: PropTypes.number\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n removeProvider: id => dispatch(actionCreators.removeProvider(id))\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(ProviderRow);\n","import { BenefitGroup, Provider, Benefit } from \"../../models/domain\";\nimport * as actionTypes from \"../../constants/actionTypes/admin/providers.constants\";\nimport * as modelMapperService from \"../../models/modelMapper.service\";\n\nexport const setInitProviders = (providers, count) => {\n providers = modelMapperService.mapManyToDomain(providers, Provider);\n return { type: actionTypes.SET_INITAL_PROVIDERS, providers, count };\n};\n\nexport const setProvidersPage = page => {\n return { type: actionTypes.SET_PROVIDERS_PAGE, page };\n};\n\nexport const setProvidersSearch = search => {\n return { type: actionTypes.SET_PROVIDERS_SEARCH, search };\n};\n\nexport const editProvider = provider => {\n provider = modelMapperService.mapOneToDomain(provider, Provider);\n return { type: actionTypes.EDIT_PROVIDER, provider };\n};\n\nexport const removeProvider = id => {\n return { type: actionTypes.REMOVE_PROVIDER, id };\n};\n\nexport const addBenefitGroup = (providerId, benefitGroup) => {\n benefitGroup = modelMapperService.mapOneToDomain(benefitGroup, BenefitGroup);\n return { type: actionTypes.ADD_BENEFIT_GROUP, providerId, benefitGroup };\n};\n\nexport const editBenefitGroup = (providerId, benefitGroup) => {\n benefitGroup = modelMapperService.mapOneToDomain(benefitGroup, BenefitGroup);\n return { type: actionTypes.EDIT_BENEFIT_GROUP, providerId, benefitGroup };\n};\n\nexport const deleteBenefitGroup = (providerId, benefitGroupId) => {\n return { type: actionTypes.REMOVE_BENEFIT_GROUP, providerId, benefitGroupId };\n};\n\nexport const addBenefit = (providerId, benefitGroupId, benefit) => {\n benefit = modelMapperService.mapOneToDomain(benefit, Benefit);\n return { type: actionTypes.ADD_BENEFIT, providerId, benefitGroupId, benefit };\n};\n\nexport const editBenefit = (providerId, benefitGroupId, benefit) => {\n benefit = modelMapperService.mapOneToDomain(benefit, Benefit);\n return {\n type: actionTypes.EDIT_BENEFIT,\n providerId,\n benefitGroupId,\n benefit\n };\n};\n\nexport const deleteBenefit = (providerId, benefitGroupId, benefitId) => {\n return {\n type: actionTypes.REMOVE_BENEFIT,\n providerId,\n benefitGroupId,\n benefitId\n };\n};\n","import styled from \"styled-components\";\n\nconst ProviderToggleButtonComponentStyles = styled.div`\n display: flex;\n align-items: center;\n\n .activationCheckBox {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 25px;\n border-radius: 16px;\n border: 2px solid;\n border-color: ${({ isActive }) => {\n if (isActive) {\n return \"#41c264\";\n }\n return \"#ce1212\";\n }};\n padding: 5px;\n margin-right: 8px;\n position: relative;\n }\n\n .dot {\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: ${({ isActive }) => {\n if (isActive) {\n return \"#41c264\";\n }\n return \"#ce1212\";\n }};\n cursor: pointer;\n }\n\n .activityOnText {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #41c264;\n }\n\n .activationOffText {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #ce1212;\n }\n\n .benefitActivityStatusText {\n font-size: 16px;\n font-weight: 500;\n width: 209px;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n }\n`;\n\nexport default ProviderToggleButtonComponentStyles;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport ProviderToggleButtonComponentStyles from \"./ProviderToggleButton.styles\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ToggleButton = ({ isActive, onToggle }) => {\n const { t } = useTranslation();\n return (\n \n
\n {isActive &&

{t(\"on\")}

}\n
\n {!isActive &&

{t(\"off\")}

}\n
\n {isActive ? (\n

{t(\"provider_enabled\")}

\n ) : (\n

{t(\"provider_disabled\")}

\n )}\n \n );\n};\n\nToggleButton.propTypes = {\n isActive: PropTypes.bool,\n onToggle: PropTypes.func\n};\n\nexport default ToggleButton;\n","import ToggleButton from \"./ToggleButton\";\n\nexport default ToggleButton;\n","import styled from 'styled-components'\n\nconst ProviderFormStyles = styled.div`\n\n\t.labelStyles {\n\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.71;\n\t\tletter-spacing: -0.23px;\n\t\tcolor: #373737;\n\t} \n\n\t.inputStyles {\n\t\theight: 46px;\n\t\tborder-radius: 4px;\n\t\tborder: solid 1px #d5dbdd;\n\t\tbackground-color: #ffffff;\n\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.71;\n\t\tletter-spacing: -0.23px;\n\t\tcolor: #373737;\n\t}\n\n\t.summaryContainer {\n\t\twidth: 100%;\n\t\tmargin: 10px 0;\n\n\t\t.descriptionInput {\n\t\t\twidth: 100%;\n\t\t\tmin-width: 100%;\n\t\t\tmax-width: 100%;\n\t\t\theight: 100px;\n\t\t\toverflow-y: auto;\n\t\t\tmin-height: 100px;\n\t\t\tmax-height: 100px;\n\t\t\tborder-radius: 4px;\n\t\t\tborder: solid 1px #d5dbdd;\n\t\t\tbackground-color: #ffffff;\n\t\t\tpadding: 12px 14px;\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: 1.71;\n\t\t\tletter-spacing: -0.23px;\n\t\t\tcolor: #373737;\n\t\t\toutline: none;\n\t\t\tresize: none;\n\t\t}\n\t}\n\n\t.descriptionContainer {\n\t\twidth: 100%;\n\t\tmargin: 10px 0;\n\n\t\t.rdw-editor-wrapper {\n\t\t\t.rdw-editor-toolbar {\n\t\t\t\t.rdw-emoji-wrapper {\n\t\t\t\t\t.rdw-emoji-modal {\n\t\t\t\t\t\tleft: -20px !important;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t\t.rdw-link-wrapper {\n\t\t\t\t\t.rdw-link-modal {\n\t\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\t\t.rdw-link-modal-label {\n\t\t\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t.rdw-editor-main {\n\t\t\t\twidth: 100%;\n\t\t\t\tmin-width: 100%;\n\t\t\t\tmax-width: 100%;\n\t\t\t\theight: 150px;\n\t\t\t\toverflow-y: auto;\n\t\t\t\tmin-height: 150px;\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tborder: solid 1px #d5dbdd;\n\t\t\t\tbackground-color: #ffffff;\n\t\t\t\tpadding: 12px 14px;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tfont-stretch: normal;\n\t\t\t\tfont-style: normal;\n\t\t\t\tline-height: 1.71;\n\t\t\t\tletter-spacing: -0.23px;\n\t\t\t\tcolor: #373737;\n\t\t\t\toutline: none;\n\t\t\t\tresize: none;\n\t\t\t\t.DraftEditor-root {\n\t\t\t\t\tz-index: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n`\n\nexport default ProviderFormStyles\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Editor } from \"react-draft-wysiwyg\";\nimport \"react-draft-wysiwyg/dist/react-draft-wysiwyg.css\";\n// components\nimport {\n Input,\n InputLabel,\n TextAndLine,\n MyDropZone,\n Button\n} from \"../../../../../../components\";\nimport ToggleButton from \"./toggleButton\";\n// styles\nimport ProviderFormStyles from \"./ProviderFormStyles\";\n// Utils\nimport { convertStringToEditorState } from \"../../../../../../services/textEditor.utils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ProviderForm = ({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n buttonText,\n setFieldTouched,\n setFieldValue,\n closeModal,\n disableButton\n}) => {\n const { t } = useTranslation();\n const toggleIsActive = () => {\n const enabledStatus = !values.isActive;\n setFieldValue(\"isActive\", enabledStatus);\n };\n\n return (\n \n \n
\n
\n \n \n
\n {errors.name && touched.name ? errors.name : \"\"}\n
\n
\n \n
\n
\n \n \n
\n {errors.summary && touched.summary ? errors.summary : \"\"}\n
\n
\n \n
\n
\n \n \n
\n {errors.description && touched.description\n ? errors.description\n : \"\"}\n
\n
\n {\n setFieldTouched(\"description\", true);\n }}\n editorState={convertStringToEditorState(values.description)}\n editorStyle={{\n fontSize: 14\n }}\n stripPastedStyles={true}\n onEditorStateChange={editorState =>\n setFieldValue(\"description\", editorState)\n }\n toolbar={{\n options: [\n \"inline\",\n \"fontSize\",\n \"list\",\n \"textAlign\",\n \"colorPicker\",\n \"link\",\n \"emoji\",\n \"remove\",\n \"history\"\n ],\n fontSize: {\n options: [10, 11, 12, 13, 14, 16, 18]\n }\n }}\n />\n \n \n \n
\n \n \n
\n {errors.photo && touched.photo ? errors.photo : \"\"}\n
\n
\n \n \n
\n \n
\n
\n {disableButton ? (\n \n ) : (\n \n )}\n closeModal()}\n margin=\"0 0 0 0\"\n outline\n >\n {t(\"cancel\")}\n \n
\n \n );\n};\n\nProviderForm.propTypes = {\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n handleChange: PropTypes.func,\n handleBlur: PropTypes.func,\n setFieldValue: PropTypes.func,\n touched: PropTypes.shape(),\n setFieldTouched: PropTypes.func,\n buttonText: PropTypes.string,\n closeModal: PropTypes.func,\n disableButton: PropTypes.bool\n};\n\nexport default ProviderForm;\n","import styled from 'styled-components'\n\nconst AddProviderStyles = styled.div`\n\t.title {\n\t\twidth: 100%;\n\t\tfont-size: 24px;\n\t\tfont-weight: 600;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\tcolor: #4b4b4b;\n\t\tmargin: 30px 0;\n\t}\n\n\t.form {\n\t\twidth: 481px;\n\t\theight: calc(100vh - 120px);\t\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t}\n`\n\nexport default AddProviderStyles\n","import { convertEditorStateToString } from \"../textEditor.utils\";\nimport { removeSpacesAndHTML } from \"../general.utils\";\nimport { findLocales } from \"../../utils/helpers/findLocales\";\n\nexport const validateProviderForm = ({ name, description, photo, summary }) => {\n const errors = {};\n\n const isInLanguage = findLocales(\"rs\");\n\n if (!name.trim()) {\n errors.name = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (removeSpacesAndHTML(name).length > 40) {\n errors.name = isInLanguage ? \"Predugačko\" : \"Too long\";\n } else if (!removeSpacesAndHTML(name)) {\n errors.name = isInLanguage\n ? \"HTML tag nije dozvoljen\"\n : \"HTML tag is not allowed\";\n }\n\n const descriptionString = convertEditorStateToString(description);\n const tagRegex = /<.+?>/g;\n const formattedDescription = descriptionString.replace(tagRegex, \"\").trim();\n if (formattedDescription.length > 1001) {\n errors.description = isInLanguage ? \"Predugačko\" : \"Too long\";\n }\n\n if (!summary.trim()) {\n errors.summary = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (removeSpacesAndHTML(summary).length < 20) {\n errors.summary = isInLanguage ? \"Prekratko\" : \"Too short\";\n } else if (removeSpacesAndHTML(summary).length > 90) {\n errors.summary = isInLanguage ? \"Predugačko\" : \"Too long\";\n } else if (!removeSpacesAndHTML(summary)) {\n errors.summary = isInLanguage\n ? \"HTML tag nije dozvoljen\"\n : \"HTML tag is not allowed\";\n }\n\n if (!photo) {\n errors.photo = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n return errors;\n};\n","import axios from 'axios'\n\nconst { REACT_APP_DEV_API_URL } = process.env\n\naxios.defaults.withCredentials = true\n\n\nconst axiosInstance = axios.create({\n\tbaseURL: `${REACT_APP_DEV_API_URL}/api/v1`\n})\n\nexport { axiosInstance }\n","import React, { useState } from \"react\";\nimport { useFormik } from \"formik\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\n// components\nimport ProviderForm from \"../ProviderForm/ProviderForm\";\n// styles\nimport AddProviderStyles from \"./AddProviderStyles\";\n// entity\nimport { Provider } from \"../../../../../../models/domain\";\n// services\nimport { validateProviderForm } from \"../../../../../../services/validations/addProviderFormValidation\";\nimport { axiosInstance } from \"../../../../../../services/http/axiosConfig\";\nimport * as providerService from \"../../../../../../services/api/admin/providers.service\";\nimport { useTranslation } from \"react-i18next\";\n// context\n\nconst AddProvider = ({ closeModal, fetchProviders, setCurrentPage }) => {\n const { t } = useTranslation();\n const [disableButton, setDisableButton] = useState(false);\n\n const handleCreateProviderError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n if (data.errors.description) {\n toast.error(\n `${data.error.message}: ${data.errors.description.keys[0]}`\n );\n }\n if (data.errors.summary) {\n toast.error(`${data.error.message}: ${data.errors.summary.keys[0]}`);\n }\n if (data.errors.photo) {\n toast.error(`${data.errors.photo.keys[0]}`);\n }\n } else {\n toast.error(data.error.message);\n }\n };\n\n const createProvider = async values => {\n setDisableButton(true);\n\n const response = await providerService.createProvider(values);\n\n if (response.hasError) {\n setDisableButton(false);\n return handleCreateProviderError(response);\n }\n\n setCurrentPage(1);\n fetchProviders();\n toast.success(t(\"success_create_provider\"));\n setTimeout(() => {\n setDisableButton(false);\n }, 550);\n closeModal();\n };\n\n const formik = useFormik({\n initialValues: new Provider(),\n validate: validateProviderForm,\n onSubmit: createProvider\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n setFieldTouched,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"add_provider\")}

\n
\n \n \n
\n );\n};\n\nAddProvider.propTypes = {\n closeModal: PropTypes.func,\n fetchProviders: PropTypes.func,\n setCurrentPage: PropTypes.func\n};\n\nexport default AddProvider;\n","import AddProvider from './AddProvider'\n\nexport default AddProvider\n","import styled from 'styled-components'\n\nconst EditProviderStyles = styled.div`\n\t.title {\n\t\twidth: 100%;\n\t\tfont-size: 24px;\n\t\tfont-weight: 600;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\tcolor: #4b4b4b;\n\t\tmargin: 30px 0;\n\t}\n\n\t.form {\n\t\twidth: 481px;\n\t\theight: calc(100vh - 120px);\t\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t}\n`\n\nexport default EditProviderStyles\n","import React, { useState, useContext } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\n// components\nimport ProviderForm from \"../ProviderForm/ProviderForm\";\n// styles\nimport EditProviderStyles from \"./EditProviderStyles\";\n// services\nimport { validateProviderForm } from \"../../../../../../services/validations/addProviderFormValidation\";\nimport * as providerService from \"../../../../../../services/api/admin/providers.service\";\nimport { useTranslation } from \"react-i18next\";\n\nconst EditProvider = ({\n closeModal,\n providerId,\n providers,\n fetchProviders\n}) => {\n const { t } = useTranslation();\n const [disableButton, setDisableButton] = useState(false);\n\n const handleEditProviderError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n if (data.errors.description) {\n toast.error(\n `${data.error.message}: ${data.errors.description.keys[0]}`\n );\n }\n if (data.errors.summary) {\n toast.error(`${data.error.message}: ${data.errors.summary.keys[0]}`);\n }\n if (data.errors.photo) {\n toast.error(`${data.errors.photo.keys[0]}`);\n }\n } else {\n toast.error(data.error.message);\n }\n };\n\n const updateProvider = async values => {\n setDisableButton(true);\n\n const response = await providerService.editProvider(values, providerId);\n\n if (response.hasError) {\n setDisableButton(false);\n return handleEditProviderError(response);\n }\n\n fetchProviders();\n toast.success(t(\"success_update_provider\"));\n setTimeout(() => {\n setDisableButton(false);\n }, 550);\n closeModal();\n };\n\n const formik = useFormik({\n initialValues: providers.find(provider => provider.id === providerId),\n validate: validateProviderForm,\n onSubmit: updateProvider\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n setFieldTouched,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"edit_provider\")}

\n
\n \n \n
\n );\n};\n\nEditProvider.propTypes = {\n closeModal: PropTypes.func,\n providerId: PropTypes.number\n};\n\nconst mapStateToProps = state => {\n return {\n providers: state.providers.providers\n };\n};\n\nexport default connect(mapStateToProps, undefined)(EditProvider);\n","import EditProvider from './EditProvider'\n\nexport default EditProvider\n","import styled from 'styled-components'\n\nconst BenefitGroupFormStyles = styled.div`\n\n.labelStyles {\n\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.71;\n\t\tletter-spacing: -0.23px;\n\t\tcolor: #373737;\n\t}\n\n\t.inputStyles {\n\t\theight: 46px;\n\t\tborder-radius: 4px;\n\t\tborder: solid 1px #d5dbdd;\n\t\tbackground-color: #ffffff;\n\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.71;\n\t\tletter-spacing: -0.23px;\n\t\tcolor: #373737;\n\t}\n\n\t.capacityInput {\n\t\tposition: absolute;\n\t\ttext-align: center;\n\t\tpadding: 0 46px;\n\t}\n\n\t.decrementButton {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tz-index: 2;\n\t\twidth: 46px;\n\t\theight: 46px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tbackground: #fff;\n\t\tborder: 1px solid #1568BF;\n\t\tborder-radius: 4px;\n\t\toutline: none;\n\t\tcursor: pointer;\n\t}\n\n\t.incrementButton {\n\t\tposition: absolute;\n\t\tright: 0;\n\t\tz-index: 2;\n\t\twidth: 46px;\n\t\theight: 46px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tbackground: #fff;\n\t\tborder: 1px solid #1568BF;\n\t\tborder-radius: 4px;\n\t\toutline: none;\n\t\tcursor: pointer;\n\t}\n\n\t#bgId {\n\t\t.react-dropdown-select {\n\t\t\theight: 46px !important;\n\t\t\tborder-radius: 4px !important;\n\t\t\tborder: solid 1px #d5dbdd !important;\n\t\t\tbackground-color: #ffffff !important;\n\t\t\tfont-size: 14px !important;\n\t\t\tfont-weight: normal !important;\n\t\t\tfont-stretch: normal !important;\n\t\t\tfont-style: normal !important;\n\t\t\tline-height: 1.71 !important;\n\t\t\tletter-spacing: -0.23px !important;\n\t\t\tcolor: #373737 !important;\n\t\t\twidth: 100% !important;\n\t\t\tbox-shadow: none !important;\n\t\t\tcursor: pointer !important;\n\t\t\tdisplay: flex !important;\n\t\t\talign-items: center !important;\n\t\t\n\t\t\t.react-dropdown-select-content {\n\t\t\t\theight: 100% !important;\n\t\t\t\tdisplay: flex !important;\n\t\t\t\tpadding: 0 5px !important;\n\t\t\t\talign-items: center !important;\n\t\t\t\tflex-wrap: nowrap !important;\n\t\t\t\ttext-overflow: ellipsis !important;\n\t\t\t\toverflow-x: hidden !important;\n\t\t\t\twidth: 70px !important;\n\t\t\t\twhite-space: nowrap !important;\n\n\t\t\t\tinput {\n\t\t\t\t\tfont-size: 12px !important;\n\t\t\t\t\tfont-weight: normal !important;\n\t\t\t\t\tfont-stretch: normal !important;\n\t\t\t\t\tfont-style: normal !important;\n\t\t\t\t\tline-height: normal !important;\n\t\t\t\t\tletter-spacing: normal !important;\n\t\t\t\t\tcolor: #5d5d5d !important;\n\t\t\t\t\toverflow-x: scroll !important;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.react-dropdown-select-dropdown-handle {\n\t\t\t\theight: 100%;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tmargin: 0 !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t.summary {\n\t\twidth: 100%;\n\t\tmin-width: 100%;\n\t\tmax-width: 100%;\n\t\theight: 100px;\n\t\toverflow-y: auto;\n\t\tmin-height: 100px;\n\t\tmax-height: 100px;\n\t\tborder-radius: 4px;\n\t\tborder: solid 1px #d5dbdd;\n\t\tbackground-color: #ffffff;\n\t\tpadding: 12px 14px;\n\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.71;\n\t\tletter-spacing: -0.23px;\n\t\tcolor: #373737;\n\t\toutline: none;\n\t\tresize: none;\n\t}\n\n\t.descriptionContainer {\n\t\twidth: 100%;\n\t\tmargin: 10px 0;\n\n\t\t.rdw-editor-wrapper {\n\t\t\t.rdw-editor-toolbar {\n\t\t\t\t.rdw-emoji-wrapper {\n\t\t\t\t\t.rdw-emoji-modal {\n\t\t\t\t\t\tleft: -20px !important;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t\t.rdw-link-wrapper {\n\t\t\t\t\t.rdw-link-modal {\n\t\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\t\t.rdw-link-modal-label {\n\t\t\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t.rdw-editor-main {\n\t\t\t\twidth: 100%;\n\t\t\t\tmin-width: 100%;\n\t\t\t\tmax-width: 100%;\n\t\t\t\theight: 150px;\n\t\t\t\toverflow-y: auto;\n\t\t\t\tmin-height: 150px;\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tborder: solid 1px #d5dbdd;\n\t\t\t\tbackground-color: #ffffff;\n\t\t\t\tpadding: 12px 14px;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tfont-stretch: normal;\n\t\t\t\tfont-style: normal;\n\t\t\t\tline-height: 1.71;\n\t\t\t\tletter-spacing: -0.23px;\n\t\t\t\tcolor: #373737;\n\t\t\t\toutline: none;\n\t\t\t\tresize: none;\n\t\t\t\t.DraftEditor-root {\n\t\t\t\t\tz-index: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t.publishBenefitLink {\n color: #1e3c72;\n cursor: pointer;\n font-size: 15px;\n }\n`\n\nexport default BenefitGroupFormStyles\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport { BeatLoader } from \"react-spinners\";\nimport { toast } from \"react-toastify\";\nimport { Editor } from \"react-draft-wysiwyg\";\nimport \"react-draft-wysiwyg/dist/react-draft-wysiwyg.css\";\n// components\nimport {\n TextAndLine,\n Input,\n InputLabel,\n SelectInput,\n Button,\n MyDropZone,\n LocationsMultiselectInput,\n CheckboxInput,\n MultiselectInput\n} from \"../../../../../../components\";\n// styles\nimport { override } from \"../../../../../../services/loadingOverride.styles\";\nimport BenefitGroupFormStyles from \"./BenefitGroupFormStyles\";\n// services\nimport * as categoriesService from \"../../../../../../services/api/admin/categories.service\";\nimport * as employeeService from \"../../../../../../services/api/hr/employees.service\";\nimport * as categoriesActionCreators from \"../../../../../../actions/admin/categories.actions\";\nimport * as providersService from \"../../../../../../services/api/admin/providers.service\";\nimport { convertStringToEditorState } from \"../../../../../../services/textEditor.utils\";\nimport * as api from \"../../../../../../services/api/admin/users.service\";\n\n// Utils\nimport { isEmpty } from \"../../../../../../services/general.utils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BenefitGroupForm = ({\n values,\n errors,\n touched,\n setFieldValue,\n setFieldTouched,\n handleChange,\n buttonText,\n handleBlur,\n closeModal,\n disableButton,\n setCategories,\n categories,\n isEdit\n}) => {\n const { t } = useTranslation();\n const [isLoading, setIsLoading] = useState(true);\n const [cities, setCities] = useState([]);\n const [companies, setCompanies] = useState([]);\n const [companiesPage, setCompaniesPage] = useState(1);\n const [totalCompaniesPages, setTotalCompaniesPages] = useState(1);\n const [selectedCompany, setSelectedCompany] = useState(null);\n const [search, setSearch] = useState(\"\");\n const [page, setPage] = useState(1);\n const [totalPages, setTotalPages] = useState(1);\n\n const fetchCategories = async () => {\n const response = await categoriesService.getCategories();\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n setCategories(response.categories);\n setIsLoading(false);\n };\n\n const fetchCompanies = async () => {\n const response = await api.getCompanyOptions(companiesPage);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n setCompanies(response.companies);\n setTotalCompaniesPages(response.pages);\n };\n\n /**\n * Refetches paginated companies.\n * Fired from on scroll event from select input.\n * Sets new companies to state, along with page number.\n */\n const refetchCompanies = async () => {\n let currentPage = companiesPage;\n let newPage = (currentPage += 1);\n\n if (newPage > totalCompaniesPages) return;\n\n setCompaniesPage(newPage);\n\n const response = await api.getCompanyOptions(newPage);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n let newCompanies = [];\n setTimeout(() => {\n newCompanies = [...companies, ...response.companies];\n setTimeout(() => {\n setCompanies(newCompanies);\n }, 100);\n }, 100);\n };\n\n /**\n * Returns list of cities from server and sets it to state.\n * Is fired every time if search query or page changes.\n */\n const fetchCities = async () => {\n const response = await employeeService.getCities(search, page);\n\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n setCities(response.cities);\n setTotalPages(response.pages);\n };\n\n /**\n * Refetches cities list from server and sets it to state.\n * If page number increments to a value that is greater than there are total pages\n * function exits.\n * Updates page number & sets it to state.\n */\n const refetchCities = async () => {\n let currentPage = page;\n let newPage = (currentPage += 1);\n\n if (newPage > totalPages) return;\n\n setPage(newPage);\n\n const response = await employeeService.getCities(search, newPage);\n\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n let newCities = [];\n setTimeout(() => {\n newCities = [...cities, ...response.cities];\n setTimeout(() => {\n setCities(newCities);\n }, 100);\n }, 100);\n };\n\n const handleInputChange = newValue => {\n setPage(1);\n setSearch(newValue);\n\n return newValue;\n };\n\n const handleSelect = option => {\n setFieldValue(\"cities\", option);\n };\n\n const handleCompanySelect = option => {\n if (isEmpty(option)) {\n setFieldValue(\"companyId\", null);\n setSelectedCompany(null);\n\n return;\n }\n\n setFieldValue(\"companyId\", option.id);\n setSelectedCompany(option);\n };\n\n useEffect(() => {\n fetchCities();\n }, [page, search]);\n\n useEffect(() => {\n fetchCategories();\n fetchCompanies();\n }, []);\n\n const handleNumberInput = e => {\n let inputValue = e.target.validity.valid\n ? parseInt(e.target.value, 0)\n : values.tokenPrice;\n if (isNaN(inputValue)) {\n inputValue = \"\";\n }\n setFieldValue(\"capacity\", inputValue);\n };\n\n /**\n * Handles change of draft status for benefit.\n */\n const handleBenefitGroupPublishedStatus = () => {\n const draft = !values.isDraft;\n setFieldValue(\"isDraft\", draft);\n };\n\n /**\n * Published drafted benefit group.\n * If request fails, returns toast error message.\n * If request is successfull, fires toast message, closes modal.\n */\n const publishBenefitGroup = async () => {\n const response = await providersService.publishBenefitGroup(values.id);\n\n if (response.hasError) {\n return toast.error(t(\"failed_to_publish_benefit\"));\n }\n\n toast.success(t(\"success_publish_benefit\"));\n closeModal();\n };\n\n return (\n \n {isLoading ? (\n \n \n \n ) : (\n <>\n \n
\n
\n \n \n
\n {errors.name && touched.name ? errors.name : \"\"}\n
\n
\n \n
\n \n
\n \n \n
\n {errors.categories && touched.categories\n ? errors.categories\n : \"\"}\n
\n
\n setFieldValue(\"categories\", option)}\n selectedValues={values.categories}\n shouldHaveFullWidth\n shouldHaveFullHeigth\n />\n \n
\n \n \n
\n {errors.companyId && touched.companyId\n ? errors.companyId\n : \"\"}\n
\n
\n handleCompanySelect(option)}\n value={companies.find(c => c.id === values.companyId)}\n fetchMoreData={refetchCompanies}\n shouldHaveHight={false}\n isClearable={true}\n />\n \n \n
\n \n \n
\n {errors.taxes && touched.taxes ? errors.taxes : \"\"}\n
\n
\n \n \n
\n setFieldValue(\"isRemote\", !values.isRemote)}\n />\n \n \n
\n \n
\n \n \n
\n {errors.cities && touched.cities ? errors.cities : \"\"}\n
\n
\n handleSelect(option)}\n handleInputChange={handleInputChange}\n />\n \n
\n \n \n
\n {errors.summary && touched.summary ? errors.summary : \"\"}\n
\n
\n \n \n \n
\n \n \n
\n {errors.description && touched.description\n ? errors.description\n : \"\"}\n
\n
\n {\n setFieldTouched(\"description\", true);\n }}\n editorState={convertStringToEditorState(values.description)}\n editorStyle={{\n fontSize: 14\n }}\n stripPastedStyles={true}\n onEditorStateChange={editorState =>\n setFieldValue(\"description\", editorState)\n }\n toolbar={{\n options: [\n \"inline\",\n \"fontSize\",\n \"list\",\n \"textAlign\",\n \"colorPicker\",\n \"link\",\n \"emoji\",\n \"remove\",\n \"history\"\n ],\n fontSize: {\n options: [10, 11, 12, 13, 14, 16, 18]\n }\n }}\n />\n \n {!isEdit && (\n
\n handleBenefitGroupPublishedStatus()}\n />\n \n \n
\n \n )}\n {isEdit && values.isDraft && (\n publishBenefitGroup()}\n >\n {t(\"publish_ben_group\")}\n \n )}\n \n
\n \n \n
\n {errors.photo && touched.photo ? errors.photo : \"\"}\n
\n
\n \n \n
\n {disableButton ? (\n \n ) : (\n \n )}\n closeModal()}\n margin=\"0\"\n outline\n >\n {t(\"cancel\")}\n \n
\n \n )}\n
\n );\n};\n\nBenefitGroupForm.propTypes = {\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n setFieldValue: PropTypes.func,\n setFieldTouched: PropTypes.func,\n handleChange: PropTypes.func,\n handleBlur: PropTypes.func,\n closeModal: PropTypes.func,\n buttonText: PropTypes.string,\n disableButton: PropTypes.bool\n};\n\nconst mapStateToProps = state => {\n return {\n categories: state.categories.categories\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setCategories: categories =>\n dispatch(categoriesActionCreators.setCategories(categories))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BenefitGroupForm);\n","import BenefitGroupForm from './BenefitGroupForm'\n\nexport default BenefitGroupForm\n","import styled from 'styled-components'\n\nconst AddBenefitGroupStyles = styled.div`\n\t.title {\n\t\twidth: 100%;\n\t\tfont-size: 24px;\n\t\tfont-weight: 600;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\tcolor: #4b4b4b;\n\t\tmargin: 30px 0;\n\t}\n\n\t.form {\n\t\twidth: 481px;\n\t\theight: calc(100vh - 120px);\t\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t}\n`\n\nexport default AddBenefitGroupStyles\n","import { findLocales } from \"../../utils/helpers/findLocales\";\nimport {\n isEmpty,\n isStringAllCaps,\n removeSpacesAndHTML\n} from \"../general.utils\";\nimport { convertEditorStateToString } from \"../textEditor.utils\";\n\nexport const validateBenefitGroupForm = ({\n name,\n photo,\n description,\n categories,\n taxes,\n cities,\n isRemote,\n summary\n}) => {\n const isInLanguage = findLocales(\"rs\");\n\n const errors = {};\n\n if (!name.trim()) {\n errors.name = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (removeSpacesAndHTML(name).length > 30) {\n errors.name = isInLanguage ? \"Ime predugo\" : \"Name too long\";\n } else if (!removeSpacesAndHTML(name)) {\n errors.name = isInLanguage\n ? \"HTML oznaka nije dozvoljena\"\n : \"HTML tag is not allowed\";\n }\n\n const descriptionString = convertEditorStateToString(description);\n const tagRegex = /<.+?>/g;\n const formattedDescription = descriptionString.replace(tagRegex, \"\").trim();\n if (formattedDescription.length > 1001) {\n errors.description = \"Too long\";\n }\n\n if (!summary.trim()) {\n errors.summary = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (removeSpacesAndHTML(summary).length < 20) {\n errors.summary = isInLanguage ? \"Prekratko\" : \"Too short\";\n } else if (removeSpacesAndHTML(summary).length > 90) {\n errors.summary = isInLanguage ? \"Predugo\" : \"Too long\";\n }\n\n if (isEmpty(categories)) {\n errors.categories = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n if (!isEmpty(taxes) && isStringAllCaps(taxes)) {\n errors.taxes = isInLanguage\n ? \"Sva velika slova nisu dozvoljena\"\n : \"All caps not allowed\";\n }\n\n if (!isEmpty(taxes) && removeSpacesAndHTML(taxes).length > 100) {\n errors.taxes = isInLanguage ? \"Predugo\" : \"Too long\";\n }\n\n if (!photo) {\n errors.photo = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n if (!isRemote) {\n if (isEmpty(cities)) {\n errors.cities = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n }\n\n return errors;\n};\n","import React, { useState, useContext } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\n// components\nimport BenefitGroupForm from \"../BenefitGroupForm\";\n// styles\nimport AddBenefitGroupStyles from \"./AddBenefitGroupStyles\";\n// entity\nimport { BenefitGroup } from \"../../../../../../models/domain\";\n// services\nimport { validateBenefitGroupForm } from \"../../../../../../services/validations/benefitGroupFormValidation\";\nimport * as providersService from \"../../../../../../services/api/admin/providers.service\";\nimport * as actionCreators from \"../../../../../../actions/admin/providers.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AddBenefitGroup = ({\n setChosenBenefitGroupId,\n providerId,\n closeModal,\n addBenefitGroup\n}) => {\n const { t } = useTranslation();\n const [disableButton, setDisableButton] = useState(false);\n\n const handleCreateBenefitGroupError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n if (data.errors.description) {\n toast.error(\n `${data.error.message}: ${data.errors.description.keys[0]}`\n );\n }\n if (data.errors.summary) {\n toast.error(`${data.error.message}: ${data.errors.summary.keys[0]}`);\n }\n if (data.errors.categoryIds) {\n toast.error(\n `${data.error.message}: ${data.errors.categoryIds.keys[0]}`\n );\n }\n if (data.errors.taxes) {\n toast.error(`${data.error.message}: ${data.errors.taxes.keys[0]}`);\n }\n if (data.errors.photo) {\n toast.error(`${data.errors.photo.keys[0]}`);\n }\n if (data.errors.cityIds) {\n toast.error(`${data.errors.cityIds.keys[0]}`);\n }\n } else {\n toast.error(data.error.message);\n }\n };\n\n const createBenefitGroup = async values => {\n setDisableButton(true);\n\n const response = await providersService.addBenefitGroup(providerId, values);\n\n if (response.hasError) {\n setDisableButton(false);\n return handleCreateBenefitGroupError(response);\n }\n\n addBenefitGroup(providerId, response);\n toast.success(t(\"success_add_benefit_group\"));\n setChosenBenefitGroupId(response.id);\n setTimeout(() => {\n setDisableButton(false);\n }, 550);\n closeModal();\n };\n const formik = useFormik({\n initialValues: new BenefitGroup(),\n validate: validateBenefitGroupForm,\n onSubmit: createBenefitGroup\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n setFieldTouched,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"add_benefit_group\")}

\n
\n \n \n
\n );\n};\n\nAddBenefitGroup.propTypes = {\n providerId: PropTypes.number,\n setChosenBenefitGroupId: PropTypes.func,\n closeModal: PropTypes.func\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n addBenefitGroup: (providerId, benefitGroup) =>\n dispatch(actionCreators.addBenefitGroup(providerId, benefitGroup))\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(AddBenefitGroup);\n","import AddBenefitGroup from './AddBenefitGroup'\n\nexport default AddBenefitGroup\n","import styled from 'styled-components'\n\nconst EditBenefitGroupStyles = styled.div`\n\t.title {\n\t\twidth: 100%;\n\t\tfont-size: 24px;\n\t\tfont-weight: 600;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\tcolor: #4b4b4b;\n\t\tmargin: 30px 0;\n\t}\n\n\t.form {\n\t\twidth: 481px;\n\t\theight: calc(100vh - 120px);\t\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t}\n`\n\nexport default EditBenefitGroupStyles\n","import React, { useContext, useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport { BeatLoader } from \"react-spinners\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\n// components\nimport BenefitGroupForm from \"../BenefitGroupForm\";\n// styles\nimport EditBenefitGroupStyles from \"./EditBenefitGroupStyles\";\nimport { override } from \"../../../../../../services/loadingOverride.styles\";\n// entity\nimport { BenefitGroup } from \"../../../../../../models/domain\";\n// services\nimport { validateBenefitGroupForm } from \"../../../../../../services/validations/benefitGroupFormValidation\";\n\nimport * as providersService from \"../../../../../../services/api/admin/providers.service\";\nimport * as benefitGroupsService from \"../../../../../../services/api/admin/benefitGroups.service\";\nimport * as actionCreators from \"../../../../../../actions/admin/providers.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst EditBenefitGroup = ({\n benefitGroupId,\n providerId,\n closeModal,\n editBenefitGroup\n}) => {\n const { t } = useTranslation();\n const [isLoading, setIsLoading] = useState(true);\n const [benefitGroup, setBenfitGroup] = useState(new BenefitGroup());\n const [disableButton, setDisableButton] = useState(false);\n\n const handleEditBenefitGroupError = ({ error }) => {\n const { data } = error;\n if (data.errors) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n if (data.errors.description) {\n toast.error(\n `${data.error.message}: ${data.errors.description.keys[0]}`\n );\n }\n if (data.errors.summary) {\n toast.error(`${data.error.message}: ${data.errors.summary.keys[0]}`);\n }\n if (data.errors.categoryIds) {\n toast.error(\n `${data.error.message}: ${data.errors.categoryIds.keys[0]}`\n );\n }\n if (data.errors.taxes) {\n toast.error(`${data.error.message}: ${data.errors.taxes.keys[0]}`);\n }\n if (data.errors.photo) {\n toast.error(`${data.errors.photo.keys[0]}`);\n }\n if (data.errors.cityIds) {\n toast.error(`${data.errors.cityIds.keys[0]}`);\n }\n } else {\n toast.error(data.error.message);\n }\n };\n\n const updateBenefitGroup = async values => {\n setDisableButton(true);\n\n const response = await providersService.editBenefitGroup(\n providerId,\n benefitGroupId,\n values\n );\n\n if (response.hasError) {\n setDisableButton(false);\n return handleEditBenefitGroupError(response);\n }\n\n editBenefitGroup(providerId, response);\n toast.success(t(\"success_edit_benefit_group\"));\n setTimeout(() => {\n setDisableButton(false);\n }, 550);\n closeModal();\n };\n\n const fetchBenefitGroup = async () => {\n const response = await benefitGroupsService.getChosenBenefitGroup(\n benefitGroupId\n );\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n setBenfitGroup(response);\n setIsLoading(false);\n };\n\n useEffect(() => {\n fetchBenefitGroup();\n }, []);\n\n const formik = useFormik({\n enableReinitialize: true,\n initialValues: benefitGroup,\n validate: validateBenefitGroupForm,\n onSubmit: updateBenefitGroup\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n setFieldTouched,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"edit_bg\")}

\n {isLoading ? (\n \n \n \n ) : (\n
\n \n \n )}\n
\n );\n};\n\nEditBenefitGroup.propTypes = {\n benefitGroupId: PropTypes.number,\n providerId: PropTypes.number,\n closeModal: PropTypes.func\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n editBenefitGroup: (providerId, benefitGroup) =>\n dispatch(actionCreators.editBenefitGroup(providerId, benefitGroup))\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(EditBenefitGroup);\n","import EditBenefitGroup from './EditBenefitGroup'\n\nexport default EditBenefitGroup\n","import styled from \"styled-components\";\n\nconst BenefitFormStyles = styled.div`\n .benefitsInfoTopContainer {\n .inputsContainer {\n width: 100%;\n margin-bottom: 10px;\n }\n }\n\n .labelStyles {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n color: #373737;\n }\n\n .inputStyles {\n height: 46px;\n border-radius: 4px;\n border: solid 1px #d5dbdd;\n background-color: #ffffff;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n color: #373737;\n }\n\n #expirationId {\n .react-dropdown-select {\n height: 46px !important;\n border-radius: 4px !important;\n border: solid 1px #d5dbdd !important;\n background-color: #ffffff !important;\n font-size: 14px !important;\n font-weight: normal !important;\n font-stretch: normal !important;\n font-style: normal !important;\n line-height: 1.71 !important;\n letter-spacing: -0.23px !important;\n color: #373737 !important;\n width: 100% !important;\n box-shadow: none !important;\n cursor: pointer !important;\n display: flex !important;\n align-items: center !important;\n\n .react-dropdown-select-content {\n height: 100% !important;\n display: flex !important;\n padding: 0 5px !important;\n align-items: center !important;\n flex-wrap: nowrap !important;\n text-overflow: ellipsis !important;\n overflow-x: hidden !important;\n width: 70px !important;\n white-space: nowrap !important;\n\n input {\n font-size: 12px !important;\n font-weight: normal !important;\n font-stretch: normal !important;\n font-style: normal !important;\n line-height: normal !important;\n letter-spacing: normal !important;\n color: #5d5d5d !important;\n overflow-x: scroll !important;\n }\n }\n\n .react-dropdown-select-dropdown-handle {\n height: 100%;\n display: flex;\n align-items: center;\n margin: 0 !important;\n }\n }\n }\n\n .benefitTagsContainer {\n display: flex;\n align-items: flex-end;\n margin: 20px 0;\n height: 47px;\n\n button {\n font-size: 13px;\n }\n\n .benefitsTagsInputContainer {\n display: flex;\n align-items: flex-end;\n width: calc(100% - 120px);\n transform: translateX(70px);\n opacity: 0;\n transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;\n }\n\n .showBenefitsTagsInputContainer {\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n .tagsContainer {\n display: flex;\n flex-wrap: wrap;\n width: 100%;\n }\n\n .tagButton {\n display: flex;\n align-items: center;\n padding: 5px;\n background: #1568bf;\n margin: 5px;\n border-radius: 4px;\n height: 30px;\n\n .tagName {\n color: #fff;\n font-size: 13px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n margin-right: 10px;\n }\n\n .removeTagButton {\n width: 18px;\n height: 20px;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n background: #fff;\n color: black;\n border-radius: 4px;\n border: 1px solid #fff;\n outline: none;\n cursor: pointer;\n }\n }\n\n .shortNameDisclaimer {\n font-size: 11px;\n color: #5d5d5d !important;\n }\n\n .summary {\n width: 100%;\n min-width: 100%;\n max-width: 100%;\n height: 100px;\n overflow-y: auto;\n min-height: 100px;\n max-height: 100px;\n border-radius: 4px;\n border: solid 1px #d5dbdd;\n background-color: #ffffff;\n padding: 12px 14px;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n color: #373737;\n outline: none;\n resize: none;\n }\n\n .usageInstructions {\n width: 100%;\n min-width: 100%;\n max-width: 100%;\n height: 100px;\n overflow-y: auto;\n min-height: 100px;\n max-height: 100px;\n border-radius: 4px;\n border: solid 1px #d5dbdd;\n background-color: #ffffff;\n padding: 12px 14px;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n color: #373737;\n outline: none;\n resize: none;\n }\n\n .descriptionContainer {\n width: 100%;\n margin: 10px 0;\n\n .rdw-editor-wrapper {\n .rdw-editor-toolbar {\n .rdw-emoji-wrapper {\n .rdw-emoji-modal {\n left: -20px !important;\n }\n }\n .rdw-link-wrapper {\n .rdw-link-modal {\n font-size: 14px;\n .rdw-link-modal-label {\n font-size: 14px;\n }\n }\n }\n }\n .rdw-editor-main {\n width: 100%;\n min-width: 100%;\n max-width: 100%;\n height: 150px;\n overflow-y: auto;\n min-height: 150px;\n border-radius: 4px;\n border: solid 1px #d5dbdd;\n background-color: #ffffff;\n padding: 12px 14px;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.23px;\n color: #373737;\n outline: none;\n resize: none;\n .DraftEditor-root {\n z-index: 0;\n }\n }\n }\n }\n .publishBenefitLink {\n color: #1e3c72;\n cursor: pointer;\n font-size: 15px;\n }\n`;\n\nexport default BenefitFormStyles;\n","export const SET_BENEFIT_TAGS = 'SET_BENEFIT_TAGS';\nexport const ADD_BENEFIT_TAG = 'ADD_BENEFIT_TAG';\nexport const EDIT_BENEFIT_TAG = 'EDIT_BENEFIT_TAG';\nexport const DELETE_BENEFIT_TAG = 'DELETE_BENEFIT_TAG';\n","import * as actionTypes from \"../../constants/actionTypes/admin/benefitTags.constants\";\n\nexport const setBenefitTags = benefitTags => {\n return { type: actionTypes.SET_BENEFIT_TAGS, benefitTags };\n};\n\nexport const addBenefitTag = benefitTag => {\n return { type: actionTypes.ADD_BENEFIT_TAG, benefitTag };\n}\n\nexport const editBenefitTag = benefitTag => {\n return { type: actionTypes.EDIT_BENEFIT_TAG, benefitTag };\n}\n\nexport const deleteBenefitTag = id => {\n return { type: actionTypes.DELETE_BENEFIT_TAG, id };\n}","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\nimport { Editor } from \"react-draft-wysiwyg\";\nimport \"react-draft-wysiwyg/dist/react-draft-wysiwyg.css\";\n// components\nimport {\n TextAndLine,\n Input,\n InputLabel,\n SelectInput,\n Button,\n CheckboxInput\n} from \"../../../../../../components\";\nimport Vouchers from \"./Vouchers\";\n// styles\nimport BenefitFormStyles from \"./BenefitFormStyles\";\n// services\nimport * as benefitTagsService from \"../../../../../../services/api/admin/benefitTags.service\";\nimport * as benefitTagActionCreators from \"../../../../../../actions/admin/benefitTags.actions\";\nimport * as providersService from \"../../../../../../services/api/admin/providers.service\";\n// Utils\nimport { convertStringToEditorState } from \"../../../../../../services/textEditor.utils\";\n// Constants\nimport { EXPIRATION_OPTIONS } from \"../../../../../../constants/benefitExpiration.constants\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BenefitForm = ({\n values,\n errors,\n touched,\n setFieldValue,\n setFieldTouched,\n handleBlur,\n closeModal,\n handleChange,\n buttonText,\n isEdit,\n disableButton,\n benefitTags,\n setBenefitTags\n}) => {\n const { t } = useTranslation();\n const [showBenefitTagInput, setShowBenefitTagInput] = useState(false);\n const [benefitTagObj, setBenefitTagObj] = useState(undefined);\n const [selectedTag, setSelectedTag] = useState(\"\");\n\n const handleTagChange = (name, id) => {\n const chosenTag = benefitTags.find(tag => tag.id === id);\n setBenefitTagObj(chosenTag);\n };\n\n const fetchBenefitTags = async () => {\n const response = await benefitTagsService.getBenefitTags();\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n setBenefitTags(response);\n };\n\n useEffect(() => {\n fetchBenefitTags();\n }, []);\n\n const filteredEXPOptions = () => {\n if (values.expiration === \"voucher\") {\n return EXPIRATION_OPTIONS.filter(o => o.name === \"voucher\");\n } else {\n return EXPIRATION_OPTIONS.filter(o => o.name !== \"voucher\");\n }\n };\n\n const filteredTags = getChosenIds =>\n benefitTags.filter(t =>\n getChosenIds === \"getChosenIds\"\n ? values.tags.includes(t.id)\n : !values.tags.includes(t.id)\n );\n\n const sortTagsByChosenOrder = chosenTags => {\n const result = [];\n chosenTags.forEach(ct => {\n result[values.tags.indexOf(ct.id)] = ct;\n });\n return result;\n };\n\n const showTagInput = () => {\n setShowBenefitTagInput(true);\n setTimeout(() => {\n const inputContainer = document.getElementById(\"benefitTagsInput\");\n if (inputContainer) {\n inputContainer.classList.add(\"showBenefitsTagsInputContainer\");\n }\n }, 100);\n };\n\n const addTag = name => {\n const inputContainer = document.getElementById(\"benefitTagsInput\");\n if (\n inputContainer &&\n inputContainer.classList.contains(\"showBenefitsTagsInputContainer\")\n ) {\n inputContainer.classList.remove(\"showBenefitsTagsInputContainer\");\n }\n\n setTimeout(() => {\n setShowBenefitTagInput(false);\n setFieldValue(\"tags\", [...values.tags, benefitTagObj.id]);\n setBenefitTagObj(undefined);\n }, 400);\n };\n\n const removeTag = (name, index) => {\n const filteredArray = values.tags.filter((tag, i) => i !== index);\n setFieldValue(\"tags\", filteredArray);\n };\n\n const handleNumberInput = e => {\n let inputValue = e.target.validity.valid\n ? parseInt(e.target.value, 0)\n : values.tokenPrice;\n if (isNaN(inputValue)) {\n inputValue = \"\";\n }\n setFieldValue(\"tokenPrice\", inputValue);\n };\n\n const handleVatNumberInput = e => {\n let inputValue;\n if (e.target.validity.valid) {\n let replacedValue = e.target.value.replace(/[^0-9]*/g, \"\");\n inputValue = parseInt(replacedValue);\n }\n if (isNaN(inputValue)) {\n inputValue = undefined;\n }\n\n if (inputValue >= 20) {\n inputValue = 20;\n }\n setFieldValue(\"vat\", inputValue);\n };\n\n const handleMcpNumberInput = e => {\n let inputValue = e.target.validity.valid\n ? parseInt(e.target.value, 0)\n : values.minimumContractPeriod;\n if (isNaN(inputValue)) {\n inputValue = \"\";\n }\n setFieldValue(\"minimumContractPeriod\", inputValue);\n };\n\n const handleInstalmentsNumberInput = e => {\n let inputValue = e.target.validity.valid\n ? parseInt(e.target.value, 0)\n : values.instalments;\n if (isNaN(inputValue)) {\n inputValue = \"\";\n }\n setFieldValue(\"instalments\", inputValue);\n };\n\n /**\n * Handles change of draft status for benefit.\n */\n const handleBenefitPublishedStatus = () => {\n const draft = !values.isDraft;\n setFieldValue(\"isDraft\", draft);\n };\n\n /**\n * Published drafted benefit.\n * If request fails, returns toast error message.\n * If request is successfull, fires toast message, closes modal.\n */\n const publishBenefit = async () => {\n const response = await providersService.publishBenefit(values.id);\n\n if (response.hasError) {\n return toast.error(t(\"failed_to_publish_benefit\"));\n }\n\n toast.success(t(\"success_publish_benefit\"));\n closeModal();\n };\n\n return (\n \n \n
\n
\n
\n \n \n
\n {errors.title && touched.title ? errors.title : \"\"}\n
\n
\n \n
\n
\n \n \n
\n {errors.expiration && touched.expiration\n ? errors.expiration\n : \"\"}\n
\n
\n setFieldValue(\"expiration\", option.name)}\n customId=\"expirationId\"\n shouldHaveHight={false}\n />\n
\n \n\n
\n \n \n
\n {errors.quantity && touched.quantity ? errors.quantity : \"\"}\n
\n
\n \n \n\n
\n \n \n
\n \n {t(\"short_name_info\")}\n \n\n {values.expiration === \"month\" && (\n
\n \n \n
\n \n \n )}\n\n {values.expiration === \"one time\" && (\n
\n \n \n
\n \n \n )}\n\n {values.expiration !== \"voucher\" && (\n
\n \n \n
\n {errors.tokenPrice && touched.tokenPrice\n ? errors.tokenPrice\n : \"\"}\n
\n
\n \n \n )}\n\n
\n \n \n
\n \n \n\n \n \n \n
\n {errors.summary && touched.summary ? errors.summary : \"\"}\n
\n \n \n \n
\n \n \n
\n {errors.description && touched.description\n ? errors.description\n : \"\"}\n
\n
\n {\n setFieldTouched(\"description\", true);\n }}\n editorState={convertStringToEditorState(values.description)}\n editorStyle={{\n fontSize: 14\n }}\n stripPastedStyles={true}\n onEditorStateChange={editorState =>\n setFieldValue(\"description\", editorState)\n }\n toolbar={{\n options: [\n \"inline\",\n \"fontSize\",\n \"list\",\n \"textAlign\",\n \"colorPicker\",\n \"link\",\n \"emoji\",\n \"remove\",\n \"history\"\n ],\n fontSize: {\n options: [10, 11, 12, 13, 14, 16, 18]\n }\n }}\n />\n \n
\n \n \n
\n {errors.usageInstructions && touched.usageInstructions\n ? errors.usageInstructions\n : \"\"}\n
\n
\n {\n setFieldTouched(\"usageInstructions\", true);\n }}\n editorState={convertStringToEditorState(values.usageInstructions)}\n editorStyle={{\n fontSize: 14\n }}\n stripPastedStyles={true}\n onEditorStateChange={editorState =>\n setFieldValue(\"usageInstructions\", editorState)\n }\n toolbar={{\n options: [\n \"inline\",\n \"fontSize\",\n \"list\",\n \"textAlign\",\n \"colorPicker\",\n \"link\",\n \"emoji\",\n \"remove\",\n \"history\"\n ],\n fontSize: {\n options: [10, 11, 12, 13, 14, 16, 18]\n }\n }}\n />\n \n {values.expiration === \"voucher\" && (\n \n )}\n {!isEdit && (\n
\n handleBenefitPublishedStatus()}\n />\n \n \n
\n \n )}\n {isEdit && values.isDraft && (\n publishBenefit()}>\n {t(\"publish_benefit\")}\n \n )}\n \n \n
\n
\n showTagInput()}\n padding=\"0\"\n margin=\"0 20px 0 0\"\n >\n {t(\"add_tag\")}\n \n {showBenefitTagInput && (\n
\n
\n \n {\n handleTagChange(\"\", option.id);\n setSelectedTag(option);\n }}\n />\n
\n {\n addTag(\"tags\");\n setSelectedTag(\"\");\n }}\n width=\"100px\"\n padding=\"0\"\n margin=\"0 0 0 20px\"\n >\n {t(\"submit_tag\")}\n \n
\n )}\n
\n\n \n {filteredTags(\"getChosenIds\").length > 0 && (\n
\n {sortTagsByChosenOrder(filteredTags(\"getChosenIds\")).map(\n (tag, index) => (\n
\n

{tag.name}

\n removeTag(\"tags\", index)}\n className=\"removeTagButton\"\n type=\"button\"\n >\n X\n \n
\n )\n )}\n
\n )}\n
\n \n\n
\n {disableButton ? (\n \n ) : (\n \n )}\n\n \n
\n
\n );\n};\n\nBenefitForm.propTypes = {\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n setFieldValue: PropTypes.func,\n setFieldTouched: PropTypes.func,\n handleBlur: PropTypes.func,\n closeModal: PropTypes.func,\n handleChange: PropTypes.func,\n buttonText: PropTypes.string,\n disableButton: PropTypes.bool\n};\n\nconst mapStateToProps = state => {\n return {\n benefitTags: state.benefitTags.tags\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setBenefitTags: benefitTags =>\n dispatch(benefitTagActionCreators.setBenefitTags(benefitTags))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BenefitForm);\n","import BenefitForm from './BenefitForm'\n\nexport default BenefitForm\n","import styled from 'styled-components'\n\nconst AddBenefitStyles = styled.div`\n\t.title {\n\t\twidth: 100%;\n\t\tfont-size: 24px;\n\t\tfont-weight: 600;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\tcolor: #4b4b4b;\n\t\tmargin: 30px 0;\n\t}\n\n\t.form {\n\t\twidth: 481px;\n\t\theight: calc(100vh - 120px);\t\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t}\n`\n\nexport default AddBenefitStyles\n","import { findLocales } from \"../../utils/helpers/findLocales\";\nimport { isEmpty, removeSpacesAndHTML } from \"../general.utils\";\nimport { convertEditorStateToString } from \"../textEditor.utils\";\n\nexport const validateBenefitForm = ({\n title,\n // photo,\n expiration,\n tokenPrice,\n description,\n vouchers,\n summary,\n quantity,\n instalments,\n usageInstructions\n}) => {\n const isInLanguage = findLocales(\"rs\");\n\n const errors = {};\n\n if (!title.trim()) {\n errors.title = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (title.length > 30) {\n errors.title = isInLanguage ? \"Predugačko ime\" : \"Name too long\";\n } else if (!removeSpacesAndHTML(title)) {\n errors.title = isInLanguage\n ? \"HTML oznaka nije dozvoljena\"\n : \"HTML tag is not allowed\";\n }\n\n const descriptionString = convertEditorStateToString(description);\n const tagRegex = /<.+?>/g;\n const formattedDescription = descriptionString.replace(tagRegex, \"\").trim();\n if (formattedDescription.length > 1001) {\n errors.description = isInLanguage ? \"Predugo\" : \"Too long\";\n }\n\n if (!summary.trim()) {\n errors.summary = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (removeSpacesAndHTML(summary).length < 20) {\n errors.description = isInLanguage ? \"Prekratko\" : \"Too short\";\n } else if (removeSpacesAndHTML(summary).length > 90) {\n errors.description = isInLanguage ? \"Predugo\" : \"Too long\";\n }\n\n if (!isEmpty(usageInstructions)) {\n const usageInstructionsString = convertEditorStateToString(\n usageInstructions\n );\n const usageTagRegex = /<.+?>/g;\n const formattedUsageInstructions = usageInstructionsString\n .replace(usageTagRegex, \"\")\n .trim();\n if (\n !isEmpty(formattedUsageInstructions) &&\n formattedUsageInstructions.length > 1001\n ) {\n errors.description = isInLanguage ? \"Predugo\" : \"Too long\";\n }\n }\n\n if (expiration === \"\") {\n errors.expiration = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n if (expiration !== \"voucher\") {\n if (tokenPrice === \"\" || tokenPrice === null || tokenPrice === undefined) {\n errors.tokenPrice = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n }\n\n if (expiration === \"voucher\") {\n if (vouchers.length === 0) {\n errors.vouchers = isInLanguage\n ? \"Molimo dodajte vaučer\"\n : \"Please add voucher\";\n } else {\n vouchers.forEach(voucher => {\n if (voucher.name === \"\" || voucher.price === \"\") {\n errors.vouchers = isInLanguage\n ? \"Morate popuniti sva polja\"\n : \"You need to fill all the fields\";\n }\n });\n }\n }\n\n if (!isEmpty(tokenPrice) && tokenPrice <= 0) {\n errors.tokenPrice = isInLanguage\n ? \"Minimalna vrednost za cenu tokena je 1\"\n : \"Minimum value for token price is 1\";\n }\n\n if (\n expiration === \"one time\" &&\n !isEmpty(instalments) &&\n tokenPrice % instalments !== 0\n ) {\n errors.tokenPrice = isInLanguage\n ? \"Cena tokena treba da bude deljiva sa brojem rata\"\n : \"Token price should be divisible by the number of installments\";\n }\n\n if (!isEmpty(quantity) && quantity <= 0)\n errors.quantity = isInLanguage\n ? \"Minimalna vrednost za cenu tokena je 1\"\n : \"Minimum value for token price is 1\";\n\n return errors;\n};\n","import React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\n// components\nimport BenefitForm from \"../BenefitForm\";\n// entity\nimport { Benefit } from \"../../../../../../models/domain\";\n// services\nimport AddBenefitStyles from \"./AddBenefitStyles\";\n// services\nimport { validateBenefitForm } from \"../../../../../../services/validations/benefitFormValidation\";\nimport * as providersService from \"../../../../../../services/api/admin/providers.service\";\nimport * as actionCreators from \"../../../../../../actions/admin/providers.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AddBenefit = ({ providerId, benefitGroupId, closeModal, addBenefit }) => {\n const { t } = useTranslation();\n const [disableButton, setDisableButton] = useState(false);\n\n const handleCreateBenefitError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.restrict) {\n toast.error(`${data.errors.restrict.keys[0]}`);\n }\n if (data.errors.title) {\n toast.error(`${data.errors.title.keys[0]}`);\n }\n if (data.errors.photo) {\n toast.error(`${data.errors.photo.keys[0]}`);\n }\n if (data.errors.expiration) {\n toast.error(`${data.errors.expiration.keys[0]}`);\n }\n if (data.errors.tokenPrice) {\n toast.error(`${data.errors.tokenPrice.keys[0]}`);\n }\n if (data.errors.description) {\n toast.error(\n `${data.error.message}: ${data.errors.description.keys[0]}`\n );\n }\n if (data.errors.summary) {\n toast.error(`${data.error.message}: ${data.errors.summary.keys[0]}`);\n }\n if (data.errors.benefitGroupId) {\n toast.error(`${data.errors.benefitGroupId.keys[0]}`);\n }\n if (data.errors.minimumContractPeriod) {\n toast.error(`${data.errors.minimumContractPeriod.keys[0]}`);\n }\n if (data.errors.vat) {\n toast.error(`${data.errors.vat.keys[0]}`);\n }\n if (data.errors.shortName) {\n toast.error(`${data.errors.shortName.keys[0]}`);\n }\n if (data.errors.isDraft) {\n toast.error(`${data.errors.isDraft.keys[0]}`);\n }\n } else {\n toast.error(data.error.message);\n }\n };\n\n const createBenefit = async values => {\n setDisableButton(true);\n\n const response = await providersService.addBenefit(benefitGroupId, values);\n\n if (response.hasError) {\n setDisableButton(false);\n return handleCreateBenefitError(response);\n }\n\n addBenefit(providerId, benefitGroupId, response);\n toast.success(t(\"success_add_benefit\"));\n setTimeout(() => {\n setDisableButton(false);\n }, 550);\n closeModal();\n };\n\n const formik = useFormik({\n initialValues: new Benefit(),\n validate: validateBenefitForm,\n onSubmit: createBenefit\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n setFieldTouched,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"add_benefit\")}

\n
\n \n \n
\n );\n};\n\nAddBenefit.propTypes = {\n providerId: PropTypes.number,\n benefitGroupId: PropTypes.number,\n closeModal: PropTypes.func.isRequired\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n addBenefit: (providerId, benefitGroupId, benefit) =>\n dispatch(actionCreators.addBenefit(providerId, benefitGroupId, benefit))\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(AddBenefit);\n","import AddBenefit from './AddBenefit'\n\nexport default AddBenefit\n","import styled from 'styled-components'\n\nconst EditBenefitStyles = styled.div`\n\t.title {\n\t\twidth: 100%;\n\t\tfont-size: 24px;\n\t\tfont-weight: 600;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\tcolor: #4b4b4b;\n\t\tmargin: 30px 0;\n\t}\n\n\t.form {\n\t\twidth: 481px;\n\t\theight: calc(100vh - 120px);\t\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t}\n`\n\nexport default EditBenefitStyles\n","import { BenefitGroup, Provider, Benefit } from '../providers.entity'\n\nconst initProvidersState = []\n\nconst actionTypes = {\n\tsetInitProviders: 'SET_INITAL_PROVIDERS',\n\taddProvider: 'ADD_PROVIDER',\n\teditProvider: 'EDIT_PROVIDER',\n\tremoveProvider: 'REMOVE_PROVIDER',\n\taddBenefitGroup: 'ADD_BENEFIT_GROUP',\n\teditBenefitGroup: 'EDIT_BENEFIT_GROUP',\n\tremoveBenefitGroup: 'REMOVE_BENEFIT_GROUP',\n\taddBenefit: 'ADD_BENEFIT',\n\teditBenefit: 'EDIT_BENEFIT',\n\tremoveBenefit: 'REMOVE_BENEFIT'\n}\n\nconst providersReducer = (state = initProvidersState, action) => {\n\tswitch (action.type) {\n\t\tcase actionTypes.setInitProviders:\n\t\t\treturn action.payload.map(provider => new Provider(provider))\n\t\tcase actionTypes.addProvider:\n\t\t\treturn [...state, new Provider(action.payload)]\n\t\tcase actionTypes.editProvider:\n\t\t\treturn state.map(provider => (provider.id === action.providerId ?\n\t\t\t\tnew Provider(action.payload) : provider))\n\t\tcase actionTypes.removeProvider:\n\t\t\treturn state.filter(provider => provider.id !== action.providerId)\n\t\tcase actionTypes.addBenefitGroup:\n\t\t\treturn state.map(provider => (provider.id === action.providerId ?\n\t\t\t\t{\n\t\t\t\t\t...provider,\n\t\t\t\t\tbenefitGroups: [...provider.benefitGroups, new BenefitGroup(action.payload)]\n\t\t\t\t}\n\t\t\t\t:\n\t\t\t\tprovider)\n\t\t\t)\n\t\tcase actionTypes.editBenefitGroup:\n\t\t\treturn state.map(provider => (provider.id === action.providerId ?\n\t\t\t\t{\n\t\t\t\t\t...provider,\n\t\t\t\t\tbenefitGroups: provider.benefitGroups.map(benfitGroup =>\n\t\t\t\t\t\t(benfitGroup.id === action.benefitGroupId ?\n\t\t\t\t\t\t\tnew BenefitGroup(action.payload)\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\tbenfitGroup)\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t:\n\t\t\t\tprovider)\n\t\t\t)\n\t\tcase actionTypes.removeBenefitGroup:\n\t\t\treturn state.map(provider => (provider.id === action.providerId ?\n\t\t\t\t{\n\t\t\t\t\t...provider,\n\t\t\t\t\tbenefitGroups: provider.benefitGroups\n\t\t\t\t\t\t.filter(benefitGroup => benefitGroup.id !== action.benefitGroupId)\n\t\t\t\t}\n\t\t\t\t:\n\t\t\t\tprovider)\n\t\t\t)\n\t\tcase actionTypes.addBenefit:\n\t\t\treturn state.map(provider => (provider.id === action.providerId ?\n\t\t\t\t{\n\t\t\t\t\t...provider,\n\t\t\t\t\tbenefitGroups: provider.benefitGroups.map(benefitGroup =>\n\t\t\t\t\t\t(benefitGroup.id === action.benefitGroupId ?\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t...benefitGroup,\n\t\t\t\t\t\t\t\tbenefits: [...benefitGroup.benefits, new Benefit(action.payload)]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\tbenefitGroup\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t:\n\t\t\t\tprovider\n\t\t\t))\n\t\tcase actionTypes.editBenefit:\n\t\t\treturn state.map(provider => (provider.id === action.providerId ?\n\t\t\t\t{\n\t\t\t\t\t...provider,\n\t\t\t\t\tbenefitGroups: provider.benefitGroups.map(benefitGroup =>\n\t\t\t\t\t\t(benefitGroup.id === action.benefitGroupId ?\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t...benefitGroup,\n\t\t\t\t\t\t\t\tbenefits: benefitGroup.benefits.map(benefit => (benefit.id === action.benefitId ?\n\t\t\t\t\t\t\t\t\tnew Benefit(action.payload)\n\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\tbenefit)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\tbenefitGroup\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t:\n\t\t\t\tprovider\n\t\t\t))\n\t\tcase actionTypes.removeBenefit:\n\t\t\treturn state.map(provider => (provider.id === action.providerId ?\n\t\t\t\t{\n\t\t\t\t\t...provider,\n\t\t\t\t\tbenefitGroups: provider.benefitGroups.map(benefitGroup =>\n\t\t\t\t\t\t(benefitGroup.id === action.benefitGroupId ?\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t...benefitGroup,\n\t\t\t\t\t\t\t\tbenefits: benefitGroup.benefits.filter(benefit => benefit.id !== action.benefitId)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\tbenefitGroup)\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\t:\n\t\t\t\tprovider)\n\t\t\t)\n\t\tdefault:\n\t\t\tthrow new Error(`Unknow action type: ${action.type}`)\n\t}\n}\n\n\nexport { initProvidersState, actionTypes, providersReducer }\n","import React, { createContext, useReducer, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { initProvidersState, providersReducer } from './providers.reducer'\nimport { useProvidersActions } from './providers.actions'\n\nconst ProvidersContext =\n\tcreateContext(...initProvidersState)\n\nconst ProvidersProvider = ({ children }) => {\n\tconst [providersState, dispatchProviders] =\n\t\tuseReducer(providersReducer, initProvidersState)\n\tconst providersActions = useProvidersActions(dispatchProviders)\n\n\tuseEffect(() => { }, [initProvidersState])\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t)\n}\n\nProvidersProvider.propTypes = {\n\tchildren: PropTypes.node\n}\n\nexport { ProvidersProvider, ProvidersContext }\n","import React, { useContext, useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\n// components\nimport BenefitForm from \"../BenefitForm\";\n// styles\nimport EditBenefitStyles from \"./EditBenefitStyles\";\n// entity\nimport { Benefit } from \"../../../../../../models/domain\";\n// services\nimport { validateBenefitForm } from \"../../../../../../services/validations/benefitFormValidation\";\nimport * as actionCreators from \"../../../../../../actions/admin/providers.actions\";\nimport * as providersService from \"../../../../../../services/api/admin/providers.service\";\n// context\nimport { ProvidersContext } from \"../../../../../../modules/superAdmin/providers/context/providers.context\";\nimport { useTranslation } from \"react-i18next\";\n\nconst EditBenefit = ({\n providerId,\n benefitGroupId,\n benefitId,\n closeModal,\n editBenefit\n}) => {\n const { t } = useTranslation();\n const [benefit, setBenefit] = useState(new Benefit());\n const [disableButton, setDisableButton] = useState(false);\n\n const handleEditBenefitError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.restrict) {\n toast.error(`${data.errors.restrict.keys[0]}`);\n }\n if (data.errors.title) {\n toast.error(`${data.errors.title.keys[0]}`);\n }\n if (data.errors.photo) {\n toast.error(`${data.errors.photo.keys[0]}`);\n }\n if (data.errors.expiration) {\n toast.error(`${data.errors.expiration.keys[0]}`);\n }\n if (data.errors.tokenPrice) {\n toast.error(`${data.errors.tokenPrice.keys[0]}`);\n }\n if (data.errors.instalments) {\n toast.error(`${data.errors.instalments.keys[0]}`);\n }\n if (data.errors.description) {\n toast.error(\n `${data.error.message}: ${data.errors.description.keys[0]}`\n );\n }\n if (data.errors.summary) {\n toast.error(`${data.error.message}: ${data.errors.summary.keys[0]}`);\n }\n if (data.errors.benefitGroupId) {\n toast.error(`${data.errors.benefitGroupId.keys[0]}`);\n }\n if (data.errors.minimumContractPeriod) {\n toast.error(`${data.errors.minimumContractPeriod.keys[0]}`);\n }\n if (data.errors.shortName) {\n toast.error(`${data.errors.shortName.keys[0]}`);\n }\n } else {\n toast.error(data.error.message);\n }\n };\n\n const updateBenefit = async values => {\n setDisableButton(true);\n\n const response = await providersService.editBenefit(\n providerId,\n benefitGroupId,\n benefitId,\n values\n );\n\n if (response.hasError) {\n setDisableButton(false);\n return handleEditBenefitError(response);\n }\n\n editBenefit(providerId, benefitGroupId, response);\n toast.success(t(\"success_edit_benefit\"));\n closeModal();\n setTimeout(() => {\n setDisableButton(false);\n }, 550);\n };\n\n const fetchBenefit = async () => {\n const response = await providersService.getChosenBenefit(benefitId);\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n setBenefit(response);\n };\n\n useEffect(() => {\n fetchBenefit();\n }, []);\n\n const formik = useFormik({\n enableReinitialize: true,\n initialValues: benefit,\n validate: validateBenefitForm,\n onSubmit: updateBenefit\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n setFieldTouched,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"edit_benefit\")}

\n
\n \n \n
\n );\n};\n\nEditBenefit.propTypes = {\n providerId: PropTypes.number,\n benefitGroupId: PropTypes.number,\n benefitId: PropTypes.number,\n closeModal: PropTypes.func\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n editBenefit: (providerId, benefitGroupId, benefit) =>\n dispatch(actionCreators.editBenefit(providerId, benefitGroupId, benefit))\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(EditBenefit);\n","import EditBenefit from './EditBenefit'\n\nexport default EditBenefit\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport AddProvider from \"../Provider/AddProvider\";\nimport EditProvider from \"../Provider/EditProvider\";\n\nimport AddBenefitGroup from \"../BenefitGroup/AddBenefitGroup\";\nimport EditBenefitGroup from \"../BenefitGroup/EditBenefitGroup\";\n\nimport AddBenefit from \"../Benefit/AddBenefit\";\nimport EditBenefit from \"../Benefit/EditBenefit\";\n\nconst FormRenderer = ({\n modalType,\n closeModal,\n providerId,\n setChosenBenefitGroupId,\n benefitGroupId,\n benefitId,\n fetchProviders,\n setCurrentPage\n}) => {\n switch (modalType) {\n case \"addProvider\":\n return (\n \n );\n case \"editProvider\":\n return (\n \n );\n case \"addBenefitGroup\":\n return (\n \n );\n case \"editBenefitGroup\":\n return (\n \n );\n case \"addBenefit\":\n return (\n \n );\n case \"editBenefit\":\n return (\n \n );\n default:\n throw new Error(\"Unknow action type\");\n }\n};\n\nFormRenderer.propTypes = {\n modalType: PropTypes.string,\n closeModal: PropTypes.func,\n providerId: PropTypes.number,\n benefitGroupId: PropTypes.number,\n setChosenBenefitGroupId: PropTypes.func,\n benefitId: PropTypes.number,\n fetchProviders: PropTypes.func,\n setCurrentPage: PropTypes.func\n};\n\nexport default FormRenderer;\n","import FormRenderer from './FormRenderer'\n\nexport default FormRenderer\n","import styled from \"styled-components\";\n\nconst FormModalStyles = styled.div`\n position: fixed;\n width: 100%;\n height: 100vh;\n background: #0000004d;\n z-index: 5;\n top: 0;\n left: 0;\n display: flex;\n justify-content: flex-end;\n\n .modal {\n width: 545px;\n height: 100%;\n position: relative;\n max-width: 50%;\n min-width: 380px;\n background: #fff;\n border-radius: 4px;\n padding: 0 0 20px 30px;\n opacity: 0;\n transform: translateX(100%);\n transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;\n\n .closeButton {\n background-color: #fff;\n border-radius: 50%;\n cursor: pointer;\n height: 40px;\n opacity: 0;\n overflow: hidden;\n text-align: center;\n transform: translateY(-100%);\n transition: transform 0.2s ease, opacity 0.2s ease, visibility 0.2s ease;\n visibility: hidden;\n width: 40px;\n position: absolute;\n font-size: 20px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #737373;\n left: -59px;\n top: 0;\n }\n\n :focus-visible {\n outline: unset;\n }\n }\n\n .showModal {\n opacity: 1 !important;\n transform: translateX(0) !important;\n }\n\n .showCloseButton {\n opacity: 1 !important;\n transform: translateY(21px) !important;\n visibility: visible !important;\n }\n`;\n\nexport default FormModalStyles;\n","import React, { useEffect, useRef } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport FormModalStyles from \"./ModalStyles\";\n\nconst FormModal = ({ closeModal, children }) => {\n const ref = useRef(null);\n\n const handleKeyDown = event => {\n if (event.key !== \"Escape\") return;\n\n closeModal();\n };\n\n useEffect(() => {\n ref.current.focus();\n }, []);\n\n return (\n \n e.stopPropagation()}\n tabIndex={-1}\n onKeyDown={handleKeyDown}\n >\n
\n X\n
\n {children}\n \n
\n );\n};\n\nFormModal.propTypes = {\n closeModal: PropTypes.func,\n children: PropTypes.node\n};\n\nexport default FormModal;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n\nimport { TrashIcon, EditIconSvg } from \"../../../../assets/Icons\";\nimport StarIcon from \"../../../../assets/Icons/StarIcon\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ItemStyles = styled.div`\n position: relative;\n width: 100%;\n height: 70px;\n border-radius: 4px;\n border: solid 1px #d8d8d8;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 10px;\n margin-top: 30px;\n cursor: pointer;\n\n &:first-child {\n margin-top: 0;\n }\n\n .title {\n font-size: 16px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.38;\n letter-spacing: -0.4px;\n color: #373737;\n width: 160px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .desc {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: -0.2px;\n color: #373737;\n width: 160px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .taxes {\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: italic;\n line-height: 1.33;\n letter-spacing: -0.2px;\n color: #373737;\n width: 160px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .previewLink {\n color: #1e3c72;\n cursor: pointer;\n font-size: 15px;\n margin-right: 20px;\n position: absolute;\n right: -6px;\n bottom: 2px;\n }\n`;\n\nconst Item = ({\n onCardClick,\n title,\n description,\n editButton,\n removeButton,\n selectedItem,\n taxes,\n isDraft,\n openModalPreviewModalAction = () => {},\n isBenefitGroup = false\n}) => {\n const { t } = useTranslation();\n return (\n onCardClick()}\n className={selectedItem && \"selectedItem\"}\n >\n \n \n \n \n
\n

{title}

\n

{description}

\n {taxes &&

{taxes}

}\n
\n \n
\n {isDraft && isBenefitGroup && (\n {\n e.stopPropagation();\n openModalPreviewModalAction();\n }}\n >\n {t(\"preview\")}\n
\n )}\n {\n e.stopPropagation();\n editButton();\n }}\n >\n \n \n {\n e.stopPropagation();\n removeButton();\n }}\n >\n \n \n \n \n );\n};\n\nItem.propTypes = {\n onCardClick: PropTypes.func,\n title: PropTypes.string,\n description: PropTypes.string,\n editButton: PropTypes.func,\n selectedItem: PropTypes.bool,\n removeButton: PropTypes.func\n};\n\nexport default Item;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n\nimport Item from \"./Item\";\n\nconst ListStyles = styled.div`\n width: 100%;\n height: 286px;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 4px;\n\n .selectedItem {\n box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2),\n 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 4px 5px 0 rgba(0, 0, 0, 0.14);\n cursor: default;\n }\n`;\n\nconst List = ({\n list = [],\n itemOnClick,\n animationId,\n animationClassName,\n editButton,\n chosenItem,\n removeButton,\n openModalPreviewModalAction = () => {},\n isBenefitGroup = false\n}) => (\n \n {list.map(item => (\n itemOnClick(item.id)}\n editButton={() => editButton(item.id)}\n removeButton={() => removeButton(item)}\n openModalPreviewModalAction={() => openModalPreviewModalAction(item.id)}\n isBenefitGroup={isBenefitGroup}\n />\n ))}\n \n);\n\nList.propTypes = {\n list: PropTypes.arrayOf(PropTypes.shape()),\n itemOnClick: PropTypes.func,\n chosenItem: PropTypes.number,\n animationId: PropTypes.string,\n animationClassName: PropTypes.string,\n editButton: PropTypes.func,\n removeButton: PropTypes.func\n};\n\nexport default List;\n","import React, { useRef, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport ReactTooltip from \"react-tooltip\";\nimport styled from \"styled-components\";\n\n// Services\nimport { truncate } from \"../../../../../services/truncateString\";\n// Components\nimport Card from \"../../../../../components/wrapperCardComponent\";\nimport BenefitDetailsActions from \"./BenefitDetailsActions/BenefitDetailsActions\";\n// Icons\nimport { TokenIcon, DotsIcon } from \"../../../../../assets/Icons\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n transformPriceRangeTokensToPriceRangeRsd,\n transformTokenCurrencyIcons,\n transformTokensToRsd\n} from \"../../../../../utils/transformTokensToRsd\";\n\nconst BenefitDetailsStyles = styled.div`\n width: 328px;\n height: 350px;\n padding: 5px 5px 0px 30px;\n\n .detailsActionsButton {\n border: 0;\n background-color: white;\n }\n\n .benefitDetailsContent {\n height: 301px;\n }\n\n .titleContainer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: relative;\n\n .title {\n font-size: 20px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #373737;\n }\n\n .__react_component_tooltip.type-dark.border {\n padding: 0;\n min-width: 120px;\n border-radius: 5px;\n border: 1px solid #1568bf !important;\n & > div {\n display: flex;\n align-items: center;\n flex-direction: column;\n }\n }\n }\n\n .description {\n height: 156px;\n line-height: 1.83;\n color: #4b4b4b;\n overflow-y: auto;\n overflow-x: hidden;\n margin-bottom: 43px;\n }\n\n .tokenPriceContainer {\n display: flex;\n align-items: center;\n margin-bottom: 25px;\n\n .tokens {\n font-size: 14px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #373737;\n margin-right: 10px;\n }\n }\n\n .durationContainer {\n display: flex;\n align-items: center;\n\n .duration {\n font-size: 14px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #373737;\n margin-right: 10px;\n }\n }\n\n .draftIndicator {\n display: flex;\n background: #dcdcdc;\n border-radius: 4px;\n font-family: \"Inter\";\n font-style: normal;\n font-weight: 500;\n font-size: 14px;\n color: #737373;\n padding: 5px;\n position: absolute;\n right: 25px;\n }\n\n @media screen and (max-width: 1868px) {\n width: 361px;\n }\n`;\n\nconst BenefitDetails = ({ openEditBenefit, benefitDetails, fetchData }) => {\n const { t } = useTranslation();\n const [isActive, setIsActive] = useState(false);\n const myTooltip = useRef();\n\n const generatePrice = () => {\n let priceString = \"\";\n if (benefitDetails.expiration === \"voucher\" && benefitDetails.vouchers) {\n benefitDetails.vouchers.forEach(\n (voucher, i) =>\n (priceString =\n priceString +\n `${voucher.price}${\n i + 1 === benefitDetails.vouchers.length ? \"\" : \"-\"\n }`)\n );\n } else {\n priceString = benefitDetails.tokenPrice;\n }\n return priceString;\n };\n\n const onClickDots = () => {\n setIsActive(true);\n ReactTooltip.rebuild();\n };\n\n const handleBlur = () => {\n setIsActive(false);\n ReactTooltip.rebuild();\n };\n\n const handleEdit = e => {\n e.stopPropagation();\n openEditBenefit();\n };\n\n const isInRSD = localStorage.getItem(\"isValueInRsd\");\n\n return (\n \n {benefitDetails && (\n
\n \n
\n
\n

{truncate(benefitDetails.title, 20)}

\n {benefitDetails.isDraft && (\n {t(\"Draft\")}\n )}\n {\n e.stopPropagation();\n onClickDots();\n }}\n onBlur={() => handleBlur()}\n >\n \n \n (myTooltip.current = ref)}\n className=\"tooltip\"\n getContent={dataTip => {\n if (!dataTip) {\n return \"\";\n }\n\n return (\n {\n myTooltip.current.tooltipRef = null;\n ReactTooltip.hide();\n }}\n fetchData={fetchData}\n />\n );\n }}\n border\n clickable\n />\n
\n

{benefitDetails.summary}

\n
\n

\n {benefitDetails.expiration === \"voucher\"\n ? t(\"vouch_price\")\n : t(\"Budget\")}\n

\n

\n {transformPriceRangeTokensToPriceRangeRsd(generatePrice())}\n

\n {transformTokenCurrencyIcons()}\n
\n
\n

{t(\"duration_type\")} :

\n

\n {t(benefitDetails.expiration)}\n

\n
\n
\n \n
\n )}\n
\n );\n};\n\nBenefitDetails.propTypes = {\n openEditBenefit: PropTypes.func,\n benefitDetails: PropTypes.shape()\n};\n\nexport default BenefitDetails;\n","import styled from 'styled-components'\n\nconst SubRowStyles = styled.div`\n\t.benefitGroupContainer {\n\t\tpadding: 5px 30px 0 30px;\n\t}\n\n\t.testDiv {\n\t\toverflow:hidden;\n transition:height 0.3s ease-out, border-width 0.1s linear;\n\t\theight: 0;\n\t\tposition: relative;\n\t}\n\n\t.subRowContent {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tpadding: 20px 0;\n\t}\n\n\t.contentContainer {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\toverflow-x: auto;\n\t\toverflow-y: hidden;\n\t}\n\n\t.firstTwo {\n\t\tdisplay: flex;\n\t}\n\n\t/* provider */\n\n\t.providerDetails {\n\t\theight: 350px;\n\t\twidth: 390px;\n\t\tborder-right: 1px dotted #d8d8d8;\n\t\tpadding: 5px 30px 0 10px;\n\t}\n\n\t.providerDetailsCard {\n\t\twidth: 350px;\n\t\theight: 344px;\n\t\tborder-radius: 4px;\n\t\tborder: solid 1px #d8d8d8;\n\t\tbackground-color: #ffffff;\n\t\tpadding: 20px;\n\t\toverflow: hidden;\n\t}\n\n\t.providerTitle {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tmargin-bottom: 10px;\n\t}\n\n\t.providerDescription {\n\t\theight: calc(100% - 50px);\n\t\twidth: 100%;\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t}\n\n\t.providerDescriptionText {\n\t\tfont-size: 12px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.67;\n\t\tletter-spacing: normal;\n\t\tcolor: #373737;\n\t\toverflow-wrap: break-word;\n\t}\n\n\t/* end of provider */\n\n\t/* benefit groups */\n\n\t.benefitGroupsContainer {\n\t\t/* height: 339px; */\n\t\theight: 350px;\n\t\twidth: 380px;\n\t\tpadding: 0 30px;\n\t\tborder-right: 1px dotted #d8d8d8;\n\t}\n\n\t/* end of benefit groups */\n\n\t.secondTwo {\n\t\tdisplay: flex;\n\t}\n\t/* benefits */\n\n\t.benefitsContainer {\n\t\theight: 350px;\n\t\twidth: 380px;\n\t\tpadding: 0 30px;\n\t\tborder-right: 1px dotted #d8d8d8;\n\t}\n\n\n\t.benefitGroupColumn {\n\t\twidth: 380px;\n\t\theight: 282px;\n\t\toverflow-y: scroll;\n\t}\n\n\t.addBenefitGroup {\n\t\twidth: calc(100% - 8px);\n\t\theight: 44px;\n\t\tborder-radius: 4px;\n\t\tborder: solid 1px #d8d8d8;\n\t\tmargin-top: 20px;\n\t\tmargin-left: 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpadding: 0 12px;\n\t\tcursor: pointer;\n\t}\n\t.circle {\n\t\twidth: 24px;\n\t\theight: 24px;\n\t\tborder-radius: 50%;\n\t\tbackground: #1568bf;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tcolor: #fff;\n\t\tmargin-right: 13px;\n\t}\n\n\t.buttonText {\n\t\tfont-size: 16px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: 1.38;\n\t\tletter-spacing: -0.4px;\n\t\tcolor: #373737;\n\t}\n\n\t.benefitList {\n\t\twidth: 350px;\n\t\theight: 280px;\n\t\toverflow-y: scroll;\n\t}\n\n\t/* end of benefits */\n\t\n@media screen and (max-width: 1868px) {\n .subRowContent {\n\t\tjustify-content: center;\n\t}\n\n\t.contentContainer {\n\t\twidth: 800px;\n\t}\n\n\t.firstTwo {\n\t\tmargin-bottom: 20px;\n\t}\n\n\t.benefitGroupsContainer {\n\t\tborder-right: none;\n\t\twidth: 390px;\n\t}\n\n\t.benefitsContainer {\n\t\twidth: 390px;\n padding: 0 30px 0 10px;\n\t}\n}\n`\n\nexport default SubRowStyles\n","import React, { useState, useEffect, useContext } from \"react\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\nimport swal from \"sweetalert\";\nimport { toast } from \"react-toastify\";\n// assets\nimport { EditIconSvg } from \"../../../../assets/Icons\";\n// components\nimport List from \"../List/List\";\nimport BenefitDetails from \"../shared/BenefitDetails/BenefitDetails\";\n// services\nimport * as providersService from \"../../../../services/api/admin/providers.service\";\nimport * as actionCreators from \"../../../../actions/admin/providers.actions\";\nimport { removeCardView, removeHeightOnClick } from \"../providersAnimations\";\n// styles\nimport SubRowStyles from \"./SubRowStyles\";\n// context\nimport { useTranslation } from \"react-i18next\";\nimport { useHistory } from \"react-router-dom\";\n\nconst SubRow = ({\n provider,\n openModal,\n chosenBenefitGroupId,\n setChosenBenefitGroupId,\n setChosenBenefitId,\n chosenBenefitId,\n deleteBenefitGroup,\n deleteBenefit,\n fetchData\n}) => {\n const history = useHistory();\n const { t } = useTranslation();\n const [chosenBenefits, setChosenBenefits] = useState(undefined);\n const [benefitDetails, setBenefitDetails] = useState(undefined);\n\n useEffect(() => {\n const chosenBenefitGroup = provider.benefitGroups.find(\n bg => bg.id === chosenBenefitGroupId\n );\n if (chosenBenefitGroup && chosenBenefitGroup.benefits.length > 0) {\n setChosenBenefitId(chosenBenefitGroup.benefits[0].id);\n setChosenBenefits(chosenBenefitGroup.benefits);\n setBenefitDetails(chosenBenefitGroup.benefits[0]);\n } else if (chosenBenefitGroup && chosenBenefitGroup.benefits.length === 0) {\n setChosenBenefitId(null);\n setChosenBenefits(undefined);\n setBenefitDetails(undefined);\n }\n }, [chosenBenefitGroupId, provider]);\n\n const openEditBenefitGroup = benefitGroupId => {\n openModal(\"editBenefitGroup\");\n setChosenBenefitGroupId(benefitGroupId);\n };\n\n const openEditBenefit = benefitId => {\n openModal(\"editBenefit\");\n setChosenBenefitId(benefitId);\n setBenefitDetails(\n provider.benefitGroups\n .find(bg => bg.id === chosenBenefitGroupId)\n .benefits.find(benefit => benefit.id === benefitId)\n );\n };\n\n const openModalPreviewModalAction = benefitGroupId => {\n // openModal(\"preview\");\n setChosenBenefitGroupId(benefitGroupId);\n history.push(`/benefits/preview/${benefitGroupId}`);\n };\n\n const removeBenefitGroup = async benefitGroup => {\n if (benefitGroup.benefits.length > 0) {\n toast.info(t(\"delete_benefit_group_info\"));\n } else {\n const result = confirm(t(\"delete_benefit_group_alert\"));\n if (result) {\n const response = await providersService.deleteBenefitGroup(\n benefitGroup.id\n );\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n setChosenBenefitGroupId(null);\n deleteBenefitGroup(provider.id, benefitGroup.id);\n }\n }\n };\n\n const removeBenefit = async benefit => {\n swal({\n title: t(\"delete_benefit_group_question\"),\n text: t(\"delete_benefit_group_description\"),\n buttons: [true, \"Delete\"],\n dangerMode: true\n }).then(async value => {\n if (value) {\n const response = await providersService.deleteBenefit(benefit.id);\n\n if (response.hasError) {\n return toast.error(response.error.data.error.message);\n }\n\n deleteBenefit(provider.id, chosenBenefitGroupId, benefit.id);\n }\n });\n };\n\n const setBenefits = id => {\n const choisenBenefirGroup = provider.benefitGroups.find(bg => bg.id === id);\n setChosenBenefits(choisenBenefirGroup.benefits);\n setChosenBenefitGroupId(id);\n };\n\n const setBenefit = id => {\n const chosenBenefit = chosenBenefits.find(benefit => benefit.id === id);\n setBenefitDetails(chosenBenefit);\n setChosenBenefitId(id);\n };\n\n return (\n \n
\n
\n
\n {\n removeHeightOnClick(provider.id);\n removeCardView(provider.id);\n }}\n >\n x\n
\n
\n
\n
\n
\n
\n openModal(\"editProvider\")}\n >\n
\n

{provider.name}

\n openModal(\"editProvider\")}\n >\n \n
\n
\n
\n

\n {provider.summary}\n

\n
\n
\n
\n
\n
\n {provider.benefitGroups && (\n \n )}\n openModal(\"addBenefitGroup\")}\n >\n
\n

+

\n
\n

{t(\"add_benefit_group\")}

\n
\n
\n
\n
\n
\n
\n \n {\n if (chosenBenefitGroupId) {\n openModal(\"addBenefit\");\n } else {\n toast.info(t(\"select_benefit_group_warning\"));\n }\n }}\n >\n
\n

+

\n
\n

{t(\"add_benefit\")}

\n
\n
\n openEditBenefit(benefitDetails.id)}\n fetchData={fetchData}\n />\n \n \n \n
\n
\n \n
\n );\n};\n\nSubRow.propTypes = {\n provider: PropTypes.shape(),\n openModal: PropTypes.func,\n chosenBenefitId: PropTypes.number,\n setChosenBenefitGroupId: PropTypes.func,\n setChosenBenefitId: PropTypes.func,\n chosenBenefitGroupId: PropTypes.number\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n deleteBenefitGroup: (providerId, benefitGroupId) =>\n dispatch(actionCreators.deleteBenefitGroup(providerId, benefitGroupId)),\n deleteBenefit: (providerId, benefitGroupId, benefitId) => {\n dispatch(\n actionCreators.deleteBenefit(providerId, benefitGroupId, benefitId)\n );\n }\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(SubRow);\n","import styled from 'styled-components'\n\nconst ProvidersStyles = styled.section`\n\t.providersContainer {\n\t\twidth: calc(100% - 210px);\n\t\tmargin-left: 210px;\n\t\tbackground: whitesmoke;\n\t\tmin-height: 100vh;\n\t}\n\n\t.providersContent {\n\t\tpadding: 0 30px 30px 30px;\n\t}\n\n\t#providersList {\n\t\topacity: 0;\n\t\ttransition: all 0.4s ease-in-out;\n\t}\n\n\t.filtersHeader {\n\t\tdisplay: flex;\n justify-content: space-between;\n align-items: baseline;\n gap: 15px;\n\t}\n\n\t.providersSearch {\n\t\twidth: 250px !important;\n\t}\n\n\t.plusContainer {\n\t\twidth: 24px;\n\t\theight: 24px;\n\t\tbackground: #fff;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tmargin-right: 10px;\n\t\tcolor: #373737;\n\t\tborder-radius: 50%;\n\n\t\t.buttonText {\n\t\t\tline-height: 24px;\n\t\t\tfont-weight: 500;\n\t\t\tfont-size: 14px;\n\t\t}\n\t}\n\t\n\n\t.addHeight {\n\t\tmax-height: 4000px !important;\n\t}\n\n\t.benefitGroupsRow {\n\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: space-between;\n\t\t\tborder-top: 1px solid #d8d8d8;\n\t\t\tborder-bottom: 1px solid #d8d8d8;\n\t\t\tpadding: 30px;\n\t\t\tcursor: pointer;\n\n\t\t\t&:hover {\n\t\t\t\ttransform: scale(30px);\n\t\t\tbox-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 4px 5px 0 rgba(0, 0, 0, 0.14);\n\t\t\t}\t\n\t}\n\t.cardView {\n\t\t\ttransform: scale(30px);\n\t\t\tbox-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 4px 5px 0 rgba(0, 0, 0, 0.14);\n\t}\n`\nexport default ProvidersStyles\n","import React, { useEffect, useState, useContext, useRef, useMemo } from \"react\";\nimport { connect } from \"react-redux\";\nimport { BeatLoader } from \"react-spinners\";\nimport { toast } from \"react-toastify\";\nimport Pagination from \"react-pagination-js\";\n// components\nimport {\n Header,\n Button,\n Card,\n SearchInput,\n MultiselectInput,\n SortSelectInput,\n Modal,\n openModalAnim,\n closeModalAnim\n} from \"../../../components\";\nimport ProviderRow from \"./ProviderRow/ProviderRow\";\nimport PreviewModal from \"./PreviewModal/PreviewModal\";\nimport {\n FormRenderer,\n FormModal,\n openModalAnimForm,\n closeModalAnimForm\n} from \"./shared\";\nimport SubRow from \"./SubRow/SubRow\";\n// styles\nimport ProvidersStyles from \"./ProvidersStyles\";\nimport { override } from \"../../../services/loadingOverride.styles\";\n// services\nimport { collapseSection } from \"./providersAnimations\";\nimport * as actionCreators from \"../../../actions/admin/providers.actions\";\nimport * as providersService from \"../../../services/api/admin/providers.service\";\nimport * as employeeService from \"../../../services/api/employee/employeeBenefits.services\";\n// context\nimport { UserContext } from \"../../../modules/user/context/user.context\";\nimport { ProvidersContext } from \"../../../modules/superAdmin/providers/context/providers.context\";\n// hooks\nimport { useDisableBodyScroll } from \"../../../hooks/useDisableBodyScroll\";\n// Utils\nimport { downloadCsvFromBase64EncodedString } from \"../../../services/files.utils\";\nimport { isEmpty } from \"../../../services/general.utils\";\nimport { useTranslation } from \"react-i18next\";\nimport LOCALES from \"../../../constants/locales.constants\";\n\nconst LIMIT = 4;\n\nconst Providers = ({\n providers,\n setInitProviders,\n count,\n page,\n search,\n setProvidersPage,\n setProvidersSearch\n}) => {\n const { t } = useTranslation();\n const [modalType, setModalType] = useState(\"\");\n const [chosenProviderId, setChosenProviderId] = useState(null);\n const [chosenBenefitGroupId, setChosenBenefitGroupId] = useState(null);\n const [chosenBenefitId, setChosenBenefitId] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n const [sortOrder, setOrder] = useState(\"\");\n const [sortKey, setKey] = useState(\"\");\n const [categories, setCategories] = useState([]);\n const [chosenCategories, setChosenCategories] = useState([]);\n const [chosenCategoryIds, setChosenCategoryIds] = useState([]);\n\n useDisableBodyScroll(modalType);\n\n const areFiltersLoaded = useRef(false);\n\n const sortOptions = [\n {\n id: 1,\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"created_at\"],\n key: \"created\"\n },\n {\n id: 2,\n name: LOCALES[localStorage.getItem(\"locales\") || \"rs\"][\"provider_name\"],\n key: \"name\"\n }\n ];\n\n /**\n * Handles altering of sorting direction.\n * Sets sort order to state.\n * Sets sort key to state.\n * @param {object} option\n */\n const handleSelectingSortOption = option => {\n if (isEmpty(option)) {\n setKey(\"\");\n setOrder(\"\");\n return;\n }\n\n if (sortOrder === \"\") {\n setOrder(\"DESC\");\n }\n if (sortOrder === \"DESC\") {\n setOrder(\"ASC\");\n }\n if (sortOrder === \"ASC\") {\n setOrder(\"DESC\");\n }\n setKey(option.key);\n };\n\n const isMounted = useRef(false);\n\n const openModal = type => {\n if (type !== \"preview\") {\n setModalType(type);\n setTimeout(() => {\n openModalAnimForm();\n }, 100);\n } else {\n setModalType(type);\n setTimeout(() => {\n openModalAnim();\n }, 100);\n }\n };\n\n const closeModalForm = () => {\n closeModalAnimForm();\n setTimeout(() => {\n setModalType(\"\");\n }, 600);\n };\n\n const closeModal = () => {\n closeModalAnim();\n setTimeout(() => {\n setModalType(\"\");\n }, 600);\n };\n\n const fetchCategories = async () => {\n const categoriesResponse = await employeeService.getCategories();\n\n if (categoriesResponse.hasError) {\n return toast.error(\n categoriesResponse.errorMessage\n ? categoriesResponse.errorMessage\n : t(\"failed_to_get_categories\")\n );\n }\n\n setCategories(categoriesResponse.categories);\n\n areFiltersLoaded.current = true;\n };\n\n /**\n * Handles select of element from multiselect.\n * Sets selected elements' ids to state.\n * @param {Category} options - Selected options, emmited from multiselect.\n */\n const handleSetChosenCategories = options => {\n let selectedCategoryIds = [];\n\n if (options && options.length) {\n selectedCategoryIds = options.map(category => category.id);\n }\n\n setChosenCategories(options);\n setChosenCategoryIds(selectedCategoryIds);\n };\n\n const fetchProviders = async (\n searchText = search,\n order = sortOrder,\n key = sortKey,\n categoryIds = chosenCategoryIds\n ) => {\n const response = await providersService.getInitProviders({\n limit: LIMIT,\n page,\n searchText,\n order,\n key,\n categoryIds\n });\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_providers\")\n );\n }\n\n if (isMounted.current) {\n setInitProviders(response.providers, response.count);\n setIsLoading(false);\n setTimeout(() => {\n const providersList = document.getElementById(\"providersList\");\n if (isMounted.current && providersList) {\n providersList.style.opacity = 1;\n }\n }, 100);\n }\n };\n\n const getVendorReport = async () => {\n const response = await providersService.getVendorReport();\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_report\")\n );\n }\n\n downloadCsvFromBase64EncodedString(\n response.data.providerBuffer,\n \"providers.csv\"\n );\n downloadCsvFromBase64EncodedString(\n response.data.benefitGroupBuffer,\n \"benefit_groups.csv\"\n );\n downloadCsvFromBase64EncodedString(\n response.data.benefitBuffer,\n \"benefits.csv\"\n );\n };\n\n useEffect(() => {\n isMounted.current = true;\n\n fetchProviders();\n fetchCategories();\n }, [page]);\n\n useEffect(() => {\n if (areFiltersLoaded.current === true) fetchProviders();\n }, [chosenCategoryIds, sortOrder]);\n\n useEffect(() => {\n window.onresize = () => {\n const allProviderRows = document.getElementsByClassName(\"row\");\n const allSubrows = document.getElementsByClassName(\"testDiv\");\n for (let i = 0; i < allSubrows.length; i++) {\n if (allSubrows[i]) {\n collapseSection(allSubrows[i]);\n }\n }\n\n for (let i = 0; i < allProviderRows.length; i++) {\n if (\n allProviderRows[i] &&\n allProviderRows[i].classList.contains(\"cardView\")\n ) {\n allProviderRows[i].classList.remove(\"cardView\");\n }\n }\n };\n\n return () => {\n window.onresize = null;\n isMounted.current = false;\n };\n }, []);\n\n return (\n \n
\n
\n
\n {isLoading ? (\n \n \n
\n ) : (\n \n \n
\n \n
\n handleSelectingSortOption(option)}\n />\n
\n handleSetChosenCategories(option)}\n selectedValues={chosenCategories}\n />\n
\n \n
\n {providers.map(provider => (\n setChosenProviderId(provider.id)}\n setChosenBenefitGroup={setChosenBenefitGroupId}\n setChosenBenefit={setChosenBenefitId}\n >\n \n \n ))}\n \n setProvidersPage(page)}\n theme=\"border-bottom\"\n />\n \n \n \n )}\n \n \n {modalType !== \"\" && (\n <>\n {modalType !== \"preview\" ? (\n \n \n \n ) : (\n \n \n \n )}\n \n )}\n
\n );\n};\n\nconst mapStateToProps = state => {\n return {\n providers: state.providers.providers,\n count: state.providers.count,\n page: state.providers.page,\n search: state.providers.search\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setInitProviders: (providers, count) =>\n dispatch(actionCreators.setInitProviders(providers, count)),\n setProvidersPage: page => dispatch(actionCreators.setProvidersPage(page)),\n setProvidersSearch: search =>\n dispatch(actionCreators.setProvidersSearch(search))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Providers);\n","const openModalAnimForm = () => {\n\tconst modal = document.getElementById('modal')\n\tconst closeButton = document.getElementById('closeButton')\n\tmodal.classList.add('showModal')\n\tsetTimeout(() => {\n\t\tcloseButton.classList.add('showCloseButton')\n\t}, 200)\n}\n\n\nconst closeModalAnimForm = () => {\n\tconst modal = document.getElementById('modal')\n\tconst closeButton = document.getElementById('closeButton')\n\tif (closeButton && closeButton.classList.contains('showCloseButton')) {\n\t\tcloseButton.classList.remove('showCloseButton')\n\t}\n\tif (modal && modal.classList.contains('showModal')) {\n\t\tsetTimeout(() => {\n\t\t\tmodal.classList.remove('showModal')\n\t\t}, 300)\n\t}\n}\n\nexport { openModalAnimForm, closeModalAnimForm }\n","export const SET_COMPANIES = \"SET_COMPANIES\";\nexport const ADD_NEW_COMPANY = \"ADD_NEW_COMPANY\";\nexport const CREATE_COMPANY = \"CREATE_COMPANY\";\nexport const REMOVE_COMPANY = \"REMOVE_COMPANY\";\nexport const DELETE_COMPANY = \"DELETE_COMPANY\";\nexport const SET_SELECTED_COMPANY = \"SET_SELECTED_COMPANY\";\nexport const SET_COMPANY = \"SET_COMPANY\";\nexport const SET_PAGE = \"COMPANY_SET_PAGE\";\nexport const SEARCH_CHANGE = \"COMPANY_SEARCH_CHANGE\";\n","import * as actionTypes from \"../../constants/actionTypes/admin/companies.constants\";\nimport { Company } from \"../../models/domain\";\nimport * as modelMapperService from \"../../models/modelMapper.service\";\n\nexport const setCompanies = (companies, count) => {\n companies = modelMapperService.mapManyToDomain(\n companies,\n Company\n );\n return { type: actionTypes.SET_COMPANIES, companies, count };\n};\n\nexport const addNewCompany = company => {\n company = modelMapperService.mapOneToDomain(company, Company);\n return { type: actionTypes.ADD_NEW_COMPANY, company };\n};\n\nexport const deleteCompany = id => {\n return { type: actionTypes.DELETE_COMPANY, id };\n};\n\nexport const setSelectedCompany = id => {\n return { type: actionTypes.SET_SELECTED_COMPANY, id };\n};\n\nexport const setPage = page => {\n return { type: actionTypes.SET_PAGE, page };\n};\n\nexport const onSearchChange = search => {\n return { type: actionTypes.SEARCH_CHANGE, search };\n};\n","import styled from \"styled-components\";\n\nconst DashboardStatisticsStyles = styled.section`\n margin-bottom: 20px;\n width: 100%;\n`;\n\nexport default DashboardStatisticsStyles;\n","import moment from \"moment\";\n\nconst adminDashboardStatisticAlgorithm = (data, startDate, endDate) => {\n if (data.lenght === 0) return null;\n\n const clonedData = JSON.parse(JSON.stringify(data));\n\n const newData = clonedData.map(item => {\n return {\n ...item,\n createdAt: moment(item.createdAt).isBefore(startDate)\n ? new Date(\n moment(startDate)\n .startOf(\"month\")\n .format(\"MM-DD-YYYY\")\n ).toISOString()\n : item.createdAt\n };\n });\n\n const result = {};\n\n const filteredData = newData.filter(item =>\n moment(item.createdAt).isBetween(startDate, endDate, \"day\", \"[]\")\n );\n\n filteredData.forEach(uniqueItem => {\n const date = moment(uniqueItem.createdAt).format(\"DD.MM.YYYY\");\n if (!result[date]) {\n result[date] = [];\n }\n result[date].push(uniqueItem.userId);\n });\n\n const sortedDates = Object.keys(result).sort((a, b) =>\n moment(a, \"DD.MM.YYYY\").diff(moment(b, \"DD.MM.YYYY\"))\n );\n\n return { statistic: result, dates: sortedDates, length: filteredData };\n};\n\nexport default adminDashboardStatisticAlgorithm;\n","const adminDashboardActionsNamespace = \"[admin_dashboard]: \";\n\nconst adminDashboardActionTypes = {\n SET_ADMIN_DASHBOARD_FILTERS: `${adminDashboardActionsNamespace}SET_ADMIN_DASHBOARD_FILTERS`,\n SET_ADMIN_DASHBOARD_STATISTICS: `${adminDashboardActionsNamespace}SET_ADMIN_DASHBOARD_STATISTICS`,\n SET_ADMIN_DASHBOARD_USER_BENEFITS: `${adminDashboardActionsNamespace}SET_ADMIN_DASHBOARD_USER_BENEFITS`\n};\n\nexport default adminDashboardActionTypes;\n","import adminDashboardActionTypes from \"../../constants/actionTypes/admin/dashboard.constants\";\n\nconst setAdminDashboardFilters = payload => {\n return {\n type: adminDashboardActionTypes.SET_ADMIN_DASHBOARD_FILTERS,\n payload\n };\n};\nconst setAdminDashboardStatistics = payload => {\n return {\n type: adminDashboardActionTypes.SET_ADMIN_DASHBOARD_STATISTICS,\n payload\n };\n};\n\nconst setAdminDashboardUserBenefits = payload => {\n return {\n type: adminDashboardActionTypes.SET_ADMIN_DASHBOARD_USER_BENEFITS,\n payload\n };\n};\n\nexport {\n setAdminDashboardFilters,\n setAdminDashboardStatistics,\n setAdminDashboardUserBenefits\n};\n","import moment from \"moment\";\n\nexport const handleChartOptions = (data, t) => {\n const dataForSeries = Object.entries(data).map(([key, value]) => {\n return { x: key, y: value.length };\n });\n\n return [\n {\n name: t(\"Subscriptions\"),\n data: dataForSeries.sort((a, b) =>\n moment(a.x, \"YYYY-MM-DD\").diff(moment(b.x, \"YYYY-MM-DD\"))\n )\n }\n ];\n};\n","import styled from \"styled-components\";\n\nconst DashboardStatisticsNavbarStyles = styled.section`\n margin-bottom: 30px;\n width: 100%;\n\n .dashboardNavbarFirstLayer {\n margin-top: 10px;\n\n .uniqueUsersCountWrapper {\n position: relative;\n width: 160px;\n\n .uniqueUsersCountDropdown {\n position: absolute;\n background: #f5f5f5;\n width: 260px;\n z-index: 12;\n padding: 20px;\n border-radius: 8px;\n box-shadow: rgba(100, 100, 111, 0.2) 0px 7px 29px 0px;\n }\n }\n\n .uniqueUsersCount {\n border: 1px solid #1568bf;\n border-radius: 8px;\n width: 160px;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 24px;\n color: #1568bf;\n cursor: pointer;\n transition: 0.5s ease-in;\n\n &:hover {\n color: white;\n background: #1568bf;\n }\n\n span {\n font-size: 16px;\n font-weight: 500;\n }\n\n p {\n font-size: 24px;\n font-weight: 700;\n }\n }\n }\n\n .dashboardNavbarSecondLayer {\n margin-top: 20px;\n\n .datePickerWrapper {\n position: relative;\n display: flex;\n gap: 20px;\n align-items: center;\n\n .dateWrapper {\n position: relative;\n }\n\n #companyId {\n height: 40px;\n width: 180px;\n\n .react-dropdown-select {\n height: 100%;\n }\n }\n\n .react-datepicker {\n position: absolute;\n z-index: 12;\n top: 45px;\n }\n }\n\n .openDatePicker {\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 10px;\n border-radius: 4px;\n border: solid 1px transparent;\n color: #1568bf;\n outline: #1568bf;\n background: #ffffff;\n outline-style: inset;\n outline-width: 0.5px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 600;\n text-align: center;\n margin: 0;\n transition: 0.5s;\n\n &:hover {\n background: #1568bf;\n color: white;\n }\n }\n }\n`;\n\nexport default DashboardStatisticsNavbarStyles;\n","export const calculateCompanySubscriptions = data => {\n let companyAnagram = {};\n\n data.forEach(sub => {\n companyAnagram[sub.User.Company.name] =\n companyAnagram[sub.User.Company.name] + 1 || 1;\n });\n\n return companyAnagram;\n};\n","import { Company } from \"../../../models/domain\";\nimport { CreateCompanyPayload } from \"../../../models/server/payloads/CreateCompany.payload\";\nimport CompaniesResponse from \"../../../models/server/responses/Companies.response\";\nimport { apiService } from \"../api.service\";\n\nimport { isEmpty } from \"../../general.utils\";\n\nexport const getCompanies = async ({\n limit = 20,\n page,\n searchText,\n orderColumns\n} = {}) => {\n let queryParams = \"\";\n\n if (limit) {\n queryParams += `limit=${limit}`;\n }\n\n if (page) {\n queryParams += `${!isEmpty(queryParams) ? \"&\" : \"\"}page=${page}`;\n }\n\n if (searchText) {\n queryParams += `${!isEmpty(queryParams) ? \"&\" : \"\"}search=${searchText}`;\n }\n\n let orderQuery = \"\";\n if (orderColumns && orderColumns.length > 0) {\n orderQuery = orderColumns.reduce(\n (acc, column) =>\n `${!isEmpty(acc) ? `${acc}&` : \"\"}order=${column.field} ${\n column.isSortedUp ? \"ASC\" : \"DESC\"\n }`,\n \"\"\n );\n }\n\n if (!isEmpty(orderQuery)) {\n queryParams += `${!isEmpty(queryParams) && \"&\"}${orderQuery}`;\n }\n\n const response = await apiService.get(`/company/get?${queryParams}`);\n\n if (response.hasError) return response;\n\n return new CompaniesResponse(response);\n};\n\nexport const createCompany = async newCompany => {\n let payloadData = new CreateCompanyPayload(newCompany);\n\n if (payloadData.paymentDeadlineDaysNumber) {\n const response = await apiService.post(\n \"/company/create\",\n payloadData.payload\n );\n\n if (response.hasError) return response;\n\n return new Company(response.data);\n }\n};\n\nexport const getSelectedCompany = async id => {\n const response = await apiService.get(`/company/${id}`);\n\n if (response.hasError) return response;\n\n return new Company(response.data);\n};\n\nexport const updateCompany = async company => {\n let payloadData = new CreateCompanyPayload(company);\n\n if (payloadData.paymentDeadlineDaysNumber) {\n const response = await apiService.put(\n `/company/update/${company.id}`,\n payloadData.payload\n );\n\n if (response.hasError) return response;\n\n return new Company(response.data);\n }\n};\n","import React, { useEffect, useState } from \"react\";\nimport { InputLabel, SelectInput } from \"../../../../../components\";\nimport * as companiesService from \"../../../../../services/api/admin/companies.service\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const SelectCompaniesComponent = ({ onSelect }) => {\n const { t } = useTranslation();\n const [companiesPage, setCompaniesPage] = useState(1);\n const [companies, setCompanies] = useState([]);\n const [company, setCompany] = useState(null);\n const [totalPages, setTotalPages] = useState(1);\n\n const getCompanies = async () => {\n const response = await companiesService.getCompanies({\n page: companiesPage\n });\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n const formattedResponse = [\n { id: \"All Companies\", name: \"All Companies\" },\n ...response.companies\n ];\n\n setCompanies(formattedResponse);\n setTotalPages(response.pages);\n };\n\n const refetchCompanies = async () => {\n let currentPage = companiesPage;\n let newPage = (currentPage += 1);\n\n if (newPage > totalPages) return;\n\n setCompaniesPage(newPage);\n\n const response = await companiesService.getCompanies({ page: newPage });\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n let newCompanies = [];\n setTimeout(() => {\n newCompanies = [...companies, ...response.companies];\n setTimeout(() => {\n setCompanies(newCompanies);\n }, 100);\n }, 100);\n };\n\n useEffect(() => {\n getCompanies();\n }, []);\n\n return (\n onSelect(option.id)}\n fetchMoreData={refetchCompanies}\n customId=\"companyId\"\n shouldHaveHight={false}\n shouldHaveFullWidth\n customHeight=\"27px\"\n placeholder={t(\"Select company\")}\n />\n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport DashboardStatisticsNavbarStyles from \"./DashboardStatisticsNavbarStyles\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { calculateCompanySubscriptions } from \"../helpers/calculateCompanySubscriptions\";\nimport ReactDatePicker from \"react-datepicker\";\nimport moment from \"moment\";\nimport { setAdminDashboardFilters } from \"../../../../../actions/admin/dashboard.actions\";\nimport useClickOutside from \"../../../../../hooks/useClickOutside\";\nimport { SelectCompaniesComponent } from \"./SelectCompaniesComponent\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const DashboardStatisticsNavbar = () => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n\n const { listOfUserBenefits, filters } = useSelector(\n state => state.adminDashboard\n );\n\n const dropdownRef = useRef(null);\n\n const [showDropdown, setShowDropdown] = useState(false);\n const [showDatePicker, setShowDatePicker] = useState(false);\n\n useClickOutside([dropdownRef], () => setShowDropdown(false));\n\n const companySubscriptions = calculateCompanySubscriptions(\n listOfUserBenefits\n );\n\n const [startDate, setStartDate] = useState(undefined);\n const [endDate, setEndDate] = useState(undefined);\n const [selectionComplete, toggleSelectionComplete] = useState(false);\n\n const handleDateChange = date => {\n if (!selectionComplete && !startDate) {\n setStartDate(date);\n return;\n }\n\n if (!selectionComplete && startDate && !endDate) {\n setEndDate(date);\n toggleSelectionComplete(true);\n return;\n }\n\n if (selectionComplete && startDate && endDate) {\n setStartDate(date);\n setEndDate(undefined);\n toggleSelectionComplete(false);\n return;\n }\n };\n\n const handleSelect = date => {\n if (\n !selectionComplete &&\n startDate &&\n !endDate &&\n sameDay(date, startDate)\n ) {\n handleDateChange(date);\n }\n };\n\n const sameDay = (d1, d2) => moment(d1).isSame(d2, \"day\");\n\n const handleSelectCompany = company => {\n dispatch(\n setAdminDashboardFilters({\n ...filters,\n companyId: company === \"All Companies\" ? null : company\n })\n );\n };\n\n useEffect(() => {\n if (!selectionComplete) return;\n\n dispatch(\n setAdminDashboardFilters({\n ...filters,\n startDate: moment(startDate).format(\"YYYY-MM-DD\"),\n endDate: moment(endDate).format(\"YYYY-MM-DD\")\n })\n );\n }, [startDate, endDate, selectionComplete]);\n\n return (\n \n
\n
\n setShowDropdown(state => !state)}\n ref={dropdownRef}\n >\n {t(\"unique_user_sub\")}\n

{listOfUserBenefits.length}

\n
\n {showDropdown && (\n
\n {Object.entries(companySubscriptions).map(([key, value]) => {\n return (\n
\n {key}: {value}\n
\n );\n })}\n
\n )}\n
\n \n
\n
\n
\n setShowDatePicker(state => !state)}\n >\n {t(\"Select Date\")}\n \n {showDatePicker && (\n \n
\n {startDate\n ? moment(startDate).format(\"DD/MM/YYYY\")\n : \"??/??/????\"}{\" \"}\n -{\" \"}\n {endDate\n ? moment(endDate).format(\"DD/MM/YYYY\")\n : \"??/??/????\"}\n
\n \n )}\n
\n \n
\n
\n
\n );\n};\n","import moment from \"moment\";\n\nconst startOfTheCurrentMonth = () => {\n return moment()\n .startOf(\"month\")\n .format(\"YYYY-MM-DD\");\n};\n\nconst currentDate = () => {\n return moment().format(\"YYYY-MM-DD\");\n};\n\nexport { startOfTheCurrentMonth, currentDate };\n","import React, { useEffect } from \"react\";\nimport DashboardStatisticsStyles from \"./DashboardStatisticsStyles\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport { apiService } from \"../../../../services/api/api.service\";\nimport { queryBuilder } from \"../../../../utils/queryBuilder\";\nimport adminDashboardStatisticAlgorithm from \"../../../../utils/helpers/adminDashboardStatisticAlgorithm\";\nimport ReactApexChart from \"react-apexcharts\";\nimport {\n setAdminDashboardStatistics,\n setAdminDashboardUserBenefits\n} from \"../../../../actions/admin/dashboard.actions\";\nimport { handleChartOptions } from \"./helpers/handleChartOptions\";\nimport { DashboardStatisticsNavbar } from \"./DashboardStatisticsNavbar/DashboardStatisticsNavbar\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n currentDate,\n startOfTheCurrentMonth\n} from \"../../../../utils/helpers/timeHelpers\";\n\nexport const DashboardStatistics = () => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const { filters, statistics } = useSelector(state => state.adminDashboard);\n\n const fetchDashboardStatistics = async payload => {\n try {\n const query = queryBuilder({\n baseQuery: \"/dashboard/admin-statistics\",\n queryObject: payload\n });\n\n const response = await apiService.get(query);\n\n const uniqueUsers = Array.from(\n new Map(response.data.items.map(item => [item.userId, item])).values()\n );\n\n const data = adminDashboardStatisticAlgorithm(\n uniqueUsers,\n payload.startDate || startOfTheCurrentMonth(),\n payload.endDate || currentDate()\n );\n\n dispatch(setAdminDashboardUserBenefits(data.length));\n dispatch(setAdminDashboardStatistics(data));\n } catch (error) {\n toast.error(t(\"failed_to_get_admin_statistics\"));\n }\n };\n\n useEffect(() => {\n fetchDashboardStatistics(filters);\n }, [filters]);\n\n return (\n \n {statistics && (\n <>\n \n \n \n )}\n \n );\n};\n","import React, { useRef, useState } from \"react\";\nimport { apiService } from \"../../../../services/api/api.service\";\nimport { Card } from \"../../../../components\";\nimport { SelectCompaniesComponent } from \"../DashboardStatistics/DashboardStatisticsNavbar/SelectCompaniesComponent\";\nimport { useTranslation } from \"react-i18next\";\nimport moment from \"moment\";\n\nconst ResetDates = () => {\n const { t } = useTranslation();\n const [showRollover, setShowRollover] = useState(false);\n const [rolloverInfo, setRolloverInfo] = useState(undefined);\n\n const getIfCompanyHasRollover = async companyId => {\n try {\n const response = await apiService.get(\n `/settings/company-rollover?companyId=${companyId}`\n );\n\n setRolloverInfo(response.data.companyRollover);\n console.log(response);\n } catch (error) {\n console.log(error);\n }\n };\n\n const handleSelectCompany = company => {\n const companyId = company === \"All Companies\" ? null : company;\n\n if (!companyId) return;\n getIfCompanyHasRollover(companyId);\n };\n\n return (\n
\n setShowRollover(state => !state)}\n >\n {t(\"show_rollover_dates\")}\n \n {showRollover && (\n \n \n
\n

{t(\"rollover_resets\")}

\n \n \n {rolloverInfo !== undefined\n ? rolloverInfo !== null\n ? moment(rolloverInfo.rolloverEndDate).format(\"DD.MM.YYYY\")\n : t(\"no_rollover\")\n : \"\"}\n

\n
\n
\n
\n )}\n \n );\n};\n\nexport default ResetDates;\n","import { apiService } from \"../api.service\";\n\nexport const getStatistics = async (company, searchDateString, reportType) => {\n const query =\n company === \"All Companies\"\n ? `/dashboard/report/statistics?date=${searchDateString}&report_type=${reportType}`\n : `/dashboard/report/statistics?company_id=${company}&date=${searchDateString}&report_type=${reportType}`;\n\n const response = await apiService.get(query);\n\n if (response.hasError) {\n return response;\n }\n\n return response;\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n Button,\n Card,\n InputLabel,\n Modal,\n openModalAnim,\n SelectInput\n} from \"../../../../components\";\nimport DatePicker from \"react-datepicker\";\nimport { reportTypeDropdownOptions } from \"../reportTypeDropdownOptions\";\nimport PrivacyPolicy from \"../../../../components/privacyPolicyModal\";\nimport { formatDateForSearch } from \"../../../HrPages/HrDashboard/dashboad.services\";\nimport * as dashboardService from \"../../../../services/api/admin/dashboard.service\";\nimport { downloadBlob } from \"../../../../services/files.utils\";\nimport * as companiesService from \"../../../../services/api/admin/companies.service\";\nimport { toast } from \"react-toastify\";\nimport { setCompanies } from \"../../../../actions/admin/companies.actions\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nexport const UserReport = () => {\n const dispatch = useDispatch();\n\n const [showReport, setShowReport] = useState(false);\n const [reportType, setReportType] = useState(undefined);\n const [company, setCompany] = useState(undefined);\n const [date, setDate] = useState(new Date());\n const [searchDateString, setSearchDateString] = useState(\n formatDateForSearch(new Date())\n );\n const isMounted = useRef(false);\n const [companiesPage, setCompaniesPage] = useState(1);\n const [totalPages, setTotalPages] = useState(1);\n\n const { t } = useTranslation();\n const user = useSelector(state => state.app.user);\n const companies = useSelector(state => state.companies.companies);\n\n const handleDateChange = chosenDate => {\n setDate(chosenDate);\n setSearchDateString(formatDateForSearch(chosenDate));\n };\n\n const getStatistics = async () => {\n const response = await dashboardService.getStatistics(\n company,\n searchDateString,\n reportType\n );\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_statistics\")\n );\n }\n\n downloadBlob(response.data, \"export.csv\", \"text/csv;charset=utf-8;\");\n };\n\n /**\n * Refetches paginated companies.\n * Fired from on scroll event from select input.\n * Sets new companies to state, along with page number.\n */\n const refetchCompanies = async () => {\n let currentPage = companiesPage;\n let newPage = (currentPage += 1);\n\n if (newPage > totalPages) return;\n\n setCompaniesPage(newPage);\n\n const response = await companiesService.getCompanies({ page: newPage });\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n let newCompanies = [];\n setTimeout(() => {\n newCompanies = [...companies, ...response.companies];\n setTimeout(() => {\n console.log(newCompanies);\n\n dispatch(setCompanies(newCompanies));\n }, 100);\n }, 100);\n };\n const getCompanies = async () => {\n const response = await companiesService.getCompanies({\n page: companiesPage\n });\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n const formattedResponse = [\n { id: \"All Companies\", name: \"All Companies\" },\n ...response.companies\n ];\n\n dispatch(setCompanies(formattedResponse));\n setTotalPages(response.pages);\n };\n\n useEffect(() => {\n isMounted.current = true;\n getCompanies();\n }, []);\n\n useEffect(() => {\n if (\n isMounted.current &&\n user.authenticatedRole &&\n !user.hasAcceptedPrivacyPolicy\n ) {\n setTimeout(() => {\n openModalAnim();\n }, 500);\n }\n }, []);\n\n return (\n
\n setShowReport(state => !state)}\n >\n {t(\"show_usage_report\")}\n \n {showReport && (\n \n \n
\n

{t(\"gen_usr_rep\")}

\n
\n \n handleDateChange(chosenDate)}\n value={date}\n maxDate={new Date()}\n />\n
\n
\n \n setReportType(option.id)}\n customId=\"reportTypeId\"\n shouldHaveHight={false}\n shouldHaveFullWidth\n customHeight=\"27px\"\n />\n
\n
\n \n {\n setCompany(option.id);\n }}\n fetchMoreData={refetchCompanies}\n customId=\"companyId\"\n shouldHaveHight={false}\n shouldHaveFullWidth\n customHeight=\"27px\"\n />\n
\n getStatistics()}\n margin=\"20px 0 0 0\"\n width=\"100%\"\n >\n {t(\"download\")}\n \n
\n
\n\n {isMounted.current &&\n user.authenticatedRole &&\n !user.hasAcceptedPrivacyPolicy && (\n \n \n \n )}\n
\n )}\n \n );\n};\n","import React from \"react\";\nimport { connect } from \"react-redux\";\n\nimport styled from \"styled-components\";\n\nimport { Header } from \"../../../components\";\n\nimport * as actionCreators from \"../../../actions/admin/companies.actions\";\n\nimport { DashboardStatistics } from \"./DashboardStatistics/DashboardStatistics\";\nimport { useTranslation } from \"react-i18next\";\nimport ResetDates from \"./ResetDates/ResetDates\";\nimport { UserReport } from \"./UserReport/UserReport\";\nimport { apiService } from \"../../../services/api/api.service\";\n\nconst DashboardStyles = styled.section`\n width: calc(100% - 210px);\n margin-left: 210px;\n background: whitesmoke;\n\n .content {\n padding: 0 30px 30px 30px;\n height: 100vh;\n }\n\n .optionsContainer {\n width: 200px;\n }\n\n .title {\n font-size: 16px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n text-transform: uppercase;\n text-align: center;\n margin-bottom: 20px;\n }\n\n .datePickerInput {\n height: 24px;\n width: 200px;\n outline: none;\n text-align: center;\n font-size: 16px;\n font-weight: 600;\n border: 1px solid #d8d8d8;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n border-radius: 4px;\n cursor: pointer;\n position: relative;\n z-index: 2;\n\n &:hover {\n border: 1px solid #1568bf;\n z-index: 2;\n }\n }\n\n .openResetDates {\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 10px;\n border-radius: 4px;\n border: solid 1px transparent;\n color: #1568bf;\n outline: #1568bf;\n background: #ffffff;\n outline-style: inset;\n outline-width: 0.5px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n margin: 0;\n transition: 0.5s;\n gap: 10px;\n\n &:hover {\n background: #1568bf;\n color: white;\n }\n }\n\n .usageReportWrapper {\n position: relative;\n display: flex;\n justify-content: flex-end;\n gap: 15px;\n\n .openUsageReport {\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 10px;\n border-radius: 4px;\n border: solid 1px transparent;\n color: #1568bf;\n outline: #1568bf;\n background: #ffffff;\n outline-style: inset;\n outline-width: 0.5px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n margin: 0;\n transition: 0.5s;\n\n &:hover {\n background: #1568bf;\n color: white;\n }\n }\n }\n`;\n\nconst Dashboard = ({ companies, setCompanies, user }) => {\n const { t } = useTranslation();\n\n const handleCron = async () => {\n try {\n await apiService.get(\"dashboard/run-bonus-cron\");\n } catch (error) {\n console.log(error);\n }\n };\n\n return (\n \n
\n
\n
\n \n \n
\n \n
\n \n );\n};\n\nconst mapStateToProps = state => {\n return {\n user: state.app.user,\n companies: state.companies.companies\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setCompanies: companies => dispatch(actionCreators.setCompanies(companies))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Dashboard);\n","import styled from 'styled-components'\n\nconst BasicInfoSectionStyles = styled.div`\n\t.basicInfoContainer {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmargin: 60px 0;\n\n\t\t.labelAndValidation {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: space-between;\n\t\t}\n\n\t\t.inputsContainer {\n\t\t\tmargin-left: 30px;\n\n\t\t\t.topInputs {\n\t\t\t\tdisplay: flex;\n\t\t\t\tmargin-bottom: 10px;\n\t\t\t}\n\n\t\t\t.middleInputs {\n\t\t\t\tdisplay: flex;\n\t\t\t\tmargin-bottom: 10px;\n\t\t\t}\n\n\t\t\t.bottomInputs {\n\t\t\t\tdisplay: flex;\n\t\t\t\tmargin-bottom: 10px;\n\t\t\t}\n\n\t\t\t.infoText {\n\t\t\t\tfont-size: 16px;\n\t\t\t\tmin-height: 29px;\n\t\t\t\tfont-weight: 500;\n\t\t\t\tfont-stretch: normal;\n\t\t\t\tfont-style: normal;\n\t\t\t\tline-height: normal;\n\t\t\t\tletter-spacing: normal;\n\t\t\t\tcolor: #4b4b4b;\n\t\t\t\tbackground: #f7f7f7;\n\t\t\t\tpadding: 5px 5px;\n\t\t\t\toverflow: hidden;\n\t\t\t\tborder-radius: 4px;\n\t\t\t}\n\n\t\t\t.checkboxContainer {\n\t\t\t\tdisplay: flex;\n\t\t\t\tgap: 10px;\n\t\t\t\talign-items: center;\n\t\t\t}\n\t\t}\n\t}\n`\n\nexport default BasicInfoSectionStyles\n","const statusOptions = [\n\t{\n\t\tid: 1,\n\t\tname: 'Live'\n\t},\n\t{\n\t\tid: 2,\n\t\tname: 'Blocked'\n\t},\n\t{\n\t\tid: 3,\n\t\tname: 'Disabled'\n\t},\n\t{\n\t\tid: 4,\n\t\tname: 'Test phase'\n\t}\n]\n\nconst paymentDeadlineOptions = [\n\t{\n\t\tid: 1,\n\t\tname: '7 days'\n\t},\n\t{\n\t\tid: 2,\n\t\tname: '14 days'\n\t},\n\t{\n\t\tid: 3,\n\t\tname: '21 days'\n\t},\n\t{\n\t\tid: 4,\n\t\tname: '30 days'\n\t}\n]\n\nexport { statusOptions, paymentDeadlineOptions }\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\n// components\nimport {\n PhoneNumberInput,\n SelectInput,\n IntitialsCircle,\n InputLabel,\n TextAndLine,\n Input,\n CheckboxInput\n} from \"../../../../components\";\n// styles\nimport BasicInfoSectionStyles from \"./BasicInfoSectionStyles\";\n// dropdown options\nimport { paymentDeadlineOptions } from \"./dropdown.options\";\n//constants\nimport { CompanyStatusEnum } from \"../../../../constants/companyStatus.constants\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BasicInfoSection = ({\n isFormDisplay = false,\n values,\n errors,\n touched,\n setFieldValue,\n handleChange,\n handleBlur\n}) => {\n const { t } = useTranslation();\n const handleNumberInput = (e, previousValue) => {\n let inputValue = e.target.validity.valid\n ? parseInt(e.target.value, 0)\n : previousValue;\n if (isNaN(inputValue)) {\n inputValue = \"\";\n }\n\n if (inputValue.toString().length >= 9) {\n e.preventDefault();\n }\n\n setFieldValue(e.target.name, inputValue);\n };\n\n const handleIdNumberInput = (e, previousValue) => {\n let inputValue = e.target.validity.valid ? e.target.value : previousValue;\n if (isNaN(inputValue)) {\n inputValue = \"\";\n }\n setFieldValue(e.target.name, inputValue);\n };\n\n const handleChangeStatus = () => {\n const inputValue =\n values.status === CompanyStatusEnum.TEST_PHASE\n ? CompanyStatusEnum.LIVE\n : CompanyStatusEnum.TEST_PHASE;\n setFieldValue(\"status\", inputValue);\n };\n\n const handleToggleVat = () => {\n setFieldValue(\"vatEnabled\", values.vatEnabled ? false : true);\n };\n\n const handleToggleReimbursement = () => {\n setFieldValue(\"hasReimbursement\", values.hasReimbursement ? false : true);\n };\n\n const handleToggleTokensToRSD = () => {\n setFieldValue(\"viewInRsd\", values.viewInRsd ? false : true);\n };\n\n const handleToggleBonusBudget = () => {\n values.bonusBudgetEnabled &&\n toast.warn(t(\"the_company_is_not_in_bonus_budget_warning\"));\n setFieldValue(\n \"bonusBudgetEnabled\",\n values.bonusBudgetEnabled ? false : true\n );\n };\n\n const handleToggleOnlySSOLogin = () => {\n values.onlySSOLoginEnabled &&\n toast.warn(t(\"the_company_is_not_in_sso_mode_warning\"));\n setFieldValue(\n \"onlySSOLoginEnabled\",\n values.onlySSOLoginEnabled ? false : true\n );\n };\n\n const handleKeyDown = e => {\n if (e.key === \".\" || e.key === \",\" || e.key === \"-\" || e.key === \"e\") {\n e.preventDefault();\n }\n };\n\n return (\n \n \n
\n \n
\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.name && touched.name ? errors.name : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n \n ) : (\n

{values.name}

\n )}\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.pib && touched.pib ? errors.pib : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n handleNumberInput(e, values.pib)}\n onKeyDown={e => handleKeyDown(e)}\n onBlur={handleBlur}\n />\n ) : (\n

{values.pib}

\n )}\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.idNumber && touched.idNumber ? errors.idNumber : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n handleIdNumberInput(e, values.idNumber)}\n onBlur={handleBlur}\n />\n ) : (\n

{values.idNumber}

\n )}\n
\n
\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.invoiceEmail && touched.invoiceEmail\n ? errors.invoiceEmail\n : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n \n ) : (\n

{values.invoiceEmail}

\n )}\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.address && touched.address ? errors.address : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n \n ) : (\n

{values.address}

\n )}\n
\n
\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.contact && touched.contact ? errors.contact : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n setFieldValue(\"contact\", phone)}\n value={values.contact}\n onBlur={handleBlur}\n />\n ) : (\n

{values.contact}

\n )}\n
\n
\n
\n \n {isFormDisplay && (\n
\n {errors.paymentDeadline && touched.paymentDeadline\n ? errors.paymentDeadline\n : \"\"}\n
\n )}\n
\n {isFormDisplay ? (\n \n setFieldValue(\"paymentDeadline\", option.name)\n }\n customHeight=\"27px\"\n />\n ) : (\n \n {values.paymentDeadline}\n

\n )}\n
\n
\n \n {isFormDisplay && (\n
\n \n \n
\n )}\n
\n
\n
\n \n {isFormDisplay && (\n
\n \n \n
\n )}\n
\n
\n \n {isFormDisplay && (\n
\n \n \n
\n )}\n
\n
\n \n {isFormDisplay && (\n
\n \n \n
\n )}\n
\n
\n \n {isFormDisplay && (\n
\n \n \n
\n )}\n
\n
\n \n {isFormDisplay && (\n
\n \n \n
\n )}\n
\n
\n
\n
\n );\n};\n\nBasicInfoSection.propTypes = {\n isFormDisplay: PropTypes.bool,\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n setFieldValue: PropTypes.func,\n handleChange: PropTypes.func,\n handleBlur: PropTypes.func\n};\n\nexport default BasicInfoSection;\n","import BasicInfoSection from './BasicInfoSection'\n\nexport default BasicInfoSection\n","const initialCompanyTagsSectionState = {\n\tisAddTagOpen: false,\n\ttagObj: undefined\n}\n\nconst companyTagsSectionActionsTypes = {\n\topenAddTagInput: 'OPEN_ADD_TAG_INPUT',\n\thandleTagChange: 'HANDLE_TAG_CHANGE',\n\tcloseAddTagInput: 'CLOSE_ADD_INPUT_TAG'\n}\n\nconst companyTagsSectionReducer = (state = initialCompanyTagsSectionState, action) => {\n\tswitch (action.type) {\n\t\tcase companyTagsSectionActionsTypes.openAddTagInput:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisAddTagOpen: true\n\t\t\t}\n\t\tcase companyTagsSectionActionsTypes.handleTagChange:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\ttagObj: action.tag\n\t\t\t}\n\t\tcase companyTagsSectionActionsTypes.closeAddTagInput:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisAddTagOpen: false\n\t\t\t}\n\t\tdefault:\n\t\t\tthrow new Error(`Unknow action type: ${action.type}`)\n\t}\n}\n\nexport { initialCompanyTagsSectionState, companyTagsSectionReducer, companyTagsSectionActionsTypes }\n","import styled from 'styled-components'\n\nconst CompanyTagsSectionStyles = styled.div`\n\t.companyTagsContainer {\n\t\tmargin: 60px 0;\n\n\t\t.addTagContainer {\n\t\t\tmargin: 0 0 30px 0;\n\t\t\theight: 47px;\n\t\t\tdisplay: flex;\n\t\t\talign-items: flex-end;\n\n\t\t\t.addTagInput {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: flex-end;\n\t\t\t\ttransform: translateX(100px);\n\t\t\t\topacity: 0;\n\t\t\t\ttransition: all 0.4s ease-in-out;\n\n\t\t\t\t.tagNameInputContainer {\n\t\t\t\t\tmargin: 0 30px 0 0;\n\t\t\t\t\twidth: 150px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.tagsContainer {\n\t\t\tmax-width: 746px;\n\t\t\tborder: solid 1px #979797;\n\t\t\tborder-radius: 4px;\n\t\t\tdisplay: flex;\n\t\t\tflex-wrap: wrap;\n\t\t}\n\t\t.tagButton {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tpadding: 5px;\n\t\t\tbackground: #1568bf;\n\t\t\tmargin: 5px;\n\t\t\tborder-radius: 4px;\n\n\t\t\t.tagName {\n\t\t\t\tcolor: #fff;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tfont-weight: 600;\n\t\t\t\tfont-stretch: normal;\n\t\t\t\tfont-style: normal;\n\t\t\t\tline-height: normal;\n\t\t\t\tletter-spacing: normal;\n\t\t\t\tmargin-right: 10px;\n\t\t\t}\n\n\t\t\t.removeTagButton {\n\t\t\t\twidth: 18px;\n\t\t\t\theight: 20px;\n\t\t\t\tfont-size: 12px;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tfont-stretch: normal;\n\t\t\t\tfont-style: normal;\n\t\t\t\tline-height: normal;\n\t\t\t\tletter-spacing: normal;\n\t\t\t\tbackground: #fff;\n\t\t\t\tcolor: black;\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tborder: 1px solid #fff;\n\t\t\t\toutline: none;\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t}\n\t}\n\n\t.showAddTagInput {\n\t\ttransform: translateX(0) !important;\n\t\topacity: 1 !important;\n\t}\n\n\t.companyDetailsTagsSection {\n\t\t.companyDetailsTagsContainer{\n\t\t\tmax-width: 833px;\n\t\t\tborder: solid 1px #979797;\n\t\t\tborder-radius: 4px;\n\t\t\tdisplay: flex;\n\t\t\tflex-wrap: wrap;\n\t\t\tmargin: 30px 0;\n\t\t}\n\n\t\t.tagButton {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tpadding: 5px;\n\t\t\tbackground: #1568bf;\n\t\t\tmargin: 5px;\n\t\t\tborder-radius: 4px;\n\n\t\t\t.tagName {\n\t\t\t\tcolor: #fff;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tfont-weight: 600;\n\t\t\t\tfont-stretch: normal;\n\t\t\t\tfont-style: normal;\n\t\t\t\tline-height: normal;\n\t\t\t\tletter-spacing: normal;\n\t\t\t}\n\t\t}\n\n\t}\n\t\n\t\n`\n\nexport default CompanyTagsSectionStyles\n","import { toast } from \"react-toastify\";\nimport { axiosInstance } from \"../../../services/http/axiosConfig\";\n\nexport const getCompanies = async ({\n limit,\n page,\n searchText,\n orderColumns\n}) => {\n try {\n const searchQuery = searchText ? `&search=${searchText}` : \"\";\n let orderQuery = \"\";\n if (orderColumns.length > 0) {\n orderQuery = orderColumns.reduce(\n (acc, column) =>\n `${acc}&order=${column.field} ${column.isSortedUp ? \"ASC\" : \"DESC\"}`,\n \"\"\n );\n }\n\n const { data } = await axiosInstance({\n method: \"get\",\n url: `/company/get?limit=${limit}&page=${page}${searchQuery}${orderQuery}`\n });\n if (data) {\n return {\n ...data,\n companies: data.companies\n };\n }\n } catch (error) {\n if (error && error.response) {\n const { data } = error.response;\n if (data) {\n toast.error(data.error.message);\n }\n } else {\n toast.error(\"Something went wrong\");\n }\n }\n};\n\nexport const getCompanyTags = async () => {\n try {\n const { data, statusText } = await axiosInstance({\n method: \"get\",\n url: \"/company/tags\"\n });\n\n if (data) {\n return {\n statusText,\n tags: data.tags\n };\n }\n } catch (error) {\n if (error && error.response) {\n const { data } = error.response;\n if (data) {\n toast.error(data.error.message);\n }\n } else {\n toast.error(\"Something went wrong\");\n }\n }\n};\n\nexport const createCompany = async newCompany => {\n const payload = new FormData();\n let paymentDeadlineDaysNumber;\n if (newCompany.paymentDeadline) {\n paymentDeadlineDaysNumber = parseInt(\n newCompany.paymentDeadline.substr(\n 0,\n newCompany.paymentDeadline.indexOf(\" \")\n ),\n 0\n );\n }\n\n payload.append(\"name\", newCompany.name);\n payload.append(\"address\", newCompany.address);\n payload.append(\"pib\", newCompany.pib);\n payload.append(\"identification_number\", newCompany.identificationNumber);\n payload.append(\"contact\", newCompany.contact);\n\n payload.append(\"invoice_email\", newCompany.invoiceEmail);\n payload.append(\"status\", newCompany.status.toLowerCase());\n payload.append(\"payment_deadline\", paymentDeadlineDaysNumber);\n payload.append(\"photo\", newCompany.photo);\n newCompany.tags.forEach(tag => {\n payload.append(\"tags\", tag.id);\n });\n if (paymentDeadlineDaysNumber) {\n try {\n const { data } = await axiosInstance({\n method: \"post\",\n url: \"/company/create\",\n data: payload\n });\n if (data) {\n return data;\n }\n } catch (error) {\n if (error && error.response) {\n const { data } = error.response;\n if (data) {\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n if (data.errors.address) {\n toast.error(\n `${data.error.message}: ${data.errors.address.keys[0]}`\n );\n }\n if (data.errors.pib) {\n toast.error(`${data.error.message}: ${data.errors.pib.keys[0]}`);\n }\n if (data.errors.idNumber) {\n toast.error(\n `${data.error.message}: ${data.errors.idNumber.keys[0]}`\n );\n }\n if (data.errors.contact) {\n toast.error(\n `${data.error.message}: ${data.errors.contact.keys[0]}`\n );\n }\n if (data.errors.invoiceEmail) {\n toast.error(\n `${data.error.message}: ${data.errors.invoiceEmail.keys[0]}`\n );\n }\n if (data.errors.status) {\n toast.error(\n `${data.error.message}: ${data.errors.status.keys[0]}`\n );\n }\n if (data.errors.paymentDeadline) {\n toast.error(\n `${data.error.message}: ${data.errors.paymentDeadline.keys[0]}`\n );\n }\n if (data.errors.photo) {\n toast.error(\n `${data.error.message}: ${data.errors.photo.keys[0]}`\n );\n }\n } else {\n toast.error(data.error.message);\n }\n }\n } else {\n toast.error(\"Something went wrong\");\n }\n }\n } else {\n toast.error(\"Something is wrong with payment deadline\");\n }\n};\n\nexport const deleteCompany = async id => {\n try {\n const { data } = await axiosInstance({\n method: \"delete\",\n url: `/company/delete/${id}`\n });\n if (data) {\n return data;\n }\n } catch (error) {\n if (error && error.response) {\n const { data } = error.response;\n if (data) {\n toast.error(data.error.message);\n }\n } else {\n toast.error(\"Something went wrong\");\n }\n }\n};\n\nexport const getSelectedCompany = async id => {\n try {\n const { data } = await axiosInstance({\n method: \"get\",\n url: `/company/${id}`\n });\n if (data) {\n return data;\n }\n } catch (error) {\n if (error && error.response) {\n const { data } = error.response;\n if (data) {\n toast.error(data.error.message);\n }\n } else {\n toast.error(\"Something went wrong\");\n }\n }\n};\n\nexport const updateCompany = async company => {\n let paymentDeadlineDaysNumber;\n if (company.paymentDeadline) {\n paymentDeadlineDaysNumber = parseInt(\n company.paymentDeadline.substr(0, company.paymentDeadline.indexOf(\" \")),\n 0\n );\n }\n const payload = new FormData();\n payload.append(\"name\", company.name);\n payload.append(\"address\", company.address);\n payload.append(\"pib\", company.pib);\n payload.append(\"identification_number\", company.identificationNumber);\n payload.append(\"contact\", company.contact);\n\n payload.append(\"invoice_email\", company.invoiceEmail);\n payload.append(\"status\", company.status.toLowerCase());\n payload.append(\"payment_deadline\", paymentDeadlineDaysNumber);\n if (company.photo instanceof File) {\n payload.append(\"photo\", company.photo);\n }\n company.tags.forEach(tag => {\n payload.append(\"tags\", tag.id);\n });\n\n if (paymentDeadlineDaysNumber) {\n try {\n const { status } = await axiosInstance({\n method: \"put\",\n url: `/company/update/${company.id}`,\n data: payload\n });\n return {\n status\n };\n } catch (error) {\n if (error && error.response) {\n const { data } = error.response;\n if (data) {\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n if (data.errors.address) {\n toast.error(\n `${data.error.message}: ${data.errors.address.keys[0]}`\n );\n }\n if (data.errors.pib) {\n toast.error(`${data.error.message}: ${data.errors.pib.keys[0]}`);\n }\n if (data.errors.idNumber) {\n toast.error(\n `${data.error.message}: ${data.errors.idNumber.keys[0]}`\n );\n }\n if (data.errors.contact) {\n toast.error(\n `${data.error.message}: ${data.errors.contact.keys[0]}`\n );\n }\n if (data.errors.invoiceEmail) {\n toast.error(\n `${data.error.message}: ${data.errors.invoiceEmail.keys[0]}`\n );\n }\n if (data.errors.status) {\n toast.error(\n `${data.error.message}: ${data.errors.status.keys[0]}`\n );\n }\n if (data.errors.paymentDeadline) {\n toast.error(\n `${data.error.message}: ${data.errors.paymentDeadline.keys[0]}`\n );\n }\n if (data.errors.photo) {\n toast.error(\n `${data.error.message}: ${data.errors.photo.keys[0]}`\n );\n }\n } else {\n toast.error(data.error.message);\n }\n }\n } else {\n toast.error(\"Something went wrong\");\n }\n }\n } else {\n toast.error(\"Something is wrong with payment deadline\");\n }\n};\n","import * as actionTypes from \"../../constants/actionTypes/admin/companyTags.constants\";\n\nexport const setCompanyTags = companyTags => {\n return { type: actionTypes.SET_COMPANY_TAGS, companyTags };\n};\n\nexport const addCompanyTag = companyTag => {\n return { type: actionTypes.ADD_COMPANY_TAG, companyTag };\n}\n\nexport const editCompanyTag = companyTag => {\n return { type: actionTypes.EDIT_COMPANY_TAG, companyTag };\n}\n\nexport const deleteCompanyTag = id => {\n return { type: actionTypes.DELETE_COMPANY_TAG, id };\n}","export const SET_COMPANY_TAGS = 'SET_COMPANY_TAGS';\nexport const ADD_COMPANY_TAG = 'ADD_COMPANY_TAG';\nexport const EDIT_COMPANY_TAG = 'EDIT_COMPANY_TAG';\nexport const DELETE_COMPANY_TAG = 'DELETE_COMPANY_TAG';","import { apiService } from \"../api.service\";\nimport { TagsResponse } from \"../../../models/server/responses\";\nimport { TagPayload } from \"../../../models/server/payloads\";\nimport { Tag } from \"../../../models/domain\";\n\nexport const getCompanyTags = async () => {\n let response = await apiService.get(`/company/tags`);\n\n if (response.hasError) return response;\n\n return new TagsResponse(response);\n};\n\nexport const getCompanyTag = async id => {\n let response = await apiService.get(`/company/tag/${id}`);\n\n if (response.hasError) return response;\n\n return new Tag(response.data);\n};\n\nexport const addCompanyTag = async values => {\n let response = await apiService.post(\"/company/tag/create\", new TagPayload(values));\n\n if (response.hasError) return response;\n\n return new Tag(response.data);\n};\n\nexport const editCompanyTag = async (values, chosenId) => {\n let response = await apiService.put(`/company/tag/${chosenId}`, new TagPayload(values));\n\n if (response.hasError) return response;\n\n return new Tag(response.data);\n};\n\nexport const removeCompanyTag = async id => {\n let response = await apiService.delete(`/company/tag/${id}`);\n\n return response;\n};\n","import { PngPhoto } from '../../../services/global.entities'\n\n\nclass Tier {\n\tconstructor(tierData = {}) {\n\t\tthis.id = tierData.id || null\n\t\tthis.name = tierData.name || ''\n\t\tthis.companyId = tierData.companyId || null\n\t\tthis.tokens = tierData.tokens || 0\n\t}\n}\n\nclass Tag {\n\tconstructor(tagData = {}) {\n\t\tthis.id = tagData.id || null\n\t\tthis.name = tagData.name || ''\n\t\tthis.tokens = tagData.tokens || 0\n\t}\n}\n\n\nclass NewCompany {\n\tconstructor(newCompanyData = {}) {\n\t\tfunction setTiers(tiers = []) {\n\t\t\treturn tiers.map(tier => new Tier(tier))\n\t\t}\n\t\tfunction setTags(tags = []) {\n\t\t\treturn tags.map(tag => new Tag(tag))\n\t\t}\n\t\tthis.id = newCompanyData.id || null\n\t\tthis.name = newCompanyData.name || ''\n\t\tthis.address = newCompanyData.address || ''\n\t\tthis.pib = newCompanyData.pib || ''\n\t\tthis.identificationNumber = newCompanyData.identification_number || ''\n\t\tthis.contact = newCompanyData.contact || ''\n\t\tthis.invoiceEmail = newCompanyData.invoiceEmail || ''\n\t\tthis.status = newCompanyData.status || undefined\n\t\tthis.photo = newCompanyData.Photo ? new PngPhoto(newCompanyData.Photo) : undefined\n\t\tthis.paymentDeadline = newCompanyData.paymentDeadline ? `${newCompanyData.paymentDeadline} days` : undefined\n\t\tthis.tags = setTags(newCompanyData.Tags) || [new Tag()]\n\t\tthis.tiers = setTiers(newCompanyData.Tiers) || [new Tier()]\n\t}\n}\n\nclass SingleCompany {\n\tconstructor(singleCompany = {}) {\n\t\tthis.id = singleCompany.id || null\n\t\tthis.name = singleCompany.name || ''\n\t\tthis.pib = singleCompany.pib || ''\n\t\tthis.address = singleCompany.address || ''\n\t\tthis.identificationNumber = singleCompany.identification_number || ''\n\t\tthis.photo = singleCompany.Photo ? new PngPhoto(singleCompany.Photo) : undefined\n\t\tthis.contact = singleCompany.contact || ''\n\t\tthis.invoiceEmail = singleCompany.invoiceEmail || ''\n\t\tthis.status = singleCompany.status || ''\n\t\tthis.paymentDeadline = singleCompany.paymentDeadline ? `${singleCompany.paymentDeadline} days` : ''\n\t\tthis.tags = singleCompany.Tags ? singleCompany.Tags.map(tag => new Tag(tag)) : []\n\t\tthis.tiers = singleCompany.Tiers ? singleCompany.Tiers.map(tier => new Tier(tier)) : []\n\t}\n}\n\n\nclass Company {\n\tconstructor(companyData = {}) {\n\t\tfunction setTags(tags = []) {\n\t\t\treturn tags.map(tag => new Tag(tag))\n\t\t}\n\t\tfunction setTiers(tiers = []) {\n\t\t\treturn tiers.map(tier => new Tier(tier))\n\t\t}\n\t\tthis.id = companyData.id || null\n\t\tthis.name = companyData.name || ''\n\t\tthis.pib = companyData.pib || null\n\t\tthis.ein = companyData.identification_number || null\n\t\tthis.contact = companyData.contact || ''\n\t\tthis.invoiceEmail = companyData.invoiceEmail || ''\n\t\tthis.status = companyData.status || undefined\n\t\tthis.paymentDeadline = companyData.paymentDeadline ? `${companyData.paymentDeadline} days` : undefined\n\t\tthis.address = companyData.address || ''\n\t\tthis.photo = new PngPhoto(companyData.Photo)\n\t\tthis.tiers = setTiers(companyData.Tiers)\n\t\tthis.tags = setTags(companyData.Tags) || [new Tag()]\n\t}\n}\n\nexport { Company, NewCompany, Tag, SingleCompany }\n","import { Company, NewCompany, Tag } from '../companies.entity'\n\nconst companiesInitalState = {\n\tallTags: [new Tag()],\n\tselectedCompany: new Company(),\n\tnewCompany: new NewCompany(),\n\tcompanies: [new Company()]\n\n}\n\nconst actionTypes = {\n\tsetCompanies: 'SET_COMPANIES',\n\tsetCompanyTags: 'SET_COMPANY_TAGS',\n\taddNewCompany: 'ADD_NEW_COMPANY',\n\t// addCompanyTag: 'ADD_COMPANY_TAG',\n\t// removeCompanyTag: 'REMOVE_COMPANY_TAG',\n\tcreateCompany: 'CREATE_COMPANY',\n\tremoveCompany: 'REMOVE_COMPANY',\n\t// removePhoto: 'REMOVE_PHOTO',\n\t// handleChange: 'HANDLE_CHANGE',\n\tdeleteCompany: 'DELETE_COMPANY',\n\tsetSelectedCompany: 'SET_SELECTED_COMPANY',\n\tsetSingleCompany: 'SET_SINGLE_COMPANY',\n\tsetCompany: 'SET_COMPANY'\n}\n\nconst companiesReducer = (state = companiesInitalState, action) => {\n\tswitch (action.type) {\n\t\tcase actionTypes.setCompanies:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tnewCompany: new NewCompany(),\n\t\t\t\tcompanies: action.payload.map(company => new Company(company))\n\t\t\t}\n\t\tcase actionTypes.setCompanyTags:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tallTags: action.payload.map(tag => new Tag(tag))\n\t\t\t}\n\t\t// case actionTypes.addCompanyTag:\n\t\t// \treturn {\n\t\t// \t\t...state,\n\t\t// \t\tnewCompany: {\n\t\t// \t\t\t...state.newCompany,\n\t\t// \t\t\ttags: [...state.newCompany.tags, action.tag]\n\t\t// \t\t}\n\t\t// \t}\n\t\t// case actionTypes.removeCompanyTag:\n\t\t// \treturn {\n\t\t// \t\t...state,\n\t\t// \t\tnewCompany: {\n\t\t// \t\t\t...state.newCompany,\n\t\t// \t\t\ttags: state.newCompany.tags.filter(tag => tag.id !== action.chosenTagId)\n\t\t// \t\t}\n\t\t// \t}\n\t\t// case actionTypes.removePhoto:\n\t\t// \treturn {\n\t\t// \t\t...state,\n\t\t// \t\tnewCompany: {\n\t\t// \t\t\t...state.newCompany,\n\t\t// \t\t\tphoto: undefined\n\t\t// \t\t}\n\t\t// \t}\n\t\t// case actionTypes.handleChange:\n\t\t// \treturn {\n\t\t// \t\t...state,\n\t\t// \t\tnewCompany: {\n\t\t// \t\t\t...state.newCompany,\n\t\t// \t\t\t[action.name]: action.value\n\t\t// \t\t}\n\t\t// \t}\n\t\tcase actionTypes.addNewCompany:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tnewCompany: new NewCompany(),\n\t\t\t\tcompanies: [...state.companies, new Company(action.payload)]\n\t\t\t}\n\t\tcase actionTypes.deleteCompany:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tcompanies: state.companies.filter(company => company.id !== action.chosenId)\n\t\t\t}\n\t\tcase actionTypes.setSelectedCompany:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tselectedCompany: state.companies.find(company => company.id === action.chosenId)\n\t\t\t}\n\t\tcase actionTypes.setSingleCompany:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tselectedCompany: new Company(action.payload)\n\t\t\t}\n\t\tcase actionTypes.setCompany:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tnewCompany: new NewCompany(action.payload)\n\t\t\t}\n\t\tdefault:\n\t\t\tthrow new Error(`Unknow action type: ${action.type}`)\n\t}\n}\n\nexport { companiesInitalState, companiesReducer, actionTypes }\n","import React, {\n\tcreateContext,\n\tuseReducer,\n\tuseEffect\n} from 'react'\nimport PropTypes from 'prop-types'\n\nimport { companiesInitalState, companiesReducer } from './companies.reducer'\nimport { useCompaniesActions } from './companies.actions'\n\nconst CompaniesContext =\n\tcreateContext({ ...companiesInitalState })\n\nconst CompaniesProvider = ({ children }) => {\n\tconst [companiesState, dispatchCompaniesState] =\n\t\tuseReducer(companiesReducer, companiesInitalState)\n\tconst companiesActions = useCompaniesActions(dispatchCompaniesState)\n\n\tuseEffect(() => { }, [companiesState])\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t)\n}\n\nCompaniesProvider.propTypes = {\n\tchildren: PropTypes.node\n}\n\nexport { CompaniesProvider, CompaniesContext }\n","import React, {\n useState,\n useReducer,\n useContext,\n useEffect,\n useRef\n} from \"react\";\nimport { connect } from \"react-redux\";\nimport PropTypes from \"prop-types\";\n// components\nimport {\n InputLabel,\n TextAndLine,\n SelectInput,\n Button\n} from \"../../../../components\";\n// actions\nimport { useCompanyTagInternActions } from \"./companyTags.actions\";\n// styles\nimport CompanyTagsSectionStyles from \"./CompanyTagsSectionStyles\";\n// local reducer\nimport {\n companyTagsSectionReducer,\n initialCompanyTagsSectionState\n} from \"./companyTagsSectionReducer\";\n// services\nimport { getCompanyTags } from \"../../../../modules/superAdmin/companies/companies.services\";\nimport * as actionCreators from \"../../../../actions/admin/companyTags.actions\";\nimport * as companyTagService from \"../../../../services/api/admin/companyTags.service\";\n// context\nimport { CompaniesContext } from \"../../../../modules/superAdmin/companies/context/companies.context\";\n// utils\nimport { isEmpty } from \"../../../../services/general.utils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst CompanyTagsSection = ({\n isFormDisplay = false,\n values,\n setFieldValue,\n setCompanyTags,\n tags\n}) => {\n const { t } = useTranslation();\n const [{ isAddTagOpen, tagObj }, dispatch] = useReducer(\n companyTagsSectionReducer,\n initialCompanyTagsSectionState\n );\n const isMounted = useRef(true);\n\n const fetchTags = async () => {\n const response = await companyTagService.getCompanyTags();\n if (isMounted.current && response) {\n setCompanyTags(response);\n }\n };\n\n useEffect(() => {\n fetchTags();\n\n return () => () => {\n isMounted.current = false;\n };\n }, []);\n\n const removeTag = id => {\n const filteredTags = values.tags.filter(tag => tag.id !== id);\n setFieldValue(\"tags\", filteredTags);\n };\n\n const {\n handleTagChange,\n openAddTagInput,\n addTag,\n filteredTags\n } = useCompanyTagInternActions(dispatch);\n\n return (\n \n {isFormDisplay ? (\n <>\n \n
\n
\n openAddTagInput()}\n padding=\"0\"\n margin=\"0 30px 0 0\"\n width=\"100px\"\n >\n {t(\"add_tag\")}\n \n {isAddTagOpen && (\n
\n
\n \n {\n handleTagChange(tags, option.id);\n }}\n value={tagObj}\n customHeight=\"27px\"\n />\n
\n addTag(setFieldValue, values, tagObj)}\n disabled={!tagObj}\n padding=\"0\"\n margin=\"0 30px 0 0\"\n width=\"100px\"\n >\n {t(\"add_tag\")}\n \n
\n )}\n
\n
\n {!isEmpty(values.tags) && (\n
\n {values.tags.map(tag => (\n
\n

{tag.name}

\n removeTag(tag.id)}\n className=\"removeTagButton\"\n type=\"button\"\n >\n X\n \n
\n ))}\n
\n )}\n
\n
\n \n ) : (\n <>\n {!isEmpty(values.tags) && (\n
\n \n
\n {values.tags?.map(tag => (\n
\n

{tag.name}

\n
\n ))}\n
\n
\n )}\n \n )}\n
\n );\n};\n\nCompanyTagsSection.propTypes = {\n isFormDisplay: PropTypes.bool,\n values: PropTypes.shape(),\n setFieldValue: PropTypes.func\n};\n\nconst mapStateToProps = state => {\n return {\n tags: state.companyTags.tags\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setCompanyTags: companyTags =>\n dispatch(actionCreators.setCompanyTags(companyTags))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CompanyTagsSection);\n","import { companyTagsSectionActionsTypes } from './companyTagsSectionReducer'\n\nexport const useCompanyTagInternActions = (dispatch) => {\n\tconst openAddTagInput = () => {\n\t\tdispatch({ type: companyTagsSectionActionsTypes.openAddTagInput })\n\t\tsetTimeout(() => {\n\t\t\tconst addCompanyTagInput = document.getElementById('addTagInput')\n\t\t\taddCompanyTagInput.classList.add('showAddTagInput')\n\t\t}, 100)\n\t}\n\n\tconst addTag = (setFieldValue, values, tag) => {\n\t\tconst addCompanyTagInput = document.getElementById('addTagInput')\n\t\taddCompanyTagInput.classList.remove('showAddTagInput')\n\t\tsetTimeout(() => {\n\t\t\tdispatch({ type: companyTagsSectionActionsTypes.closeAddTagInput })\n\t\t\tsetFieldValue('tags', [...values.tags, tag])\n\t\t\tdispatch({ type: companyTagsSectionActionsTypes.handleTagChange, tag: undefined })\n\t\t}, 400)\n\t}\n\n\n\tconst handleTagChange = (allTags, id) => {\n\t\tconst chosenTag = allTags.find(tag => tag.id === id);\n\t\tdispatch({ type: companyTagsSectionActionsTypes.handleTagChange, tag: chosenTag })\n\t}\n\n\tconst filteredTags = (tags, allTags) => {\n\t\tconst chosenIds = []\n\t\ttags.forEach(tag => {\n\t\t\tchosenIds.push(tag.id)\n\t\t})\n\t\treturn allTags.filter(t => !chosenIds.includes(t.id))\n\t}\n\n\treturn {\n\t\tfilteredTags,\n\t\topenAddTagInput,\n\t\taddTag,\n\t\thandleTagChange\n\t}\n}\n","import CompanyTagsSection from './CompanyTagsSection'\n\nexport default CompanyTagsSection\n","import styled from 'styled-components'\n\nconst DetailsSectionStyles = styled.div`\n\t.photoAndStatusContainer {\n\t\tmargin: ${({ isFormDisplay }) => (isFormDisplay ? '60px 0' : '30px 0')};\n\t\twidth: 350px;\n\n\t\t.labelAndValidation {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: space-between;\n\t\t}\n\t}\n`\n\nexport default DetailsSectionStyles\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n// components\nimport { TextAndLine, ImageUpload, InputLabel } from \"../../../../components\";\n// styles\nimport DetailsSectionStyles from \"./DetailsSectionStyles\";\n// services\nimport { getUrl } from \"../../../../services/imageHandler\";\nimport { useTranslation } from \"react-i18next\";\n\nconst DetailsSection = ({\n isFormDisplay = false,\n values,\n errors,\n touched,\n setFieldError,\n setFieldTouched,\n setFieldValue\n}) => {\n const { t } = useTranslation();\n\n return (\n \n \n
\n
\n \n {isFormDisplay && (\n
\n {errors.photo && touched.photo ? errors.photo : \"\"}\n
\n )}\n
\n
\n {isFormDisplay ? (\n \n ) : (\n \n )}\n
\n \n
\n
\n );\n};\n\nDetailsSection.propTypes = {\n isFormDisplay: PropTypes.bool,\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n setFieldError: PropTypes.func,\n setFieldTouched: PropTypes.func,\n setFieldValue: PropTypes.func\n};\n\nexport default DetailsSection;\n","import DetailsSection from './DetailsSection'\n\nexport default DetailsSection\n","import styled from 'styled-components'\n\nconst AddCompanyStyles = styled.div`\n\t.submitContainer {\n\t\tdisplay: flex;\n\t}\n`\n\nexport default AddCompanyStyles\n","import validator from \"validator\";\nimport { removeSpacesAndHTML } from \"../../general.utils\";\nimport { findLocales } from \"../../../utils/helpers/findLocales\";\n\nexport const validateCompanyForm = ({\n name,\n pib,\n address,\n idNumber,\n contact,\n invoiceEmail,\n paymentDeadline,\n photo\n}) => {\n const errors = {};\n const isInLanguage = findLocales(\"rs\");\n\n if (!name.trim()) {\n errors.name = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (removeSpacesAndHTML(name).length > 20) {\n errors.name = isInLanguage ? \"Predugačko\" : \"Too long\";\n } else if (!removeSpacesAndHTML(name)) {\n errors.name = isInLanguage\n ? \"HTML tag nije dozvoljen\"\n : \"HTML tag is not allowed\";\n }\n\n if (!pib) {\n errors.pib = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (typeof pib === \"number\") {\n if (pib.toString().split(\"\").length !== 9) {\n errors.pib = isInLanguage ? \"Moraju biti 9 cifara\" : \"9 digits\";\n }\n }\n\n if (!address.trim()) {\n errors.address = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!removeSpacesAndHTML(address)) {\n errors.address = isInLanguage\n ? \"HTML tag nije dozvoljen\"\n : \"HTML tag is not allowed\";\n }\n\n if (!idNumber) {\n errors.idNumber = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (typeof idNumber === \"string\") {\n if (idNumber.length !== 8) {\n errors.idNumber = isInLanguage ? \"Moraju biti 8 cifara\" : \"8 digits\";\n }\n }\n\n if (!contact) {\n errors.contact = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n if (!invoiceEmail) {\n errors.invoiceEmail = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!validator.isEmail(invoiceEmail)) {\n errors.invoiceEmail = isInLanguage\n ? \"Neispravna email adresa\"\n : \"Invalid email\";\n }\n\n if (!paymentDeadline) {\n errors.paymentDeadline = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n if (!photo) {\n errors.photo = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n // else if (photo.type !== 'image/png') errors.photo = 'Only PNG is acceptable'\n\n return errors;\n};\n","const openAddCompany = (setIsAddCompanyOpen) => {\n\tsetIsAddCompanyOpen(true)\n\tsetTimeout(() => {\n\t\tconst addCompanyForm = document.getElementById('addCompanyForm')\n\t\tconst companiesList = document.getElementById('companiesList')\n\t\tcompaniesList.classList.add('hideCompanyList')\n\t\taddCompanyForm.classList.add('showAddCompanyForm')\n\t}, 150)\n}\n\nconst closeAddCompany = (setIsAddCompanyOpen) => {\n\tconst addCompanyForm = document.getElementById('addCompanyForm')\n\tconst companiesList = document.getElementById('companiesList')\n\tcompaniesList.classList.remove('hideCompanyList')\n\taddCompanyForm.classList.remove('showAddCompanyForm')\n\tsetTimeout(() => {\n\t\tsetIsAddCompanyOpen(false)\n\t}, 400)\n}\n\nexport { openAddCompany, closeAddCompany }\n","import React, { useContext, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\n// components\nimport { Card, Button, Header } from \"../../../../components\";\nimport BasicInfoSection from \"../BasicInfoSection\";\nimport CompanyTagsSection from \"../CompanyTagsSection\";\nimport DetailsSection from \"../DetailsSection\";\n// styles\nimport AddCompanyStyles from \"./AddCompanyStyles\";\n// entity\nimport { Company } from \"../../../../models/domain\";\n// services\nimport { validateCompanyForm } from \"../../../../services/validations/superAdmin/company.validations\";\nimport { closeAddCompany } from \"../companies.services\";\nimport * as companiesService from \"../../../../services/api/admin/companies.service\";\nimport * as actionCreators from \"../../../../actions/admin/companies.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AddCompany = ({ setIsAddCompanyOpen, addNewCompany }) => {\n const [disableButton, setDisableButton] = useState(false);\n const { t } = useTranslation();\n\n const handleCreateCompanyError = ({ error }) => {\n const { data } = error;\n if (data.errors) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n if (data.errors.address) {\n toast.error(`${data.error.message}: ${data.errors.address.keys[0]}`);\n }\n if (data.errors.pib) {\n toast.error(`${data.error.message}: ${data.errors.pib.keys[0]}`);\n }\n if (data.errors.idNumber) {\n toast.error(`${data.error.message}: ${data.errors.idNumber.keys[0]}`);\n }\n if (data.errors.contact) {\n toast.error(`${data.error.message}: ${data.errors.contact.keys[0]}`);\n }\n if (data.errors.invoiceEmail) {\n toast.error(\n `${data.error.message}: ${data.errors.invoiceEmail.keys[0]}`\n );\n }\n if (data.errors.paymentDeadline) {\n toast.error(\n `${data.error.message}: ${data.errors.paymentDeadline.keys[0]}`\n );\n }\n if (data.errors.photo) {\n toast.error(`${data.errors.photo.keys[0]}`);\n }\n } else {\n toast.error(data.error.message);\n }\n };\n\n const createCompanySubmit = async values => {\n setDisableButton(true);\n\n const response = await companiesService.createCompany(values);\n setDisableButton(false);\n\n if (response.hasError) {\n return handleCreateCompanyError(response);\n }\n\n addNewCompany(response);\n closeAddCompany(setIsAddCompanyOpen);\n };\n\n const formik = useFormik({\n initialValues: new Company(),\n validate: validateCompanyForm,\n onSubmit: createCompanySubmit\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n setFieldTouched,\n setFieldError,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n \n
\n \n \n \n
\n {disableButton ? (\n \n ) : (\n \n {t(\"Create\")}\n \n )}\n closeAddCompany(setIsAddCompanyOpen)}\n width=\"130px\"\n margin=\"0\"\n outline\n padding=\"10px 25px\"\n >\n {t(\"cancel\")}\n \n
\n \n
\n
\n );\n};\n\nAddCompany.propTypes = {\n setIsAddCompanyOpen: PropTypes.func\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n addNewCompany: company => dispatch(actionCreators.addNewCompany(company))\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(AddCompany);\n","import AddCompany from './AddCompany'\n\nexport default AddCompany\n","export const tableHeadConfig = [\n {\n id: 1,\n field: \"name\",\n headName: \"Name\",\n isSortedUp: null,\n width: \"28%\",\n justifyContent: \"flex-start\",\n margin: \"\",\n isSortable: true,\n orderPriority: 0\n },\n {\n id: 2,\n field: \"pib\",\n headName: \"Pib\",\n isSortedUp: null,\n width: \"20%\",\n justifyContent: \"center\",\n margin: \"\",\n isSortable: false,\n orderPriority: 0\n },\n {\n id: 3,\n field: \"payment_deadline\",\n headName: \"Payment Deadline\",\n isSortedUp: null,\n width: \"20%\",\n justifyContent: \"center\",\n margin: \"\",\n isSortable: false,\n orderPriority: 0\n },\n {\n id: 4,\n field: \"invoice_email\",\n headName: \"Invoice email\",\n isSortedUp: null,\n width: \"20%\",\n justifyContent: \"center\",\n margin: \"\",\n isSortable: false,\n orderPriority: 0\n },\n {\n id: 5,\n field: \"\",\n headName: \"\",\n isSortedUp: null,\n width: \"4%\",\n justifyContent: \"center\",\n margin: \"\",\n isSortable: false,\n orderPriority: 0\n }\n];\n","let priorityCounter = 0\n\nexport const tableHeaderReducer = (state, action) => {\n\tconst tableHeaders = state.map(tableHeader => {\n\t\tif (tableHeader.id === action.type) {\n\t\t\treturn {\n\t\t\t\t...tableHeader,\n\t\t\t\tisSortedUp: !tableHeader.isSortedUp,\n\t\t\t\torderPriority: priorityCounter\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...tableHeader\n\t\t}\n\t})\n\tpriorityCounter += 1\n\treturn tableHeaders\n}\n","import styled from 'styled-components'\n\nconst CompaniesStyles = styled.section`\n\t.companiesContainer {\n\t\twidth: calc(100% - 210px);\n\t\tmargin-left: 210px;\n\t\tbackground: #f7f7f7;\n\t\tmin-height: 100vh;\n\t\toverflow-x: hidden;\n\t}\n\n\t.companiesContent {\n\t\tpadding: 0 30px 30px 30px;\n\t\tdisplay: flex;\n\t\tposition: relative;\n\t}\n\n\t#companiesList {\n\t\topacity: 0;\n\t\ttransition: all 0.4s ease-in-out;\n }\n\n\t.plusContainer {\n\t\twidth: 24px;\n\t\theight: 24px;\n\t\tbackground: #fff;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tmargin-right: 10px;\n\t\tcolor: #373737;\n\t\tborder-radius: 50%;\n\n\t\t.buttonText {\n\t\t\tline-height: 24px;\n\t\t\tfont-weight: 500;\n\t\t\tfont-size: 14px;\n\t\t}\n\t}\n\n\t.tableHead {\n\t\tpadding: 14px 30px;\n display: flex;\n align-items: center;\n\t\tborder-bottom: 1px solid #94ABD1;\n\t\tborder-top: 1px solid #F0F0F0;\n\t}\n\t\n\t.tableBodyContainer {\n background: #f7f7f7;\n padding: 30px;\n margin: 20px 0 0 0;\n border-radius: 4px;\n\t}\n\t\n\t#addCompanyForm {\n\t\tposition: absolute;\n\t\twidth: calc(100% - 60px);\n\t\ttransform: translateX(110%);\n\t\ttransition: all 0.4s ease-in-out;\n\t\topacity: 0;\n\t}\n\n\t.showAddCompanyForm {\n transform: translateY(0) !important;\n opacity: 1 !important;\n\t}\n\n\t.hideCompanyList {\n\t\ttransform: translateX(-110%);\n\t\topacity: 0;\n\t}\n`\n\nexport default CompaniesStyles\n","import React, {\n useContext,\n useState,\n useReducer,\n useEffect,\n useRef\n} from \"react\";\nimport { connect } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { BeatLoader } from \"react-spinners\";\nimport { toast } from \"react-toastify\";\nimport ReactTooltip from \"react-tooltip\";\nimport Pagination from \"react-pagination-js\";\nimport \"react-pagination-js/dist/styles.css\";\n// components\nimport {\n Header,\n Card,\n Button,\n Table,\n TableHead,\n TableRow,\n SearchInput,\n CompaniesListItem\n} from \"../../../../components\";\nimport AddCompany from \"../AddCompany\";\n// builders\nimport { tableHeaderReducer, tableHeadConfig } from \"./builder\";\n// styles\nimport CompaniesStyles from \"./CompaniesStyles\";\nimport { override } from \"../../../../services/loadingOverride.styles\";\n// context\nimport { CompaniesContext } from \"../../../../modules/superAdmin/companies/context/companies.context\";\nimport { UserContext } from \"../../../../modules/user/context/user.context\";\n// services\nimport { getOrderColumns } from \"../../../../services/getOrderColumns\";\nimport { closeAddCompany, openAddCompany } from \"../companies.services\";\nimport * as companiesService from \"../../../../services/api/admin/companies.service\";\nimport * as actionCreators from \"../../../../actions/admin/companies.actions\";\nimport { isEmpty } from \"../../../../services/general.utils\";\nimport { useTranslation } from \"react-i18next\";\n// configs\nconst LIMIT = 35;\n\nconst Companies = ({\n setPage,\n page,\n count,\n onSearchChange,\n search,\n setCompanies,\n deleteCompany,\n companies\n}) => {\n const { t } = useTranslation();\n const [isLoading, setIsLoading] = useState(true);\n const [isAddCompanyOpen, setIsAddCompanyOpen] = useState(false);\n const [tableHeaders, dispatch] = useReducer(\n tableHeaderReducer,\n tableHeadConfig\n );\n const isMounted = useRef(true);\n const history = useHistory();\n\n const fetchData = async (searchText = search) => {\n const response = await companiesService.getCompanies({\n limit: LIMIT,\n page,\n searchText,\n orderColumns: getOrderColumns(tableHeaders)\n });\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n if (isMounted.current) {\n setCompanies(response.companies, response.count);\n setIsLoading(false);\n setTimeout(() => {\n const companiesList = document.getElementById(\"companiesList\");\n if (isMounted.current && companiesList) {\n companiesList.style.opacity = 1;\n }\n }, 100);\n }\n };\n\n useEffect(() => {\n fetchData();\n }, [page, tableHeaders]);\n\n useEffect(\n () => () => {\n isMounted.current = false;\n },\n []\n );\n\n useEffect(() => {\n ReactTooltip.rebuild();\n }, [companies.length]);\n\n const toggleSortFunc = id => dispatch({ type: id });\n\n const handleGoBack = () => closeAddCompany(setIsAddCompanyOpen);\n\n return (\n \n
\n \n
\n {isLoading ? (\n \n \n
\n ) : (\n \n \n \n openAddCompany(setIsAddCompanyOpen)}\n >\n
\n

+

\n
\n {t(\"add_company\")}\n \n
\n
\n {tableHeaders.map(\n ({\n id,\n headName,\n isSortable,\n isSortedUp,\n width,\n justifyContent,\n margin\n }) => (\n \n )\n )}\n
\n\n
\n {!isEmpty(companies) ? (\n companies.map(\n ({\n id,\n name,\n pib,\n paymentDeadline,\n invoiceEmail,\n idNumber,\n address,\n contact,\n tags\n }) => (\n \n )\n )\n ) : (\n
\n No results found\n
\n )}\n
\n \n setPage(page)}\n theme=\"border-bottom\"\n />\n \n \n )}\n {isAddCompanyOpen && (\n
\n \n
\n
\n )}\n
\n \n
\n );\n};\n\nconst mapStateToProps = state => {\n return {\n companies: state.companies.companies,\n page: state.companies.page,\n count: state.companies.count,\n search: state.companies.search\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setCompanies: (companies, count) =>\n dispatch(actionCreators.setCompanies(companies, count)),\n deleteCompany: id => dispatch(actionCreators.deleteCompany(id)),\n setPage: page => dispatch(actionCreators.setPage(page)),\n onSearchChange: search => dispatch(actionCreators.onSearchChange(search))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Companies);\n","import Companies from './Companies'\n\nexport default Companies\n","import styled from 'styled-components'\n\nconst CompanyDetailsStyles = styled.section`\n\t.companyDetailsContainer {\n\t\twidth: calc(100% - 210px);\n\t\tmargin-left: 210px;\n\t\tbackground: #f7f7f7;\n\t\tmin-height: 100vh;\n\t\toverflow-x: hidden;\n\t}\n\t\n\t.companyDetailsContent {\n\t\tpadding: 0 30px 30px 30px;\n\t}\n\n\t#companyDetails {\n\t\topacity: 0;\n\t\ttransition: all 0.4s ease-in-out;\n\t}\n\n\t.companyTiersList {\n\t\tmargin: 30px 0;\n\n\t\t.tierItem {\n\t\t\tmargin: 0 0 10px 0;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tcolor: #4b4b4b;\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: 500;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: normal;\n\t\t\tbackground: #f7f7f7;\n\t\t\theight: 40px;\n\t\t\tpadding: 0 10px;\n\t\t\twidth: 320px;\n\t\t\tborder-radius: 4px;\n\t\t\tjustify-content: space-between;\n\n\t\t\t&:last-child {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t.tierName {\n\t\t\t\tmargin-right: 10px;\n\t\t\t\twidth: 120px;\n\t\t\t}\n\n\t\t\t.span {\n\t\t\t\tmargin-left: 5px;\n\t\t\t}\n\t\t}\n\t}\n`\n\nexport default CompanyDetailsStyles\n","import React, { useEffect, useState, useContext, useRef } from \"react\";\nimport { BeatLoader } from \"react-spinners\";\nimport PropTypes from \"prop-types\";\nimport { useHistory } from \"react-router-dom\";\n// components\nimport { Header, TextAndLine, Card, Button } from \"../../../../components\";\nimport BasicInfoSection from \"../BasicInfoSection\";\nimport CompanyTagsSection from \"../CompanyTagsSection\";\nimport DetailsSection from \"../DetailsSection\";\n// styling\nimport CompanyDetailsStyles from \"./CompanyDetailsStyles\";\nimport { override } from \"../../../../services/loadingOverride.styles\";\n// entity\nimport { Company } from \"../../../../models/domain\";\n// services\nimport * as companiesService from \"../../../../services/api/admin/companies.service\";\n// context\nimport { UserContext } from \"../../../../modules/user/context/user.context\";\n\nconst CompanyDetails = ({ match }) => {\n const [company, setCompany] = useState(new Company());\n const [isLoading, setIsLoading] = useState(true);\n const isMounted = useRef(true);\n const history = useHistory();\n\n const fetchSingleCompany = async () => {\n const response = await companiesService.getSelectedCompany(match.params.id);\n if (isMounted.current && response) {\n setTimeout(() => {\n setCompany(response);\n setIsLoading(false);\n setTimeout(() => {\n const companyDetails = document.getElementById(\"companyDetails\");\n if (isMounted.current && companyDetails) {\n companyDetails.style.opacity = 1;\n }\n }, 100);\n }, 100);\n }\n };\n\n useEffect(() => {\n fetchSingleCompany();\n return () => () => {\n isMounted.current = false;\n };\n }, []);\n\n return (\n \n
\n
\n
\n {isLoading ? (\n \n \n
\n ) : (\n \n \n \n \n
\n \n history.push(`/companies/edit/${match.params.id}`)\n }\n >\n Edit\n \n history.push(\"/companies\")}\n >\n Back\n \n
\n {company.tiers.length > 0 && (\n \n \n
\n {company.tiers.map(tier => (\n
\n

{tier.name}

\n

\n {tier.tokens} Tokens\n

\n
\n ))}\n
\n
\n )}\n
\n )}\n
\n \n
\n );\n};\n\nCompanyDetails.propTypes = {\n match: PropTypes.shape()\n};\n\nexport default CompanyDetails;\n","import styled from 'styled-components'\n\nconst EditCompanyStyles = styled.section`\n.editCompanyContainer {\n\t\twidth: calc(100% - 210px);\n\t\tmargin-left: 210px;\n\t\tbackground: #f7f7f7;\n\t\tmin-height: 100vh;\n\t\toverflow-x: hidden;\n\t}\n\t\n\t.editCompanyContent {\n\t\tpadding: 0 30px 30px 30px;\n\t}\n\n\t#editCompany {\n\t\topacity: 0;\n\t\ttransition: all 0.4s ease-in-out;\n\t}\n`\n\nexport default EditCompanyStyles\n","import React, { useEffect, useState, useContext, useRef } from \"react\";\nimport { toast } from \"react-toastify\";\nimport { BeatLoader } from \"react-spinners\";\nimport { useFormik } from \"formik\";\nimport PropTypes from \"prop-types\";\nimport { useHistory } from \"react-router-dom\";\n// components\nimport { Header, Card, Button } from \"../../../../components\";\nimport BasicInfoSection from \"../BasicInfoSection/BasicInfoSection\";\nimport CompanyTags from \"../CompanyTagsSection/CompanyTagsSection\";\nimport DetailsSection from \"../DetailsSection/DetailsSection\";\n// entity\nimport { Company } from \"../../../../models/domain\";\n// styles\nimport EditCompanyStyles from \"./EditCompanyStyles\";\nimport { override } from \"../../../../services/loadingOverride.styles\";\n// services\nimport { validateCompanyForm } from \"../../../../services/validations/superAdmin/company.validations\";\nimport * as companiesService from \"../../../../services/api/admin/companies.service\";\nimport { useSelector } from \"react-redux\";\nimport { shouldShowInRsd } from \"../../../../utils/transformTokensToRsd\";\nimport { useTranslation } from \"react-i18next\";\n\nconst EditCompany = ({ match }) => {\n const { t } = useTranslation();\n const [company, setCompany] = useState(new Company());\n const [isLoading, setIsLoading] = useState(true);\n const [disableButton, setDisableButton] = useState(false);\n\n const { companyId: isYourCompanyId } = useSelector(state => state.app.user);\n\n const history = useHistory();\n const isMounted = useRef(true);\n\n const fetchCompany = async () => {\n const response = await companiesService.getSelectedCompany(match.params.id);\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage ? response.errorMessage : \"Fetch company failed.\"\n );\n }\n\n if (isMounted.current) {\n setCompany(response);\n setIsLoading(false);\n setTimeout(() => {\n const editCompany = document.getElementById(\"editCompany\");\n if (isMounted.current && editCompany) {\n editCompany.style.opacity = 1;\n }\n }, 100);\n }\n };\n useEffect(() => {\n fetchCompany();\n return () => () => {\n isMounted.current = false;\n };\n }, []);\n\n const handleUpdateCompanyError = ({ error }) => {\n const { data } = error;\n if (data.errors) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n if (data.errors.address) {\n toast.error(`${data.error.message}: ${data.errors.address.keys[0]}`);\n }\n if (data.errors.pib) {\n toast.error(`${data.error.message}: ${data.errors.pib.keys[0]}`);\n }\n if (data.errors.idNumber) {\n toast.error(`${data.error.message}: ${data.errors.idNumber.keys[0]}`);\n }\n if (data.errors.contact) {\n toast.error(`${data.error.message}: ${data.errors.contact.keys[0]}`);\n }\n if (data.errors.invoiceEmail) {\n toast.error(\n `${data.error.message}: ${data.errors.invoiceEmail.keys[0]}`\n );\n }\n if (data.errors.paymentDeadline) {\n toast.error(\n `${data.error.message}: ${data.errors.paymentDeadline.keys[0]}`\n );\n }\n if (data.errors.vatEnabled) {\n toast.error(`${data.error.message}: ${data.errors.vatEnabled.keys[0]}`);\n }\n if (data.errors.photo) {\n toast.error(`${data.errors.photo.keys[0]}`);\n }\n } else {\n toast.error(data.error.message);\n }\n };\n\n const updateCompanySubmit = async values => {\n setDisableButton(true);\n\n const response = await companiesService.updateCompany(values);\n\n setDisableButton(false);\n\n if (response.hasError) {\n return handleUpdateCompanyError(response);\n }\n\n if (values.id === isYourCompanyId) await shouldShowInRsd(isYourCompanyId);\n\n history.push(\"/companies\");\n };\n\n const formik = useFormik({\n enableReinitialize: true,\n initialValues: company,\n validate: validateCompanyForm,\n onSubmit: updateCompanySubmit\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n setFieldTouched,\n setFieldError,\n handleChange,\n handleBlur\n } = formik;\n\n const shouldRedirectToOriginal = () => history.push(\"/companies\");\n\n return (\n \n
\n \n
\n {isLoading ? (\n \n \n
\n ) : (\n \n handleSubmit(e)}\n >\n \n \n \n
\n {disableButton ? (\n \n ) : (\n \n {t(\"Update\")}\n \n )}\n history.push(\"/companies\")}\n width=\"130px\"\n margin=\"0\"\n outline\n padding=\"10px 25px\"\n >\n {t(\"cancel\")}\n \n
\n \n
\n )}\n
\n \n
\n );\n};\n\nEditCompany.propTypes = {\n match: PropTypes.shape()\n};\n\nexport default EditCompany;\n","import styled from \"styled-components\";\n\nconst ItemStyles = styled.div`\n background: #1568bf;\n border: 1px solid #1568bf;\n border-radius: 4px;\n margin: 5px;\n padding: 5px 10px;\n display: flex;\n cursor: pointer;\n\n .tagName {\n color: #fff;\n font-size: 14px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n margin-right: 10px;\n }\n\n .tagName--remove {\n margin: 0;\n }\n\n .removeButton {\n width: 16px;\n height: 100%;\n border: none;\n outline: none;\n background: none;\n color: #fff;\n cursor: pointer;\n font-size: 16px;\n font-weight: 600;\n }\n`;\n\nexport default ItemStyles;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport ItemStyles from \"./ItemStyles\";\n\nconst Item = ({ name, removeItem, editItem }) => (\n editItem()}>\n

{name}

\n {\n e.stopPropagation();\n removeItem();\n }}\n >\n X\n \n
\n);\n\nItem.propTypes = {\n name: PropTypes.string,\n removeItem: PropTypes.func,\n editItem: PropTypes.func\n};\n\nexport default Item;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n\nimport Item from \"./Item\";\n\nconst ListStyles = styled.div`\n border: 1px solid #1568bf;\n border-radius: 4px;\n padding: 5px;\n display: flex;\n flex-wrap: wrap;\n margin: 30px 0 60px 0;\n`;\n\nconst List = ({ items = [], removeItem, editItem }) => (\n \n {items.map(item => (\n removeItem(item.id)}\n editItem={() => editItem(item.id)}\n />\n ))}\n \n);\n\nList.propTypes = {\n items: PropTypes.arrayOf(PropTypes.shape()).isRequired,\n removeItem: PropTypes.func.isRequired,\n editItem: PropTypes.func.isRequired\n};\n\nexport default List;\n","import List from './List'\n\nexport default List\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n\nimport { Input, InputLabel, Button } from \"../../../../../../components\";\nimport { useTranslation } from \"react-i18next\";\n\nconst FormStyles = styled.div`\n .labelErrorContainer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n`;\n\nconst Form = ({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n buttonText\n}) => {\n const { t } = useTranslation();\n return (\n \n
\n
\n \n
\n {errors.name && touched.name ? errors.name : \"\"}\n
\n
\n \n
\n \n
\n );\n};\n\nForm.propTypes = {\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n handleChange: PropTypes.func,\n handleBlur: PropTypes.func,\n buttonText: PropTypes.string\n};\n\nexport default Form;\n","class BenefitTag {\n constructor(benefitTagData = {}) {\n this.id = benefitTagData.id || null;\n this.name = benefitTagData.name || \"\";\n }\n}\n\nclass CompanyTag {\n constructor(companyTagData = {}) {\n this.id = companyTagData.id || null;\n this.name = companyTagData.name || \"\";\n }\n}\n\nclass Category {\n constructor(benefitCategoryData = {}) {\n this.id = benefitCategoryData.id || null;\n this.name = benefitCategoryData.name || \"\";\n this.description = benefitCategoryData.description || \"\";\n }\n}\n\nclass City {\n constructor(cityData = {}) {\n this.id = cityData.id || null;\n this.name = cityData.name || \"\";\n }\n}\n\nexport { BenefitTag, CompanyTag, Category, City };\n","import { findLocales } from \"../../../utils/helpers/findLocales\";\nimport { removeSpacesAndHTML } from \"../../general.utils\";\n\nexport const companyTagValidations = ({ name }) => {\n const errors = {};\n const isInLanguage = findLocales(\"rs\");\n\n if (!name.trim()) {\n errors.name = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!removeSpacesAndHTML(name)) {\n errors.name = isInLanguage\n ? \"HTML tag nije dozvoljen\"\n : \"HTML tag is not allowed\";\n }\n\n return errors;\n};\n","import React, { useContext } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\nimport styled from \"styled-components\";\n\nimport Form from \"./Form\";\n\nimport { CompanyTag } from \"../../../../../../modules/superAdmin/settings/settings.entity\";\nimport { companyTagValidations } from \"../../../../../../services/validations/superAdmin/companyTag.validations\";\nimport * as companyTagsService from \"../../../../../../services/api/admin/companyTags.service\";\n\nimport * as actionCreators from \"../../../../../../actions/admin/companyTags.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AddCompanyTagStyles = styled.div`\n padding: 20px;\n width: 400px;\n\n .title {\n margin-bottom: 20px;\n }\n`;\n\nconst AddCompanyTag = ({ closeModal, addCompanyTag }) => {\n const { t } = useTranslation();\n\n const handleCreateBenefitTagError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n }\n };\n\n const createCompanyTag = async values => {\n const response = await companyTagsService.addCompanyTag(values);\n if (response.hasError) {\n return handleCreateBenefitTagError(response);\n }\n\n addCompanyTag(response);\n toast.success(t(\"success_add_benefit_category\"));\n closeModal();\n };\n\n const formik = useFormik({\n initialValues: new CompanyTag(),\n validate: companyTagValidations,\n onSubmit: createCompanyTag\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"Add Company tag\")}

\n
\n \n \n
\n );\n};\n\nAddCompanyTag.propTypes = {\n closeModal: PropTypes.func\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n addCompanyTag: companyTags =>\n dispatch(actionCreators.addCompanyTag(companyTags))\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(AddCompanyTag);\n","import { BenefitTag } from \"../../settings.entity\";\n\nconst initalBenefitTagState = [];\n\nconst actionTypes = {\n setBenefitTags: \"SET_BENEFIT_TAGS\",\n addBenefitTags: \"ADD_BENEFIT_TAGS\",\n editBenefitTags: \"EDIT_BENEFIT_TAGS\",\n deleteBenefitTags: \"DELETE_BENEFIT_TAGS\"\n};\n\nconst benefitTagsReducer = (state = initalBenefitTagState, action) => {\n switch (action.type) {\n case actionTypes.setBenefitTags:\n return action.payload.benefitTags.map(\n benefitTag => new BenefitTag(benefitTag)\n );\n case actionTypes.addBenefitTags:\n return [...state, new BenefitTag(action.payload)];\n case actionTypes.editBenefitTags:\n return state.map(tag =>\n tag.id === action.id ? new BenefitTag(action.payload) : tag\n );\n case actionTypes.deleteBenefitTags:\n return state.filter(tag => tag.id !== action.id);\n default:\n throw new Error(`Unknow action type: ${action.type}`);\n }\n};\n\nexport { benefitTagsReducer, actionTypes, initalBenefitTagState };\n","import { CompanyTag } from '../../settings.entity'\n\nconst initialCompanyTagsState = []\n\nconst actionTypes = {\n\tsetCompanyTags: 'SET_COMPANY_TAGS',\n\taddCompanyTag: 'ADD_COMPANY_TAG',\n\teditCompanyTag: 'EDIT_COMPANY_TAG',\n\tdeleteCompanyTag: 'DELETE_COMPANY_TAG'\n}\n\n\nconst companyTagsReducer = (state = initialCompanyTagsState, action) => {\n\tswitch (action.type) {\n\t\tcase actionTypes.setCompanyTags:\n\t\t\treturn action.payload.companyTags.map(companyTag => new CompanyTag(companyTag))\n\t\tcase actionTypes.addCompanyTag:\n\t\t\treturn [...state, new CompanyTag(action.payload)]\n\t\tcase actionTypes.editCompanyTag:\n\t\t\treturn state.map(tag => (tag.id === action.id ? new CompanyTag(action.payload) : tag))\n\t\tcase actionTypes.deleteCompanyTag:\n\t\t\treturn state.filter(tag => tag.id !== action.id)\n\t\tdefault:\n\t\t\tthrow new Error(`Unknow action type: ${action.type}`)\n\t}\n}\n\nexport { companyTagsReducer, actionTypes, initialCompanyTagsState }\n","import { Category } from '../../settings.entity'\n\nconst initalCategoriesState = []\n\nconst actionTypes = {\n\tsetCategories: 'SET_CATEGORIES',\n\taddCategories: 'ADD_CATEGORIES',\n\teditCategories: 'EDIT_CATEGORIES',\n\tdeleteCategories: 'DELETE_CATEGORIES'\n}\n\nconst categoriesReducer = (state = initalCategoriesState, action) => {\n\tswitch (action.type) {\n\t\tcase actionTypes.setCategories:\n\t\t\treturn action.payload.map(category => new Category(category))\n\t\tcase actionTypes.addCategories:\n\t\t\treturn [...state, new Category(action.payload)]\n\t\tcase actionTypes.editCategories:\n\t\t\treturn state.map(category =>\n\t\t\t\t(category.id === action.id ? new Category(action.payload) : category)\n\t\t\t)\n\t\tcase actionTypes.deleteCategories:\n\t\t\treturn state.filter(category => category.id !== action.id)\n\t\tdefault:\n\t\t\tthrow new Error(`Unknow action type: ${action.type}`)\n\t}\n}\n\nexport { initalCategoriesState, actionTypes, categoriesReducer }\n","import React, { createContext, useReducer, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { initalBenefitTagState, benefitTagsReducer } from './reducers/benefitTag.reducer'\nimport { initialCompanyTagsState, companyTagsReducer } from './reducers/companyTag.reducer'\nimport { initalCategoriesState, categoriesReducer } from './reducers/categories.reducer'\n\nimport { useBenefitTagActions } from './actions/benefitTags.actions'\nimport { useCompanyTagsActions } from './actions/companyTags.actions'\nimport { useCategoriesActions } from './actions/categories.actions'\n\nconst SettingsContext =\n\tcreateContext({ ...initalBenefitTagState, ...initialCompanyTagsState, ...initalCategoriesState })\n\nconst SettingsProvider = ({ children }) => {\n\t// state\n\tconst [companyTags, dispatchCompanyTags] =\n\t\tuseReducer(companyTagsReducer, initialCompanyTagsState)\n\tconst [benefitTags, dispatchBenefitTags] =\n\t\tuseReducer(benefitTagsReducer, initalBenefitTagState)\n\tconst [categoriesState, dispatchCategoriesState] =\n\t\tuseReducer(categoriesReducer, initalCategoriesState)\n\t// actions\n\tconst benefitTagsActions = useBenefitTagActions(dispatchBenefitTags)\n\tconst companyTagsActions = useCompanyTagsActions(dispatchCompanyTags)\n\tconst categoriesActions = useCategoriesActions(dispatchCategoriesState)\n\n\tuseEffect(() => { }, [initalBenefitTagState, initialCompanyTagsState, initalCategoriesState])\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t)\n}\n\nSettingsProvider.propTypes = {\n\tchildren: PropTypes.node\n}\n\nexport { SettingsContext, SettingsProvider }\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\nimport styled from \"styled-components\";\n\nimport Form from \"./Form\";\n\nimport { CompanyTag } from \"../../../../../../modules/superAdmin/settings/settings.entity\";\nimport { companyTagValidations } from \"../../../../../../services/validations/superAdmin/companyTag.validations\";\nimport { SettingsContext } from \"../../../../../../modules/superAdmin/settings/context/settings.context\";\nimport * as companyTagsService from \"../../../../../../services/api/admin/companyTags.service\";\n\nimport * as actionCreators from \"../../../../../../actions/admin/companyTags.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst EditCompanyTagStyles = styled.div`\n padding: 20px;\n width: 400px;\n\n .title {\n margin-bottom: 20px;\n }\n`;\n\nconst EditCompanyTag = ({ closeModal, chosenId, editCompanyTag }) => {\n const [chosenTag, setChosenTag] = useState(new CompanyTag());\n const { t } = useTranslation();\n\n const handleEditBenefitTagError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n }\n };\n\n const updateCompanyTag = async values => {\n const response = await companyTagsService.editCompanyTag(values, chosenId);\n if (response.hasError) {\n return handleEditBenefitTagError(response);\n }\n\n editCompanyTag(response);\n toast.success(t(\"success_update_company_tag\"));\n closeModal();\n };\n\n const fetchCompanyTag = async () => {\n const response = await companyTagsService.getCompanyTag(chosenId);\n if (response) {\n setChosenTag(new CompanyTag(response));\n }\n };\n\n useEffect(() => {\n fetchCompanyTag();\n }, []);\n\n const formik = useFormik({\n enableReinitialize: true,\n initialValues: chosenTag,\n validate: companyTagValidations,\n onSubmit: updateCompanyTag\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"edit_company_tag\")}

\n
\n \n \n
\n );\n};\n\nEditCompanyTag.propTypes = {\n closeModal: PropTypes.func,\n chosenId: PropTypes.number\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n editCompanyTag: companyTag =>\n dispatch(actionCreators.editCompanyTag(companyTag))\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(EditCompanyTag);\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n\nimport { Input, InputLabel, Button } from \"../../../../../../components\";\nimport { useTranslation } from \"react-i18next\";\n\nconst FormStyles = styled.div`\n .labelErrorContainer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n`;\n\nconst Form = ({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n buttonText\n}) => {\n const { t } = useTranslation();\n return (\n \n
\n
\n \n
\n {errors.name && touched.name ? errors.name : \"\"}\n
\n
\n \n
\n \n
\n );\n};\n\nForm.propTypes = {\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n handleChange: PropTypes.func,\n handleBlur: PropTypes.func,\n buttonText: PropTypes.string\n};\n\nexport default Form;\n","import { findLocales } from \"../../../utils/helpers/findLocales\";\nimport { removeSpacesAndHTML } from \"../../general.utils\";\n\nexport const benefitTagValidations = ({ name }) => {\n const isInLanguage = findLocales(\"rs\");\n const errors = {};\n\n if (!name.trim()) {\n errors.name = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!removeSpacesAndHTML(name)) {\n errors.name = isInLanguage\n ? \"HTML tag nije dozvoljen\"\n : \"HTML tag is not allowed\";\n }\n\n return errors;\n};\n","import React, { useContext } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\nimport styled from \"styled-components\";\n\nimport Form from \"./Form\";\n\nimport { BenefitTag } from \"../../../../../../modules/superAdmin/settings/settings.entity\";\nimport { benefitTagValidations } from \"../../../../../../services/validations/superAdmin/benefitTag.validations\";\nimport { axiosInstance } from \"../../../../../../services/http/axiosConfig\";\nimport { SettingsContext } from \"../../../../../../modules/superAdmin/settings/context/settings.context\";\nimport * as benefitTagsService from \"../../../../../../services/api/admin/benefitTags.service\";\n\nimport * as actionCreators from \"../../../../../../actions/admin/benefitTags.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AddBenefitTagStyles = styled.div`\n padding: 20px;\n width: 400px;\n\n .title {\n margin-bottom: 20px;\n }\n`;\n\nconst AddCompanyTag = ({ closeModal, addBenefitTag }) => {\n const { t } = useTranslation();\n\n const handleEditBenefitTagError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n }\n };\n\n const createBenefitTag = async values => {\n const response = await benefitTagsService.addBenefitTag(values);\n if (response.hasError) {\n return handleEditBenefitTagError(response);\n }\n\n addBenefitTag(response);\n toast.success(t(\"success_add_tag\"));\n closeModal();\n };\n\n const formik = useFormik({\n initialValues: new BenefitTag(),\n validate: benefitTagValidations,\n onSubmit: createBenefitTag\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"add_benefit_tag\")}

\n
\n \n \n
\n );\n};\n\nAddCompanyTag.propTypes = {\n closeModal: PropTypes.func\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n addBenefitTag: benefitTag =>\n dispatch(actionCreators.addBenefitTag(benefitTag))\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(AddCompanyTag);\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\nimport styled from \"styled-components\";\n\nimport Form from \"./Form\";\n\nimport { BenefitTag } from \"../../../../../../modules/superAdmin/settings/settings.entity\";\nimport { benefitTagValidations } from \"../../../../../../services/validations/superAdmin/benefitTag.validations\";\nimport * as benefitTagsService from \"../../../../../../services/api/admin/benefitTags.service\";\n\nimport * as actionCreators from \"../../../../../../actions/admin/benefitTags.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst EditBenefitTagStyles = styled.div`\n padding: 20px;\n width: 400px;\n\n .title {\n margin-bottom: 20px;\n }\n`;\n\nconst EditBenefitTag = ({ closeModal, chosenId, editBenefitTag }) => {\n const [benefitTag, setBenefitTag] = useState(new BenefitTag());\n const { t } = useTranslation();\n\n const handleEditBenefitTagError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n if (data.errors.description) {\n toast.error(\n `${data.error.message}: ${data.errors.description.keys[0]}`\n );\n }\n }\n };\n\n const updateBenefitTag = async values => {\n const response = await benefitTagsService.editBenefitTag(values, chosenId);\n if (response.hasError) {\n return handleEditBenefitTagError(response);\n }\n\n toast.success(t(\"success_update_tag\"));\n editBenefitTag(response);\n closeModal();\n };\n\n const fetchBenefitTag = async () => {\n const response = await benefitTagsService.getBenefitTag(chosenId);\n if (response) {\n setBenefitTag(response);\n }\n };\n\n useEffect(() => {\n fetchBenefitTag();\n }, []);\n\n const formik = useFormik({\n enableReinitialize: true,\n initialValues: benefitTag,\n validate: benefitTagValidations,\n onSubmit: updateBenefitTag\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"edit_benefit_tag\")}

\n
\n \n \n
\n );\n};\n\nEditBenefitTag.propTypes = {\n closeModal: PropTypes.func,\n chosenId: PropTypes.number\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n editBenefitTag: benefitTag =>\n dispatch(actionCreators.editBenefitTag(benefitTag))\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(EditBenefitTag);\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n\nimport { Input, InputLabel, Button } from \"../../../../../../components\";\nimport { useTranslation } from \"react-i18next\";\n\nconst FormStyles = styled.div`\n .labelErrorContainer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .description {\n width: 100%;\n min-width: 100%;\n max-width: 100%;\n height: 200px;\n min-height: 200px;\n max-height: 200px;\n border-radius: 4px;\n border: solid 1px #979797;\n padding: 5px 10px 5px 5px;\n font-size: 14px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n -webkit-letter-spacing: normal;\n -moz-letter-spacing: normal;\n -ms-letter-spacing: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n outline: none;\n resize: none;\n overflow-y: auto;\n }\n`;\n\nconst Form = ({\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n buttonText\n}) => {\n const { t } = useTranslation();\n return (\n \n
\n
\n \n
\n {errors.name && touched.name ? errors.name : \"\"}\n
\n
\n \n
\n
\n
\n \n
\n \n
\n \n
\n );\n};\n\nForm.propTypes = {\n values: PropTypes.shape(),\n errors: PropTypes.shape(),\n touched: PropTypes.shape(),\n handleChange: PropTypes.func,\n handleBlur: PropTypes.func,\n buttonText: PropTypes.string\n};\n\nexport default Form;\n","import { findLocales } from \"../../../utils/helpers/findLocales\";\nimport { removeSpacesAndHTML } from \"../../general.utils\";\n\nexport const categoryValidations = ({ name }) => {\n const isInLanguage = findLocales(\"rs\");\n\n const errors = {};\n\n if (!name.trim()) {\n errors.name = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!removeSpacesAndHTML(name)) {\n errors.name = isInLanguage\n ? \"HTML tag nije dozvoljen\"\n : \"HTML tag is not allowed\";\n }\n\n return errors;\n};\n","import React, { useContext } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\nimport styled from \"styled-components\";\n\nimport Form from \"./Form\";\n\nimport { Category } from \"../../../../../../modules/superAdmin/settings/settings.entity\";\nimport { categoryValidations } from \"../../../../../../services/validations/superAdmin/category.validations\";\nimport * as categoriesService from \"../../../../../../services/api/admin/categories.service\";\n\nimport * as actionCreators from \"../../../../../../actions/admin/categories.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AddCategoryStyles = styled.div`\n padding: 20px;\n width: 400px;\n\n .title {\n margin-bottom: 20px;\n }\n`;\n\nconst AddCategory = ({ closeModal, addCategory }) => {\n const { t } = useTranslation();\n\n const handleCreateCategoryError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n if (data.errors.description) {\n toast.error(\n `${data.error.message}: ${data.errors.description.keys[0]}`\n );\n }\n }\n };\n\n const createCategory = async values => {\n const response = await categoriesService.addCategory(values);\n if (response.hasError) {\n return handleCreateCategoryError(response);\n }\n\n addCategory(response);\n toast.success(t(\"success_add_category\"));\n closeModal();\n };\n\n const formik = useFormik({\n initialValues: new Category(),\n validate: categoryValidations,\n onSubmit: createCategory\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"add_category\")}

\n
\n \n \n
\n );\n};\n\nAddCategory.propTypes = {\n closeModal: PropTypes.func\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n addCategory: category => dispatch(actionCreators.addCategory(category))\n };\n};\n\nexport default connect(undefined, mapDispatchToProps)(AddCategory);\n","import React, { useContext } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport PropTypes from \"prop-types\";\nimport { toast } from \"react-toastify\";\nimport styled from \"styled-components\";\n\nimport Form from \"./Form\";\n\nimport { Category } from \"../../../../../../modules/superAdmin/settings/settings.entity\";\nimport { categoryValidations } from \"../../../../../../services/validations/superAdmin/category.validations\";\nimport { axiosInstance } from \"../../../../../../services/http/axiosConfig\";\nimport { SettingsContext } from \"../../../../../../modules/superAdmin/settings/context/settings.context\";\nimport * as categoriesService from \"../../../../../../services/api/admin/categories.service\";\n\nimport * as actionCreators from \"../../../../../../actions/admin/categories.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst EditCategoryStyles = styled.div`\n padding: 20px;\n width: 400px;\n\n .title {\n margin-bottom: 20px;\n }\n`;\n\nconst EditCategory = ({ closeModal, chosenId, editCategory, categories }) => {\n const { t } = useTranslation();\n\n const handleEditCategoryError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n if (data.errors.description) {\n toast.error(\n `${data.error.message}: ${data.errors.description.keys[0]}`\n );\n }\n }\n };\n\n const updateCategory = async values => {\n const response = await categoriesService.editCategory(values, chosenId);\n if (response.hasError) {\n return handleEditCategoryError(response);\n }\n\n editCategory(response);\n toast.success(t(\"success_update_category\"));\n closeModal();\n };\n\n const formik = useFormik({\n initialValues: new Category(\n categories.find(category => category.id === chosenId)\n ),\n validate: categoryValidations,\n onSubmit: updateCategory\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"edit_category\")}

\n
\n \n \n
\n );\n};\n\nEditCategory.propTypes = {\n closeModal: PropTypes.func,\n chosenId: PropTypes.number\n};\n\nconst mapStateToProps = state => {\n return {\n categories: state.categories.categories\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n editCategory: category => dispatch(actionCreators.editCategory(category))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(EditCategory);\n","import { findLocales } from \"../../../utils/helpers/findLocales\";\nimport { removeSpacesAndHTML } from \"../../general.utils\";\n\nexport const cityValidations = ({ name }) => {\n const errors = {};\n const isInLanguage = findLocales(\"rs\");\n\n if (!name.trim()) {\n errors.name = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!removeSpacesAndHTML(name)) {\n errors.name = isInLanguage\n ? \"HTML tag nije dozvoljen\"\n : \"HTML tag is not allowed\";\n }\n\n return errors;\n};\n","import React from \"react\";\nimport { toast } from \"react-toastify\";\nimport { City } from \"../../../../../../models/domain\";\nimport { cityValidations } from \"../../../../../../services/validations/superAdmin/city.validation\";\nimport styled from \"styled-components\";\nimport { useFormik } from \"formik\";\nimport Form from \"../BenefitTags/Form\";\nimport { apiService } from \"../../../../../../services/api/api.service\";\nimport { useDispatch } from \"react-redux\";\nimport { setCities } from \"../../../../../../actions/app.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AddCitiesStyles = styled.div`\n padding: 20px;\n width: 400px;\n\n .title {\n margin-bottom: 20px;\n }\n`;\n\nexport const AddCity = ({ closeModal }) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n\n const handleCreateCityError = ({ error }) => {\n const { data } = error;\n if (data.errors && data.error) {\n if (data.errors.name) {\n toast.error(`${data.error.message}: ${data.errors.name.keys[0]}`);\n }\n }\n };\n\n const createCity = async values => {\n try {\n const response = await apiService.post(\"/cities\", {\n name: values.name\n });\n\n const citiesResponse = await apiService.get(\n \"/cities?search=&page=1&limit=200\"\n );\n\n const citiesData = citiesResponse.data?.cities || [];\n\n dispatch(setCities(citiesData));\n\n toast.success(response.data.message);\n closeModal();\n } catch (error) {\n handleCreateCityError(response);\n }\n };\n\n const formik = useFormik({\n initialValues: new City(),\n validate: cityValidations,\n onSubmit: createCity\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n handleChange,\n handleBlur\n } = formik;\n\n return (\n \n

{t(\"add_cities\")}

\n
\n \n \n
\n );\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { AddCompanyTag, EditCompanyTag } from \"./CompanyTags\";\nimport { AddBenefitTag, EditBenefitTag } from \"./BenefitTags\";\nimport { AddCategory, EditCategory } from \"./Categories\";\nimport { AddCity } from \"./Cities/AddCities\";\n\nconst FormRenderer = ({ modalType, closeModal, chosenId }) => {\n switch (modalType) {\n case \"ADD_COMPANY_TAG\":\n return ;\n case \"EDIT_COMPANY_TAG\":\n return ;\n case \"ADD_BENEFIT_TAG\":\n return ;\n case \"EDIT_BENEFIT_TAG\":\n return ;\n case \"ADD_CATEGORY\":\n return ;\n case \"EDIT_CATEGORY\":\n return ;\n case \"ADD_CITY\":\n return ;\n default:\n throw new Error(`Unknow action type: ${modalType}`);\n }\n};\n\nPropTypes.FormRenderer = {\n modalType: PropTypes.string,\n chosenId: PropTypes.number,\n closeModal: PropTypes.func\n};\nexport default FormRenderer;\n","import FormRenderer from './FormRenderer'\n\nexport default FormRenderer\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n\nimport { TextAndLine, Button } from \"../../../../components\";\nimport List from \"./List\";\n\nconst SectionStyles = styled.div``;\n\nconst Section = ({\n textAndLineTitle,\n buttonOnCLick,\n buttonText,\n listItems,\n editItem,\n removeItem\n}) => (\n \n \n \n \n \n);\n\nSection.propTypes = {\n textAndLineTitle: PropTypes.string,\n buttonOnCLick: PropTypes.func,\n buttonText: PropTypes.string,\n listItems: PropTypes.arrayOf(PropTypes.shape()),\n editItem: PropTypes.func,\n removeItem: PropTypes.func\n};\n\nexport default Section;\n","import styled from 'styled-components'\n\nconst SettingsStyles = styled.section`\n\t.tagsSectionContainer {\n\t\twidth: calc(100% - 210px);\n\t\tmargin-left: 210px;\n\t\tbackground: #f1f1f4;\n\t\tmin-height: 100vh;\n\t}\n\n\t.tagsContent {\n\t\tpadding: 0 30px 30px 30px;\n\t\tdisplay: flex;\n\t}\n\n\t#settingsCard {\n\t\topacity: 0;\n\t\ttransition: all 0.4s ease-in-out;\n\t}\n`\n\nexport default SettingsStyles\n","import { openModalAnim, closeModalAnim } from '../../../components/modal'\n\nconst openModal = ({ setModalType, modalType }) => {\n\tsetModalType(modalType)\n\tsetTimeout(() => {\n\t\topenModalAnim()\n\t}, 100)\n}\n\nconst closeModal = ({ setModalType }) => {\n\tcloseModalAnim()\n\tsetTimeout(() => {\n\t\tsetModalType(undefined)\n\t}, 350)\n}\n\nexport {\n\topenModal,\n\tcloseModal\n}\n","/* eslint-disable */\nimport React, { useState, useEffect, useRef } from \"react\";\nimport { connect, useDispatch, useSelector } from \"react-redux\";\nimport { BeatLoader } from \"react-spinners\";\nimport { toast } from \"react-toastify\";\n// components\nimport { Header, Card, Modal } from \"../../../components\";\nimport { Section, FormRenderer } from \"./shared\";\n// styles\nimport SettingsStyles from \"./SettingsStyles\";\nimport { override } from \"../../../services/loadingOverride.styles\";\n// services\nimport { openModal, closeModal } from \"./settings.services\";\nimport * as benefitTagActionCreators from \"../../../actions/admin/benefitTags.actions\";\nimport * as companyTagActionCreators from \"../../../actions/admin/companyTags.actions\";\nimport * as categoriesActionCreators from \"../../../actions/admin/categories.actions\";\nimport * as benefitTagService from \"../../../services/api/admin/benefitTags.service\";\nimport * as companyTagService from \"../../../services/api/admin/companyTags.service\";\nimport * as categoriesService from \"../../../services/api/admin/categories.service\";\n// context\nimport { useDisableBodyScroll } from \"../../../hooks/useDisableBodyScroll\";\nimport { apiService } from \"../../../services/api/api.service\";\nimport { setCities } from \"../../../actions/app.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nlet mountedState = null;\nlet cardOpacity = null;\n\nconst Settings = ({\n setBenefitTags,\n deleteBenefitTag,\n setCompanyTags,\n deleteCompanyTag,\n setCategories,\n deleteCategory,\n categories,\n companyTags,\n benefitTags\n}) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const [modalType, setModalType] = useState(undefined);\n const [isLoading, setIsLoading] = useState(true);\n const [chosenId, setChosenID] = useState(undefined);\n\n const { cities } = useSelector(state => state.app);\n\n const isMounted = useRef(true);\n\n useDisableBodyScroll(modalType);\n\n const fetchCities = async () => {\n const citiesResponse = await apiService.get(\n \"/cities?search=&page=1&limit=200\"\n );\n\n const citiesData = citiesResponse.data?.cities || [];\n\n dispatch(setCities(citiesData));\n };\n\n const fetchData = async () => {\n const companyTagsData = await companyTagService.getCompanyTags();\n const benefitTagsData = await benefitTagService.getBenefitTags();\n const categoriesData = await categoriesService.getCategories();\n fetchCities();\n\n mountedState = setTimeout(() => {\n if (\n benefitTagsData &&\n companyTagsData &&\n categoriesData &&\n isMounted.current\n ) {\n setCompanyTags(companyTagsData);\n setBenefitTags(benefitTagsData);\n setCategories(categoriesData.categories);\n setIsLoading(false);\n }\n }, 100);\n cardOpacity = setTimeout(() => {\n const settingsCard = document.getElementById(\"settingsCard\");\n if (isMounted.current && settingsCard) {\n settingsCard.style.opacity = 1;\n }\n }, 200);\n };\n\n useEffect(() => {\n fetchData();\n return () => {\n isMounted.current = false;\n clearTimeout(mountedState);\n clearTimeout(cardOpacity);\n };\n }, []);\n\n return (\n \n
\n
\n {isLoading ? (\n \n \n
\n ) : (\n
\n \n {\n openModal({ setModalType, modalType: \"ADD_COMPANY_TAG\" });\n }}\n editItem={id => {\n setChosenID(id);\n openModal({ setModalType, modalType: \"EDIT_COMPANY_TAG\" });\n }}\n removeItem={async id => {\n const result = confirm(t(\"delete_company_tag_question\"));\n if (result) {\n const response = await companyTagService.removeCompanyTag(\n id\n );\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_delete_company_tag\")\n );\n }\n\n deleteCompanyTag(id);\n toast.success(t(\"success_delete_company_tag\"));\n }\n }}\n />\n {\n openModal({ setModalType, modalType: \"ADD_BENEFIT_TAG\" });\n }}\n editItem={id => {\n setChosenID(id);\n openModal({ setModalType, modalType: \"EDIT_BENEFIT_TAG\" });\n }}\n removeItem={async id => {\n const result = confirm(\n \"Are you sure you want to delete this benefit tag?\"\n );\n if (result) {\n const response = await benefitTagService.removeBenefitTag(\n id\n );\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_delete_benefit_tag\")\n );\n }\n\n deleteBenefitTag(id);\n toast.success(t(\"success_delete_benefit_tag\"));\n }\n }}\n />\n {\n openModal({ setModalType, modalType: \"ADD_CATEGORY\" });\n }}\n editItem={id => {\n setChosenID(id);\n openModal({ setModalType, modalType: \"EDIT_CATEGORY\" });\n }}\n removeItem={async id => {\n const result = confirm(\n t(\"delete_benefit_group_category_question\")\n );\n\n if (result) {\n const response = await categoriesService.removeCategory(id);\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_delete_benefit_group_category\")\n );\n }\n\n deleteCategory(id);\n toast.success(t(\"success_delete_benefit_group_category\"));\n }\n }}\n />\n {\n openModal({ setModalType, modalType: \"ADD_CITY\" });\n }}\n editItem={() => {}}\n removeItem={async id => {\n const result = confirm(t(\"delete_city_question\"));\n\n if (!result) return;\n\n try {\n const response = await apiService.delete(`cities/${id}`);\n\n await fetchCities();\n\n toast.success(response.data.message);\n } catch (error) {\n toast.error(t(\"failed_to_delete_city\"));\n }\n }}\n />\n \n
\n )}\n \n {modalType && (\n closeModal({ setModalType })}>\n closeModal({ setModalType })}\n />\n \n )}\n
\n );\n};\n\nconst mapStateToProps = state => {\n return {\n benefitTags: state.benefitTags.tags,\n companyTags: state.companyTags.tags,\n categories: state.categories.categories\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setBenefitTags: benefitTags =>\n dispatch(benefitTagActionCreators.setBenefitTags(benefitTags)),\n deleteBenefitTag: benefitTag =>\n dispatch(benefitTagActionCreators.deleteBenefitTag(benefitTag)),\n setCompanyTags: companyTags =>\n dispatch(companyTagActionCreators.setCompanyTags(companyTags)),\n deleteCompanyTag: companyTag =>\n dispatch(companyTagActionCreators.deleteCompanyTag(companyTag)),\n setCategories: categories =>\n dispatch(categoriesActionCreators.setCategories(categories)),\n deleteCategory: category =>\n dispatch(categoriesActionCreators.deleteCategory(category))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Settings);\n","class Company {\n\tconstructor(companyData = {}) {\n\t\tthis.id = companyData.id || null\n\t\tthis.name = companyData.name || ''\n\t}\n}\n\nclass Notification {\n\tconstructor(notificationData = {}) {\n\t\tthis.subject = notificationData.subejct || ''\n\t\tthis.message = notificationData.message || ''\n\t\tthis.companies = notificationData.companies ?\n\t\t\tnotificationData.companies.map(company => new Company(company))\n\t\t\t:\n\t\t\t[]\n\t}\n}\n\n\nexport { Notification, Company }\n","import { findLocales } from \"../../utils/helpers/findLocales\";\n\nexport const validateNotificationForm = ({ subject, message, companies }) => {\n const isInLanguage = findLocales(\"rs\");\n\n const errors = {};\n\n if (!subject) {\n errors.subject = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (subject.length < 5) {\n errors.subject = isInLanguage\n ? \"Tema mora imati najmanje 5 karaktera\"\n : \"Subject must be at least 5 characters long\";\n }\n\n if (!message) {\n errors.message = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (message.length < 5) {\n errors.message = isInLanguage\n ? \"Poruka mora imati najmanje 5 karaktera\"\n : \"Message must be at least 5 characters long\";\n }\n\n if (!companies) {\n errors.companies = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (companies.length < 1) {\n errors.companies = isInLanguage\n ? \"Primalac mora biti barem 1 kompanija\"\n : \"Recipient must be at least 1 company\";\n }\n\n return errors;\n};\n","import styled from \"styled-components\";\n\nconst NotificationsStyles = styled.section`\n\t.notificationsContainer {\n\t\twidth: calc(100% - 210px);\n\t\tmargin-left: 210px;\n\t\tbackground: #f7f7f7;\n\t\tmin-height: 100vh;\n\t\toverflow-x: hidden;\n\t}\n\n\t.notificationsContent {\n\t\tpadding: 0 30px 30px 30px;\n\t}\n\n\t.title {\n\t\twidth: 100%;\n\t\tfont-size: 24px;\n font-weight: 600;\n color: #4b4b4b;\n\t\tletter-spacing: 0px;\n\t\ttext-align: center;\n\t\tmargin-bottom: 30px;\n\t}\n\n\t.inputContainer {\n\t\tmargin: 0 0 10px 0;\n\t}\n\n\t.textArea {\n\t\twidth: 100%;\n\t\tmin-width: 100%;\n\t\tmax-width: 100%;\n\t\theight: 200px;\n\t\tmin-height: 200px;\n\t\tmax-height: 200px;\n\t\tborder-radius: 4px;\n\t\tborder: solid 1px #979797;\n\t\tpadding: 5px 10px 5px 5px;\n\t\tfont-size: 14px;\n\t\tfont-weight: 500;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\t-webkit-letter-spacing: normal;\n\t\t-moz-letter-spacing: normal;\n\t\t-ms-letter-spacing: normal;\n\t\tletter-spacing: normal;\n\t\tcolor: #5d5d5d;\n\t\toutline: none;\n\t}\n\n\t.react-dropdown-select {\n\t\tmin-height: 27px !important;\n\t\theight: 100% !important;\n\t\twidth: 100%;\n\t\tborder-radius: 4px;\n\t\tborder: 1px solid #979797;\n\t\tbox-shadow: none !important;\n\t\tborder-color: #979797 !important;\n\t\tcursor: pointer;\n\t\tfont-size: 12px;\n\t\tfont-weight: normal;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\tcolor: #5d5d5d;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\t\n\n\n\t\t\n\t\t.react-dropdown-select-content {\n\t\t\theight: 29px;\n\t\t\tflex-wrap: nowrap;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow-x: hidden;\n\t\t\twidth: 70px;\n\t\t\twhite-space: nowrap;\n\n\t\t\tinput {\n\t\t\t\t\n\t\t\t\tfont-size: 12px;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tfont-stretch: normal;\n\t\t\t\tfont-style: normal;\n\t\t\t\tline-height: normal;\n\t\t\t\tletter-spacing: normal;\n\t\t\t\tcolor: #5d5d5d;\n\t\t\t\toverflow-x: scroll;\n\t\t\t}\n\t\t}\n\t}\n\n\t.react-dropdown-select-dropdown {\n\t\tmax-height: 150px;\n\t}\n\n\n\t.itemContainer {\n\n\t\t&:hover {\n\t\t\tbackground: #1568bf;\n\n\t\t\t.dropDownItem {\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\t\t}\n\n\t\t.dropDownItem {\n\t\t\tfont-size: 12px;\n\t\t\tfont-weight: normal;\n\t\t\tfont-stretch: normal;\n\t\t\tfont-style: normal;\n\t\t\tline-height: normal;\n\t\t\tletter-spacing: normal;\n\t\t\tcolor: #5d5d5d;\n\t\t}\n\t}\n\t\n\t.errorMsg {\n\t\tfont-size: 14px;\n\t\tfont-weight: 300;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\tcolor: red;\n\t}\n\n\t.notificationActionsSection {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 40px;\n\t\tmargin: 15px 0;\n\t}\n\t\t.descriptionContainer {\n\t\twidth: 100%;\n\t\tmargin: 10px 0;\n\n\t\t.rdw-editor-wrapper {\n\t\t\t.rdw-editor-toolbar {\n\t\t\t\t.rdw-emoji-wrapper {\n\t\t\t\t\t.rdw-emoji-modal {\n\t\t\t\t\t\tleft: -20px !important;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t\t.rdw-link-wrapper {\n\t\t\t\t\t.rdw-link-modal {\n\t\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\t\t.rdw-link-modal-label {\n\t\t\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t.rdw-editor-main {\n\t\t\t\twidth: 100%;\n\t\t\t\tmin-width: 100%;\n\t\t\t\tmax-width: 100%;\n\t\t\t\theight: 150px;\n\t\t\t\toverflow-y: auto;\n\t\t\t\tmin-height: 150px;\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tborder: solid 1px #d5dbdd;\n\t\t\t\tbackground-color: #ffffff;\n\t\t\t\tpadding: 12px 14px;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tfont-weight: normal;\n\t\t\t\tfont-stretch: normal;\n\t\t\t\tfont-style: normal;\n\t\t\t\tline-height: 1.71;\n\t\t\t\tletter-spacing: -0.23px;\n\t\t\t\tcolor: #373737;\n\t\t\t\toutline: none;\n\t\t\t\tresize: none;\n\t\t\t\t.DraftEditor-root {\n\t\t\t\t\tz-index: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n`;\n\nexport default NotificationsStyles;\n","import React, { useState, useEffect, useContext } from \"react\";\nimport { connect } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport { toast } from \"react-toastify\";\nimport swal from \"sweetalert\";\n// components\nimport {\n Header,\n Card,\n Input,\n InputLabel,\n Button,\n MultiselectInput,\n TextAndLine\n} from \"../../../components\";\n// entity\nimport { Notification } from \"./notifications.entity\";\n// services\nimport { validateNotificationForm } from \"../../../services/validations/notificationFormValidation\";\nimport * as notificationService from \"../../../services/api/admin/notification.service\";\nimport * as companiesService from \"../../../services/api/admin/companies.service\";\nimport * as actionCreators from \"../../../actions/admin/companies.actions\";\n// styles\nimport NotificationsStyles from \"./NotificationsStyles\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { Editor } from \"react-draft-wysiwyg\";\nimport \"react-draft-wysiwyg/dist/react-draft-wysiwyg.css\";\nimport { convertStringToEditorState } from \"../../../services/textEditor.utils\";\n\nconst Notifications = ({ companies, setCompanies }) => {\n const { t } = useTranslation();\n const [serverErrorMsg, setServerErrorMsg] = useState(null);\n const [companiesPage, setCompaniesPage] = useState(1);\n const [totalCompaniesPages, setTotalCompaniesPages] = useState(1);\n // const { user } = useContext(UserContext)\n\n const getCompanies = async () => {\n const response = await companiesService.getCompanies({\n page: companiesPage\n });\n\n if (response.hasError) {\n return setServerErrorMsg(response.error.data.error.message);\n }\n\n setCompanies(response.companies);\n setTotalCompaniesPages(response.pages);\n };\n\n /**\n * Refetches paginated companies.\n * Fired from on scroll event from select input.\n * Sets new companies to state, along with page number.\n */\n const refetchCompanies = async () => {\n let currentPage = companiesPage;\n let newPage = (currentPage += 1);\n\n if (newPage > totalCompaniesPages) return;\n\n setCompaniesPage(newPage);\n const response = await companiesService.getCompanies({\n page: newPage\n });\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n let newCompanies = [];\n setTimeout(() => {\n newCompanies = [...companies, ...response.companies];\n setTimeout(() => {\n setCompanies(newCompanies);\n }, 100);\n }, 100);\n };\n\n const handleSendMail = async (values, { resetForm }) => {\n try {\n const { data } = await notificationService.sendMail(values);\n if (data) {\n toast.success(data.message);\n resetForm();\n }\n } catch (error) {\n if (error && error.response) {\n const { data } = error.response;\n if (data) {\n if (data.errors && data.error) {\n if (data.errors.subject) {\n toast.error(\n `${data.error.message}: ${data.errors.subject.keys[0]}`\n );\n }\n if (data.errors.message) {\n toast.error(\n `${data.error.message}: ${data.errors.message.keys[0]}`\n );\n }\n } else {\n toast.error(data.error.message);\n }\n }\n } else {\n toast.error(\"Something went wrong\");\n }\n }\n };\n\n /**\n * Sends budget reminder emails to all employees.\n * @param {Event} event\n */\n const handleSendBudgetReminders = event => {\n event.preventDefault();\n swal({\n title: \"Are you sure?\",\n text:\n \"Accepting this will send out budget reminder emails to all employees in the database.\",\n buttons: true,\n dangerMode: true,\n icon: \"warning\"\n }).then(async value => {\n if (!value) return;\n const response = await notificationService.sendBudgetRemindersEmails();\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : \"Sending emails failed.\"\n );\n }\n\n toast.success(response.data.message);\n });\n };\n\n /**\n * Sends usage instructions emails.\n * @param {Event} event\n */\n const handleSendUsageInstructions = event => {\n event.preventDefault();\n swal({\n title: \"Are you sure?\",\n text:\n \"Accepting this will send out usage instructions emails to employees that have selected benefits that have usage instructions.\",\n buttons: true,\n dangerMode: true,\n icon: \"warning\"\n }).then(async value => {\n if (!value) return;\n const response = await notificationService.handleSendUsageInstructions();\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_send_emails\")\n );\n }\n\n toast.success(response.data.message);\n });\n };\n\n const formik = useFormik({\n initialValues: new Notification(),\n validate: validateNotificationForm,\n onSubmit: handleSendMail\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n setFieldValue,\n setFieldTouched,\n handleChange,\n handleBlur\n } = formik;\n\n // const filteredCompanies = () => {\n // const chosenIds = [];\n // values.companies.forEach(company => {\n // chosenIds.push(company.id);\n // });\n // return companies.filter(t => !chosenIds.includes(t.id));\n // };\n\n useEffect(() => {\n getCompanies();\n }, []);\n\n return (\n \n
\n
\n
\n \n \n
\n handleSendBudgetReminders(e)}\n margin=\"0\"\n padding=\"10px 25px\"\n >\n {t(\"send_budget_remainders\")}\n \n handleSendUsageInstructions(e)}\n margin=\"0\"\n padding=\"10px 25px\"\n >\n {t(\"send_usage_instructions\")}\n \n
\n \n \n

{t(\"send_message_to_other_usr\")}

\n
{serverErrorMsg}
\n
\n \n \n
\n {errors.subject && touched.subject ? errors.subject : \"\"}\n
\n
\n \n
\n
\n \n \n
\n {errors.message && touched.message ? errors.message : \"\"}\n
\n
\n {\n setFieldTouched(\"message\", true);\n }}\n editorState={convertStringToEditorState(values.message)}\n editorStyle={{ fontSize: 14 }}\n stripPastedStyles={true}\n onEditorStateChange={editorState =>\n setFieldValue(\"message\", editorState)\n }\n toolbar={{\n options: [\n \"inline\",\n \"fontSize\",\n \"list\",\n \"textAlign\",\n \"colorPicker\",\n \"link\",\n \"emoji\",\n \"remove\",\n \"history\"\n ],\n fontSize: { options: [10, 11, 12, 13, 14, 16, 18] }\n }}\n />\n
\n
\n \n \n
\n {errors.companies && touched.companies\n ? errors.companies\n : \"\"}\n
\n
\n setFieldValue(\"companies\", option)}\n onBlur={setFieldTouched}\n shouldHaveFullWidth\n fetchMoreData={refetchCompanies}\n />\n \n \n \n \n \n \n
\n );\n};\n\nconst mapStateToProps = state => {\n return {\n companies: state.companies.companies\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setCompanies: companies => dispatch(actionCreators.setCompanies(companies))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Notifications);\n","import Notifications from './Notifications'\n\nexport default Notifications\n","import { convertEditorStateToString } from \"../../textEditor.utils\";\nimport { apiService } from \"../api.service\";\n\nexport const sendMail = async values => {\n const payload = {\n ...values,\n message: convertEditorStateToString(values.message)\n };\n return await apiService.post(\"/users/send-email\", payload);\n};\n\n/**\n * Sends budget reminder emails to all employees.\n */\nexport const sendBudgetRemindersEmails = async () => {\n return apiService.post(\"/users/send-budget-reminders\");\n};\n\nexport const handleSendUsageInstructions = async () => {\n return apiService.post(\"/users/send-usage-instructions\");\n};\n","export const openAddUserForm = (setIsAddUserVisible) => {\n\tsetIsAddUserVisible(true)\n\tsetTimeout(() => {\n\t\tconst addEmployeeForm = document.getElementById('addUserForm')\n\t\tconst employeesList = document.getElementById('usersList')\n\t\temployeesList.classList.add('hideUsersList')\n\t\taddEmployeeForm.classList.add('showAddUserForm')\n\t}, 150)\n}\n\nexport const closeAddUser = (setIsAddUserVisible) => {\n\tconst addCompanyForm = document.getElementById('addUserForm')\n\tconst companiesList = document.getElementById('usersList')\n\tcompaniesList.classList.remove('hideUsersList')\n\taddCompanyForm.classList.remove('showAddUserForm')\n\tsetTimeout(() => {\n\t\tsetIsAddUserVisible(false)\n\t}, 400)\n}\n","import styled from \"styled-components\";\n\nexport const AddUserFormStyles = styled.div`\n .userInfoContainer {\n display: flex;\n align-items: center;\n margin: 60px 0;\n position: relative;\n\n .inputContainer {\n margin-left: 30px;\n\n .errorMsg {\n font-size: 12px;\n color: red;\n }\n\n .topInputs {\n display: flex;\n margin-bottom: 10px;\n }\n\n .middleInputs {\n display: flex;\n margin-bottom: 10px;\n }\n\n .userDisabledContainer {\n margin-top: 20px;\n .userDisabledTitle {\n font-weight: 400;\n font-size: 14px;\n color: #C53C3C;\n }\n }\n\n .bottomInputs {\n display: flex;\n margin-bottom: 10px;\n }\n }\n }\n\n .labelAndValidation {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .buttonsContainer {\n display: flex;\n }\n\n .displayText {\n font-size: 14px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #4b4b4b;\n background: #d8d8d8bf;\n width: 100%;\n height: 24px;\n display: flex;\n align-items: center;\n padding: 0 5px;\n }\n\n .resendVerificationLink {\n position: absolute;\n right: 0;\n top: -40px;\n cursor: pointer;\n font-size: 14px;\n color: #5d5d5d;\n\n &:hover {\n color: #505050;\n }\n }\n\n .label {\n font-size: 14px;\n font-weight: 300;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n -webkit-letter-spacing: normal;\n -moz-letter-spacing: normal;\n -ms-letter-spacing: normal;\n letter-spacing: normal;\n color: #5d5d5d;\n }\n`;\n","import validator from \"validator\";\nimport moment from \"moment\";\n\n// Utils\nimport { isEmpty, removeSpacesAndHTML } from \"../general.utils\";\nimport { doesRoleExist } from \"../roles.utils\";\n\n// Constants\nimport { UserRolesKeysEnum } from \"../../constants/roles.constants\";\nimport { findLocales } from \"../../utils/helpers/findLocales\";\n\nconst allowedDateFormats = [\n \"DD/MM/YYYY\",\n \"D/M/YYYY\",\n \"DD.MM.YYYY\",\n \"D.M.YYYY\",\n \"DD-MM-YYYY\",\n \"D-M-YYYY\"\n];\n\nconst validateDate = value => moment(value, allowedDateFormats, true).isValid();\n\nexport const addUserFormValidation = ({\n firstName,\n lastName,\n email,\n bornDate,\n firstDayAtWork,\n roles,\n tier,\n companyId,\n cities\n}) => {\n const errors = {};\n const isInLanguage = findLocales(\"rs\");\n\n if (!roles) errors.roles = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n\n if (!firstName || !/\\S/.test(firstName))\n errors.firstName = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n else if (!removeSpacesAndHTML(firstName)) {\n errors.firstName = isInLanguage\n ? \"HTML tag nije dozvoljen\"\n : \"HTML tag is not allowed\";\n }\n\n if (!lastName || !/\\S/.test(lastName))\n errors.lastName = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n else if (!removeSpacesAndHTML(lastName)) {\n errors.lastName = isInLanguage\n ? \"HTML tag nije dozvoljen\"\n : \"HTML tag is not allowed\";\n }\n\n if (!email) errors.email = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n else if (!validator.isEmail(email))\n errors.email = isInLanguage ? \"email nije validan\" : \"Invalid email\";\n\n if (\n doesRoleExist(roles, UserRolesKeysEnum.MEMBER) ||\n doesRoleExist(roles, UserRolesKeysEnum.HR)\n ) {\n if (!companyId)\n errors.companyId = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n if (doesRoleExist(roles, UserRolesKeysEnum.MEMBER) && isEmpty(cities)) {\n errors.cities = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n if (doesRoleExist(roles, UserRolesKeysEnum.MEMBER)) {\n if (isEmpty(cities)) {\n errors.cities = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n if (typeof tier === Object) {\n if (tier.id === null) {\n errors.tier = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n } else {\n if (!tier) {\n errors.tier = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n }\n }\n\n return errors;\n};\n","class Company {\n\tconstructor(companyData = {}) {\n\t\tthis.id = companyData.id || null\n\t\tthis.name = companyData.name || 'No Company relations'\n\t}\n}\n\nclass Tier {\n\tconstructor(tierData = {}) {\n\t\tthis.id = tierData.id || null\n\t\tthis.name = tierData.name || ''\n\t}\n}\n\nclass NewUser {\n\tconstructor(newUserData = {}) {\n\t\tthis.firstName = newUserData.firstName || ''\n\t\tthis.lastName = newUserData.lastName || ''\n\t\tthis.email = newUserData.email || ''\n\t\tthis.password = newUserData.password || ''\n\t\tthis.roleId = newUserData.roleId || undefined\n\t\tthis.companyId = newUserData.companyId || undefined\n\t}\n}\n\nclass User {\n\tconstructor(userData = {}) {\n\t\tthis.id = userData.id || null\n\t\tthis.firstName = userData.firstName || ''\n\t\tthis.lastName = userData.lastName || ''\n\t\tthis.email = userData.email || ''\n\t\tthis.emailConfirmed = userData.emailConfirmed || false\n\t\tthis.role = userData.role || ''\n\t\tthis.employeeId = userData.employeeId || ''\n\t\tthis.company = userData.Company ? new Company(userData.Company) : new Company()\n\t}\n}\n\nexport { User, Company, NewUser, Tier }\n","import React, { useEffect, useState } from \"react\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\nimport DatePicker from \"react-datepicker\";\nimport { parseISO } from \"date-fns\";\n\n// Components\nimport {\n InputLabel,\n SelectInput,\n // CheckboxInput,\n Input,\n PhoneNumberInput,\n LocationsMultiselectInput\n} from \"../..\";\n\n// Services\nimport { getChosenTiers } from \"../../../modules/superAdmin/users/users.services\";\nimport * as api from \"../../../services/api/admin/users.service\";\nimport * as employeeService from \"../../../services/api/hr/employees.service\";\n\n// Models\nimport { useTranslation } from \"react-i18next\";\nimport { genderOptions } from \"../../../pages/HrPages/EmployeePages/BasicInfoSection/genderOptions\";\nimport { relationshipOptions } from \"../../../pages/HrPages/EmployeePages/DetailsSection/relationshipOptions\";\n\nconst MemberFieldsStyles = styled.div`\n margin: 30px 0;\n\n .fieldsContainer {\n margin: 0 0 10px 0;\n display: flex;\n }\n\n .datepickerWrapper {\n .react-datepicker-wrapper {\n width: 100% !important;\n }\n }\n\n .datePickerInput {\n height: 27px;\n width: 100%;\n border-radius: 3px;\n border: 1px solid #979797;\n outline: none;\n text-align: center;\n font-size: 16px;\n font-weight: 600;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n cursor: pointer;\n position: relative;\n }\n`;\n\nexport const MemberFields = ({\n handleBlur,\n values,\n errors,\n touched,\n setFieldValue,\n handleChange,\n companyId,\n isEditUserForm = false\n}) => {\n const { t } = useTranslation();\n const [chosenTiers, setChosenTiers] = useState([]);\n const [cities, setCities] = useState([]);\n const [page, setPage] = useState(1);\n const [search, setSearch] = useState(\"\");\n const [totalPages, setTotalPages] = useState(1);\n const [resetTierInput, setResetTierInput] = useState(true);\n const [branchCodeOptions, setBranchCodeOptions] = useState([]);\n\n const fetchTiers = async () => {\n const response = await api.getTierOptions(companyId);\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n setResetTierInput(false);\n if (!isEditUserForm) {\n setFieldValue(\"tier\", \"\");\n }\n setChosenTiers(response);\n setResetTierInput(true);\n };\n\n /**\n * Returns list of company branches from server and sets it to state.\n * Is fired every time if page changes.\n */\n const fetchCompanyBranches = async () => {\n const response = await api.getCompanyBranches(companyId);\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n const branchOptions = response.branches.map(branch => ({\n id: branch.id,\n name: branch.branchCode\n }));\n setBranchCodeOptions(branchOptions);\n };\n\n /**\n * Returns list of cities from server and sets it to state.\n * Is fired every time if search query or page changes.\n */\n const fetchCities = async () => {\n const response = await employeeService.getCities(search, page);\n\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n setCities(response.cities);\n setTotalPages(response.pages);\n };\n\n /**\n * Refetches cities list from server and sets it to state.\n * If page number increments to a value that is greater than there are total pages\n * function exits.\n * Updates page number & sets it to state.\n */\n const refetchCities = async () => {\n let currentPage = page;\n let newPage = (currentPage += 1);\n\n if (newPage > totalPages) return;\n\n setPage(newPage);\n\n const response = await employeeService.getCities(search, newPage);\n\n if (response.hasError) {\n return toast.error(response.errorMessage);\n }\n\n let newCities = [];\n setTimeout(() => {\n newCities = [...cities, ...response.cities];\n setTimeout(() => {\n setCities(newCities);\n }, 100);\n }, 100);\n };\n\n const handleInputChange = newValue => {\n setPage(1);\n setSearch(newValue);\n\n return newValue;\n };\n\n const handleSelect = option => {\n setFieldValue(\"cities\", option);\n };\n\n useEffect(() => {\n if (companyId && companyId !== \"\") {\n fetchTiers();\n }\n if (companyId && companyId !== \"\") {\n fetchCompanyBranches();\n }\n }, [companyId]);\n\n useEffect(() => {\n fetchCities();\n }, [page, search]);\n\n const translatedGenderOptions = genderOptions.map(gender => {\n return { ...gender, name: t(gender.value) };\n });\n\n const translatedRelationshipOptions = relationshipOptions.map(\n relationshipOption => {\n return { ...relationshipOption, name: t(relationshipOption.value) };\n }\n );\n\n return (\n \n
\n
\n
\n \n
\n {errors.bornDate && touched.bornDate ? errors.bornDate : \"\"}\n
\n
\n
\n setFieldValue(\"bornDate\", selectedDate)}\n maxDate={new Date()}\n value={parseISO(values.bornDate)}\n showYearDropdown\n placeholderText=\"DD/MM/YYYY\"\n />\n
\n
\n
\n
\n \n
\n {errors.firstDayAtWork && touched.firstDayAtWork\n ? errors.firstDayAtWork\n : \"\"}\n
\n
\n
\n \n setFieldValue(\"firstDayAtWork\", selectedDate)\n }\n maxDate={new Date()}\n value={parseISO(values.firstDayAtWork)}\n showYearDropdown\n placeholderText=\"DD/MM/YYYY\"\n />\n
\n
\n
\n
\n
\n
\n \n
\n {errors.branchCode && touched.branchCode ? errors.branchCode : \"\"}\n
\n
\n setFieldValue(\"branchCode\", option.id)}\n shouldHaveFullWidth\n customHeight=\"27px\"\n />\n
\n
\n
\n \n
\n {errors.uniqueId && touched.uniqueId ? errors.uniqueId : \"\"}\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n {errors.gender && touched.gender ? errors.gender : \"\"}\n
\n
\n setFieldValue(\"gender\", option.value)}\n shouldHaveFullWidth\n customHeight=\"27px\"\n />\n
\n
\n
\n \n
\n {errors.team && touched.team ? errors.team : \"\"}\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n {errors.contact && touched.contact ? errors.contact : \"\"}\n
\n
\n setFieldValue(\"contact\", phone)}\n />\n
\n
\n
\n \n
\n {errors.description && touched.description\n ? errors.description\n : \"\"}\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n {errors.relationship && touched.relationship\n ? errors.relationship\n : \"\"}\n
\n
\n setFieldValue(\"relationship\", option.value)}\n shouldHaveFullWidth\n customHeight=\"27px\"\n />\n
\n {resetTierInput && (\n
\n
\n \n
\n {errors.tier && touched.tier ? errors.tier : \"\"}\n
\n
\n setFieldValue(\"tier\", option.id)}\n shouldHaveFullWidth\n customHeight=\"27px\"\n />\n
\n )}\n
\n
\n
\n
\n \n
\n {errors.cities && touched.cities ? errors.cities : \"\"}\n
\n
\n handleSelect(option)}\n handleInputChange={handleInputChange}\n fetchMoreData={refetchCities}\n shouldHaveFullWidth\n customHeight=\"27px\"\n />\n
\n
\n
\n );\n};\n\nMemberFields.propTypes = {\n handleBlur: PropTypes.func,\n handleChange: PropTypes.func,\n setFieldValue: PropTypes.func,\n values: PropTypes.shape(),\n touched: PropTypes.shape(),\n errors: PropTypes.shape(),\n companyId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n currentRole: PropTypes.string,\n isEditUserForm: PropTypes.bool\n};\n","import React, { useEffect, useState } from \"react\";\nimport { toast } from \"react-toastify\";\nimport PropTypes from \"prop-types\";\nimport { useFormik } from \"formik\";\nimport { AddUserFormStyles } from \"./AddUserFormStyles\";\nimport {\n Button,\n IntitialsCircle,\n Input,\n InputLabel,\n TextAndLine,\n SelectInput,\n MultiselectInput,\n CheckboxInput\n} from \"../..\";\nimport { addUserFormValidation } from \"../../../services/validations/addUserFormValidation\";\nimport { MemberFields } from \"./MemberFields\";\nimport Employee from \"../../../models/domain/Employee.entity\";\nimport * as api from \"../../../services/api/admin/users.service\";\nimport { UserRolesKeysEnum } from \"../../../constants/roles.constants\";\nimport { doesRoleExist } from \"../../../services/roles.utils\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const AddUserForm = ({ backButtonFunc, fetchUsers }) => {\n const { t } = useTranslation();\n const [companyOptions, setCompanyOptions] = useState([]);\n const [companiesPage, setCompaniesPage] = useState(1);\n const [totalPages, setTotalPages] = useState(1);\n const [roles, setRoles] = useState([]);\n\n const handleRegistration = async values => {\n const response = await api.createUser(values);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_create_user\")\n );\n } else {\n toast.success(t(\"success_user_create\"));\n fetchUsers();\n backButtonFunc();\n }\n };\n\n const fetchCompanies = async () => {\n const response = await api.getCompanyOptions(companiesPage);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n setCompanyOptions(response.companies);\n setTotalPages(response.pages);\n };\n\n /**\n * Refetches paginated companies.\n * Fired from on scroll event from select input.\n * Sets new companies to state, along with page number.\n */\n const refetchCompanies = async () => {\n let currentPage = companiesPage;\n let newPage = (currentPage += 1);\n\n if (newPage > totalPages) return;\n\n setCompaniesPage(newPage);\n\n const response = await api.getCompanyOptions(newPage);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n let newCompanies = [];\n setTimeout(() => {\n newCompanies = [...companyOptions, ...response.companies];\n setTimeout(() => {\n setCompanyOptions(newCompanies);\n }, 100);\n }, 100);\n };\n\n const fetchRoles = async () => {\n const response = await api.getRolesForDropdown();\n if (response.hasError) {\n return toast.error(\n response.errorMessage ? response.errorMessage : t(\"failed_to_get_roles\")\n );\n }\n\n setRoles(response);\n };\n\n useEffect(() => {\n fetchCompanies();\n fetchRoles();\n }, []);\n\n const formik = useFormik({\n initialValues: new Employee(),\n validate: addUserFormValidation,\n onSubmit: handleRegistration\n });\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n handleChange,\n handleBlur,\n setFieldValue\n } = formik;\n\n return (\n
\n \n \n
\n \n
\n
\n
\n
\n \n
\n {errors.roles && touched.roles ? errors.roles : \"\"}\n
\n
\n setFieldValue(\"roles\", option)}\n selectedValues={values.roles}\n shouldHaveFullWidth={true}\n customHeight=\"27px\"\n />\n
\n {(doesRoleExist(values?.roles, UserRolesKeysEnum.MEMBER) ||\n doesRoleExist(values?.roles, UserRolesKeysEnum.HR)) && (\n
\n
\n \n
\n {errors.companyId && touched.companyId\n ? errors.companyId\n : \"\"}\n
\n
\n company.id === values.companyId\n )}\n handleChange={option => {\n setFieldValue(\"companyId\", option.id);\n }}\n fetchMoreData={refetchCompanies}\n customHeight=\"27px\"\n shouldHaveFullWidth\n />\n
\n )}\n
\n
\n
\n
\n \n
\n {errors.firstName && touched.firstName\n ? errors.firstName\n : \"\"}\n
\n
\n \n
\n
\n
\n \n
\n {errors.lastName && touched.lastName ? errors.lastName : \"\"}\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n {errors.email && touched.email ? errors.email : \"\"}\n
\n
\n \n
\n
\n
\n \n \n \n
\n
\n
\n \n {doesRoleExist(values?.roles, UserRolesKeysEnum.MEMBER) && (\n <>\n \n \n \n )}\n
\n \n \n {t(\"cancel\")}\n \n
\n
\n
\n );\n};\n\nAddUserForm.propTypes = {\n backButtonFunc: PropTypes.func,\n fetchUsers: PropTypes.func\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n// components\nimport { Card } from \"../../../../components\";\n// services\nimport { closeAddUser } from \"../users.services\";\n// context\nimport { AddUserForm } from \"../../../../components/forms/user/AddUserForm\";\n\nconst AddUser = ({ setIsAddUserVisible, fetchUsers }) => {\n return (\n \n closeAddUser(setIsAddUserVisible)}\n fetchUsers={fetchUsers}\n />\n \n );\n};\n\nAddUser.propTypes = {\n setIsAddUserVisible: PropTypes.func,\n fetchUsers: PropTypes.func\n};\n\nexport default AddUser;\n","import styled from \"styled-components\";\n\nconst UsersListStyles = styled.section`\n .usersSearch {\n width: 100% !important;\n }\n\n .filterWrapper{\n margin-left:10px;\n }\n\n.buttonsWrapper {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n min-width: 450px; \n }\n \n .searchIcon {\n background: #F7F9FC;\n padding: 12px 0 8px 10px;\n border-radius: 8px 0 0 8px;\n margin-right: -10px;\n z-index: 2;\n }\n\n .filterButton {\n\t\tdisplay: flex;\n\t\tgap: 10px;\n width: 108px;\n padding: 14px 20px;\n font-size: 14px;\n font-weight: 500;\n line-height: 16px;\n color: #1D1D1D;\n cursor: pointer;\n background: transparent;\n border: 1px solid transparent;\n outline: none;\n\t}\n\n .appliedFiltersContainer {\n display: flex;\n align-items: center;\n justify-content: space-between; \n padding: 10px 16px;\n font-size: 12px;\n line-height: 16px;\n font-weight: 500;\n\n .appliedFilters {\n display: flex;\n align-items: center;\n gap: 10px;\n overflow-x: auto;\n max-width: 100%;\n flex-wrap: wrap; \n\n .appliedFilterPill {\n display: flex;\n align-items: center;\n gap: 19px;\n background-color: #F0F4F9;\n color: #1D1D1D;\n padding: 6px 8px;\n border-radius: 23px;\n\n .removeFilter {\n cursor: pointer;\n }\n }\n }\n\n .clearButton {\n width: 80px;\n color: #2F68B9;\n text-align: right;\n background-color: transparent;\n border: 1px solid transparent;\n outline: none;\n cursor: pointer;\n }\n }\n\n @keyframes showModal {\n from {\n transform: translateX(320px);\n opacity: 0;\n }\n to {\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n .filtersContainer.mobile {\n display: flex;\n flex-direction: column-reverse;\n justify-content: flex-end;\n width: 310px;\n padding: 90px 30px 30px 30px;\n position: fixed;\n top: 0;\n right: 0;\n height: 100%;\n background: rgb(255, 255, 255);\n border-radius: 4px;\n box-shadow: rgb(0 0 0 / 20%) 0px 2px 4px -1px, rgb(0 0 0 / 12%) 0px 1px 10px 0px, \n rgb(0 0 0 / 14%) 0px 4px 5px 0px;\n z-index: 2; \n animation: showModal 0.4s ease-in-out;\n transition: all 0.35s ease-in-out; \n transition-delay: 0.1s;\n > div {\n width: 100%;\n }\n .closeFiltersButton {\n display: unset;\n width: 40px;\n height: 40px;\n color: rgba(0, 0, 0, 0.54);\n border: none;\n outline: none;\n font-size: 20px;\n position: absolute;\n z-index: 2;\n right: 15px;\n top: 30px;\n font-weight: 500;\n cursor: pointer;\n background: rgba(255, 255, 255, 0.6);\n border-radius: 50%;\n &:hover {\n color: #1568bf;\n background: rgba(255, 255, 255, 0.8);\n }\n }\n .selectsContainer {\n flex-direction: column;\n width: 100%;\n > div {\n width: 100%;\n } \n } \n } \n\n .companiesFilterWrapper {\n display: flex;\n align-items: center;\n margin-bottom: 30px;;\n }\n\n .addSign { \n margin-right: 8px;\n font-size: 28px;\n line-height: 28px;\n font-weight: 400;\n }\n\n .buttonText {\n font-size: 16px;\n font-weight: 600;\n line-height: 26px;\n }\n\n #addUserForm {\n position: absolute;\n width: calc(100% - 60px);\n transform: translateX(110%);\n transition: all 0.4s ease-in-out;\n opacity: 0;\n }\n\n .showAddUserForm {\n transform: translateY(0) !important;\n opacity: 1 !important;\n }\n\n .hideUsersList {\n transform: translateX(-110%);\n opacity: 0;\n }\n\n .secondMenu {\n width: 100%\n padding: 8px 20px;\n\n .flexContainer {\n display: flex;\n align-items: center;\n }\n\n p {\n font-size: 14px;\n line-height: 16px;\n font-weight: 500;\n color: #1D1D1D;\n } \n \n .selected {\n width: 90px;\n color: ${props => props.selectedColor};\n margin: 0 11px;\n } \n\n .trashButton {\n\t\t gap: 10px;\n width: 119px;\n height: 48px;\n padding: 12px 16px;\n cursor: pointer;\n background: transparent;\n border: 1px solid transparent;\n outline: none;\n }\n } \n\n .usersListContainer {\n width: calc(100% - 210px);\n margin-left: 210px;\n background: #f7f7f7;\n min-height: 100vh;\n overflow-x: hidden;\n\n .usersListContent {\n padding: 0 30px 30px 30px;\n position: relative;\n display: flex;\n }\n\n .tableHead {\n padding: 14px 30px;\n display: flex;\n align-items: center;\n border-bottom: 1px solid #94ABD1;\n border-top: 1px solid #F0F0F0;\n }\n\n #usersList {\n transition: all 0.4s ease-in-out;\n width: 100%;\n }\n\n .tableBodyContainer {\n background: #f7f7f7;\n padding: 0 0 30px 0;\n margin: 20px 0 0 0;\n border-radius: 4px;\n } \n }\n`;\n\nexport default UsersListStyles;\n","export const tableHeadBuilder = [\n {\n id: 1,\n field: \"name\",\n headName: \"Name\",\n isSortedUp: null,\n width: \"26%\",\n justifyContent: \"flex-start\",\n margin: \"0 0.5% 0 75px\",\n isSortable: true,\n orderPriority: 0\n },\n {\n id: 2,\n field: \"role\",\n headName: \"Role\",\n isSortedUp: null,\n width: \"20%\",\n justifyContent: \"flex-start\",\n margin: \"0 0 0 1%\",\n isSortable: true,\n orderPriority: 0\n },\n {\n id: 3,\n field: \"company\",\n headName: \"Company\",\n isSortedUp: null,\n width: \"20%\",\n justifyContent: \"flex-start\",\n margin: \"0 0 0 1%\",\n isSortable: true,\n orderPriority: 0\n },\n {\n id: 4,\n field: \"email\",\n headName: \"Email\",\n isSortedUp: null,\n width: \"22%\",\n justifyContent: \"flex-start\",\n margin: \"0 0 0 1%\",\n isSortable: true,\n orderPriority: 0\n },\n {\n id: 5,\n field: \"email_confirmed\",\n headName: \"Is Verified\",\n isSortedUp: null,\n width: \"20%\",\n justifyContent: \"center\",\n margin: \"\",\n isSortable: true,\n orderPriority: 0\n },\n {\n id: 6,\n headName: \"\",\n isSortedUp: null,\n width: \"4%\",\n justifyContent: \"center\",\n margin: \"\",\n isSortable: false,\n orderPriority: 0\n }\n];\n","let priorityCounter = 0\n\nexport const tableHeaderReducer = (state, action) => {\n\tconst tableHeaders = state.map(tableHeader => {\n\t\tif (tableHeader.id === action.type) {\n\t\t\treturn {\n\t\t\t\t...tableHeader,\n\t\t\t\tisSortedUp: !tableHeader.isSortedUp,\n\t\t\t\torderPriority: priorityCounter\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...tableHeader\n\t\t}\n\t})\n\tpriorityCounter += 1\n\treturn tableHeaders\n}\n","import React, { useState, useEffect, useRef, useReducer } from \"react\";\nimport { connect } from \"react-redux\";\nimport { BeatLoader } from \"react-spinners\";\nimport { toast } from \"react-toastify\";\nimport ReactTooltip from \"react-tooltip\";\nimport Pagination from \"react-pagination-js\";\nimport \"react-pagination-js/dist/styles.css\";\nimport SearchIcon from \"@material-ui/icons/Search\";\n// components\nimport {\n Card,\n Header,\n Button,\n TableHead,\n SearchInput,\n MultiselectInput,\n Modal,\n openModalAnim,\n DisableUserModal,\n DisableUsersModal,\n CheckboxInput,\n ListItem\n} from \"../../../../components\";\nimport AddUser from \"../AddUser/AddUser\";\n// assets\nimport { TrashIconSvg } from \"../../../../assets/Icons\";\n// styles\nimport UsersListStyles from \"./UsersListStyles\";\nimport { override } from \"../../../../services/loadingOverride.styles\";\n// builder config\nimport { tableHeadBuilder } from \"./builder/tableHeadBuilder\";\n// builder reducer\nimport { tableHeaderReducer } from \"./builder/tableHeadReducer\";\n// services\nimport * as actionCreators from \"../../../../actions/admin/users.actions\";\nimport * as api from \"../../../../services/api/admin/users.service\";\nimport * as companiesService from \"../../../../services/api/admin/companies.service\";\nimport { closeAddUser, openAddUserForm } from \"../users.services\";\nimport { getOrderColumns } from \"../../../../services/getOrderColumns\";\nimport { Company, UserRole } from \"../../../../models/domain\";\n\n// Utils\nimport { isEmpty } from \"../../../../services/general.utils\";\nimport { useCallback } from \"react\";\nimport { useHistory } from \"react-router-dom/cjs/react-router-dom.min\";\nimport { useTranslation } from \"react-i18next\";\n\nconst LIMIT = 35;\n\nconst UsersList = ({\n users,\n page,\n count,\n search,\n setUsers,\n setPage,\n onSearchChange\n}) => {\n const history = useHistory();\n const { t } = useTranslation();\n const [isAddUserVisible, setIsAddUserVisible] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n const [companies, setCompanies] = useState([]);\n const [chosenCompanies, setChosenCompanies] = useState([]);\n const [companiesPage, setCompaniesPage] = useState(1);\n const [totalPages, setTotalPages] = useState(1);\n const [chosenCompanyIds, setChosenCompanyIds] = useState([]);\n const [roles, setRoles] = useState([]);\n const [chosenRoles, setChosenRoles] = useState([]);\n const [chosenRoleIds, setChosenRoleIds] = useState([]);\n const [disableUserPopup, setDisableUserPopup] = useState(false);\n const [disableUsersPopup, setDisableUsersPopup] = useState(false);\n const [selectedUserId, setSelectedUserId] = useState(null);\n const [selectedNumber, setSelectedNumber] = useState(0);\n const [isChecked, setIsChecked] = useState(false);\n const [checkedMap, setCheckedMap] = useState(new Map());\n\n const [tableHeaders, dispatch] = useReducer(\n tableHeaderReducer,\n tableHeadBuilder\n );\n\n const isMounted = useRef(true);\n const areFiltersLoaded = useRef(false);\n\n /**\n * Opens disable user popup.\n * Sets selected user id to state.\n * @param {number} userId\n */\n const openDisableUserPopup = userId => {\n setSelectedUserId(userId);\n setDisableUserPopup(true);\n\n setTimeout(() => {\n openModalAnim();\n }, 500);\n };\n\n /**\n * Opens disable users popup.\n * Sets selected users ids to state.\n */\n const openDisableUsersPopup = () => {\n if (selectedNumber < 1) {\n return toast.error(t(\"select_users_warning\"));\n }\n\n setDisableUsersPopup(true);\n\n setTimeout(() => {\n openModalAnim();\n }, 500);\n };\n\n const fetchCompanies = async () => {\n const response = await api.getCompanyOptions(companiesPage);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n setCompanies(response.companies);\n setTotalPages(response.pages);\n };\n\n /**\n * Refetches paginated companies.\n * Fired from on scroll event from select input.\n * Sets new companies to state, along with page number.\n */\n const refetchCompanies = async () => {\n let currentPage = companiesPage;\n let newPage = (currentPage += 1);\n\n if (newPage > totalPages) return;\n\n setCompaniesPage(newPage);\n\n const response = await api.getCompanyOptions(newPage);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n let newCompanies = [];\n setTimeout(() => {\n newCompanies = [...companies, ...response.companies];\n setTimeout(() => {\n setCompanies(newCompanies);\n }, 100);\n }, 100);\n };\n\n const fetchRoles = async () => {\n const response = await api.getRolesForDropdown();\n if (response.hasError) {\n return toast.error(\n response.errorMessage ? response.errorMessage : t(\"failed_to_get_roles\")\n );\n }\n\n setRoles(response);\n };\n\n const fetchFilters = async () => {\n await fetchCompanies();\n await fetchRoles();\n\n areFiltersLoaded.current = true;\n };\n\n const getUsers = async (\n searchText = search,\n companyIds = chosenCompanyIds,\n roleIds = chosenRoleIds\n ) => {\n const response = await api.getUsers({\n limit: LIMIT,\n page,\n searchText,\n orderColumns: getOrderColumns(tableHeaders),\n companyIds,\n roleIds\n });\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage ? response.errorMessage : t(\"failed_to_get_users\")\n );\n }\n\n setUsers(response);\n setIsLoading(false);\n\n if (isEmpty(response.users) && page > 1) {\n setPage(1);\n }\n };\n\n useEffect(() => {\n getUsers();\n fetchFilters();\n }, [page, tableHeaders]);\n\n useEffect(() => {\n if (areFiltersLoaded.current === true) getUsers();\n }, [chosenCompanyIds, chosenRoleIds]);\n\n useEffect(\n () => () => {\n isMounted.current = false;\n },\n []\n );\n\n useEffect(() => {\n ReactTooltip.rebuild();\n }, [users.length]);\n\n /**\n * Handles select of element from multiselect.\n * Sets selected elements' ids to state.\n * @param {Company} options - Selected options, emmited from multiselect.\n */\n const handleSetChosenCompanies = options => {\n let selectedCompanyIds = [];\n\n if (options && options.length) {\n selectedCompanyIds = options.map(category => category.id);\n }\n\n setChosenCompanies(options);\n setChosenCompanyIds(selectedCompanyIds);\n };\n\n /**\n * Handles select of element from multiselect.\n * Sets selected elements' ids to state.\n * @param {UserRole} options - Selected options, emmited from multiselect.\n */\n const handleSetChosenRoles = options => {\n let selectedRoleIds = [];\n\n if (options && options.length) {\n selectedRoleIds = options.map(role => role.id);\n }\n\n setChosenRoles(options);\n setChosenRoleIds(selectedRoleIds);\n };\n\n const removeCompanyFilter = company => {\n const chosenCompaniesFilters = chosenCompanies.filter(el => {\n return company.id !== el.id;\n });\n const chosenCompaniesFiltersIds = chosenCompanyIds.filter(el => {\n return company.id !== el;\n });\n\n setChosenCompanies(chosenCompaniesFilters);\n setChosenCompanyIds(chosenCompaniesFiltersIds);\n };\n\n const removeRoleFilter = role => {\n const chosenRolesFilters = chosenRoles.filter(el => {\n return role.id !== el.id;\n });\n const chosenRolesFiltersIds = chosenRoleIds.filter(el => {\n return role.id !== el;\n });\n\n setChosenRoles(chosenRolesFilters);\n setChosenRoleIds(chosenRolesFiltersIds);\n };\n\n const removeAllFilters = () => {\n setChosenRoles([]);\n setChosenRoleIds([]);\n setChosenCompanies([]);\n setChosenCompanyIds([]);\n };\n\n const toggleSortFunc = id => dispatch({ type: id });\n\n /**\n * Handles the behavior when users on the active page change\n * Users that are not included in the checkedMap are added with the value false\n * If at least one user is checked on the active page, set isChecked to true, otherwise false.\n */\n useEffect(() => {\n const checked = new Map(checkedMap);\n let numberOfSelectedOnPage = 0;\n users.forEach(user =>\n checked.has(user.id)\n ? checked.get(user.id) && numberOfSelectedOnPage++\n : !user.isDisabled && checked.set(user.id, false)\n );\n\n numberOfSelectedOnPage > 0 ? setIsChecked(true) : setIsChecked(false);\n setCheckedMap(checked);\n }, [users]);\n\n /**\n * Handles the behavior when the checkedMap is change\n * If at least one user is checked on the active page, set isChecked to true, otherwise false.\n */\n useEffect(() => {\n let numberOfSelectedOnPage = 0;\n users.forEach(\n user =>\n checkedMap.has(user.id) &&\n checkedMap.get(user.id) &&\n numberOfSelectedOnPage++\n );\n\n numberOfSelectedOnPage > 0 ? setIsChecked(true) : setIsChecked(false);\n }, [checkedMap]);\n\n const handleCheckboxOnChange = () => {\n const checked = new Map(checkedMap);\n !isChecked\n ? users.forEach(user => !user.isDisabled && checked.set(user.id, true))\n : users.forEach(user => !user.isDisabled && checked.set(user.id, false));\n\n let total = 0;\n for (const x of checked.values()) {\n x && total++;\n }\n\n setSelectedNumber(total);\n setCheckedMap(checked);\n setIsChecked(!isChecked);\n };\n const redirectToUserHistoryPage = useCallback((e, userId) => {\n e.stopPropagation();\n history.push(`/users/history/${userId}`);\n }, []);\n\n const shouldRedirectToOriginal = () => closeAddUser(setIsAddUserVisible);\n\n return (\n 0 ? \"#668CCC\" : \"#1D1D1D\"}>\n
\n \n
\n {isLoading ? (\n \n \n
\n ) : (\n \n \n
\n
\n \n
\n \n
\n handleSetChosenCompanies(option)}\n selectedValues={chosenCompanies}\n fetchMoreData={refetchCompanies}\n />\n
\n
\n handleSetChosenRoles(option)}\n selectedValues={chosenRoles}\n />\n
\n
\n openAddUserForm(setIsAddUserVisible)}\n >\n

+

\n

{t(\"add_user\")}

\n \n
\n {(!isEmpty(chosenCompanies) || !isEmpty(chosenRoles)) && (\n
\n
\n {!isEmpty(chosenCompanies) &&\n chosenCompanies.map((company, idx) => (\n
\n {company.name}\n removeCompanyFilter(company)}\n >\n X\n \n
\n ))}\n {!isEmpty(chosenRoles) &&\n chosenRoles.map((role, idx) => (\n
\n {role.name}\n removeRoleFilter(role)}\n >\n X\n \n
\n ))}\n
\n \n
\n )}\n
\n
\n
\n \n

\n {selectedNumber} {t(\"Selected\")}\n

\n
\n \n \n

{t(\"Delete\")}

\n \n
\n
\n
\n {tableHeaders.map(\n ({\n id,\n headName,\n isSortedUp,\n isSortable,\n width,\n justifyContent,\n margin\n }) => (\n \n )\n )}\n
\n
\n {!isEmpty(users) &&\n users.map(\n ({\n id,\n firstName,\n lastName,\n roles,\n role,\n employeeId,\n email,\n company,\n isDisabled,\n employee,\n emailConfirmed\n }) => (\n role.name).join(\", \")}\n company={\n !isEmpty(company) ? company.name : \"No company\"\n }\n email={email}\n userId={id}\n employeeId={employeeId}\n openDisableUserPopup={openDisableUserPopup}\n employeeData={employee}\n fetchData={getUsers}\n setSelectedNumber={setSelectedNumber}\n checkedMap={checkedMap}\n setCheckedMap={setCheckedMap}\n redirectToUserHistoryPage={redirectToUserHistoryPage}\n />\n )\n )}\n
\n \n setPage(page)}\n theme=\"border-bottom\"\n />\n \n \n )}\n {isAddUserVisible && (\n
\n \n
\n
\n )}\n {disableUserPopup && (\n setDisableUserPopup(false)}\n >\n setDisableUserPopup(false)}\n fetchData={getUsers}\n />\n \n )}\n {disableUsersPopup && (\n setDisableUsersPopup(false)}\n >\n setDisableUsersPopup(false)}\n fetchData={getUsers}\n userIdsMap={checkedMap}\n text=\"users\"\n setSelectedNumber={setSelectedNumber}\n />\n \n )}\n
\n \n
\n );\n};\n\nconst mapStateToProps = state => {\n return {\n users: state.usersPage.users,\n page: state.usersPage.page,\n count: state.usersPage.count,\n search: state.usersPage.search\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n setUsers: payload => dispatch(actionCreators.setUsers(payload)),\n setPage: payload => dispatch(actionCreators.setPage(payload)),\n onSearchChange: payload => dispatch(actionCreators.onSearchChange(payload))\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UsersList);\n","import * as actionTypes from \"../../constants/actionTypes/admin/users.constants\";\n\nexport const setUsers = payload => {\n return { type: actionTypes.SET_USERS, payload };\n};\n\nexport const setPage = payload => {\n return { type: actionTypes.SET_PAGE, payload };\n};\n\nexport const onSearchChange = payload => {\n return { type: actionTypes.SEARCH_CHANGE, payload };\n};\n","export const SET_USERS = \"USERS_SET_USERS\";\nexport const SET_PAGE = \"USERS_SET_PAGE\";\nexport const SEARCH_CHANGE = \"USERS_SEARCH_CHANGE\";\n","import styled from 'styled-components'\n\nconst FormStyles = styled.div`\n\t.userInfoContainer {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmargin: 60px 0;\n\n\t\t.inputContainer {\n\t\t\tmargin-left: 30px;\n\n\t\t\t.topInputs {\n\t\t\t\tdisplay: flex;\n\t\t\t\tmargin-bottom: 10px;\n\t\t\t}\n\n\t\t\t.middleInputs {\n\t\t\t\tdisplay: flex;\n\t\t\t\tmargin-bottom: 10px;\n\t\t\t}\n\n\t\t\t.bottomInputs {\n\t\t\t\tdisplay: flex;\n\t\t\t}\n\t\t}\t\t\n\t}\n\n\t.buttonsContainer {\n\t\tdisplay: flex;\n\t}\n\n\t.displayText {\n\t\tfont-size: 14px;\n\t\tfont-weight: 500;\n\t\tfont-stretch: normal;\n\t\tfont-style: normal;\n\t\tline-height: normal;\n\t\tletter-spacing: normal;\n\t\tcolor: #4b4b4b;\t\n\t\tbackground: #d8d8d8bf;\n\t\twidth: 100%;\n\t\theight: 24px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tpadding: 0 5px;\n\t}\n`\n\nexport default FormStyles\n","import React from 'react'\nimport PropTypes from 'prop-types'\n// componenets\nimport { Button, IntitialsCircle, Input, InputLabel, TextAndLine, SelectInput } from '../../../../components'\n// styles\nimport FormAndDetailsStyles from './FormStyles'\n\nconst FormAndDetails = ({\n\tonChange,\n\tuser,\n\tuserRoles,\n\tcompanies,\n\tbackButtonFunc,\n\tbuttonFunc,\n\tbuttonText,\n\tisFormDisplay = false,\n\tisEditUserForm = false\n}) => (\n\t\n\t\t\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t{isFormDisplay ?\n\t\t\t\t\t\t\t onChange(e.target.name, e.target.value)} />\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t

{user.firstName}

\n\t\t\t\t\t\t}\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t{isFormDisplay ?\n\t\t\t\t\t\t\t onChange(e.target.name, e.target.value)} />\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t

{user.lastName}

\n\t\t\t\t\t\t}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t{isFormDisplay ?\n\t\t\t\t\t\t\t onChange(e.target.name, e.target.value)} />\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t

{user.email}

\n\t\t\t\t\t\t}\n\t\t\t\t\t
\n\t\t\t\t\t{!isEditUserForm &&\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{isFormDisplay ?\n\t\t\t\t\t\t\t\t onChange(e.target.name, e.target.value)} />\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t

{user.emailConfirmed ? 'Confirmed' : 'Not Confirmed'}

\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t
\n\t\t\t\t\t}\n\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t{isFormDisplay ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t

{user.authenticatedRole}

\n\t\t\t\t\t\t}\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t{isFormDisplay ?\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t

{user.Company ? user.Company.name : 'No company relation'}

\n\t\t\t\t\t\t}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t{isFormDisplay &&\n\t\t\t\t buttonFunc && buttonFunc()}\n\t\t\t\t>\n\t\t\t\t\t{buttonText}\n\t\t\t\t\n\t\t\t}\n\t\t\t backButtonFunc()}\n\t\t\t\tmargin=\"0\"\n\t\t\t\tpadding=\"10px 25px\"\n\t\t\t\toutline\n\t\t\t>\n\t\t\t\tBack\n\t\t\t\n\t\t
\n\t
\n)\n\nFormAndDetails.propTypes = {\n\tonChange: PropTypes.func,\n\tuser: PropTypes.shape(),\n\tuserRoles: PropTypes.arrayOf(PropTypes.shape()),\n\tcompanies: PropTypes.arrayOf(PropTypes.shape()),\n\tbackButtonFunc: PropTypes.func,\n\tbuttonFunc: PropTypes.func,\n\tbuttonText: PropTypes.string,\n\tisFormDisplay: PropTypes.bool,\n\tisEditUserForm: PropTypes.bool\n}\n\nexport default FormAndDetails\n","import styled from 'styled-components'\n\nconst UserDetailsStyles = styled.section`\n\t.userDetailsContainer {\n\t\twidth: calc(100% - 210px);\n\t\tmargin-left: 210px;\n\t\tbackground: #f7f7f7;\n\t\tmin-height: 100vh;\n\t\toverflow-x: hidden;\n\t}\n\t.userDetailsContent {\n\t\tpadding: 0 30px 30px 30px;\n\t}\n`\n\nexport default UserDetailsStyles\n","import { User, Company, NewUser } from '../users.entity'\n\nconst initalUsersState = {\n\tcompanies: [new Company()],\n\tnewUser: new NewUser(),\n\tselectedUser: new User(),\n\tusers: [new User()]\n}\n\nconst actionTypes = {\n\tsetUsers: 'SET_USERS',\n\tsetCompanies: 'SET_COMPANIES',\n\thandleChange: 'SET_HANDLE_CHANGE',\n\thandleAddUser: 'SET_ADD_USER',\n\tselectedUser: 'SELECTED_USER',\n\tsetSingleUser: 'SET_SINGLE_USER'\n}\n\nconst usersReducer = (state = initalUsersState, action) => {\n\tswitch (action.type) {\n\t\tcase actionTypes.setUsers:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tusers: action.payload.map(user => new User(user))\n\t\t\t}\n\t\tcase actionTypes.setCompanies:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tcompanies: action.payload.map(company => new Company(company))\n\t\t\t}\n\t\tcase actionTypes.handleChange:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tnewUser: {\n\t\t\t\t\t...state.newUser,\n\t\t\t\t\t[action.name]: action.value\n\t\t\t\t}\n\t\t\t}\n\t\tcase actionTypes.handleAddUser:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tnewUser: new NewUser(),\n\t\t\t\tusers: [...state.users, new User(action.payload)]\n\t\t\t}\n\t\tcase actionTypes.selectedUser:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tselectedUser: state.users.find(user => user.id === action.chosenId)\n\t\t\t}\n\t\tcase actionTypes.setSingleUser:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tselectedUser: new User(action.payload)\n\t\t\t}\n\t\tdefault:\n\t\t\tthrow new Error(`Unknow action type: ${action.type}`)\n\t}\n}\n\nexport { actionTypes, initalUsersState, usersReducer }\n","import React, { createContext, useReducer, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { initalUsersState, usersReducer } from './users.reducer'\n\nimport { useUserActions } from './users.actions'\n\nconst UsersContext =\n\tcreateContext({ ...initalUsersState })\n\nconst UsersProvider = ({ children }) => {\n\tconst [usersState, dispatchUsersState] = useReducer(usersReducer, initalUsersState)\n\n\tconst usersActions = useUserActions(dispatchUsersState)\n\n\tuseEffect(() => { }, [initalUsersState])\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t)\n}\n\nUsersProvider.propTypes = {\n\tchildren: PropTypes.node\n}\n\nexport { UsersContext, UsersProvider }\n","import React, { useContext, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { useHistory } from 'react-router-dom'\n// components\nimport { Header, Card } from '../../../../components'\nimport Details from '../Form/FormAndDetails'\n// styles\nimport UserDetailsStyles from './UserDetailsStyles'\n// services\nimport { getSingleUser } from '../../../../modules/superAdmin/users/users.services'\n// context\nimport { UsersContext } from '../../../../modules/superAdmin/users/context/users.context'\nimport { UserContext } from '../../../../modules/user/context/user.context'\n\n\nconst UserDetails = ({ match }) => {\n\tconst {\n\t\tusersState: { selectedUser },\n\t\tusersActions: { setSingleUser }\n\t} = useContext(UsersContext)\n\tconst { user } = useContext(UserContext)\n\tconst history = useHistory()\n\n\tconst fetchUser = async () => {\n\t\tconst response = await getSingleUser(match.params.id)\n\n\t\tif (response) {\n\t\t\tsetSingleUser(response)\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tif (selectedUser.id === null) {\n\t\t\tfetchUser()\n\t\t}\n\t}, [])\n\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t history.push('/app/users/superAdmin_users')}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t)\n}\n\nUserDetails.propTypes = {\n\tmatch: PropTypes.shape()\n}\n\nexport default UserDetails\n","import { toast } from \"react-toastify\";\nimport { axiosInstance } from \"../../../services/http/axiosConfig\";\nimport { Tier } from \"./users.entity\";\n\nexport const getUsers = async ({ limit, page, searchText, orderColumns }) => {\n try {\n const searchQuery = searchText ? `&search=${searchText}` : \"\";\n let orderQuery = \"\";\n if (orderColumns.length > 0) {\n orderQuery = orderColumns.reduce(\n (acc, column) =>\n `${acc}&order=${column.field} ${column.isSortedUp ? \"ASC\" : \"DESC\"}`,\n \"\"\n );\n }\n\n // & role=hr admin\n\n const { data } = await axiosInstance({\n method: \"get\",\n url: `/users?limit=${limit}&page=${page}${searchQuery}${orderQuery}`\n });\n if (data) {\n return data;\n }\n } catch (error) {\n if (error && error.response) {\n const { data } = error.response;\n if (data) {\n toast.error(data.error.message);\n }\n } else {\n toast.error(\"Something went wrong\");\n }\n }\n};\n\nexport const getChosenTiers = async companyId => {\n try {\n const { data } = await axiosInstance({\n method: \"get\",\n url: `/company/tiers?company_id=${companyId}`\n });\n if (data) {\n return data.items.map(item => new Tier(item));\n }\n } catch (error) {\n if (error && error.response) {\n const { data } = error.response;\n if (data) {\n toast.error(data.error.message);\n }\n } else {\n toast.error(\"Something went wrong\");\n }\n }\n};\n\nexport const getCompanies = async () => {\n try {\n const { data, statusText } = await axiosInstance({\n method: \"get\",\n url: \"/company/get\"\n });\n if (data) {\n return {\n companies: data.companies,\n statusText\n };\n }\n } catch (error) {\n if (error && error.response) {\n const { data } = error.response;\n if (data) {\n toast.error(data.error.message);\n }\n } else {\n toast.error(\"Something went wrong\");\n }\n }\n};\n\n// export const createUser = async payload => {\n// \ttry {\n// \t\tconst { data } = await axiosInstance({\n// \t\t\tmethod: 'post',\n// \t\t\turl: '/users/register',\n// \t\t\tdata: payload\n// \t\t})\n// \t\tif (data) {\n// \t\t\treturn data\n// \t\t}\n// \t} catch (error) {\n// \t\talert(error)\n// \t}\n// }\n\nexport const getSingleUser = async id => {\n try {\n const { data } = await axiosInstance({\n method: \"get\",\n url: `/users/${id}`\n });\n if (data) {\n return data;\n }\n } catch (error) {\n if (error && error.response) {\n const { data } = error.response;\n if (data) {\n toast.error(data.error.message);\n }\n } else {\n toast.error(\"Something went wrong\");\n }\n }\n};\n","import { EmployeeUser, HrUser, AdminUser, Company } from \"./editUser.entities\";\nimport { User, Employee } from \"../../../models/domain\";\n// sync functions\n\nexport const findUserRole = role => {\n if (role === \"Member\") return new Employee();\n return new User();\n};\n\n// consts\n\nexport const relationshipOptions = [\n { id: 1, name: \"Single\" },\n { id: 2, name: \"Married\" },\n { id: 3, name: \"Divorced\" }\n];\n\nexport const genderOptions = [\n { id: 1, name: \"Male\" },\n { id: 2, name: \"Female\" },\n { id: 3, name: \"Other\" }\n];\n","import validator from \"validator\";\nimport moment from \"moment\";\nimport { isEmpty, removeSpacesAndHTML } from \"../../general.utils\";\nimport { UserRolesKeysEnum } from \"../../../constants/roles.constants\";\nimport { doesRoleExist } from \"../../roles.utils\";\nimport { findLocales } from \"../../../utils/helpers/findLocales\";\n\nconst allowedDateFormats = [\n \"DD/MM/YYYY\",\n \"D/M/YYYY\",\n \"DD.MM.YYYY\",\n \"D.M.YYYY\",\n \"DD-MM-YYYY\",\n \"D-M-YYYY\"\n];\n\nconst validateDate = value => moment(value, allowedDateFormats, true).isValid();\n\nexport const editUserFormValidations = ({\n firstName,\n lastName,\n email,\n roles,\n bornDate,\n firstDayAtWork,\n gender,\n tier,\n companyId,\n cities\n}) => {\n const isInLanguage = findLocales(\"rs\");\n\n const errors = {};\n if (!firstName || !/\\S/.test(firstName)) {\n errors.firstName = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!removeSpacesAndHTML(firstName)) {\n errors.firstName = isInLanguage\n ? \"HTML tag nije dozvoljen\"\n : \"HTML tag is not allowed\";\n }\n\n if (!lastName || !/\\S/.test(lastName)) {\n errors.lastName = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!removeSpacesAndHTML(lastName)) {\n errors.lastName = isInLanguage\n ? \"HTML tag nije dozvoljen\"\n : \"HTML tag is not allowed\";\n }\n\n if (!roles) {\n errors.roles = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n\n if (!email) {\n errors.email = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n } else if (!validator.isEmail(email)) {\n errors.email = isInLanguage ? \"Nevalidna email adresa\" : \"Invalid email\";\n }\n\n if (doesRoleExist(roles, UserRolesKeysEnum.MEMBER)) {\n if (typeof tier === Object) {\n if (tier.id === null) {\n errors.tier = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n } else {\n if (!tier) {\n errors.tier = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n }\n\n if (isEmpty(cities)) {\n errors.cities = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n }\n\n if (\n doesRoleExist(roles, UserRolesKeysEnum.HR) ||\n doesRoleExist(roles, UserRolesKeysEnum.MEMBER)\n ) {\n if (!companyId) {\n errors.companyId = isInLanguage ? \"*Obavezno polje\" : \"* Required\";\n }\n }\n\n return errors;\n};\n","import React, { useState, useEffect } from \"react\";\nimport { toast } from \"react-toastify\";\nimport { useFormik } from \"formik\";\nimport { useHistory } from \"react-router-dom\";\nimport PropTypes from \"prop-types\";\n\n// Components\nimport { AddUserFormStyles } from \"./AddUserFormStyles\";\nimport {\n Button,\n IntitialsCircle,\n Input,\n InputLabel,\n TextAndLine,\n SelectInput,\n MultiselectInput,\n CheckboxInput\n} from \"../..\";\nimport { MemberFields } from \"./MemberFields\";\nimport { UserDisabledIconSvg } from \"../../../assets/Icons\";\n\n// Services\nimport * as api from \"../../../services/api/admin/users.service\";\nimport { findUserRole } from \"./editUserForm.services\";\nimport { editUserFormValidations } from \"../../../services/validations/superAdmin/editUserForm.validations\";\n\n// Constants\nimport { UserRolesKeysEnum } from \"../../../constants/roles.constants\";\n\n// Utils\nimport { isEmpty } from \"../../../services/general.utils\";\nimport {\n doesRoleExist,\n isAuthenticatedRole\n} from \"../../../services/roles.utils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst EditUserForm = ({ routeParams }) => {\n const { t } = useTranslation();\n const [companyOptions, setCompanyOptions] = useState([]);\n const [companiesPage, setCompaniesPage] = useState(1);\n const [totalPages, setTotalPages] = useState(1);\n const [roles, setRoles] = useState([]);\n const [chosenUser, setChosenUser] = useState(findUserRole(routeParams.role));\n const history = useHistory();\n\n const handleUpdateUser = async values => {\n const response = await api.updateUser({\n payload: values,\n id: routeParams.chosenId\n });\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_edit_user\"),\n {\n autoClose: 15000\n }\n );\n }\n\n history.push(\"/users\");\n };\n\n const resendVerificationLink = async e => {\n e.stopPropagation();\n const userId = isAuthenticatedRole(\n chosenUser.authenticatedRole,\n UserRolesKeysEnum.MEMBER\n )\n ? chosenUser.user.id\n : chosenUser.id;\n\n const response = await api.resendVerificationLink(userId);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_send_ver_link\")\n );\n }\n\n toast.success(response.data.message);\n };\n\n /**\n * Handles user enabling.\n * Sends request to update user enabled status.\n * Refetches data.\n * @param {Event} e\n */\n const handleUserEnable = async e => {\n e.stopPropagation();\n const userId = isAuthenticatedRole(\n chosenUser.authenticatedRole,\n UserRolesKeysEnum.MEMBER\n )\n ? chosenUser.user.id\n : chosenUser.id;\n\n const response = await api.enableUser(userId);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_enable_user\")\n );\n }\n\n toast.success(response.data.message);\n\n fetchUser();\n };\n\n const formik = useFormik({\n enableReinitialize: true,\n initialValues: {\n id: chosenUser.id,\n bornDate: chosenUser.employee?.bornDate,\n companyId: chosenUser.companyId,\n contact: chosenUser.employee?.contact,\n description: chosenUser.employee?.description,\n email: chosenUser.email,\n employee_id: chosenUser.employeeId,\n firstDayAtWork: chosenUser.employee?.firstDayAtWork,\n firstName: chosenUser.firstName,\n gender: chosenUser.employee?.gender,\n uniqueId: chosenUser.employee?.uniqueId,\n branchCode: chosenUser.employee?.branchCode,\n lastName: chosenUser.lastName,\n vocativeName: chosenUser.vocativeName,\n relationship: chosenUser.employee?.relationship,\n roles: chosenUser.roles,\n team: chosenUser.employee?.team,\n tier: chosenUser.employee?.tier?.id,\n cities: chosenUser.employee?.cities,\n formalEmail: chosenUser.formalEmail\n },\n validate: editUserFormValidations,\n onSubmit: handleUpdateUser\n });\n\n const fetchUser = async () => {\n const response = await api.getSingleUser({\n id: routeParams.chosenId,\n companyId: routeParams.company\n });\n\n if (response.hasError) {\n return toast.error(\n response.errorMessage ? response.errorMessage : t(\"failed_to_get_users\")\n );\n }\n\n setChosenUser(response);\n };\n\n const fetchCompanies = async () => {\n const response = await api.getCompanyOptions(companiesPage, 100);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n setCompanyOptions(response.companies);\n setTotalPages(response.pages);\n };\n\n /**\n * Refetches paginated companies.\n * Fired from on scroll event from select input.\n * Sets new companies to state, along with page number.\n */\n const refetchCompanies = async () => {\n let currentPage = companiesPage;\n let newPage = (currentPage += 1);\n\n if (newPage > totalPages) return;\n\n setCompaniesPage(newPage);\n\n const response = await api.getCompanyOptions(newPage);\n if (response.hasError) {\n return toast.error(\n response.errorMessage\n ? response.errorMessage\n : t(\"failed_to_get_companies\")\n );\n }\n\n let newCompanies = [];\n setTimeout(() => {\n newCompanies = [...companyOptions, ...response.companies];\n setTimeout(() => {\n setCompanyOptions(newCompanies);\n }, 100);\n }, 100);\n };\n\n const fetchRoles = async () => {\n const response = await api.getRolesForDropdown();\n if (response.hasError) {\n return toast.error(\n response.errorMessage ? response.errorMessage : t(\"failed_to_get_roles\")\n );\n }\n\n setRoles(response);\n };\n\n useEffect(() => {\n fetchUser();\n fetchCompanies();\n fetchRoles();\n }, []);\n\n const {\n values,\n errors,\n touched,\n handleSubmit,\n handleChange,\n handleBlur,\n setFieldValue\n } = formik;\n\n return (\n
\n \n \n
\n \n {chosenUser.isDisabled && (\n \n \n \n )}\n
\n
\n
\n
\n \n
\n {errors.roles && touched.roles ? errors.roles : \"\"}\n
\n
\n setFieldValue(\"roles\", option)}\n selectedValues={values.roles}\n shouldHaveFullWidth\n customHeight=\"27px\"\n />\n
\n\n
\n
\n \n
\n {errors.companyId && touched.companyId\n ? errors.companyId\n : \"\"}\n
\n
\n setFieldValue(\"companyId\", option.id)}\n fetchMoreData={refetchCompanies}\n shouldHaveFullWidth\n customHeight=\"27px\"\n />\n
\n
\n
\n
\n
\n \n
\n {errors.firstName && touched.firstName\n ? errors.firstName\n : \"\"}\n
\n
\n \n
\n
\n
\n \n
\n {errors.lastName && touched.lastName ? errors.lastName : \"\"}\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n {errors.email && touched.email ? errors.email : \"\"}\n
\n
\n \n
\n
\n
\n \n
\n {errors.vocativeName && touched.vocativeName\n ? errors.vocativeName\n : \"\"}\n
\n
\n \n
\n
\n
\n \n \n \n
\n
\n {chosenUser.isDisabled && (\n
\n \n {t(\"disabled_usr_desc\")}\n \n handleUserEnable(e)}\n margin=\"8px 0 0 0\"\n padding=\"10px 25px\"\n outline\n >\n {t(\"enable_user\")}\n \n
\n )}\n
\n \n {t(\"resend_ver_link\")}\n \n \n {doesRoleExist(values.roles, UserRolesKeysEnum.MEMBER) && (\n <>\n \n \n \n )}\n
\n \n history.push(\"/users\")}\n margin=\"0\"\n padding=\"10px 25px\"\n outline\n >\n {t(\"cancel\")}\n \n
\n
\n
\n );\n};\n\nEditUserForm.propTypes = {\n routeParams: PropTypes.shape()\n};\n\nexport default EditUserForm;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n\nimport { Header, Card } from \"../../../../components\";\nimport EditUserForm from \"../../../../components/forms/user/EditUserForm\";\nimport { useTranslation } from \"react-i18next\";\nimport { useHistory } from \"react-router-dom/cjs/react-router-dom.min\";\n\nconst EditUserStyles = styled.section`\n .editUserContainer {\n width: calc(100% - 210px);\n margin-left: 210px;\n background: #f7f7f7;\n min-height: 100vh;\n overflow-x: hidden;\n }\n\n .editUserContent {\n padding: 0 30px 30px 30px;\n }\n`;\n\nconst EditUser = ({ match }) => {\n const { t } = useTranslation();\n const history = useHistory();\n\n const shouldRedirectToOriginal = () => history.push(\"/users\");\n\n return (\n \n
\n \n
\n \n \n \n
\n
\n
\n );\n};\n\nEditUser.propTypes = {\n match: PropTypes.shape()\n};\n\nexport default EditUser;\n","import React from \"react\";\nimport ActivityLog from \"../../../assets/images/activity-log.png\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const EmptyRefunds = () => {\n const { t } = useTranslation();\n return (\n \n \"Refunds\n

{t(\"empty_refunds\")}

\n \n );\n};\n","const refundsNamespace = \"[refunds]\";\n\nconst refundActions = {\n SET_REFUNDS_LIST: `${refundsNamespace}_SET_REFUNDS_LIST`,\n SET_REFUND: `${refundsNamespace}_SET_REFUND`,\n SET_TOTAL_COUNT: `${refundsNamespace}_SET_TOTAL_COUNT`,\n SET_FILTERS: `${refundsNamespace}_SET_FILTERS`,\n SET_CHECKED_PENDING_ITEMS: `${refundsNamespace}_SET_CHECKED_PENDING_ITEMS`,\n SET_BRANCH_CODES: `${refundsNamespace}_SET_BRANCH_CODES`,\n SET_TOGGLE_REIMBURSEMENT: `${refundsNamespace}_SET_TOGGLE_REIMBURSEMENT`\n};\n\nexport default refundActions;\n","import refundActions from \"../../constants/actionTypes/hr/refunds.constants\";\n\nconst setRefunds = payload => {\n return { type: refundActions.SET_REFUNDS_LIST, payload };\n};\n\nconst setRefund = payload => {\n return { type: refundActions.SET_REFUND, payload };\n};\n\nconst setTotalCount = payload => {\n return { type: refundActions.SET_TOTAL_COUNT, payload };\n};\n\nconst setFilters = payload => {\n return { type: refundActions.SET_FILTERS, payload };\n};\n\nconst setCheckedPendingItems = payload => {\n return { type: refundActions.SET_CHECKED_PENDING_ITEMS, payload };\n};\n\nconst setBranchCodes = payload => {\n return { type: refundActions.SET_BRANCH_CODES, payload };\n};\n\nconst setToggleReimbursement = payload => {\n return { type: refundActions.SET_TOGGLE_REIMBURSEMENT, payload };\n};\n\nexport {\n setRefunds,\n setRefund,\n setTotalCount,\n setFilters,\n setCheckedPendingItems,\n setBranchCodes,\n setToggleReimbursement\n};\n","import styled from \"styled-components\";\n\nconst RefundStyles = styled.section`\n position: relative;\n\n .refundContainer {\n width: calc(100% - 210px);\n margin-left: 210px;\n background: whitesmoke;\n min-height: 100vh;\n overflow-x: hidden;\n position: relative;\n }\n\n .refundContent {\n position: relative;\n background: #fff;\n min-height: 460px;\n border-radius: 8px;\n padding: 15px;\n }\n\n .refundContentWrapper {\n padding: 0 30px 30px 30px;\n }\n\n .refundsList {\n width: 100%;\n height: 100%;\n }\n\n .refundListHeader {\n display: flex;\n width: 100%;\n justify-content: space-around;\n height: 40px;\n color: #5d5d5d;\n font-size: 16px;\n font-weight: 600;\n border-top: 1px solid #f0f0f0;\n border-bottom: 1px solid #94abd1;\n\n .refundListHeaderName {\n width: 19%;\n padding: 12px;\n display: flex;\n align-items: center;\n }\n .refundListHeaderBenefit {\n width: 19%;\n padding: 12px;\n display: flex;\n align-items: center;\n }\n .refundListHeaderPrice {\n width: 14%;\n padding: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .refundListHeaderQuantity {\n width: 14%;\n display: flex;\n padding: 12px;\n align-items: center;\n justify-content: center;\n }\n .refundListHeaderStatus {\n width: 14%;\n padding: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .refundListHeaderDate {\n padding: 12px;\n display: flex;\n align-items: center;\n width: 19%;\n justify-content: center;\n }\n .refundListHeaderEmpty {\n width: 5%;\n padding: 12px;\n }\n }\n\n .refundsListItem {\n display: flex;\n height: 40px;\n font-size: 12px;\n font-weight: normal;\n max-height: 40px;\n cursor: pointer;\n background: white;\n\n &:hover {\n background: rgba(148, 171, 209, 0.3);\n }\n\n .refundsListItemName {\n width: 19%;\n display: flex;\n align-items: center;\n padding: 12px;\n }\n .refundsListItemBenefit {\n width: 19%;\n padding: 12px;\n display: flex;\n align-items: center;\n }\n .refundsListItemPrice {\n width: 14%;\n padding: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .refundsListItemQuantity {\n padding: 12px;\n display: flex;\n width: 14%;\n justify-content: center;\n align-items: center;\n }\n .refundsListItemStatus {\n display: flex;\n padding: 12px;\n width: 14%;\n justify-content: center;\n align-items: center;\n\n svg {\n width: 16px;\n height: 16px;\n }\n\n svg.pending {\n color: gray;\n }\n svg.accepted {\n color: green;\n }\n svg.rejected {\n color: red;\n }\n }\n .refundsListItemDate {\n display: flex;\n padding: 12px;\n width: 19%;\n justify-content: center;\n align-items: center;\n }\n\n .refundsListItemCheckbox {\n width: 5%;\n padding: 12px;\n }\n }\n\n .refundListSecondLayerActivityToggle {\n display: flex;\n gap: 20px;\n }\n\n .refundListSecondLayerActivity {\n margin: 10px 0 30px 0;\n display: flex;\n gap: 20px;\n justify-content: space-between;\n\n .checkboxCol {\n display: flex;\n gap: 5px;\n }\n\n .bulkAcceptOrDecline {\n color: #5d5d5d;\n font-size: 14px;\n cursor: pointer;\n\n .bulkAccept {\n color: #19cc95;\n font-size: 16px;\n font-weight: 600;\n text-decoration: underline;\n }\n\n .bulkDecline {\n color: #ed3f55;\n font-size: 16px;\n text-decoration: underline;\n font-weight: 600;\n }\n }\n }\n\n .refundListHeaderFilterWrapper {\n position: relative;\n display: flex;\n\n .refundListHeaderFilterWrapperFlex {\n display: flex;\n align-items: center;\n }\n\n .refundFilter {\n position: absolute;\n background: #ffffffff;\n border: 1px solid #1568bf;\n border-radius: 8px;\n padding: 12px;\n min-width: 150px;\n z-index: 10;\n\n .arrow {\n content: \" \";\n position: absolute;\n bottom: 100%;\n left: 50%;\n margin-left: -9px;\n border-width: 10px;\n border-style: solid;\n border-color: transparent transparent #1568bf transparent;\n }\n }\n\n .refundFilterItem {\n cursor: pointer;\n padding: 5px;\n\n &:hover {\n background: rgba(148, 171, 209, 0.3);\n }\n }\n\n .refundFilterItemFlexCenter {\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: 600;\n border-bottom: 1px solid #5d5d5d;\n }\n\n .refundFilterItemFlex {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 5px;\n font-weight: 500;\n\n svg {\n width: 20px;\n height: 20px;\n }\n\n svg.accepted {\n color: #19cc95;\n }\n\n svg.rejected {\n color: #ed3f55;\n }\n }\n\n button {\n background: transparent;\n border: none;\n padding: 9px;\n cursor: pointer;\n }\n\n svg {\n width: 14px;\n height: 14px;\n }\n }\n\n .refundsListItemTopName {\n display: flex;\n gap: 10px;\n }\n\n .refundsListItemBottomFlex {\n display: flex;\n }\n\n @media screen and (max-width: 576px) {\n .refundListHeader {\n display: none;\n }\n\n .refundsListItem {\n &:hover {\n background: transparent;\n }\n }\n }\n\n .refundFilterMobile {\n min-width: 120px !important;\n }\n\n .refundMobileHeader {\n display: flex;\n justify-content: space-around;\n }\n\n @media screen and (min-width: 577px) {\n .refundMobileHeader {\n display: none;\n }\n }\n\n // Todo reuse styles\n .employeesContainer {\n padding: 0 30px 30px 30px;\n display: flex;\n position: relative;\n background: #fff;\n min-height: 460px;\n }\n\n .firstMenu {\n display: flex;\n justify-content: space-between;\n padding: 16px;\n flex-wrap: wrap;\n background: #fff;\n }\n\n .buttonsWrapper {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n width: 50%;\n min-width: 450px;\n }\n\n .searchIcon {\n background: #f7f9fc;\n padding: 12px 0 8px 10px;\n border-radius: 8px 0 0 8px;\n margin-right: -10px;\n z-index: 2;\n }\n\n .filterButton {\n font-weight: 500;\n line-height: 16px;\n }\n\n .buttonsContainer {\n position: relative;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n }\n\n .filtersContainer {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 15px;\n\n .closeFiltersButton {\n display: none;\n }\n .selectsContainer {\n display: flex;\n gap: 15px;\n > div {\n width: 202px;\n }\n }\n }\n\n .addContainer {\n width: 24px;\n height: 24px;\n background: #fff;\n border-radius: 50%;\n color: #373737;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-right: 10px;\n }\n\n .addSign {\n margin-right: 8px;\n font-size: 28px;\n line-height: 28px;\n font-weight: 400;\n }\n\n #employeesList {\n transition: all 0.4s ease-in-out;\n opacity: 0;\n width: 100%;\n background-color: whitesmoke;\n }\n\n .firstMenuMobile {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n display: none;\n background: #fff;\n padding: 8px 16px;\n\n .sortMobileButton {\n font-size: 16px;\n font-weight: 400;\n }\n }\n\n .secondMenu {\n width: 100%;\n padding: 8px 20px;\n background: #fff;\n\n .flexContainer {\n display: flex;\n align-items: center;\n }\n\n p {\n font-size: 14px;\n line-height: 16px;\n font-weight: 500;\n color: #1d1d1d;\n }\n\n .selected {\n width: 90px;\n color: ${props => props.selectedColor};\n margin: 0 11px;\n }\n }\n\n .tableHead {\n padding: 14px 30px;\n display: flex;\n align-items: center;\n border-bottom: 1px solid #94abd1;\n border-top: 1px solid #f0f0f0;\n background: #fff;\n }\n\n .tableBodyContainer {\n background: #f7f7f7;\n padding: 30px;\n margin: 20px 0 0 0;\n border-radius: 4px;\n }\n\n #addEmployeeForm {\n position: absolute;\n width: calc(100% - 60px);\n transform: translateX(110%);\n transition: all 0.4s ease-in-out;\n opacity: 0;\n }\n\n .buttonText {\n font-size: 16px;\n font-weight: 600;\n line-height: 16px;\n }\n\n .showAddEmployeeForm {\n transform: translateY(0) !important;\n opacity: 1 !important;\n }\n\n .hideEmployeeList {\n transform: translateX(-110%);\n opacity: 0;\n max-height: 1000px;\n overflow-y: auto;\n }\n\n .actionsDropdownWrapper {\n position: absolute;\n display: flex;\n flex-direction: column;\n width: 234px;\n right: 0;\n border-radius: 0px 4px 0px 0px;\n border: solid 1px transparent;\n z-index: 2;\n color: rgb(7, 6, 6);\n background-color: rgb(236, 236, 236);\n\n > span {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 8px 10px;\n cursor: pointer;\n }\n\n & span:first-child {\n display: none;\n }\n\n .buttonText {\n font-size: 14px;\n font-weight: 500;\n line-height: 16px;\n }\n }\n\n .actionsSortWrapper {\n position: absolute;\n display: flex;\n flex-direction: column;\n width: 234px;\n left: 0;\n border-radius: 0px 4px 0px 0px;\n border: solid 1px transparent;\n z-index: 2;\n background-color: rgb(236, 236, 236);\n\n .chevronContainer {\n width: 24px;\n height: 24px;\n background: #fff;\n border-radius: 50%;\n color: #373737;\n margin-right: 10px;\n\n svg {\n margin: 3px 0 0 7px;\n }\n }\n\n .sortButton {\n justify-content: flex-start;\n }\n\n .buttonText {\n font-size: 14px;\n font-weight: 500;\n line-height: 16px;\n }\n }\n\n .appliedFiltersContainer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n font-size: 12px;\n line-height: 16px;\n font-weight: 500;\n background: #fff;\n\n .appliedFilters {\n display: flex;\n align-items: center;\n gap: 10px;\n overflow-x: auto;\n max-width: calc(100% - 80px);\n flex-wrap: wrap;\n\n .appliedFilterPill {\n display: flex;\n align-items: center;\n gap: 19px;\n background-color: #f0f4f9;\n color: #1d1d1d;\n padding: 6px 8px;\n border-radius: 23px;\n\n .removeFilter {\n cursor: pointer;\n }\n }\n }\n\n .clearButton {\n justify-content: flex-end;\n font-size: 12px;\n font-weight: 500;\n line-height: 16px;\n }\n }\n\n @keyframes showModal {\n from {\n transform: translateX(320px);\n opacity: 0;\n }\n to {\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n .filtersContainer.mobile {\n display: flex;\n flex-direction: column-reverse;\n justify-content: flex-end;\n width: 310px;\n padding: 90px 30px 30px 30px;\n position: fixed;\n top: 0;\n right: 0;\n height: 100%;\n background: rgb(255, 255, 255);\n border-radius: 4px;\n box-shadow: rgb(0 0 0 / 20%) 0px 2px 4px -1px,\n rgb(0 0 0 / 12%) 0px 1px 10px 0px, rgb(0 0 0 / 14%) 0px 4px 5px 0px;\n z-index: 10;\n animation: showModal 0.4s ease-in-out;\n transition: all 0.35s ease-in-out;\n transition-delay: 0.1s;\n > div {\n width: 100%;\n }\n .closeFiltersButton {\n display: unset;\n width: 40px;\n height: 40px;\n color: rgba(0, 0, 0, 0.54);\n border: none;\n outline: none;\n font-size: 20px;\n position: absolute;\n z-index: 2;\n right: 15px;\n top: 30px;\n font-weight: 500;\n cursor: pointer;\n background: rgba(255, 255, 255, 0.6);\n border-radius: 50%;\n &:hover {\n color: #1568bf;\n background: rgba(255, 255, 255, 0.8);\n }\n }\n .selectsContainer {\n flex-direction: column;\n width: 100%;\n > div {\n width: 100%;\n }\n }\n }\n\n .paginationWrapper {\n display: flex;\n justify-content: center;\n background: #fff;\n padding: 30px;\n }\n\n @media screen and (max-width: 1024px) {\n .buttonsWrapper {\n min-width: 400px;\n }\n }\n\n @media screen and (max-width: 960px) {\n .employeesContainer {\n padding: 0 15px 30px 15px;\n }\n\n .buttonsWrapper {\n min-width: 440px;\n }\n\n .addSign {\n margin: 0 4px;\n }\n\n .actionsDropdownWrapper {\n & span:first-child {\n display: flex;\n }\n }\n }\n\n @media screen and (max-width: 767px) {\n .refundContainer {\n width: 100%;\n margin: 0;\n }\n }\n`;\n\nexport default RefundStyles;\n","import styled from \"styled-components\";\n\nconst RefundModalStyles = styled.section`\n min-height: 347px;\n min-width: 360px;\n max-width: calc(100% - 50px);\n position: relative;\n padding: 15px 0 15px 15px;\n font-size: 12px;\n\n h2 {\n font-weight: 500;\n font-size: 20px;\n margin-bottom: 20px;\n color: #5d5d5d;\n }\n\n section {\n display: flex;\n justify-content: space-between;\n gap: 40px;\n\n .leftSection {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n\n & > div {\n display: flex;\n margin-bottom: 10px;\n flex-direction: column;\n }\n }\n\n .rightSection {\n display: flex;\n width: 100%;\n flex-direction: column;\n align-items: flex-start;\n & > div {\n margin-bottom: 10px;\n }\n\n .rightSectionImage {\n align-items: flex-start;\n flex-direction: column;\n }\n\n .imageButton {\n cursor: zoom-in;\n background: transparent;\n border: none;\n font-weight: 500;\n\n img {\n margin-top: 10px;\n width: 200px;\n height: 200px;\n border-radius: 8px;\n }\n }\n }\n }\n\n .refundButtons {\n display: flex;\n gap: 20px;\n position: absolute;\n right: 0;\n\n & > button {\n padding: 6px 12px;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: 1s;\n }\n\n button.accept {\n color: white;\n background: #228b22;\n border: none;\n\n &:disabled {\n cursor: not-allowed;\n }\n }\n\n button.reject {\n border-color: #c32148;\n background: white;\n\n &:disabled {\n cursor: not-allowed;\n }\n\n &:hover {\n color: white;\n background: #c32148;\n }\n }\n }\n\n .refundStatus {\n position: absolute;\n bottom: 15px;\n left: 15px;\n display: flex;\n align-items: center;\n\n p {\n margin-right: 10px;\n }\n svg {\n width: 20px;\n heigh: 20px;\n }\n svg.pending {\n color: gray;\n }\n svg.accepted {\n color: green;\n }\n svg.rejected {\n color: red;\n }\n }\n`;\n\nexport default RefundModalStyles;\n","import React from \"react\";\nimport moment from \"moment\";\nimport { useTranslation } from \"react-i18next\";\nimport { transformTokensToRsd } from \"../../../../utils/transformTokensToRsd\";\n\nexport const LeftModalSection = ({ singleRefund }) => {\n const { t } = useTranslation();\n return (\n
\n
\n Email:\n {singleRefund.UserBenefit.User.email}\n
\n
\n {t(\"Date\")}:\n {moment(singleRefund.createdAt).format(\"DD.MM.YYYY.\")}\n
\n
\n Benefit:\n {singleRefund.UserBenefit.BenefitGroup.name}\n
\n
\n {t(\"Price\")}:{\" \"}\n {transformTokensToRsd(singleRefund.UserBenefit.benefitPrice)}\n
\n
\n {t(\"Type\")}: {singleRefund.UserBenefit.BenefitVoucher.name}\n
\n
\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const RightModalSection = ({ image }) => {\n const { t } = useTranslation();\n return (\n
\n
\n {t(\"Image\")}:\n window.open(image.imageSrc)}\n >\n \n \n
\n
\n );\n};\n","import React from \"react\";\n\nexport const ShowRefundStatus = ({ handleStatus, status }) => {\n return (\n
\n

Status

\n {handleStatus(status)}\n
\n );\n};\n","import { toast } from \"react-toastify\";\nimport createSupaBaseStorageFolder from \"../createSupaBaseStorageFolder\";\nimport supabaseClient from \"../supabaseClient\";\n\nconst bucketsSwap = async ({ oldStatus, status, fileName, companyId }) => {\n const folderName = createSupaBaseStorageFolder(companyId);\n\n const folderRefundPending = `${folderName}_pending_refund`;\n const acceptedRefundFolder = folderName;\n\n try {\n const isTheFileInTheSameBucket = oldStatus === null && status === false;\n if (isTheFileInTheSameBucket) return;\n\n const { error: moveError } = await supabaseClient.storage\n .from(\"refund-upload\")\n .move(\n `${status ? folderRefundPending : acceptedRefundFolder}/${fileName}`,\n `${status ? acceptedRefundFolder : folderRefundPending}/${fileName}`\n );\n\n if (moveError) throw moveError;\n } catch (error) {\n toast.error(error.message);\n }\n};\n\nexport default bucketsSwap;\n","import React from \"react\";\nimport { apiService } from \"../../../../services/api/api.service\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setRefund, setRefunds } from \"../../../../actions/hr/refunds.actions\";\nimport { toast } from \"react-toastify\";\nimport bucketsSwap from \"../../../../utils/supabaseUtils/BucketsSwap/bucketsSwap\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const RefundModalActions = ({ id, fileName, status }) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n\n const { filters } = useSelector(state => state.refundsReducer);\n const { companyId } = useSelector(state => state.app.user);\n\n const fetchRefunds = async () => {\n try {\n const refundsResponse = await apiService.get(\n `/refunds?limit=${filters.perPage}&page=${filters.page}`\n );\n\n dispatch(setRefunds(refundsResponse.data?.refunds || []));\n } catch (error) {\n toast.error(t(\"failed_to_get_refund_list\"));\n }\n };\n\n const acceptOrRejectRefund = async newStatus => {\n try {\n const response = await apiService.put(`/refunds/${id}`, {\n description: \"\",\n status: newStatus\n });\n\n dispatch(setRefund(response.data.refund));\n toast.success(response.data.message);\n\n await bucketsSwap({\n oldStatus: status,\n status: response.data.status,\n fileName,\n companyId\n });\n\n await fetchRefunds();\n } catch (error) {\n toast.error(t(\"failed_to_accept_refund\"));\n }\n };\n\n return (\n
\n {status === null && (\n <>\n acceptOrRejectRefund(true)}\n >\n {t(\"Accept\")}\n \n acceptOrRejectRefund(false)}\n >\n {t(\"Decline\")}\n \n \n )}\n
\n );\n};\n","import React, { useRef, useEffect, useState } from \"react\";\nimport RefundModalStyles from \"./RefundModalStyles\";\nimport { useSelector } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport createSupaBaseStorageFolder from \"../../../../utils/supabaseUtils/createSupaBaseStorageFolder\";\nimport supabaseClient from \"../../../../utils/supabaseUtils/supabaseClient\";\nimport { LeftModalSection } from \"./LeftModalSection\";\nimport { RightModalSection } from \"./RightModalSection\";\nimport { ShowRefundStatus } from \"./ShowRefundStatus\";\nimport { RefundModalActions } from \"./RefundModalActions\";\nimport PdfLogo from \"../../../../assets/images/pdf-logo.jpg\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const RefundModal = ({ onClose, handleStatus }) => {\n const { t } = useTranslation();\n const { singleRefund } = useSelector(state => state.refundsReducer);\n const { companyId } = useSelector(state => state.app.user);\n\n const [image, setImage] = useState(\"\");\n const modalRef = useRef(null);\n\n const downloadImage = async name => {\n const folderName = createSupaBaseStorageFolder(companyId);\n\n const folderRefundPending = `${folderName}_pending_refund`;\n const acceptedRefundFolder = folderName;\n\n try {\n const { data, error } = await supabaseClient.storage\n .from(\"refund-upload\")\n .getPublicUrl(\n `${\n singleRefund.status ? acceptedRefundFolder : folderRefundPending\n }/${name}`\n );\n\n const url = data.publicUrl;\n setImage(url);\n\n if (error) throw new Error(error);\n } catch (error) {\n toast.error(error.message);\n }\n };\n\n useEffect(() => {\n downloadImage(singleRefund.File.name);\n }, [singleRefund.File.name]);\n\n useEffect(() => {\n modalRef.current.focus();\n }, []);\n\n const handleImage = image => {\n if (image.includes(\".pdf\")) return { logo: PdfLogo, imageSrc: image };\n\n return { logo: image, imageSrc: image };\n };\n\n return (\n {\n if (e.key === \"Escape\") onClose();\n }}\n >\n

{t(\"Single Refund\")}

\n
\n \n \n
\n \n \n \n );\n};\n","import React from \"react\";\nimport { closeModalAnim } from \"../../LocalBenefits/shared\";\nimport { useDispatch } from \"react-redux\";\nimport { setRefund } from \"../../../../actions/hr/refunds.actions\";\nimport { RefundModal } from \"./RefundModal\";\nimport { Modal } from \"../../../../components\";\n\nexport const ShowRefundModal = ({ handleStatus, singleRefund }) => {\n const dispatch = useDispatch();\n\n const closeModal = () => {\n closeModalAnim();\n\n setTimeout(() => {\n dispatch(setRefund({}));\n }, 350);\n };\n return (\n <>\n {singleRefund?.id && (\n \n \n \n )}\n \n );\n};\n","import React from \"react\";\nimport Pagination from \"react-pagination-js\";\nimport { setFilters } from \"../../../actions/hr/refunds.actions\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nexport const RefundPagination = ({ filters }) => {\n const dispatch = useDispatch();\n const count = useSelector(state => state.refundsReducer.totalCount);\n\n const handlePageChange = page => {\n dispatch(setFilters({ ...filters, page }));\n };\n\n return (\n
\n handlePageChange(page)}\n theme=\"border-bottom\"\n />\n
\n );\n};\n","import React from \"react\";\nimport { CheckboxInput } from \"../../../../../components\";\nimport moment from \"moment\";\n\nimport { transformTokensToRsd } from \"../../../../../utils/transformTokensToRsd\";\n\nexport const ListOfRefundsDesktopBody = props => {\n const {\n listOfRefunds,\n handleRefundOpen,\n handleCheckedOnChange,\n handleStatus,\n checkedPendingItems\n } = props;\n\n return (\n
\n {listOfRefunds.map(refundItem => {\n return (\n handleRefundOpen(refundItem)}\n >\n
\n
\n handleCheckedOnChange(refundItem.id)}\n isChecked={checkedPendingItems.includes(refundItem.id)}\n name={String(refundItem.id)}\n width=\"18px\"\n height=\"18px\"\n />\n
\n
\n
\n {refundItem.UserBenefit.User.UserEmployee?.CompanyBranch?.code ||\n \"/\"}\n
\n
\n {refundItem.UserBenefit.User.firstName}{\" \"}\n {refundItem.UserBenefit.User.lastName}\n
\n
\n {refundItem.UserBenefit.BenefitGroup.name}\n
\n
\n {transformTokensToRsd(refundItem.UserBenefit.benefitPrice)}\n
\n
\n {handleStatus(`${refundItem.status}`)}\n
\n
\n {moment(refundItem.createdAt).format(\"DD.MM.YYYY.\")}\n
\n
\n );\n })}\n \n );\n};\n","import React from \"react\";\nimport { ListOfRefundsDesktopBody } from \"./ListOfRefundsDesktopBody\";\n\nexport const ListOfRefundsDesktop = props => {\n const {\n handleRefundOpen,\n listOfRefunds,\n handleStatus,\n handleCheckedOnChange,\n checkedPendingItems\n } = props;\n\n const listOfRefundsDesktopBodyProps = {\n listOfRefunds,\n handleRefundOpen,\n handleCheckedOnChange,\n handleStatus,\n checkedPendingItems\n };\n\n return (\n
\n \n
\n );\n};\n","import styled from \"styled-components\";\n\nconst ListOfRefundsMobileStyles = styled.div`\n height: 100%;\n\n .refundsListItem {\n display: flex;\n flex-direction: column;\n width: 100%;\n margin-bottom: 30px;\n height: 100px;\n gap: 8px;\n }\n\n .refundsListItemTop {\n display: flex;\n justify-content: space-between;\n\n .refundsListItemTopName {\n font-size: 16px;\n font-weight: 500;\n color: #5d5d5d;\n }\n }\n\n .refundsListItemBottomCenter {\n text-align: center;\n }\n\n .refundsListItemBottom {\n display: flex;\n justify-content: space-between;\n color: black;\n align-items: center;\n\n p {\n font-size: 12px;\n font-weight: 500;\n }\n span {\n font-size: 8px;\n }\n\n border-bottom: 1px solid #5d5d5d;\n }\n\n .refundsListItemTopButton {\n width: 20px;\n height: 20px;\n color: #1568bf;\n }\n\n svg {\n width: 16px;\n height: 16px;\n }\n\n svg.pending {\n color: gray;\n }\n svg.accepted {\n color: green;\n }\n svg.rejected {\n color: red;\n }\n`;\n\nexport default ListOfRefundsMobileStyles;\n","import React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setFilters } from \"../../../actions/hr/refunds.actions\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const RefundBranchCodeFilter = ({ style }) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n\n const { branchCodes, filters } = useSelector(state => state.refundsReducer);\n\n const handleOnClickBranchCode = branchCodeId => {\n let payload = branchCodeId;\n if (branchCodeId === \"all\") payload = undefined;\n\n dispatch(setFilters({ ...filters, branchCode: payload }));\n };\n\n return (\n
\n
\n
\n {\n e.stopPropagation();\n handleOnClickBranchCode(\"all\");\n }}\n >\n {t(\"Show All\")}\n
\n
\n {branchCodes.map(branchCode => {\n return (\n
\n {\n e.stopPropagation();\n handleOnClickBranchCode(branchCode.id);\n }}\n >\n {branchCode.branchCode}\n
\n \n );\n })}\n \n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const RefundStatusFilter = ({\n handleOnClickStatus,\n handleStatus,\n style,\n classNAme\n}) => {\n const { t } = useTranslation();\n return (\n \n
\n
\n {\n e.stopPropagation();\n handleOnClickStatus(\"all\");\n }}\n >\n {t(\"Show All\")}\n
\n \n
\n {\n e.stopPropagation();\n handleOnClickStatus(\"pending\");\n }}\n >\n {handleStatus(null)}\n {t(\"Pending\")}\n
\n \n
\n {\n e.stopPropagation();\n handleOnClickStatus(\"accepted\");\n }}\n >\n {handleStatus(true)}\n {t(\"Accepted\")}\n
\n \n
\n {\n e.stopPropagation();\n handleOnClickStatus(\"rejected\");\n }}\n >\n {handleStatus(false)}\n {t(\"Rejected\")}\n
\n \n \n );\n};\n","import React, { useRef, useState } from \"react\";\nimport { CheckboxInput } from \"../../../../../components\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport useClickOutside from \"../../../../../hooks/useClickOutside\";\nimport { FilterIconSvg } from \"../../../../../assets/Icons\";\nimport { RefundBranchCodeFilter } from \"../../RefundBranchCodeFilter\";\nimport { setFilters } from \"../../../../../actions/hr/refunds.actions\";\nimport { RefundStatusFilter } from \"../../RefundStatusFilter\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const ListOfItemsRefundsMobile = props => {\n const {\n handleRefundOpen,\n handleStatus,\n handleCheckedOnChange,\n checkedPendingItems,\n refundItem\n } = props;\n\n const { t } = useTranslation();\n\n const dispatch = useDispatch();\n\n const statusRef = useRef(null);\n const branchRef = useRef(null);\n const [isStatusOpen, setIsStatusOpen] = useState(false);\n const [isBranchOpen, setIsBranchOpen] = useState(false);\n\n useClickOutside([statusRef], () => setIsStatusOpen(false));\n useClickOutside([branchRef], () => setIsBranchOpen(false));\n\n const { filters } = useSelector(state => state.refundsReducer);\n\n const handleOnClickStatus = status => {\n let payload = status;\n if (status === \"all\") payload = undefined;\n\n dispatch(setFilters({ ...filters, status: payload }));\n };\n\n return (\n handleRefundOpen(refundItem)}\n >\n
\n
\n
\n handleCheckedOnChange(refundItem.id)}\n isChecked={checkedPendingItems.includes(refundItem.id)}\n name={String(refundItem.id)}\n width=\"18px\"\n height=\"18px\"\n disabled={refundItem.status !== null}\n />\n
\n {refundItem.UserBenefit.User.firstName}{\" \"}\n {refundItem.UserBenefit.User.lastName}\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n
\n

{t(\"Branch\")}

\n \n {refundItem.UserBenefit.User.UserEmployee?.CompanyBranch\n ?.code || \"/\"}\n \n
\n\n {\n e.stopPropagation();\n setIsBranchOpen(status => !status);\n }}\n aria-haspopup=\"true\"\n aria-expanded={isBranchOpen}\n aria-labelledby=\"statusFilterLabel\"\n >\n \n \n
\n {isBranchOpen && (\n \n )}\n
\n
\n
\n

Benefit

\n {refundItem.UserBenefit.BenefitGroup.name}\n
\n
\n

{t(\"Price\")}

\n {refundItem.UserBenefit.benefitPrice}\n
\n
\n
\n
\n
\n

{t(\"Status\")}

\n {handleStatus(`${refundItem.status}`)}\n
\n\n {\n e.stopPropagation();\n setIsStatusOpen(status => !status);\n }}\n aria-haspopup=\"true\"\n aria-expanded={isStatusOpen}\n aria-labelledby=\"statusFilterLabel\"\n >\n \n \n
\n {isStatusOpen && (\n \n )}\n
\n
\n
\n \n );\n};\n","import React from \"react\";\nimport ListOfRefundsMobileStyles from \"./ListOfRefundsMobileStyles\";\nimport { ListOfItemsRefundsMobile } from \"./ListOfItemsRefundsMobile\";\n\nexport const ListOfRefundsMobile = props => {\n const { listOfRefunds } = props;\n\n return (\n \n {listOfRefunds.map(refundItem => {\n return (\n \n );\n })}\n \n );\n};\n","import React from \"react\";\nimport { useMediaQuery } from \"../../../../hooks/useMediaQuery\";\nimport { ListOfRefundsDesktop } from \"./Desktop/ListOfRefundsDesktop\";\nimport { ListOfRefundsMobile } from \"./Mobile/ListOfRefundsMobile\";\n\nexport const RefundListIndex = props => {\n const isMobileView = useMediaQuery(\"(max-width: 576px)\");\n\n const showComponents = () => {\n return isMobileView ? (\n \n ) : (\n \n );\n };\n\n return <>{showComponents()};\n};\n","import { useLayoutEffect, useState } from \"react\";\n\nexport function useMediaQuery(\n query,\n defaultValue = false,\n initializeWithValue = true\n) {\n const getMatches = query => {\n return window.matchMedia(query).matches;\n };\n\n const [matches, setMatches] = useState(() => {\n if (initializeWithValue) {\n return getMatches(query);\n }\n return defaultValue;\n });\n\n // Handles the change event of the media query.\n function handleChange() {\n setMatches(getMatches(query));\n }\n\n useLayoutEffect(() => {\n const matchMedia = window.matchMedia(query);\n\n // Triggered at the first client-side load and if query changes\n handleChange();\n\n // Use deprecated `addListener` and `removeListener` to support Safari < 14 (#135)\n if (matchMedia.addListener) {\n matchMedia.addListener(handleChange);\n } else {\n matchMedia.addEventListener(\"change\", handleChange);\n }\n\n return () => {\n if (matchMedia.removeListener) {\n matchMedia.removeListener(handleChange);\n } else {\n matchMedia.removeEventListener(\"change\", handleChange);\n }\n };\n }, [query]);\n\n return matches;\n}\n","import styled from \"styled-components\";\n\nconst ToggleSliderStyles = styled.div`\n .toggle-slider {\n position: relative;\n width: 52px;\n height: 22px;\n }\n\n .slider {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ed3f55;\n border-radius: 34px;\n cursor: pointer;\n transition: 0.4s;\n }\n\n .slider:before {\n position: absolute;\n content: \"\";\n height: 18px;\n width: 18px;\n left: 4px;\n bottom: 2px;\n background-color: white;\n border-radius: 50%;\n -webkit-transition: 0.4s;\n transition: 0.4s;\n }\n\n input[type=\"checkbox\"] {\n display: none;\n }\n\n input[type=\"checkbox\"]:checked + .slider {\n background-color: #19cc95;\n }\n\n input[type=\"checkbox\"]:checked + .slider:before {\n transform: translateX(26px);\n }\n`;\n\nexport default ToggleSliderStyles;\n","import React, { useState } from \"react\";\nimport ToggleSliderStyles from \"./ToggleSliderStyles\";\n\nconst ToggleSlider = props => {\n const { isChecked = true, onClick } = props;\n\n return (\n \n
\n onClick(!isChecked)}\n />\n
\n
\n );\n};\n\nexport default ToggleSlider;\n","import React, { useEffect } from \"react\";\nimport { CheckboxInput } from \"../../../../../components\";\nimport ToggleSlider from \"../../../../../components/ToggleSlider/ToggleSlider\";\nimport { apiService } from \"../../../../../services/api/api.service\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport { setToggleReimbursement } from \"../../../../../actions/hr/refunds.actions\";\nimport debounce from \"../../../../../utils/helpers/debounce\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const RefundListSecondLayer = props => {\n const {\n handleCheckAll,\n checkedPendingItems,\n handleBulkAcceptOrDecline\n } = props;\n\n const { t } = useTranslation();\n const dispatch = useDispatch();\n\n const { companyId } = useSelector(state => state.app.user);\n const { toggleReimbursement } = useSelector(state => state.refundsReducer);\n\n const fetchCompanyReimbursementState = async () => {\n try {\n const response = await apiService.get(`/company/${companyId}`);\n dispatch(setToggleReimbursement(response.data.toggleReimbursement));\n } catch (error) {\n toast.error(t(\"failed_to_get_company_reimbursement_state\"));\n }\n };\n\n useEffect(() => {\n if (!companyId) return;\n\n fetchCompanyReimbursementState();\n }, [companyId]);\n\n const changeCompanyToggleReimbursement = async value => {\n try {\n const response = await apiService.get(\n `/company/${companyId}/toggle-reimbursement?toggle=${value}`\n );\n\n dispatch(setToggleReimbursement(response.data.toggleReimbursement));\n } catch (error) {\n toast.error(t(\"failed_to_get_company_reimbursement_state\"));\n }\n };\n\n return (\n
\n
\n 0}\n name=\"Select all\"\n width=\"18px\"\n height=\"18px\"\n />\n {checkedPendingItems.length} {t(\"selected\")}\n
\n {checkedPendingItems.length > 0 && (\n
\n handleBulkAcceptOrDecline(true)}\n >\n {t(\"Accept\")}\n {\" \"}\n {t(\"or\")}{\" \"}\n handleBulkAcceptOrDecline(false)}\n >\n {t(\"Decline\")}\n \n
\n )}\n
\n {toggleReimbursement ? t(\"Auto Accept\") : t(\"Auto Decline\")}\n \n
\n
\n );\n};\n","import React, { useRef, useState } from \"react\";\nimport { FilterIconSvg, TokenIcon } from \"../../../../../assets/Icons\";\nimport useClickOutside from \"../../../../../hooks/useClickOutside\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setFilters } from \"../../../../../actions/hr/refunds.actions\";\nimport { RefundStatusFilter } from \"../../RefundStatusFilter\";\nimport { RefundBranchCodeFilter } from \"../../RefundBranchCodeFilter\";\nimport { useTranslation } from \"react-i18next\";\nimport { transformTokenCurrencyIcons } from \"../../../../../utils/transformTokensToRsd\";\n\nexport const ListOfRefundsDesktopHeader = ({ handleStatus }) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n\n const statusRef = useRef(null);\n const branchRef = useRef(null);\n const [isStatusOpen, setIsStatusOpen] = useState(false);\n const [isBranchOpen, setIsBranchOpen] = useState(false);\n\n useClickOutside([statusRef], () => setIsStatusOpen(false));\n useClickOutside([branchRef], () => setIsBranchOpen(false));\n\n const { filters } = useSelector(state => state.refundsReducer);\n\n const handleOnClickStatus = status => {\n let payload = status;\n if (status === \"all\") payload = undefined;\n\n dispatch(setFilters({ ...filters, status: payload }));\n };\n\n return (\n
\n
\n
\n
\n
\n {t(\"Branch\")}\n setIsBranchOpen(status => !status)}\n aria-haspopup=\"true\"\n aria-expanded={isBranchOpen}\n aria-labelledby=\"statusFilterLabel\"\n >\n \n \n
\n {isBranchOpen && }\n
\n
\n
\n {t(\"Name\")}\n
\n
\n Benefit\n
\n
\n {transformTokenCurrencyIcons()}\n {t(\"Price\")}\n
\n
\n
\n
\n {t(\"Status\")}\n setIsStatusOpen(status => !status)}\n aria-haspopup=\"true\"\n aria-expanded={isStatusOpen}\n aria-labelledby=\"statusFilterLabel\"\n >\n \n \n
\n {isStatusOpen && (\n \n )}\n
\n
\n
\n {t(\"Date\")}\n
\n
\n );\n};\n","import React, { useRef, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport useClickOutside from \"../../../../../../hooks/useClickOutside\";\nimport { setFilters } from \"../../../../../../actions/hr/refunds.actions\";\nimport { RefundBranchCodeFilter } from \"../../../RefundBranchCodeFilter\";\nimport { FilterIconSvg } from \"../../../../../../assets/Icons\";\nimport { RefundStatusFilter } from \"../../../RefundStatusFilter\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const RefundMobileHeader = ({ handleStatus }) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n\n const statusRef = useRef(null);\n const branchRef = useRef(null);\n const [isStatusOpen, setIsStatusOpen] = useState(false);\n const [isBranchOpen, setIsBranchOpen] = useState(false);\n\n useClickOutside([statusRef], () => setIsStatusOpen(false));\n useClickOutside([branchRef], () => setIsBranchOpen(false));\n\n const { filters } = useSelector(state => state.refundsReducer);\n\n const handleOnClickStatus = status => {\n let payload = status;\n if (status === \"all\") payload = undefined;\n\n dispatch(setFilters({ ...filters, status: payload }));\n };\n\n return (\n
\n
\n
\n {t(\"Branch\")}\n setIsBranchOpen(status => !status)}\n aria-haspopup=\"true\"\n aria-expanded={isBranchOpen}\n aria-labelledby=\"statusFilterLabel\"\n >\n \n \n
\n {isBranchOpen && }\n
\n\n
\n
\n {t(\"Status\")}\n setIsStatusOpen(status => !status)}\n aria-haspopup=\"true\"\n aria-expanded={isStatusOpen}\n aria-labelledby=\"statusFilterLabel\"\n >\n \n \n
\n {isStatusOpen && (\n \n )}\n
\n
\n );\n};\n","import React from \"react\";\nimport { Header } from \"../../../components\";\nimport {\n AcceptedIconSVG,\n EmployeesIcon,\n PendingIconSVG,\n RejectedIconsSVG\n} from \"../../../assets/Icons\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useEffect } from \"react\";\nimport { useState } from \"react\";\nimport { toast } from \"react-toastify\";\nimport { apiService } from \"../../../services/api/api.service\";\nimport { LoadingHistoryItems } from \"../../UserPages/HistoryList/LoadingHistoryItems\";\nimport { EmptyRefunds } from \"./EmptyRefunds\";\nimport {\n setBranchCodes,\n setCheckedPendingItems,\n setRefund,\n setRefunds,\n setToggleReimbursement,\n setTotalCount\n} from \"../../../actions/hr/refunds.actions\";\nimport RefundStyles from \"./RefundStyles\";\nimport { useCallback } from \"react\";\nimport { ShowRefundModal } from \"./RefundModal/ShowRefundModal\";\nimport { RefundPagination } from \"./RefundPagination\";\nimport { toggleSidebarMenu } from \"../../../actions/hr/employees.actions\";\nimport { RefundListIndex } from \"./RefundsList/RefundListIndex\";\nimport bucketsSwap from \"../../../utils/supabaseUtils/BucketsSwap/bucketsSwap\";\nimport { queryBuilder } from \"../../../utils/queryBuilder\";\nimport { getCompanyBranches } from \"../../../services/api/admin/users.service\";\nimport { RefundListSecondLayer } from \"./RefundsList/Desktop/RefundListSecondLayer\";\nimport { ListOfRefundsDesktopHeader } from \"./RefundsList/Desktop/ListOfRefundsDesktopHeader\";\nimport { RefundMobileHeader } from \"./RefundsList/Mobile/RefundMobileHeader/RefundMobileHeader\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Refunds = () => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const [loading, setLoading] = useState(false);\n const {\n filters,\n singleRefund,\n listOfRefunds,\n checkedPendingItems\n } = useSelector(state => state.refundsReducer);\n\n const { isSidebarMenuOpen } = useSelector(state => state.employees);\n const { companyId } = useSelector(state => state.app.user);\n\n const fetchRefunds = async filter => {\n try {\n setLoading(true);\n\n const query = queryBuilder({\n baseQuery: \"/refunds\",\n queryObject: {\n limit: filter.perPage,\n page: filter.page,\n status: filter.status,\n branchCode: filter.branchCode\n }\n });\n\n const refundsResponse = await apiService.get(query);\n\n dispatch(setRefunds(refundsResponse.data?.refunds || []));\n dispatch(setTotalCount(refundsResponse.data?.count || 1));\n } catch (error) {\n toast.error(t(\"failed_to_get_refund_list\"));\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n fetchRefunds(filters);\n }, [filters]);\n\n const getAllBranchesInCompany = async () => {\n const listOfCompanyBranchCodes = await getCompanyBranches(companyId);\n\n dispatch(setBranchCodes(listOfCompanyBranchCodes.branches));\n };\n\n useEffect(() => {\n getAllBranchesInCompany();\n\n return () => {\n dispatch(setCheckedPendingItems([]));\n };\n }, []);\n\n const handleStatus = useCallback(status => {\n const statusObject = {\n null: ,\n true: ,\n false: \n };\n return statusObject[status];\n }, []);\n\n const handleRefundOpen = useCallback(refundItem => {\n dispatch(setRefund(refundItem));\n }, []);\n\n const handleCheckedOnChange = useCallback(\n refundId => {\n let payload = [];\n\n if (checkedPendingItems.includes(refundId)) {\n payload = checkedPendingItems.filter(id => id !== refundId);\n } else {\n payload = [...checkedPendingItems, refundId];\n }\n\n dispatch(setCheckedPendingItems(payload));\n },\n [checkedPendingItems]\n );\n\n const handleCheckAll = useCallback(() => {\n let payload = listOfRefunds\n .filter(refund => refund.status === null)\n .map(x => x.id);\n\n if (checkedPendingItems.length > 0) {\n payload = [];\n }\n\n dispatch(setCheckedPendingItems(payload));\n }, [listOfRefunds, checkedPendingItems]);\n\n const handleBulkAcceptOrDecline = useCallback(\n async acceptOrDecline => {\n try {\n const response = await apiService.post(`/refunds/bulk`, {\n description: \"\",\n ids: checkedPendingItems,\n status: acceptOrDecline\n });\n\n toast.success(response.data.message);\n\n for (const refund of response.data.refunds) {\n await bucketsSwap({\n oldStatus: null,\n status: refund.status,\n fileName: refund.File.name,\n companyId: companyId\n });\n }\n\n fetchRefunds(filters);\n dispatch(setCheckedPendingItems([]));\n } catch (error) {\n toast.error(\n `Failed to get bulk ${acceptOrDecline ? \"accept\" : \"reject\"} refunds.`\n );\n }\n },\n [checkedPendingItems]\n );\n\n const refundListSecondLayerProps = {\n handleCheckAll,\n checkedPendingItems,\n handleBulkAcceptOrDecline\n };\n\n const ShownContent = () => {\n if (loading) {\n return ;\n }\n\n return (\n <>\n {listOfRefunds.length === 0 && (\n \n )}\n \n \n {listOfRefunds.length > 0 ? (\n \n ) : (\n \n )}\n \n );\n };\n\n const handleHamburger = () => {\n dispatch(toggleSidebarMenu(!isSidebarMenuOpen));\n };\n\n return (\n \n
\n \n \n
\n
{ShownContent()}
\n \n
\n
\n
\n );\n};\n\nexport default Refunds;\n","import styled from \"styled-components\";\n\nconst AdminUserHistoryStyles = styled.section`\n .activityContainerHistory {\n width: calc(100% - 210px);\n margin-left: 210px;\n background: #f7f7f7;\n min-height: 100vh;\n overflow-y: auto;\n }\n\n .activityHistoryWrapper {\n margin: 0 auto;\n background: #ffffff;\n border-radius: 8px;\n padding: 30px;\n }\n\n .cardHeight.historyCard {\n transition: all 1s ease-in-out;\n opacity: 0;\n }\n .cardHeight.historyCard.historyCard--show {\n opacity: 1;\n }\n\n #logsCard {\n opacity: 0;\n transition: all 0.4s ease-in-out;\n }\n\n .activityContent {\n padding: 0 30px 30px 30px;\n }\n\n .cardHeight {\n min-height: calc(100vh - 180px);\n }\n\n .header {\n display: flex;\n justify-content: center;\n align-items: center;\n border-bottom: 1px solid #d8d8d8;\n }\n\n .filtersWrapper {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n border-bottom: 1px solid #d8d8d8;\n margin-bottom: 10px;\n gap: 50px;\n margin-bottom: 10px;\n padding-bottom: 20px;\n }\n\n .datePickerHolder {\n padding: 0 0 30px 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .datePickerInput {\n height: 32px;\n width: 194px;\n outline: none;\n text-align: center;\n font-size: 16px;\n font-weight: 600;\n border-color: 1px solid #d8d8d8;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n cursor: pointer;\n position: relative;\n\n &:hover {\n border: 1px solid #1568bf;\n z-index: 2;\n }\n }\n\n input[type=\"date\"]::-webkit-clear-button {\n display: none;\n -webkit-appearance: none;\n }\n\n input[type=\"date\"]::-webkit-inner-spin-button {\n -webkit-appearance: none;\n display: none;\n }\n\n input[type=\"date\"]::-webkit-calendar-picker-indicator {\n -webkit-appearance: none;\n position: absolute;\n left: 5px;\n width: 5px;\n color: rgba(0, 0, 0, 0);\n opacity: 0;\n cursor: pointer;\n }\n\n .previousDayButton {\n position: relative;\n height: 32px;\n margin-right: -1px;\n outline: none;\n border: 1px solid #d8d8d8;\n width: 115px;\n text-align: center;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #fff;\n cursor: pointer;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n background: #1568bf;\n\n &:hover {\n border: 1px solid #1568bf;\n z-index: 2;\n }\n }\n\n .nextDayButton {\n position: relative;\n height: 32px;\n margin-left: -1px;\n outline: none;\n border: 1px solid #d8d8d8;\n width: 115px;\n text-align: center;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #fff;\n cursor: pointer;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n background: #1568bf;\n\n &:hover {\n border: 1px solid #1568bf;\n z-index: 2;\n }\n\n &:disabled {\n color: #4b4b4b;\n background: transparent;\n pointer-events: none;\n cursor: not-allowed;\n opacity: 0.5;\n }\n }\n\n .content {\n padding: 0 0 0 135px;\n }\n\n @media screen and (max-width: 576px) {\n .content {\n padding: 0 0 0 80px;\n }\n }\n\n .listContainer {\n padding-left: 26px;\n min-height: 460px;\n border-left: 1px solid #d6d6d6;\n }\n\n .list {\n padding: 20px 0;\n }\n\n .item {\n margin-bottom: 20px;\n position: relative;\n display: flex;\n align-items: center;\n }\n\n .dotAndDateContainer {\n position: absolute;\n left: -79px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 60px;\n\n .time {\n font-size: 12px;\n color: #a8a8a8;\n }\n\n .outerDot {\n width: 15px;\n height: 15px;\n border-radius: 15px;\n background: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .innerDot {\n width: 7px;\n height: 7px;\n border-radius: 7px;\n background: #1568bf;\n }\n }\n\n .dotAndDateContainerHistory {\n position: absolute;\n left: -114px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 106px;\n\n .time {\n font-size: 12px;\n color: #493f3f;\n }\n\n .outerDot {\n width: 15px;\n height: 15px;\n border-radius: 15px;\n background: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .innerDot {\n width: 7px;\n height: 7px;\n border-radius: 7px;\n background: #1568bf;\n }\n }\n\n .logAndAvatar {\n display: flex;\n align-items: center;\n\n .log {\n margin-left: 5px;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n color: #4b4b4b;\n position: relative;\n }\n }\n\n .historyItemParagraph {\n background: #ffffff;\n position: absolute;\n top: -28px;\n left: 52px;\n width: 100px;\n border: 1px solid;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 4px;\n opacity: 0;\n }\n\n .historyItemParagraph--shown {\n opacity: 1;\n }\n\n .logAndAvatar--history {\n cursor: default;\n }\n\n .logAndAvatarHistoryPopup {\n opacity: 0;\n position: absolute;\n right: 0;\n top: -38px;\n display: flex;\n align-items: center;\n text-align: center;\n background: white;\n border-radius: 4px;\n padding: 4px 6px;\n -webkit-transition: opacity 0.5s ease-in-out;\n transition: opacity 0.5s ease-in-out;\n align-items: center;\n box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.5);\n\n .arrow {\n position: absolute;\n left: 7%;\n top: 26px;\n width: 0;\n height: 0;\n border-left: 7px solid transparent;\n border-right: 5px solid transparent;\n border-top: 9px solid #fff;\n }\n }\n\n .logAndAvatarHistoryPopupWrapper {\n cursor: pointer;\n position: relative;\n font-size: 12px;\n\n &:hover {\n .logAndAvatarHistoryPopup {\n opacity: 1;\n }\n }\n }\n\n .text {\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n text-align: center;\n color: #4b4b4b;\n margin-top: 30px;\n }\n`;\n\nexport default AdminUserHistoryStyles;\n","import React from \"react\";\nimport ActivityLog from \"../../../assets/images/activity-log.png\";\n\nexport const EmptyHistory = () => {\n return (\n \n \"History\n

User does not have history.

\n \n );\n};\n","const adminActionsNamespace = \"[admin]: \";\n\nconst adminActionTypes = {\n SET_ADMIN_USER_FILTERS: `${adminActionsNamespace}SET_ADMIN_USER_FILTERS`,\n SET_ADMIN_USER_DATA: `${adminActionsNamespace}SET_ADMIN_USER_DATA`\n};\n\nexport default adminActionTypes;\n","import adminActionTypes from \"../../constants/actionTypes/admin/admin.constants\";\n\nconst setAdminFilters = payload => {\n return { type: adminActionTypes.SET_ADMIN_USER_FILTERS, payload };\n};\n\nconst setAdminUserData = payload => {\n return { type: adminActionTypes.SET_ADMIN_USER_DATA, payload };\n};\n\nexport { setAdminFilters, setAdminUserData };\n","import styled from \"styled-components\";\n\nconst AdminUserHistoryContentStyles = styled.section`\n .adminUserHistoryHeader {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .adminUserHistoryHeaderTokens {\n display: flex;\n gap: 10px;\n flex-direction: column;\n width: 230px;\n padding: 10px;\n box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;\n border-radius: 20px;\n\n .adminUserHistoryHeaderTokenItem {\n display: flex;\n align-items: center;\n gap: 5px;\n color: #757575;\n font-size: 14px;\n }\n }\n }\n\n .adminUserHistoryBody {\n margin-top: 30px;\n display: flex;\n width: 100%;\n\n .adminUserHistoryBodyItem {\n position: relative;\n height: 50px;\n padding-left: 135px;\n\n .adminUserHistoryBodyItemLeft {\n position: absolute;\n left: -114px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 106px;\n height: 100%;\n\n .time {\n font-size: 12px;\n color: #493f3f;\n }\n\n .outerDot {\n width: 15px;\n height: 15px;\n border-radius: 15px;\n background: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .innerDot {\n width: 7px;\n height: 7px;\n border-radius: 7px;\n background: #1568bf;\n }\n }\n\n .adminUserHistoryBodyItemRight {\n display: flex;\n align-items: center;\n height: 100%;\n flex-wrap: wrap;\n\n .adminUserHistoryBodyItemRightText {\n color: #493f3f;\n }\n }\n }\n }\n\n .adminUserHistoryBodyItemWrapper {\n border-left: 1px solid rgb(214, 214, 214);\n padding-left: 15px;\n height: 100%;\n position: relative;\n }\n`;\n\nexport default AdminUserHistoryContentStyles;\n","import React, { useState } from \"react\";\nimport { TokenIcon } from \"../../../../assets/Icons\";\nimport { MultiselectInput } from \"../../../../components\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setAdminFilters } from \"../../../../actions/admin/admin.actions\";\nimport {\n transformTokenCurrencyIcons,\n transformTokensToRsd\n} from \"../../../../utils/transformTokensToRsd\";\n\nconst listOfOptions = [\n { id: 1, name: \"Budget\" },\n { id: 2, name: \"Subscription\" }\n];\n\nexport const AdminUserHistoryHeader = ({ tokens }) => {\n const dispatch = useDispatch();\n\n const { filters } = useSelector(state => state.admin);\n\n const handleSetHistoryFilter = options => {\n dispatch(setAdminFilters({ ...filters, page: 1, type: options || [] }));\n };\n\n const isInRSD = localStorage.getItem(\"isValueInRsd\");\n\n return (\n
\n
\n

\n Total Budget: {transformTokensToRsd(tokens.totalTokens)}{\" \"}\n {transformTokenCurrencyIcons()}\n

\n

\n Remaining Budget:{\" \"}\n {transformTokensToRsd(tokens.remainingTokens)}{\" \"}\n {transformTokenCurrencyIcons()}\n

\n
\n
\n \n
\n
\n );\n};\n","import moment from \"moment\";\nimport React from \"react\";\n\nconst formatDate = dateInIsoString => {\n return moment(dateInIsoString).format(\"DD.MM.YYYY HH:mm\");\n};\n\nexport const AdminUserHistoryBody = props => {\n const { listOfData } = props;\n\n return (\n
\n
\n {listOfData.map(adminHistoryItem => {\n return Object.entries(adminHistoryItem).map(([key, value]) => {\n return (\n
\n
\n
\n

{formatDate(key)}

\n
\n
\n
\n
\n
\n

{value}

\n
\n
\n
\n );\n });\n })}\n
\n
\n );\n};\n","import React from \"react\";\nimport AdminUserHistoryContentStyles from \"./AdminUserHistoryContentStyles\";\nimport { AdminUserHistoryHeader } from \"./AdminUserHistoryHeader\";\nimport { AdminUserHistoryBody } from \"./AdminUserHistoryBody\";\nimport Pagination from \"react-pagination-js\";\nimport \"react-pagination-js/dist/styles.css\";\nimport { useDispatch } from \"react-redux\";\nimport { setAdminFilters } from \"../../../../actions/admin/admin.actions\";\n\nexport const AdminUserHistoryContent = props => {\n const dispatch = useDispatch();\n const { adminSingleUserData, filters } = props;\n\n const handlePageChange = page => {\n dispatch(setAdminFilters({ ...filters, page }));\n };\n\n return (\n <>\n \n \n \n \n \n );\n};\n","import React, { useCallback, useState } from \"react\";\nimport { Header } from \"../../../components\";\nimport AdminUserHistoryStyles from \"./AdminUserHistoryStyles\";\nimport { EmptyHistory } from \"./EmptyHistory\";\nimport { useEffect } from \"react\";\nimport { toast } from \"react-toastify\";\nimport { apiService } from \"../../../services/api/api.service\";\nimport {\n useHistory,\n useParams\n} from \"react-router-dom/cjs/react-router-dom.min\";\nimport { LoadingHistoryItems } from \"../../UserPages/HistoryList/LoadingHistoryItems\";\nimport { queryBuilder } from \"../../../utils/queryBuilder\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setAdminUserData } from \"../../../actions/admin/admin.actions\";\nimport { AdminUserHistoryContent } from \"./AdminUserHistoryContent/AdminUserHistoryContent\";\nimport { isEmpty } from \"../../../utils/helpers/isEmpty\";\nimport AdminUserHistoryContentStyles from \"./AdminUserHistoryContent/AdminUserHistoryContentStyles\";\nimport { AdminUserHistoryHeader } from \"./AdminUserHistoryContent/AdminUserHistoryHeader\";\nimport { useTranslation } from \"react-i18next\";\n\nconst AdminUserHistory = () => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const history = useHistory();\n\n const [isLoading, setIsLoading] = useState(false);\n const [foundUser, setFoundUser] = useState(null);\n\n const { adminSingleUserData, filters } = useSelector(state => state.admin);\n\n const { id: userId } = useParams();\n\n const getUserInfo = useCallback(\n async userId => {\n try {\n setIsLoading(true);\n const response = await apiService.get(`/users/${userId}`);\n setFoundUser(response.data);\n } catch (error) {\n toast.error(t(\"failed_to_get_user_info\"));\n } finally {\n setIsLoading(false);\n }\n },\n [userId, isLoading]\n );\n\n const getAdminHistoryInfo = useCallback(\n async (userId, filters) => {\n setIsLoading(true);\n\n try {\n const formattedOptionsFilter = filters.type\n .map(option => {\n return option.name.toLowerCase();\n })\n .join(\",\");\n\n const query = queryBuilder({\n baseQuery: `/users/admin/history/${userId}`,\n queryObject: {\n page: filters.page,\n limit: filters.perPage,\n type: formattedOptionsFilter\n }\n });\n const response = await apiService.get(query);\n dispatch(setAdminUserData(response.data));\n } catch (error) {\n toast.error(t(\"failed_to_get_user_info\"));\n } finally {\n setIsLoading(false);\n }\n },\n [userId, filters]\n );\n\n useEffect(() => {\n getUserInfo(userId);\n }, [userId]);\n\n useEffect(() => {\n getAdminHistoryInfo(userId, filters);\n }, [userId, filters]);\n\n const ShownContent = () => {\n if (isLoading) return ;\n\n if (!isEmpty(adminSingleUserData)) {\n return (\n \n \n \n \n );\n }\n\n return ;\n };\n\n const shouldRedirectToOriginal = () => history.push(\"/users\");\n return (\n \n
\n \n
\n
{ShownContent()}
\n
\n
\n
\n );\n};\n\nexport default AdminUserHistory;\n","export const isEmpty = obj =>\n [Object, Array].includes((obj || {}).constructor) &&\n !Object.entries(obj || {}).length;\n","import styled from \"styled-components\";\n\nconst PreviewHRBenefitStyles = styled.section`\n height: 100vh;\n\n .previewHrBenefitsContainer {\n width: calc(100% - 210px);\n margin-left: 210px;\n background: whitesmoke;\n min-height: 100vh;\n padding: 0 30px 30px 30px;\n\n header {\n padding: 0;\n }\n }\n\n .previewHrBenefitsContent {\n padding-bottom: 20px;\n background: white;\n border-radius: 4px;\n box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2),\n 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 4px 5px 0 rgba(0, 0, 0, 0.14);\n }\n\n .canvas-padding {\n padding: 80px;\n }\n\n .html2canvas-container {\n width: 3000px !important;\n height: 3000px !important;\n }\n\n .buttonsContainer {\n display: flex;\n justify-content: space-between;\n }\n\n .submitContainer {\n display: flex;\n }\n`;\n\nexport default PreviewHRBenefitStyles;\n","import styled from \"styled-components\";\n\nconst PreviewHRBenefitBodyStyles = styled.div`\n max-width: 1400px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n .canvas-padding {\n padding: 80px;\n }\n\n .html2canvas-container {\n width: 3000px !important;\n height: 3000px !important;\n }\n`;\n\nexport default PreviewHRBenefitBodyStyles;\n","import React, { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useParams } from \"react-router-dom/cjs/react-router-dom.min\";\nimport * as benefitGroupService from \"../../../../services/api/admin/benefitGroups.service\";\nimport * as employeeBenefitsService from \"../../../../services/api/employee/employeeBenefits.services\";\nimport PreviewHRBenefitBodyStyles from \"./PreviewHRBenefitBodyStyles\";\nimport { BenefitCard, Button, Card } from \"../../../../components\";\nimport BenefitSubscribe from \"../../../EmployeePages/EmployeeBenefits/benefitSubscribe\";\nimport * as actionCreators from \"../../../../actions/employee/employeeBenefits.actions\";\nimport { toast } from \"react-toastify\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport html2canvas from \"html2canvas\";\n\nexport const PreviewHRBenefitBody = props => {\n const { benefitGroup } = props;\n\n const dispatch = useDispatch();\n const { t } = useTranslation();\n\n const [isDisabled, setIsDisabled] = useState(false);\n const [usedBenefits, setUsedBenefits] = useState([]);\n\n const { id: benefitGroupId } = useParams();\n\n const chosenBenefitGroup = useSelector(\n state => state.employeeBenefitsPage.pageFrontEndStates.chosenBenefitGroup\n );\n\n const getBenefitGroupForPreview = async benefitGroupId => {\n try {\n const response = await benefitGroupService.getBenefitGroupForPreview(\n benefitGroupId\n );\n\n dispatch(actionCreators.setChosenBenefitGroup(response));\n } catch (error) {\n toast.error(error);\n }\n };\n\n const fetchAlreadyUsedBenefits = async benefitGroupId => {\n try {\n const response = await employeeBenefitsService.getAlreadyUsedBenefits(\n benefitGroupId\n );\n\n setUsedBenefits(response.benefits);\n } catch (error) {\n toast.error(t(\"failed_to_get_used_benefits\"));\n }\n };\n\n const downloadImage = (blob, fileName, canvas) => {\n const fakeLink = window.document.createElement(\"a\");\n fakeLink.style = \"display: none\";\n fakeLink.download = fileName;\n\n fakeLink.href = blob;\n\n document.body.appendChild(fakeLink);\n fakeLink.click();\n document.body.removeChild(fakeLink);\n\n fakeLink.remove();\n setIsDisabled(false);\n };\n\n const downloadPreview = async () => {\n setIsDisabled(true);\n const previewCanvas = document.getElementById(\"preview-wrapper\");\n const canvas = await html2canvas(previewCanvas, {\n allowTaint: true,\n useCORS: true,\n windowHeight: (window.outerHeight + window.innerHeight) * 4,\n scale: 2\n });\n const image = canvas.toDataURL(\"image/png\", 1.0);\n\n downloadImage(image, \"preview.png\", previewCanvas);\n };\n\n useEffect(() => {\n getBenefitGroupForPreview(benefitGroupId);\n fetchAlreadyUsedBenefits(benefitGroupId);\n }, [benefitGroupId]);\n\n return (\n
\n \n {chosenBenefitGroup && (\n <>\n \n {}}\n isPreview\n />\n \n \n \n
\n\n
\n downloadPreview()}\n disabled={isDisabled}\n >\n {t(\"download\")}\n \n
\n \n )}\n \n \n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSelector } from \"react-redux\";\nimport { Header } from \"../../../components\";\nimport PreviewHRBenefitStyles from \"./PreviewHRBenefitStyles\";\nimport { PreviewHRBenefitBody } from \"./PreviewHRBenefitBody/PreviewHRBenefitBody\";\nimport { useHistory } from \"react-router-dom/cjs/react-router-dom.min\";\n\nexport const PreviewProviders = () => {\n const { t } = useTranslation();\n const history = useHistory();\n\n const benefitGroup = useSelector(\n state => state.benefits.editPageState.benefitGroup\n );\n const shouldRedirectToOriginal = () => history.push(\"/providers\");\n\n return (\n \n
\n \n \n
\n
\n );\n};\n","import {\n EmployeeBenefits,\n HrDashboard,\n HrBenefits,\n EditHrBenefit,\n Employees,\n EmployeeDetails,\n EditEmployee,\n LocalBenefits,\n Onboarding,\n Settings,\n Providers,\n SuperAdminDashboard,\n Companies,\n CompanyDetails,\n EditCompany,\n UsersList,\n UserDetails,\n EditUser,\n SuperAdminSettings,\n Notifications,\n Activity,\n Login,\n ForgotPassword,\n ResetPassword,\n SetPassword,\n PresentationPage,\n UserHistory,\n Refunds,\n AdminUserHistory\n} from \"../pages\";\nimport PreviewHRBenefit from \"../pages/HrPages/PreviewHRBenefit/PreviewHRBenefit\";\nimport { PreviewProviders } from \"../pages/HrPages/PreviewHRBenefit/PreviewProviders\";\n\nconst adminRoutes = [\n {\n path: \"/\",\n component: SuperAdminDashboard,\n exact: true,\n fullLayout: false\n },\n {\n path: \"/providers\",\n component: Providers,\n exact: false,\n fullLayout: false\n },\n {\n path: \"/benefits/preview/:id\",\n component: PreviewProviders,\n exact: false,\n fullLayout: false\n },\n {\n path: \"/activity\",\n component: Activity,\n exact: false,\n fullLayout: false\n },\n {\n path: \"/companies/edit/:id\",\n component: EditCompany,\n exact: false,\n fullLayout: false\n },\n {\n path: \"/companies/:id\",\n component: CompanyDetails,\n exact: false,\n fullLayout: false\n },\n {\n path: \"/companies\",\n component: Companies,\n exact: true,\n fullLayout: false\n },\n {\n path: \"/users\",\n component: UsersList,\n exact: true,\n fullLayout: false\n },\n {\n path: \"/users/:id\",\n component: UserDetails,\n exact: true,\n fullLayout: false\n },\n {\n path: \"/users/edit/:id/:company\",\n component: EditUser,\n exact: true,\n fullLayout: false\n },\n {\n path: \"/settings\",\n component: SuperAdminSettings,\n exact: false,\n fullLayout: false\n },\n {\n path: \"/notifications\",\n component: Notifications,\n exact: false,\n fullLayout: false\n },\n {\n path: \"/users/history/:id\",\n component: AdminUserHistory,\n exact: true,\n fullLayout: false\n }\n];\n\nconst hrRoutes = [\n {\n path: \"/\",\n component: HrDashboard,\n exact: true,\n fullLayout: false\n },\n {\n path: \"/benefits\",\n component: HrBenefits,\n exact: true,\n fullLayout: false\n },\n {\n path: \"/custom-budgets\",\n component: HrDashboard,\n exact: true,\n fullLayout: false\n },\n {\n path: \"/benefits/edit/:id\",\n component: EditHrBenefit,\n exact: false,\n fullLayout: false\n },\n {\n path: \"/benefits/preview/:id\",\n component: PreviewHRBenefit,\n exact: false,\n fullLayout: false\n },\n {\n path: \"/company-benefits\",\n component: LocalBenefits,\n exact: false,\n fullLayout: false\n },\n {\n path: \"/employees/edit/:id\",\n component: EditEmployee,\n exact: false,\n fullLayout: false\n },\n {\n path: \"/employees/:id\",\n component: EmployeeDetails,\n exact: false,\n fullLayout: false\n },\n {\n path: \"/employees\",\n component: Employees,\n exact: true,\n fullLayout: false\n },\n {\n path: \"/refunds\",\n component: Refunds,\n exact: true,\n fullLayout: false\n },\n {\n path: \"/settings\",\n component: Settings,\n exact: false,\n fullLayout: false\n },\n {\n path: \"/onboarding\",\n component: Onboarding,\n exact: false,\n fullLayout: true\n }\n];\n\nconst memberRoutes = [\n {\n path: \"/\",\n component: EmployeeBenefits,\n exact: true,\n fullLayout: true\n },\n {\n path: \"/history\",\n component: UserHistory,\n exact: true,\n fullLayout: true\n }\n];\n\nconst publicRoutes = [\n {\n path: \"/\",\n component: Login,\n exact: true,\n fullLayout: true\n },\n {\n path: \"/forgot-password\",\n component: ForgotPassword,\n exact: false,\n fullLayout: true\n },\n {\n path: \"/reset-password\",\n component: ResetPassword,\n exact: false,\n fullLayout: true\n },\n {\n path: \"/set-password\",\n component: SetPassword,\n exact: false,\n fullLayout: true\n },\n {\n path: \"/presentation-page\",\n component: PresentationPage,\n exact: false,\n fullLayout: true\n }\n];\n\nexport const routesConfig = {\n member: memberRoutes,\n hr: hrRoutes,\n admin: adminRoutes,\n public: publicRoutes\n};\n","import React from \"react\";\nimport PreviewHRBenefitStyles from \"./PreviewHRBenefitStyles\";\nimport { Header } from \"../../../components\";\nimport { useTranslation } from \"react-i18next\";\nimport { PreviewHRBenefitBody } from \"./PreviewHRBenefitBody/PreviewHRBenefitBody\";\nimport { useSelector } from \"react-redux\";\nimport { useHistory } from \"react-router-dom/cjs/react-router-dom.min\";\n\nconst PreviewHRBenefit = () => {\n const { t } = useTranslation();\n const history = useHistory();\n\n const benefitGroup = useSelector(\n state => state.benefits.editPageState.benefitGroup\n );\n\n const shouldRedirectToOriginal = () => history.goBack();\n\n return (\n \n
\n \n \n
\n
\n );\n};\n\nexport default PreviewHRBenefit;\n","export const updateObject = (oldObject, updatedValues) => {\n return {\n ...oldObject,\n ...updatedValues\n };\n};\n","import User from \"../models/domain/User.entity\";\nimport { routesConfig } from \"../config/router.config\";\nimport { getItem, setItem } from \"../services/localStorage.service\";\nimport { BENEFIT_ROLE } from \"../constants/localStorage.constants\";\nimport * as actionTypes from \"../constants/actionTypes/app.constants\";\nimport { updateObject } from \"../services/updateObject\";\n\nconst initialState = {\n user: new User(),\n routes: routesConfig[getItem(BENEFIT_ROLE)]\n ? routesConfig[getItem(BENEFIT_ROLE)]\n : routesConfig[\"public\"],\n lang: \"en\",\n notifications: [],\n isDownloading: false,\n downloadPercent: 0,\n cities: []\n};\n\nconst appReducer = (state = initialState, action) => {\n switch (action.type) {\n case actionTypes.LOGIN:\n return login(state, action);\n case actionTypes.SWITCH_USER_ROLE:\n return switchUserRole(state, action);\n case actionTypes.SET_USER:\n return setUser(state, action);\n case actionTypes.FINISH_USER_ONBOARDING:\n return finishUserOnboarding(state, action);\n case actionTypes.FINISH_EMPLOYEE_ONBOARDING:\n return finishEmployeeOnboarding(state, action);\n case actionTypes.SET_USER_TOKENS:\n return setEmployeeTokens(state, action);\n case actionTypes.SET_USER_NOTIFICATIONS:\n return setSystemNotifications(state, action);\n case actionTypes.POP_SYSTEM_NOTIFICATIONS:\n return popSystemNotifications(state, action);\n case actionTypes.USER_ACCEPT_PRIVACY_POLICY:\n return acceptPrivacyPolicy(state, action);\n case actionTypes.LOGOUT:\n return logout(state, action);\n case actionTypes.SYNC_USER:\n return syncUser(state, action);\n case actionTypes.SET_USER_THEMES:\n return setUserThemes(state, action);\n case actionTypes.IS_REFUND_DOWNLOADING:\n return setIsRefundDownloading(state, action);\n case actionTypes.SET_DOWNLOAD_PERCENTAGE:\n return setDownloadPercentage(state, action);\n case actionTypes.SET_CITIES:\n return setCities(state, action);\n }\n return state;\n};\n\nconst setCities = (state, action) => {\n return updateObject(state, { cities: action.payload });\n};\n\nconst setDownloadPercentage = (state, action) => {\n return updateObject(state, { downloadPercent: action.payload });\n};\n\nconst setIsRefundDownloading = (state, action) => {\n return updateObject(state, { isDownloading: action.payload });\n};\n\nconst login = (state, action) => {\n return updateObject(state, {\n user: action.payload\n });\n};\n\n/**\n * Enables switching of user roles.\n * Sets user authenticatedRole to new role.\n * Sets routesConfig to new value.\n * @param {object} state\n * @param {object} payload - Role object, destructured.\n * @returns {object}\n */\nconst switchUserRole = (state, { roleObject }) => {\n return updateObject(state, {\n user: updateObject(state.user, {\n authenticatedRole: roleObject\n }),\n routes: routesConfig[roleObject.key]\n });\n};\n\nconst setUser = (state, action) => {\n return updateObject(state, {\n user: action.payload\n });\n};\n\nconst logout = (state, action) => {\n localStorage.removeItem(\"isValueInRsd\");\n return updateObject(state, {\n user: new User(),\n routes: routesConfig[\"public\"]\n });\n};\n\nconst finishUserOnboarding = (state, action) => {\n return updateObject(state, {\n user: updateObject(state.user, {\n isOnboardingDone: true\n })\n });\n};\n\nconst finishEmployeeOnboarding = (state, action) => {\n return updateObject(state, {\n user: updateObject(state.user, {\n employeeOnboarding: true\n })\n });\n};\n\nconst acceptPrivacyPolicy = (state, action) => {\n return updateObject(state, {\n user: updateObject(state.user, {\n hasAcceptedPrivacyPolicy: true\n })\n });\n};\n\nconst setEmployeeTokens = (state, { employeeTokens }) => {\n return updateObject(state, {\n user: updateObject(state.user, {\n usedTokens: employeeTokens.usedTokens,\n availableTokens: employeeTokens.availableTokens,\n remainingTokens: employeeTokens.remainingTokens,\n budgetBreakdown: employeeTokens.budgetBreakdown\n })\n });\n};\n\nconst setSystemNotifications = (state, { systemNotifications }) => {\n return updateObject(state, {\n notifications: systemNotifications\n });\n};\n\nconst popSystemNotifications = state => {\n return updateObject(state, {\n notifications: state.notifications.filter(\n (notification, index) => index > 0\n )\n });\n};\n\nconst syncUser = (state, action) => {\n return updateObject(state, {\n user: updateObject(state.user, {\n isSync: true\n })\n });\n};\n\nconst setUserThemes = (state, { themes }) => {\n return updateObject(state, {\n user: updateObject(state.user, {\n themes: themes\n })\n });\n};\n\nexport default appReducer;\n","import * as actionTypes from \"../../constants/actionTypes/admin/users.constants\";\nimport { updateObject } from \"../../services/updateObject\";\n\nconst initialState = {\n users: [],\n page: 1,\n count: 1,\n pages: 1,\n search: \"\"\n};\n\nconst usersReducer = (state = initialState, action) => {\n switch (action.type) {\n case actionTypes.SET_USERS:\n return setUsers(state, action);\n case actionTypes.SET_PAGE:\n return setPage(state, action);\n case actionTypes.SEARCH_CHANGE:\n return setSearch(state, action);\n }\n return state;\n};\n\nconst setUsers = (state, action) => {\n return updateObject(state, {\n users: action.payload.users,\n count: action.payload.count,\n pages: action.payload.pages\n });\n};\n\nconst setPage = (state, action) => {\n return updateObject(state, {\n page: action.payload\n });\n};\n\nconst setSearch = (state, action) => {\n return updateObject(state, {\n search: action.payload\n });\n};\n\nexport default usersReducer;\n","import { Tag } from \"../../models/domain\";\nimport * as actionTypes from \"../../constants/actionTypes/admin/benefitTags.constants\";\nimport { updateObject } from \"../../services/updateObject\";\n\nconst initalState = {\n tags: []\n};\n\nconst benefitTagsReducer = (state = initalState, action) => {\n switch (action.type) {\n case actionTypes.SET_BENEFIT_TAGS:\n return setBenefitTags(state, action);\n case actionTypes.ADD_BENEFIT_TAG:\n return addBenefitTag(state, action);\n case actionTypes.EDIT_BENEFIT_TAG:\n return editBenefitTag(state, action);\n case actionTypes.DELETE_BENEFIT_TAG:\n return deleteBenefitTag(state, action);\n }\n\n return state;\n};\n\nconst setBenefitTags = (state, action) => {\n return updateObject(state, {\n tags: action.benefitTags.tags.map(benefitTag =>\n typeof benefitTag === Tag ? benefitTag : new Tag(benefitTag)\n )\n });\n};\n\nconst addBenefitTag = (state, action) => {\n return updateObject(state, {\n tags: [...state.tags, new Tag(action.benefitTag)]\n });\n};\n\nconst editBenefitTag = (state, action) => {\n return updateObject(state, {\n tags: state.tags.map(tag =>\n tag.id === action.benefitTag.id ? new Tag(action.benefitTag) : tag\n )\n });\n};\n\nconst deleteBenefitTag = (state, action) => {\n return updateObject(state, {\n tags: state.tags.filter(tag => tag.id !== action.id)\n });\n};\n\nexport default benefitTagsReducer;\n","import { Tag } from \"../../models/domain\";\nimport * as actionTypes from \"../../constants/actionTypes/admin/companyTags.constants\";\nimport { updateObject } from \"../../services/updateObject\";\n\nconst initalState = {\n tags: []\n};\n\nconst companyTagsReducer = (state = initalState, action) => {\n switch (action.type) {\n case actionTypes.SET_COMPANY_TAGS:\n return setCompanyTags(state, action);\n case actionTypes.ADD_COMPANY_TAG:\n return addCompanyTag(state, action);\n case actionTypes.EDIT_COMPANY_TAG:\n return editCompanyTag(state, action);\n case actionTypes.DELETE_COMPANY_TAG:\n return deleteCompanyTag(state, action);\n }\n\n return state;\n};\n\nconst setCompanyTags = (state, action) => {\n return updateObject(state, {\n tags: action.companyTags.tags.map(companyTag =>\n typeof companyTag === Tag ? companyTag : new Tag(companyTag)\n )\n });\n};\n\nconst addCompanyTag = (state, action) => {\n return updateObject(state, {\n tags: [...state.tags, new Tag(action.companyTag)]\n });\n};\n\nconst editCompanyTag = (state, action) => {\n return updateObject(state, {\n tags: state.tags.map(tag =>\n tag.id === action.companyTag.id ? new Tag(action.companyTag) : tag\n )\n });\n};\n\nconst deleteCompanyTag = (state, action) => {\n return updateObject(state, {\n tags: state.tags.filter(tag => tag.id !== action.id)\n });\n};\n\nexport default companyTagsReducer;\n","import Category from '../../models/domain/Category.entity';\nimport * as actionTypes from '../../constants/actionTypes/admin/categories.constants';\nimport { updateObject } from '../../services/updateObject';\n\nconst initialState = {\n categories: []\n} \n\nconst categoriesReducer = (state = initialState, action) => {\n\tswitch (action.type) {\n\t\tcase actionTypes.SET_CATEGORIES:\n\t\t\treturn setCategories(state, action);\n\t\tcase actionTypes.ADD_CATEGORY:\n\t\t\treturn addCategory(state, action);\n\t\tcase actionTypes.EDIT_CATEGORY:\n return editCategory(state, action);\n\t\tcase actionTypes.DELETE_CATEGORY:\n\t\t\treturn deleteCategory(state, action);\n\t}\n\n return state;\n}\n\nconst setCategories = (state, action) => {\n return updateObject(state, {\n categories: action.categories.map(category => typeof category === Category ? category : new Category(category))\n })\n}\n\nconst addCategory = (state, action) => {\n return updateObject(state, {\n categories: [...state.categories, new Category(action.category)]\n })\n}\n\nconst editCategory = (state, action) => {\n return updateObject(state, {\n categories: state.categories.map(category => category.id === action.category.id ? new Category(action.category) : category)\n })\n}\n\nconst deleteCategory = (state, action) => {\n return updateObject(state, {\n categories: state.categories.filter(category => category.id !== action.id)\n })\n}\n\nexport default categoriesReducer;","import { Company, Tag } from \"../../models/domain\";\nimport * as actionTypes from \"../../constants/actionTypes/admin/companies.constants\";\nimport { updateObject } from \"../../services/updateObject\";\n\nconst initialState = {\n allTags: [new Tag()],\n selectedCompany: new Company({ id: \"all\", name: \"All\" }),\n singleCompany: new Company(),\n companies: [new Company()],\n page: 1,\n count: 0,\n search: \"\"\n};\n\nconst companiesReducer = (state = initialState, action) => {\n switch (action.type) {\n case actionTypes.SET_COMPANIES:\n return setCompanies(state, action);\n case actionTypes.ADD_NEW_COMPANY:\n return addNewCompany(state, action);\n case actionTypes.DELETE_COMPANY:\n return deleteCompany(state, action);\n case actionTypes.SET_SELECTED_COMPANY:\n return setSelectedCompany(state, action);\n case actionTypes.SET_PAGE:\n return setPage(state, action);\n case actionTypes.SEARCH_CHANGE:\n return setSearch(state, action);\n }\n\n return state;\n};\n\nconst setCompanies = (state, { companies, count }) => {\n return updateObject(state, {\n companies: companies,\n count: count\n });\n};\n\nconst addNewCompany = (state, { company }) => {\n return updateObject(state, {\n companies: [...state.companies, company]\n });\n};\n\nconst deleteCompany = (state, { id }) => {\n return updateObject(state, {\n companies: state.companies.filter(company => company.id !== id)\n });\n};\n\nconst setSelectedCompany = (state, { id }) => {\n return updateObject(state, {\n selectedCompany: state.companies.find(company => company.id === id)\n });\n};\n\nconst setPage = (state, { page }) => {\n return updateObject(state, {\n page: page\n });\n};\n\nconst setSearch = (state, { search }) => {\n return updateObject(state, {\n search: search\n });\n};\n\nexport default companiesReducer;\n","import { BenefitGroup, Provider, Benefit } from \"../../models/domain\";\nimport * as actionTypes from \"../../constants/actionTypes/admin/providers.constants\";\nimport { updateObject } from \"../../services/updateObject\";\nimport * as modelMapperService from \"../../models/modelMapper.service\";\n\nconst initalState = {\n providers: [],\n page: 1,\n count: 0,\n search: '',\n};\n\nconst providersReducer = (state = initalState, action) => {\n switch (action.type) {\n case actionTypes.SET_INITAL_PROVIDERS:\n return setInitProviders(state, action);\n case actionTypes.SET_PROVIDERS_PAGE:\n return setProvidersPage(state, action);\n case actionTypes.SET_PROVIDERS_SEARCH:\n return setProvidersSearch(state, action);\n case actionTypes.EDIT_PROVIDER:\n return editProvider(state, action);\n case actionTypes.REMOVE_PROVIDER:\n return removeProvider(state, action);\n case actionTypes.ADD_BENEFIT_GROUP:\n return addBenefitGroup(state, action);\n case actionTypes.EDIT_BENEFIT_GROUP:\n return editBenefitGroup(state, action);\n case actionTypes.REMOVE_BENEFIT_GROUP:\n return deleteBenefitGroup(state, action);\n case actionTypes.ADD_BENEFIT:\n return addBenefit(state, action);\n case actionTypes.EDIT_BENEFIT:\n return editBenefit(state, action);\n case actionTypes.REMOVE_BENEFIT:\n return deleteBenefit(state, action);\n }\n\n return state;\n};\n\nconst setInitProviders = (state, { providers, count }) => {\n return updateObject(state, {\n providers: providers,\n count: count\n });\n};\n\nconst setProvidersPage = (state, { page }) => {\n return updateObject(state, {\n page: page\n });\n};\n\nconst setProvidersSearch = (state, { search }) => {\n return updateObject(state, {\n search: search\n });\n}\n\nconst editProvider = (state, { provider }) => {\n return updateObject(state, {\n providers: state.providers.map(prov =>\n prov.id === provider.id ? provider : prov\n )\n });\n};\n\nconst removeProvider = (state, { id }) => {\n return updateObject(state, {\n providers: state.providers.filter(provider => provider.id !== id)\n });\n};\n\nconst addBenefitGroup = (state, { providerId, benefitGroup }) => {\n return updateObject(state, {\n providers: state.providers.map(provider =>\n provider.id === providerId\n ? updateObject(provider, {\n benefitGroups: [...provider.benefitGroups, benefitGroup]\n })\n : provider\n )\n });\n};\n\nconst editBenefitGroup = (state, { providerId, benefitGroup }) => {\n return updateObject(state, {\n providers: state.providers.map(provider =>\n provider.id === providerId\n ? updateObject(provider, {\n benefitGroups: provider.benefitGroups.map(group =>\n group.id === benefitGroup.id ? benefitGroup : group\n )\n })\n : provider\n )\n });\n};\n\nconst deleteBenefitGroup = (state, { providerId, benefitGroupId }) => {\n return updateObject(state, {\n providers: state.providers.map(provider =>\n provider.id === providerId\n ? updateObject(provider, {\n benefitGroups: provider.benefitGroups.filter(\n benefitGroup => benefitGroup.id !== benefitGroupId\n )\n })\n : provider\n )\n });\n};\n\nconst addBenefit = (state, { providerId, benefitGroupId, benefit }) => {\n return updateObject(state, {\n providers: state.providers.map(provider =>\n provider.id === providerId\n ? updateObject(provider, {\n benefitGroups: provider.benefitGroups.map(benefitGroup =>\n benefitGroup.id === benefitGroupId\n ? updateObject(benefitGroup, {\n benefits: [...benefitGroup.benefits, benefit]\n })\n : benefitGroup\n )\n })\n : provider\n )\n });\n};\n\nconst editBenefit = (state, { providerId, benefitGroupId, benefit }) => {\n return updateObject(state, {\n providers: state.providers.map(provider =>\n provider.id === providerId\n ? updateObject(provider, {\n benefitGroups: provider.benefitGroups.map(benefitGroup =>\n benefitGroup.id === benefitGroupId\n ? updateObject(benefitGroup, {\n benefits: benefitGroup.benefits.map(ben =>\n ben.id === benefit.id ? benefit : ben\n )\n })\n : benefitGroup\n )\n })\n : provider\n )\n });\n};\n\nconst deleteBenefit = (state, { providerId, benefitGroupId, benefitId }) => {\n return updateObject(state, {\n providers: state.providers.map(provider =>\n provider.id === providerId\n ? updateObject(provider, {\n benefitGroups: provider.benefitGroups.map(benefitGroup =>\n benefitGroup.id === benefitGroupId\n ? updateObject(benefitGroup, {\n benefits: benefitGroup.benefits.filter(\n benefit => benefit.id !== benefitId\n )\n })\n : benefitGroup\n )\n })\n : provider\n )\n });\n};\n\nexport default providersReducer;\n","import * as actionTypes from \"../../constants/actionTypes/hr/benefits.constants\";\nimport { updateObject } from \"../../services/updateObject\";\nimport { BenefitGroup } from \"../../models/domain\";\n\nconst initialState = {\n benefitsPage: {\n benefitGroups: [],\n page: 1,\n count: 1\n },\n filters: {\n categories: [],\n chosenCategories: [],\n chosenCategoryIds: [],\n tags: [],\n chosenBenefitTags: [],\n chosenBenefitTagIds: [],\n enabledBenefitGroup: \"\",\n keywordSearch: \"\",\n cities: [],\n chosenCities: [],\n chosenCityIds: []\n },\n editPageState: {\n isBenefitGroupActive: false,\n tiers: [],\n benefitGroup: new BenefitGroup(),\n users: [],\n page: 1,\n count: 1\n }\n};\n\nconst benefitsReducer = (state = initialState, action) => {\n switch (action.type) {\n case actionTypes.SET_HR_BENEFIT_GROUPS:\n return setBenefitGroups(state, action);\n case actionTypes.SET_HR_CATEGORIES_FILTERS:\n return setCategories(state, action);\n case actionTypes.SET_HR_TAGS_FILTERS:\n return setTags(state, action);\n case actionTypes.SET_HR_ENABLED_BENEFIT_GROUP_FILTERS:\n return setEnabledBenefitGroup(state, action);\n case actionTypes.SET_HR_BENEFITS_KEYWORD_SEARCH:\n return setKeywordSearch(state, action);\n case actionTypes.SET_HR_BENEFITS_CHOSEN_CATEGORIES_FILTERS:\n return setChosenCategories(state, action);\n case actionTypes.SET_HR_BENEFITS_CHOSEN_TAGS_FILTERS:\n return setChosenTags(state, action);\n case actionTypes.SET_HR_BENEFITS_FILTERS_TO_DEFAULT:\n return resetBenefitFiltersToDefault(state);\n case actionTypes.SET_HR_BENEFITS_PAGE:\n return setPage(state, action);\n case actionTypes.SET_HR_EDIT_BENEFITS_INITIAL_STATE:\n return setEditHrBenfitsInitialState(state, action);\n case actionTypes.TOGGLE_BENEFIT_GROUP:\n return toggleBenefitGroup(state, action);\n case actionTypes.TOGGLE_BENEFIT_GROUP_INSTALMENTS:\n return toggleBenefitGroupInstalments(state, action);\n case actionTypes.SET_HR_BENEFIT_GROUP_USERS:\n return setHrBenefitGroupUsers(state, action);\n case actionTypes.SET_HR_BENEFIT_GROUP_USERS_PAGE:\n return setHrBenefitGroupUsersPage(state, action);\n case actionTypes.SET_HR_BENEFIT_GROUP_CITIES:\n return setHrBenefitGroupCities(state, action);\n case actionTypes.SET_HR_BENEFIT_GROUP_CHOSEN_CITIES:\n return setHrBenefitGroupChosenCities(state, action);\n case actionTypes.SET_HR_BENEFIT_GROUP_CHOSEN_CITY_IDS:\n return setHrBenefitGroupChosenCityIds(state, action);\n }\n return state;\n};\n\nconst setBenefitGroups = (state, { benefitGroups, count }) => {\n return updateObject(state, {\n benefitsPage: updateObject(state.benefitsPage, {\n benefitGroups,\n count\n })\n });\n};\n\nconst setCategories = (state, { categories }) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n categories\n })\n });\n};\n\nconst setHrBenefitGroupCities = (state, action) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n cities: action.payload\n })\n });\n};\nconst setHrBenefitGroupChosenCities = (state, action) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n chosenCities: action.payload\n })\n });\n};\n\nconst setHrBenefitGroupChosenCityIds = (state, action) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n chosenCityIds: action.payload\n })\n });\n};\n\nconst setTags = (state, { tags }) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n tags\n })\n });\n};\n\nconst setEnabledBenefitGroup = (state, { enabledBenefitGroup }) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n enabledBenefitGroup\n })\n });\n};\n\nconst setKeywordSearch = (state, { keywordSearch }) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n keywordSearch\n })\n });\n};\n\nconst setChosenCategories = (\n state,\n { chosenCategories, chosenCategoryIds }\n) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n chosenCategories,\n chosenCategoryIds\n })\n });\n};\n\nconst setChosenTags = (state, { chosenBenefitTags, chosenBenefitTagIds }) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n chosenBenefitTags,\n chosenBenefitTagIds\n })\n });\n};\n\nconst resetBenefitFiltersToDefault = state => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n categories: [],\n chosenCategories: [],\n chosenCategoryIds: [],\n tags: [],\n chosenBenefitTags: [],\n chosenBenefitTagIds: [],\n enabledBenefitGroup: \"\",\n keywordSearch: \"\"\n })\n });\n};\n\nconst setPage = (state, { page }) => {\n return updateObject(state, {\n benefitsPage: updateObject(state.benefitsPage, {\n page\n })\n });\n};\n\nconst setEditHrBenfitsInitialState = (state, { benefitGroup, tiers }) => {\n return updateObject(state, {\n editPageState: updateObject(state.editPageState, {\n benefitGroup,\n tiers,\n isBenefitGroupActive:\n benefitGroup.availableTiers.length > 0 ? true : false\n })\n });\n};\n\nconst toggleBenefitGroup = (state, { isBenefitGroupActive }) => {\n return updateObject(state, {\n editPageState: updateObject(state.editPageState, {\n isBenefitGroupActive\n })\n });\n};\n\nconst toggleBenefitGroupInstalments = (state, { enableInstalments }) => {\n return updateObject(state, {\n editPageState: updateObject(state.editPageState, {\n benefitGroup: updateObject(state.editPageState.benefitGroup, {\n enableInstalments\n })\n })\n });\n};\n\nconst setHrBenefitGroupUsers = (state, { users, count }) => {\n return updateObject(state, {\n editPageState: updateObject(state.editPageState, {\n users,\n count\n })\n });\n};\n\nconst setHrBenefitGroupUsersPage = (state, { page }) => {\n return updateObject(state, {\n editPageState: updateObject(state.editPageState, {\n page\n })\n });\n};\n\nexport default benefitsReducer;\n","import {\n LocalBenefitGroup,\n LocalBenefitGroupForm,\n LocalBenefit\n} from \"../../models/domain\";\nimport * as actionTypes from \"../../constants/actionTypes/hr/localBenefits.constants\";\nimport { updateObject } from \"../../services/updateObject\";\n\nconst initialState = {\n localBenefitGroups: [],\n localBenefitGroupForm: new LocalBenefitGroupForm(),\n localBenefit: null,\n page: 1,\n count: 0\n};\n\nconst localBenefitsReducer = (state = initialState, action) => {\n switch (action.type) {\n case actionTypes.SET_LOCAL_BENEFIT_GROUPS:\n return setLocalBenefitGroups(state, action);\n case actionTypes.SET_LOCAL_BENEFIT_GROUPS_PAGE:\n return setLocalBenefitGroupPage(state, action);\n case actionTypes.EDIT_LOCAL_BENEFIT_GROUP:\n return editLocalBenefitGroup(state, action);\n case actionTypes.ADD_NEW_LOCAL_BENEFIT_TO_LOCAL_BENEFIT_GROUP:\n return addNewBenefitToBenefitGroup(state, action);\n case actionTypes.EDIT_LOCAL_BENEFIT:\n return editLocalBenefit(state, action);\n case actionTypes.DELETE_LOCAL_BENEFIT:\n return removeLocalBenefit(state, action);\n }\n\n return state;\n};\n\nconst setLocalBenefitGroups = (state, { benefitGroups, count }) => {\n const filteredBenefitGroups = benefitGroups.map(group =>\n group instanceof LocalBenefitGroup ? group : new LocalBenefitGroup(group)\n );\n return updateObject(state, {\n localBenefitGroups: filteredBenefitGroups,\n count: count\n });\n};\n\nconst setLocalBenefitGroupPage = (state, { page }) => {\n return updateObject(state, {\n page: page\n });\n};\n\nconst editLocalBenefitGroup = (state, { benefitGroup }) => {\n const newBenefitGroup =\n typeof benefitGroup === LocalBenefitGroup\n ? benefitGroup\n : new LocalBenefitGroup(benefitGroup);\n return updateObject(state, {\n localBenefitGroups: state.localBenefitGroups.map(group =>\n group.id === benefitGroup.id ? newBenefitGroup : group\n )\n });\n};\n\nconst addNewBenefitToBenefitGroup = (state, { benefit, benefitGroupId }) => {\n const newBenefit =\n typeof benefit === LocalBenefit ? benefit : new LocalBenefit(benefit);\n return updateObject(state, {\n localBenefitGroups: state.localBenefitGroups.map(benefitGroup =>\n benefitGroup.id === benefitGroupId\n ? updateObject(benefitGroup, {\n benefits: [...benefitGroup.benefits, newBenefit]\n })\n : benefitGroup\n )\n });\n};\n\nconst editLocalBenefit = (state, { benefit, benefitGroupId }) => {\n const newBenefit =\n typeof benefit === LocalBenefit ? benefit : new LocalBenefit(benefit);\n return updateObject(state, {\n localBenefitGroups: state.localBenefitGroups.map(benefitGroup =>\n benefitGroup.id === benefitGroupId\n ? updateObject(benefitGroup, {\n benefits: benefitGroup.benefits.map(ben =>\n ben.id === benefit.id ? newBenefit : ben\n )\n })\n : benefitGroup\n )\n });\n};\n\nconst removeLocalBenefit = (state, { benefitGroupId, benefitId }) => {\n return updateObject(state, {\n localBenefitGroups: state.localBenefitGroups.map(benefitGroup =>\n benefitGroup.id === benefitGroupId\n ? updateObject(benefitGroup, {\n benefits: benefitGroup.benefits.filter(\n benefit => benefit.id !== benefitId\n )\n })\n : benefitGroup\n )\n });\n};\n\nexport default localBenefitsReducer;\n","import { updateObject } from \"../../services/updateObject\";\nimport { HrEmployee } from \"../../models/domain\";\nimport * as actionTypes from \"../../constants/actionTypes/hr/employees.constants\";\n\nconst initialState = {\n employees: [],\n page: 1,\n count: 0,\n search: \"\",\n isSidebarMenuOpen: false,\n failedToUpdateUserList: [],\n dropdownEmployees: {\n listOfEmployees: [],\n filters: { page: 1, limit: 35 },\n meta: { totalPages: 1 }\n }\n};\n\nconst hrEmployeesReducer = (state = initialState, action) => {\n switch (action.type) {\n case actionTypes.SET_HR_EMPLOYEES:\n return setHrEmployees(state, action);\n case actionTypes.SET_PAGE:\n return setHrEmployeePage(state, action);\n case actionTypes.SET_SEARCH_CHANGE:\n return setHrEmployeeSearch(state, action);\n case actionTypes.TOGGLE_SIDEBAR_MENU:\n return toggleSidebarMenu(state, action);\n case actionTypes.TOGGLE_SIDEBAR_MENU:\n return toggleSidebarMenu(state, action);\n case actionTypes.SET_FAILED_TO_BULK_UPDATE_USERS:\n return setListOfFailedToBulkUpdateUsers(state, action);\n case actionTypes.SET_LIST_OF_DROPDOWN_EMPLOYEES:\n return setListOfDropdownEmployees(state, action);\n case actionTypes.SET_DROPDOWN_EMPLOYEES_FILTER:\n return setDropdownEmployeesFilter(state, action);\n case actionTypes.SET_DROPDOWN_EMPLOYEES_META:\n return setDropdownEmployeesMeta(state, action);\n }\n\n return state;\n};\n\nconst setDropdownEmployeesMeta = (state, action) => {\n return updateObject(state, {\n dropdownEmployees: updateObject(state.dropdownEmployees, {\n meta: updateObject(state.dropdownEmployees.meta, {\n totalPages: action.payload\n })\n })\n });\n};\n\nconst setDropdownEmployeesFilter = (state, action) => {\n return updateObject(state, {\n dropdownEmployees: updateObject(state.dropdownEmployees, {\n filters: updateObject(state.dropdownEmployees.filters, action.payload)\n })\n });\n};\n\nconst setListOfDropdownEmployees = (state, action) => {\n return updateObject(state, {\n dropdownEmployees: updateObject(state.dropdownEmployees, {\n listOfEmployees: action.payload\n })\n });\n};\n\nconst setListOfFailedToBulkUpdateUsers = (state, action) => {\n return updateObject(state, {\n failedToUpdateUserList: action.payload\n });\n};\n\nconst setHrEmployees = (state, { employees, count }) => {\n const employeesFiltered = employees.map(employee =>\n typeof employee === HrEmployee ? employee : new HrEmployee(employee)\n );\n return updateObject(state, {\n employees: employeesFiltered,\n count: count\n });\n};\n\nconst setHrEmployeePage = (state, { page }) => {\n return updateObject(state, {\n page: page\n });\n};\n\nconst setHrEmployeeSearch = (state, { search }) => {\n return updateObject(state, {\n search: search\n });\n};\n\nconst toggleSidebarMenu = (state, { isSidebarOpen }) => {\n return updateObject(state, {\n isSidebarMenuOpen: !isSidebarOpen\n });\n};\n\nexport default hrEmployeesReducer;\n","import { Tier } from \"../../models/domain\";\nimport * as actionTypes from \"../../constants/actionTypes/hr/settings.constants\";\nimport { updateObject } from \"../../services/updateObject\";\n\nconst initalState = {\n tiers: []\n};\n\nconst tiersReducer = (state = initalState, action) => {\n switch (action.type) {\n case actionTypes.SET_TIERS:\n return setTiers(state, action);\n case actionTypes.ADD_TIER:\n return addTier(state, action);\n case actionTypes.EDIT_TIER:\n return editTier(state, action);\n case actionTypes.REMOVE_TIER:\n return removeTier(state, action);\n }\n\n return state;\n};\n\nconst setTiers = (state, { tiers }) => {\n return updateObject(state, {\n tiers: tiers.map(tier => (typeof tier === Tier ? tier : new Tier(tier)))\n });\n};\n\nconst addTier = (state, { tier }) => {\n return updateObject(state, {\n tiers: [...state.tiers, typeof tier === Tier ? tier : new Tier(tier)]\n });\n};\n\nconst editTier = (state, { tierId, tier }) => {\n const domainTier = tier instanceof Tier ? tier : new Tier(tier);\n return updateObject(state, {\n tiers: state.tiers.map(foundTier =>\n foundTier.id === tierId ? domainTier : foundTier\n )\n });\n};\n\nconst removeTier = (state, { tierId }) => {\n return updateObject(state, {\n tiers: state.tiers.filter(tier => parseInt(tier.id) !== parseInt(tierId))\n });\n};\n\nexport default tiersReducer;\n","import * as actionTypes from \"../../constants/actionTypes/employee/employeeBenefits.constants\";\nimport { updateObject } from \"../../services/updateObject\";\nimport { priceRangeOptions } from \"../../builders/employee/priceRangeOptions.config\";\nimport { PriceRange } from \"../../models/domain\";\nimport { PUBLIC } from \"../../builders/benefitGroups/benefitGroup.types\";\n\nconst initialState = {\n benefitsBrowse: {\n benefitGroups: [],\n benefitGroupsPage: 1,\n benefitGroupsCount: 0,\n benefitGroupsTotalPages: 0\n },\n benefitsCompany: {\n benefitGroups: [],\n benefitGroupsPage: 1,\n benefitGroupsCount: 0,\n benefitGroupsTotalPages: 0\n },\n subscribedBenefits: {\n subscribedBenefitGroups: [],\n isConditionAllBenefits: true,\n isNextMonthTooltipOpen: false\n },\n favoriteBenefits: {\n listOfFavoriteBenefits: [],\n listOfFavoriteBenefitsInObject: {},\n isInFavorites: false\n },\n filters: {\n categories: [],\n chosenCategoryIds: [],\n appliedChosenCategoryIds: [],\n cityIds: [],\n expirations: [],\n isRemote: false,\n chosenPriceRange: new PriceRange(),\n appliedChosenPriceRange: new PriceRange(),\n search: \"\",\n order: \"\",\n key: \"\",\n isApplyFilterClicked: false\n },\n pageFrontEndStates: {\n isLoading: true,\n isPageLoading: false,\n isSubscribedBenefitGroupsVisible: false,\n isFavoriteTab: false,\n benefitGroupType: PUBLIC,\n isModalOpen: false,\n chosenBenefitGroup: null\n },\n usedBenefits: [],\n socialProof: {\n subscribedToSingleBenefitGroup: {},\n currentlyPopularBenefit: {}\n }\n};\n\nconst employeeBenefitsReducer = (state = initialState, action) => {\n switch (action.type) {\n case actionTypes.SET_INITAL_STATE:\n return employeeBenefitsSetInitalState(state, action);\n case actionTypes.UPDATE_BENEFIT_GROUP:\n return updateBenefitGroup(state, action);\n case actionTypes.SET_IS_SUBSCRIBED_BENEFIT_GROUPS_VISIBLE:\n return setIsSubscribedBenefitGroupsVisible(state, action);\n case actionTypes.SET_BENEFIT_GROUP_TYPE:\n return setBenefitGroupType(state, action);\n case actionTypes.SET_IS_INITIAL_STATE_SET:\n return setIsInitialStateSet(state, action);\n case actionTypes.SET_IS_PAGE_LOADING:\n return setIsPageLoading(state, action);\n case actionTypes.SET_CHOSEN_CATEGORY_IDS:\n return setChosenCategoryIds(state, action);\n case actionTypes.SET_CITY_IDS_FILTERS:\n return setCitiesFilter(state, action);\n case actionTypes.SET_REMOTE_FILTER:\n return setRemoteFilter(state, action);\n case actionTypes.SET_FILTERS_PRICE_RANGE:\n return setFiltersPriceRange(state, action);\n case actionTypes.SET_BENEFIT_EXPIRATION_TYPES_FILTERS:\n return setBenefitExpirationTypesFilter(state, action);\n case actionTypes.SET_SEARCH_FILTERS:\n return setSearchFilter(state, action);\n case actionTypes.SET_ORDER_SORT:\n return setOrderSort(state, action);\n case actionTypes.SET_KEY_SORT:\n return setKeySort(state, action);\n case actionTypes.SET_ADITIONAL_BENEFIT_GROUPS:\n return setAditionalBenefitGroups(state, action);\n case actionTypes.SET_BENEFIT_GROUPS_PAGE:\n return setBenefitGroupsPage(state, action);\n case actionTypes.APPLY_BENEFIT_GROUPS_FILTERS:\n return applyBenefitGroupsFilters(state, action);\n case actionTypes.RESET_BENEFIT_GROUPS_FILTERS:\n return resetBenefitGroupFilters(state, action);\n case actionTypes.RESET_BENEFIT_GROUPS_FILTERS_TO_DEFAULT:\n return resetBenefitGroupFiltersToDefault(state, action);\n case actionTypes.OPEN_BENEFIT_GROUP_MODAL:\n return openBenefitGroupModal(state, action);\n case actionTypes.SET_CHOSEN_BENEFIT_GROUP:\n return setChosenBenefitGroup(state, action);\n case actionTypes.CLOSE_BENEFIT_GROUP_MODAL:\n return closeBenefitGroupModal(state, action);\n case actionTypes.SET_BENEFIT_GROUPS_AND_SUBSCRIBED_BENEFIT_GROUPS:\n return setBenefitGroupsAndSubscribedBenefitGroups(state, action);\n case actionTypes.SET_NEXT_MONTH_FILTER_CONDITION:\n return setIsConditionAllBenefits(state, action);\n case actionTypes.SET_NEXT_MONTH_TOOLTIP_IS_OPEN:\n return setIsNextMonthTooltipOpen(state, action);\n case actionTypes.SET_SUBSCRIBED_BENEFIT_GROUPS:\n return setSubscribedBenefitGroups(state, action);\n case actionTypes.SET_LIST_OF_COMPANY_BENEFITS:\n return setListOfCompanyBenefits(state, action);\n case actionTypes.SET_LIST_OF_BROWSE_BENEFITS:\n return setListOfBrowseBenefits(state, action);\n case actionTypes.SET_FAVORITE_TAB_OPEN:\n return setIsFavoriteTabOpen(state, action);\n case actionTypes.SET_LIST_OF_FAVORITES:\n return setListOfFavoriteBenefits(state, action);\n case actionTypes.CHECK_IF_IN_FAVORITES:\n return checkIfInFavorites(state, action);\n case actionTypes.SET_USED_BENEFITS:\n return setUsedBenefits(state, action);\n case actionTypes.SET_SOCIAL_PROOF_FOR_SINGLE_BENEFIT_GROUP:\n return setSocialProofForSingleBenefit(state, action);\n case actionTypes.SET_CURRENTLY_POPULAR_BENEFIT:\n return setCurrentlyPopularBenefit(state, action);\n }\n return state;\n};\n\nconst setCurrentlyPopularBenefit = (state, { payload }) => {\n return updateObject(state, {\n socialProof: updateObject(state.socialProof, {\n currentlyPopularBenefit: payload\n })\n });\n};\n\nconst setSocialProofForSingleBenefit = (state, { payload }) => {\n return updateObject(state, {\n socialProof: updateObject(state.socialProof, {\n subscribedToSingleBenefitGroup: payload\n })\n });\n};\n\nconst setUsedBenefits = (state, { payload }) => {\n return updateObject(state, {\n usedBenefits: payload\n });\n};\n\nconst checkIfInFavorites = (state, { payload }) => {\n return updateObject(state, {\n favoriteBenefits: updateObject(state.favoriteBenefits, {\n isInFavorites: payload\n })\n });\n};\n\nconst setIsFavoriteTabOpen = (state, { payload }) => {\n return updateObject(state, {\n pageFrontEndStates: updateObject(state.pageFrontEndStates, {\n isFavoriteTab: payload\n })\n });\n};\n\nconst setListOfFavoriteBenefits = (state, { payload }) => {\n const favoritesAnagram = {};\n\n if (payload.length > 0) {\n payload.forEach(favorite => {\n favoritesAnagram[favorite.id] = favorite;\n });\n }\n\n return updateObject(state, {\n favoriteBenefits: updateObject(state.favoriteBenefits, {\n listOfFavoriteBenefits: payload,\n listOfFavoriteBenefitsInObject: favoritesAnagram\n })\n });\n};\n\nconst setListOfBrowseBenefits = (state, { payload }) => {\n return updateObject(state, {\n benefitsBrowse: {\n benefitGroups: payload.groups,\n benefitGroupsCount: payload.count,\n benefitGroupsTotalPages: payload.pages,\n benefitGroupsPage: 1\n }\n });\n};\n\nconst setListOfCompanyBenefits = (state, { payload }) => {\n return updateObject(state, {\n benefitsCompany: {\n benefitGroups: payload.groups,\n benefitGroupsCount: payload.count,\n benefitGroupsTotalPages: payload.pages,\n benefitGroupsPage: state.benefitsCompany.benefitGroupsPage\n }\n });\n};\n\nconst employeeBenefitsSetInitalState = (\n state,\n {\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage,\n categories\n }\n) => {\n return updateObject(state, {\n benefitsBrowse: updateObject(state.benefitsBrowse, {\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage\n }),\n filters: updateObject(state.filters, {\n categories\n }),\n pageFrontEndStates: updateObject(state.pageFrontEndStates, {\n isLoading: false\n })\n });\n};\n\nconst updateBenefitGroup = (state, { benefitGroup }) => {\n return updateObject(state, {\n benefitsBrowse: updateObject(state.benefitsBrowse, {\n benefitGroups: state.benefitsBrowse.benefitGroups.map(group =>\n group.id === benefitGroup.id ? benefitGroup : group\n )\n }),\n benefitsCompany: updateObject(state.benefitsCompany, {\n benefitGroups: state.benefitsCompany.benefitGroups.map(group => {\n delete benefitGroup.provider;\n return group.id === benefitGroup.id\n ? { ...group, ...benefitGroup }\n : group;\n })\n })\n });\n};\n\nexport const setSubscribedBenefitGroups = (\n state,\n { subscribedBenefitGroups }\n) => {\n return updateObject(state, {\n subscribedBenefits: updateObject(state.subscribedBenefits, {\n subscribedBenefitGroups: subscribedBenefitGroups\n })\n });\n};\n\nconst setIsSubscribedBenefitGroupsVisible = (state, { isVisible }) => {\n return updateObject(state, {\n pageFrontEndStates: updateObject(state.pageFrontEndStates, {\n isSubscribedBenefitGroupsVisible: isVisible\n })\n });\n};\n\nconst setBenefitGroupType = (state, { benefitGroupType }) => {\n return updateObject(state, {\n pageFrontEndStates: updateObject(state.pageFrontEndStates, {\n benefitGroupType: benefitGroupType\n })\n });\n};\n\nconst setIsInitialStateSet = (state, { flag }) => {\n return updateObject(state, {\n pageFrontEndStates: updateObject(state.pageFrontEndStates, {\n isInitialStateSet: flag\n })\n });\n};\n\nconst setIsPageLoading = (state, { isLoading }) => {\n return updateObject(state, {\n pageFrontEndStates: updateObject(state.pageFrontEndStates, {\n isPageLoading: isLoading\n })\n });\n};\n\nconst setChosenCategoryIds = (state, { chosenCategoryIds }) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n chosenCategoryIds\n })\n });\n};\n\nconst setCitiesFilter = (state, { cityIds }) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n cityIds\n })\n });\n};\n\nconst setRemoteFilter = (state, { isRemote }) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n isRemote\n })\n });\n};\n\nconst setFiltersPriceRange = (\n state,\n { updatedPriceRangeOptions, chosenPriceRange }\n) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n priceRangeOptions: updatedPriceRangeOptions,\n chosenPriceRange\n })\n });\n};\n\nconst setBenefitExpirationTypesFilter = (state, { expirations }) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n expirations\n })\n });\n};\n\nconst setSearchFilter = (state, { search }) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n search\n })\n });\n};\n\nconst setOrderSort = (state, { order }) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n order\n })\n });\n};\n\nconst setKeySort = (state, { key }) => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n key\n })\n });\n};\n\nconst setAditionalBenefitGroups = (\n state,\n {\n newBenefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage,\n benefitGroupType\n }\n) => {\n return benefitGroupType === PUBLIC\n ? updateObject(state, {\n benefitsBrowse: updateObject(state.benefitsBrowse, {\n benefitGroups: [\n ...state.benefitsBrowse.benefitGroups,\n ...newBenefitGroups\n ],\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage,\n benefitGroupType\n })\n })\n : updateObject(state, {\n benefitsCompany: updateObject(state.benefitsCompany, {\n benefitGroups: [\n ...state.benefitsCompany.benefitGroups,\n ...newBenefitGroups\n ],\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage,\n benefitGroupType\n })\n });\n};\n\nconst setBenefitGroupsPage = (state, { benefitGroupsPage }) => {\n return updateObject(state, {\n benefitsBrowse: updateObject(state.benefitsBrowse, {\n benefitGroupsPage\n })\n });\n};\n\nconst applyBenefitGroupsFilters = (\n state,\n {\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupType\n }\n) => {\n return benefitGroupType === PUBLIC\n ? updateObject(state, {\n benefitsBrowse: updateObject(state.benefitsBrowse, {\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage: 1,\n benefitGroupType\n }),\n filters: updateObject(state.filters, {\n appliedChosenCategoryIds: state.filters.chosenCategoryIds,\n appliedChosenPriceRange: state.filters.chosenPriceRange,\n isApplyFilterClicked: !state.filters.isApplyFilterClicked\n })\n })\n : updateObject(state, {\n benefitsCompany: updateObject(state.benefitsCompany, {\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage: 1,\n benefitGroupType\n }),\n filters: updateObject(state.filters, {\n appliedChosenCategoryIds: state.filters.chosenCategoryIds,\n appliedChosenPriceRange: state.filters.chosenPriceRange,\n isApplyFilterClicked: !state.filters.isApplyFilterClicked\n })\n });\n};\n\nconst resetBenefitGroupFilters = (\n state,\n {\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupType\n }\n) => {\n return benefitGroupType === PUBLIC\n ? updateObject(state, {\n benefitsBrowse: updateObject(state.benefitsBrowse, {\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage: 1,\n benefitGroupType\n }),\n filters: updateObject(state.filters, {\n chosenCategoryIds: [],\n appliedChosenCategoryIds: [],\n chosenPriceRange: new PriceRange(),\n appliedChosenPriceRange: new PriceRange(),\n priceRangeOptions: priceRangeOptions,\n search: \"\",\n isApplyFilterClicked: !state.filters.isApplyFilterClicked\n })\n })\n : updateObject(state, {\n benefitsCompany: updateObject(state.benefitsCompany, {\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage: 1,\n benefitGroupType\n }),\n filters: updateObject(state.filters, {\n chosenCategoryIds: [],\n appliedChosenCategoryIds: [],\n chosenPriceRange: new PriceRange(),\n appliedChosenPriceRange: new PriceRange(),\n priceRangeOptions: priceRangeOptions,\n search: \"\",\n isApplyFilterClicked: !state.filters.isApplyFilterClicked\n })\n });\n};\n\nconst resetBenefitGroupFiltersToDefault = state => {\n return updateObject(state, {\n filters: updateObject(state.filters, {\n chosenCategoryIds: [],\n appliedChosenCategoryIds: [],\n chosenPriceRange: new PriceRange(),\n appliedChosenPriceRange: new PriceRange(),\n priceRangeOptions: priceRangeOptions,\n search: \"\",\n isApplyFilterClicked: !state.filters.isApplyFilterClicked\n })\n });\n};\n\nconst openBenefitGroupModal = (state, { chosenBenefitGroup }) => {\n return updateObject(state, {\n pageFrontEndStates: updateObject(state.pageFrontEndStates, {\n isModalOpen: true,\n chosenBenefitGroup\n })\n });\n};\n\nconst setChosenBenefitGroup = (state, { chosenBenefitGroup }) => {\n return updateObject(state, {\n pageFrontEndStates: updateObject(state.pageFrontEndStates, {\n chosenBenefitGroup\n })\n });\n};\n\nconst closeBenefitGroupModal = (state, action) => {\n return updateObject(state, {\n pageFrontEndStates: updateObject(state.pageFrontEndStates, {\n isModalOpen: false,\n chosenBenefitGroup: null\n })\n });\n};\n\nconst setBenefitGroupsAndSubscribedBenefitGroups = (\n state,\n {\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n subscribedBenefitGroups\n }\n) => {\n return updateObject(state, {\n benefitsBrowse: updateObject(state.benefitsBrowse, {\n benefitGroups,\n benefitGroupsCount,\n benefitGroupsTotalPages,\n benefitGroupsPage: 1\n }),\n subscribedBenefits: updateObject(state.subscribedBenefits, {\n subscribedBenefitGroups\n })\n });\n};\n\nconst setIsConditionAllBenefits = (state, { isConditionAllBenefits }) => {\n return updateObject(state, {\n subscribedBenefits: updateObject(state.subscribedBenefits, {\n isConditionAllBenefits,\n isNextMonthTooltipOpen: false\n })\n });\n};\n\nconst setIsNextMonthTooltipOpen = (state, { isNextMonthTooltipOpen }) => {\n return updateObject(state, {\n subscribedBenefits: updateObject(state.subscribedBenefits, {\n isNextMonthTooltipOpen\n })\n });\n};\n\nexport default employeeBenefitsReducer;\n","import refundActions from \"../../constants/actionTypes/hr/refunds.constants\";\nimport { updateObject } from \"../../services/updateObject\";\n\nconst initialState = {\n listOfRefunds: [],\n filters: { page: 1, perPage: 15, status: undefined, branchCode: undefined },\n singleRefund: {},\n totalCount: 1,\n checkedPendingItems: [],\n branchCodes: [],\n toggleReimbursement: true\n};\n\nconst refundsReducer = (state = initialState, action) => {\n switch (action.type) {\n case refundActions.SET_REFUNDS_LIST:\n return setRefunds(state, action);\n case refundActions.SET_REFUND:\n return setRefund(state, action);\n case refundActions.SET_TOTAL_COUNT:\n return setTotalCount(state, action);\n case refundActions.SET_FILTERS:\n return setFilters(state, action);\n case refundActions.SET_CHECKED_PENDING_ITEMS:\n return setCheckedPendingItems(state, action);\n case refundActions.SET_BRANCH_CODES:\n return setBranchCodes(state, action);\n case refundActions.SET_TOGGLE_REIMBURSEMENT:\n return setToggleReimbursement(state, action);\n }\n\n return state;\n};\n\nconst setToggleReimbursement = (state, { payload }) => {\n return updateObject(state, { toggleReimbursement: payload });\n};\n\nconst setBranchCodes = (state, { payload }) => {\n return updateObject(state, { branchCodes: payload });\n};\n\nconst setCheckedPendingItems = (state, { payload }) => {\n return updateObject(state, { checkedPendingItems: payload });\n};\n\nconst setFilters = (state, { payload }) => {\n return updateObject(state, { filters: payload });\n};\n\nconst setTotalCount = (state, { payload }) => {\n return updateObject(state, { totalCount: payload });\n};\n\nconst setRefunds = (state, { payload }) => {\n return updateObject(state, { listOfRefunds: payload });\n};\n\nconst setRefund = (state, { payload }) => {\n return updateObject(state, { singleRefund: payload });\n};\n\nexport default refundsReducer;\n","import adminDashboardActionTypes from \"../../constants/actionTypes/admin/dashboard.constants\";\nimport { updateObject } from \"../../services/updateObject\";\nimport {\n currentDate,\n startOfTheCurrentMonth\n} from \"../../utils/helpers/timeHelpers\";\n\nconst initialState = {\n filters: {\n startDate: startOfTheCurrentMonth(),\n endDate: currentDate(),\n companyId: null\n },\n statistics: null,\n listOfUserBenefits: []\n};\n\nconst adminDashboardReducer = (state = initialState, action) => {\n switch (action.type) {\n case adminDashboardActionTypes.SET_ADMIN_DASHBOARD_FILTERS:\n return setAdminDashboardFilters(state, action);\n case adminDashboardActionTypes.SET_ADMIN_DASHBOARD_STATISTICS:\n return setAdminDashboardStatistics(state, action);\n case adminDashboardActionTypes.SET_ADMIN_DASHBOARD_USER_BENEFITS:\n return setAdminDashboardUserBenefits(state, action);\n }\n\n return state;\n};\n\nconst setAdminDashboardUserBenefits = (state, action) => {\n return updateObject(state, { listOfUserBenefits: action.payload });\n};\n\nconst setAdminDashboardFilters = (state, action) => {\n return updateObject(state, { filters: action.payload });\n};\nconst setAdminDashboardStatistics = (state, action) => {\n return updateObject(state, { statistics: action.payload });\n};\n\nexport default adminDashboardReducer;\n","import adminActionTypes from \"../../constants/actionTypes/admin/admin.constants\";\nimport { updateObject } from \"../../services/updateObject\";\n\nconst initialState = {\n filters: { page: 1, perPage: 10, type: [] },\n adminSingleUserData: null\n};\n\nconst adminReducer = (state = initialState, action) => {\n switch (action.type) {\n case adminActionTypes.SET_ADMIN_USER_FILTERS:\n return setAdminFilters(state, action);\n case adminActionTypes.SET_ADMIN_USER_DATA:\n return setAdminUserData(state, action);\n }\n\n return state;\n};\n\nconst setAdminFilters = (state, action) => {\n return updateObject(state, { filters: action.payload });\n};\n\nconst setAdminUserData = (state, action) => {\n return updateObject(state, { adminSingleUserData: action.payload });\n};\n\nexport default adminReducer;\n","import { combineReducers } from \"redux\";\nimport appReducer from \"./app.reducer\";\nimport usersReducer from \"./admin/users.reducer\";\nimport benefitTagsReducer from \"./admin/benefitTags.reducer\";\nimport companyTagsReducer from \"./admin/companyTags.reducer\";\nimport categoriesReducer from \"./admin/categories.reducer\";\nimport companiesReducer from \"./admin/companies.reducer\";\nimport providersReducer from \"./admin/providers.reducer\";\nimport benefitsReducer from \"./hr/benefits.reducer\";\nimport localBenefitsReducer from \"./hr/localBenefits.reducer\";\nimport employeesReducer from \"./hr/employees.reducer\";\nimport tiersReducer from \"./hr/tiers.reducer\";\nimport employeeBenefitsReducer from \"./employee/employeeBenefits.reducer\";\nimport refundsReducer from \"./hr/refunds.reducer\";\nimport adminDashboardReducer from \"./admin/adminDashboard.reducer\";\nimport adminReducer from \"./admin/admin.reducer\";\n\nexport const rootReducer = combineReducers({\n app: appReducer,\n usersPage: usersReducer,\n benefitTags: benefitTagsReducer,\n companyTags: companyTagsReducer,\n categories: categoriesReducer,\n companies: companiesReducer,\n providers: providersReducer,\n benefits: benefitsReducer,\n localBenefits: localBenefitsReducer,\n employees: employeesReducer,\n tiers: tiersReducer,\n employeeBenefitsPage: employeeBenefitsReducer,\n refundsReducer: refundsReducer,\n adminDashboard: adminDashboardReducer,\n admin: adminReducer\n});\n","import { createStore, applyMiddleware } from \"redux\";\nimport { composeWithDevTools } from \"redux-devtools-extension\";\nimport thunk from \"redux-thunk\";\n\nimport { rootReducer } from \"../reducers/root.reducer\";\n\nconst initStore = () => {\n const middlewares = [thunk];\n const enhancer =\n process.env.NODE_ENV === \"production\"\n ? applyMiddleware(...middlewares)\n : composeWithDevTools(applyMiddleware(...middlewares));\n\n return createStore(rootReducer, enhancer);\n};\n\nexport const useStore = () => {\n return initStore();\n};\n","import React from \"react\";\n\nclass ErrorBoundary extends React.Component {\n constructor(props) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error) {\n return { hasError: true };\n }\n\n componentDidCatch(error, info) {\n console.error(error, info.componentStack);\n }\n\n render() {\n if (this.state.hasError) {\n return this.props.fallback;\n }\n\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary;\n","import styled from \"styled-components\";\n\nconst GlobalErrorBoundaryFallbackStyles = styled.div`\n width: 100vw;\n height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .mainContent {\n display: flex;\n display: flex;\n flex-direction: column;\n gap: 20px;\n\n p {\n font-size: 30px;\n color: #1568bf;\n font-weight: 700;\n }\n\n button {\n border: 1px solid #1568bf;\n padding: 10px 5px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n border-radius: 8px;\n color: #1568bf;\n background: white;\n\n &:hover {\n background: #1568bf;\n color: white;\n }\n }\n }\n`;\n\nexport default GlobalErrorBoundaryFallbackStyles;\n","import React from \"react\";\nimport GlobalErrorBoundaryFallbackStyles from \"./GlobalErrorBoundaryFallbackStyles\";\n\nexport const GlobalErrorBoundaryFallback = () => {\n const handleRedirect = () => {\n localStorage.clear();\n window.location.reload();\n };\n\n return (\n \n
\n

Ooops something went wrong!

\n \n
\n
\n );\n};\n","const ENG = {\n /* AUTH */\n LWE: \"Log in with email\",\n LWM: \"Log in with Microsoft\",\n Password: \"Password\",\n remember_me: \"Remember me\",\n forgot_password: \"Forgot Password\",\n Login: \"Login\",\n go_back: \"Go back\",\n \"404_desc\": \"Sorry we could't find this page\",\n submit_1: \"Submit\",\n required_field: \"* Required\",\n logout: \"Logout\",\n privacy_policy: \"Privacy policy\",\n terms: \"Terms & conditions\",\n\n /* MEMBER */\n hi: \"Hi\",\n choose_benefits_message: \"choose the benefits for\",\n rt_tt_ratio: \"Remaining budget / Total budget\",\n history: \"History\",\n BTD: \"Back to Dashboard\",\n user_did_not_choose: \"User did not choose any benefit.\",\n time_to_pick: \"Time to pick benefits\",\n time_to_pick_locked:\n \"The platform for selecting benefits will be unlocked from:\",\n Member: \"Member\",\n available_prov: \"Available Providers\",\n Search: \"Search\",\n Price: \"Price\",\n SBG: \"Sort Benefit Groups\",\n sort_by: \"Sort By\",\n filter_by: \"Filter By\",\n locations: \"Locations\",\n SL: \"Select locations\",\n FBT: \"Filter Benefit Type\",\n reset_filter: \"Reset Filter\",\n close: \"Close\",\n Category: \"Category\",\n open_filters: \"Open Filters\",\n Browse_Benefits: \"Browse Benefits\",\n Company_Benefits: \"Company Benefits\",\n My_Benefits: \"My Benefits\",\n Favorite_Benefits: \"Favorite Benefits\",\n NFB: \"Currently there are no favorite benefits.\",\n TM: \"This month\",\n NM: \"Next month\",\n DEF: \"Default\",\n SAB: \"Show all Benefits\",\n SOC: \"Show only Changes\",\n NABTM: \"There are no active benefits in this month\",\n NABNM: \"There are no chosen benefits for next month\",\n NADB: \"There are no default benefits\",\n add_favorites: \"Add to favorites\",\n remove_favorites: \"Remove from favorites\",\n rate_the_benefit: \"Rate this benefit\",\n rating: \"ratings\",\n Price_includes_VAT: \"Price includes VAT of\",\n remaining: \"Remaining\",\n enter_the_value: \"Enter value in currency\",\n Subscribe: \"Subscribe\",\n Unsubscribe: \"Unsubscribe\",\n Redeem: \"Redeem\",\n Return_voucher: \"Return voucher\",\n upload: \"Upload\",\n Unsubscribe: \"Unsubscribe\",\n Subscribed: \"Subscribed\",\n Resubscribe: \"Resubscribe\",\n min_voucher_price: \"Minimum voucher price is {{price}} in currency\",\n tokens_shortage_sub: \"You don’t have enough budget to subscribe.\",\n tokens_shortage: \"You don’t have enough budget to create voucher.\",\n choose_benefits_message: \"Hi {{name}}, choose your benefits for\",\n\n /* HR */\n benefit_group_management: \"Benefit Group Management\",\n save: \"Save\",\n cancel: \"Cancel\",\n preview: \"Preview\",\n disable_benefit_warning:\n \"If you disable benefit, all users will lose access automatically.\",\n tiers_info:\n \"You need to create tiers to manage accessibility of benefit groups\",\n on: \"ON\",\n off: \"OFF\",\n bg_disabled: \"Benefit group is disabled\",\n bg_enabled: \"Benefit group is enabled\",\n access: \"Access\",\n uncheck_all: \"Uncheck all\",\n check_all: \"Check all\",\n disable_installments_warning:\n \"If you disable this, users will not be able to get one time benefits with installments.\",\n installments_enabled: \"Installments are enabled\",\n installments_disabled: \"Installments are disabled\",\n download: \"Download\",\n active_users: \"Active users\",\n Benefits: \"Benefits\",\n filter_by_group_category: \"Filter by group category\",\n filter_by_benefit_tags: \"Filter by benefit tags\",\n filter_by_status: \"Filter by status\",\n enabled: \"Enabled\",\n disabled: \"Disabled\",\n Dashboard: \"Dashboard\",\n budget_spent_tiers: \"Budget spent per tiers\",\n chosen_month_budget: \"Chosen month budget\",\n previous_month_budget: \"Previous month budget\",\n total_budget: \"Total Budget\",\n chosen_month: \"Chosen month\",\n previous_month: \"Previous month\",\n budget_spent: \"Budget Spent\",\n budget_spent_by_category: \"Budget spent per category\",\n tokens_used: \"Budget used\",\n spent_budget: \"Spent budget\",\n budget_unused: \"Budget unused\",\n usage_statistics: \"Usage Statistics\",\n total_users: \"Total users\",\n employees_using_the_system: \"Employees using the system\",\n employees_not_using_the_system: \"Employees not using the system\",\n Employees: \"Employees\",\n gen_usr_rep: \"Generate usage report\",\n select_report_type: \"Select report type\",\n chosen_for_this_month: \"Chosen for this month\",\n chosen_for_next_month: \"Chosen for next month\",\n \"Select Item\": \"Select Item\",\n downloading: \"Downloading\",\n gen_ref_rep: \"Generate refund report\",\n sync_widget: \"Sync Widget\",\n sync_title: \"Synced Employees\",\n top_benefits: \"Top Benefits\",\n combination_statistics: \"Combination Statistics\",\n uniquely_chosen_combinations_title:\n \"uniquely chosen combinations of benefits\",\n over_2_mil: \"Over 2 million possible combinations\",\n Refunds: \"Refunds\",\n Settings: \"Settings\",\n \"Company Benefits\": \"Company Benefits\",\n Logout: \"Logout\",\n left: \"left\",\n benefit_has_installments:\n \"This benefit group has a price split in installments.\",\n decline_unsub_warning:\n \"You won't be able to unsubscribe until the commitment period ends.\",\n unsub_explain:\n \"Once the commitment period ends you will be automatically unsubscribed.\",\n company_benefit_groups: \"Company Benefit Groups\",\n add_local_benefit_groups: \"Add Company Benefit Group\",\n edit_local_benefit_group: \"Edit Company Benefit Group\",\n please_wait: \"Please wait\",\n basic_info: \"Basic Info\",\n company_name: \"Company name\",\n Name: \"Name\",\n Description: \"Description\",\n Summary: \"Summary\",\n Photo: \"Photo\",\n Taxes: \"Taxes\",\n Update: \"Edit\",\n add_benefit: \"Add Benefit\",\n edit_local_benefit: \"Edit Benefit\",\n title: \"title\",\n expiration_type: \"Expiration type\",\n min_contract_period: \"Minimum contract period\",\n ben_price_in_tokens: \"Benefit price in tokens\",\n save_as_draft: \"Save benefit as draft\",\n publish_benefit: \"Publish benefit\",\n Create: \"Add\",\n select_categories: \"Select categories\",\n benefits: \"Benefits\",\n Vouchers: \"Vouchers\",\n Options: \"Options\",\n Tokens: \"Tokens\",\n only_predefined_values: \"Only predefined values\",\n refund_voucher: \"Refund voucher\",\n Publish: \"Publish\",\n Edit: \"Edit\",\n duration_type: \"Duration type\",\n add_local_benefit: \"Add Benefit\",\n search_employees: \"Search employees\",\n add_employee: \"Add Employee\",\n add_employees_csv: \"Add Employees CSV\",\n add_employees: \"Add Employees\",\n update_employees_csv: \"Update Employees CSV\",\n add_bonus: \"Add bonus\",\n filter_by_tiers: \"Filter by tiers\",\n filter_by_budget_percentage: \"Filter by spent budget\",\n Sort: \"Sort\",\n sort_by: \"Sort by\",\n Selected: \"Selected\",\n Delete: \"Delete\",\n no_result_found: \"No results found\",\n Tier: \"Tier\",\n Budget: \"Budget\",\n \"Spent(%)\": \"Spent(%)\",\n Verified: \"Verified\",\n download_template: \"Download Template\",\n download_template_info:\n \"In order to add employees you must first download the .csv template file by clicking the button below.\",\n submit_the_file: \"Submit the file\",\n upload_the_file: \"Upload the file\",\n step2_title_employees: \"Populate the file with employees\",\n step2_text_1:\n \"After you have downloaded the .csv template, open the file and populate it with employees. Save the document as the CSV file and upload it.\",\n step2_text_2:\n \"Inside the .csv template, you will find examples of how you should add your employees.\",\n required_fields_employees:\n \"Fields: first name, last name, email, tier and locations are required and cannot be left empty.\",\n step2_title_bonuses: \"Populate the file with bonuses\",\n step2_text_3:\n \"After you populate the .csv template with employees, you can populate it with bonuses.\",\n bonus_type_info:\n \"BonusType can have one of the following values: monthly, three_months, six_months or yearly.\",\n bonus_start_date_info:\n \"If you enter the BonusAmount field and the BonusStartDate is empty, we put the default date when the CSV was uploaded.\",\n bonus_end_date_info:\n \"If you enter the BonusAmount field and the BonusEndDate is empty, we put the default date to 3 months from the day the CSV was uploaded.\",\n bonus_type_default_info:\n \"If you enter the BonusAmount field and the BonusType is empty, we set the default type as one-time and not renewable.\",\n required_fields_bonuses:\n \"If you enter the BonusStartDate, BonusEndDate or BonusType, the required field is BonusAmount.\",\n update_employees: \"Update Employees\",\n update_employees_info:\n \"In order to update employees you must first download the .csv template file by clicking the button below.\",\n \"Add Bonuses\": \"Add Bonuses\",\n of_tokens: \"of tokens\",\n \"Bonus Start Date\": \"Bonus Start Date\",\n subject: \"subject\",\n message: \"message\",\n \"User is disabled\": \"User is disabled\",\n resend_ver_link: \"Resend verification link\",\n add_bonus_budget: \"Add bonus budget\",\n enable_user: \"Enable user\",\n Gender: \"Gender\",\n \"Birth date\": \"Birth date\",\n \"Enroll date\": \"Enroll date\",\n Relationship: \"Relationship\",\n Team: \"Team\",\n Bonuses: \"Bonuses\",\n Contact: \"Contact\",\n Details: \"Details\",\n Rank: \"Rank\",\n Surname: \"Surname\",\n Birthday: \"Birthday\",\n \"Unique ID\": \"Unique ID\",\n \"Branch Code\": \"Branch Code\",\n disabled_user_info: \"This user is currently disabled.\",\n Info: \"Info\",\n Position: \"Position\",\n Family: \"Family\",\n \"Monthly tokens\": \"Monthly budget\",\n \"Enable HR Role\": \"Enable HR Role\",\n \"Edit Employee\": \"Edit Employee\",\n \"Benefit Group\": \"Benefit Group\",\n Expiration: \"Expiration\",\n Provider: \"Provider\",\n \"Disable User\": \"Disable User\",\n choose_disabling_date: \"Choose when you want the user to be deleted.\",\n immediate_delete:\n \"If you wish to delete him immediately, select today's date.\",\n Disable: \"Disable\",\n employees: \"employees\",\n delete_employees: \"Choose when you want the\",\n to_be_deleted: \"to be deleted.\",\n \"Rollover duration (cycles)\": \"Rollover duration (cycles)\",\n \"Rollover resets on\": \"Rollover resets on\",\n turned_on_rollover_info:\n \"If this is turned on it will enable transfer of all the unspent budget of each user to the next month.\",\n max_budget_info: \"This way you can maximize usage of your benefit budget.\",\n \"Scheduled rollover deletion\": \"Scheduled rollover deletion\",\n \"Add Tier\": \"Add Tier\",\n \"Rollover is enabled\": \"Rollover is enabled\",\n \"Rollover is disabled\": \"Rollover is disabled\",\n \"tier settings\": \"tier settings\",\n \"company brand settings\": \"company brand settings\",\n \"Add logo\": \"Add logo\",\n Remove: \"Remove\",\n \"Company logo\": \"Company logo\",\n upload_logo_info: \"Upload logo with a landscape orientation (min 100x100px)\",\n benefiti_welcome: \"Welcome to Benefiti.rs platform!\",\n first_time_setup: \"This is your first time company setup.\",\n add_tiers_info:\n \"Add as many tiers as you need, name them and decide how budget are assigned monthly to each tier. You can edit this later!\",\n empty_refunds: \"There are no refunds yet.\",\n Rejected: \"Rejected\",\n Accepted: \"Accepted\",\n Pending: \"Pending\",\n \"Show All\": \"Show All\",\n Status: \"Status\",\n Branch: \"Branch\",\n selected: \"selected\",\n Accept: \"Accept\",\n or: \"or\",\n Decline: \"Decline\",\n Price: \"Price\",\n Date: \"Date\",\n \"Auto Accept\": \"Auto Accept\",\n \"Auto Decline\": \"Auto Decline\",\n Type: \"Type\",\n \"Single Refund\": \"Single Refund\",\n Image: \"Image\",\n Activity: \"Activity\",\n Companies: \"Companies\",\n Users: \"Users\",\n Notifications: \"Notifications\",\n show_rollover_dates: \"Show Rollover Reset Dates\",\n rollover_resets: \"Rollover resets\",\n no_rollover: \"This company has no rollover\",\n show_usage_report: \"Show Usage Report\",\n \"Select company\": \"Select company\",\n unique_user_sub: \"Unique User Subscriptions\",\n Subscriptions: \"Subscriptions\",\n \"Select Date\": \"Select Date\",\n \"Choose month\": \"Choose month\",\n filter_by_companies: \"Filter by companies\",\n filter_by_roles: \"Filter by roles\",\n prev_day: \"Previous Day\",\n next_day: \"Next Day\",\n no_activity_logs: \"No logs for \",\n \"Company tags\": \"Company tags\",\n \"Benefit tags\": \"Benefit tags\",\n \"Add Company tag\": \"Add Company tag\",\n benefit_group_cat: \"Benefit group categories\",\n add_benefit_group_cat: \"Add Benefit group category\",\n add_cities: \"Add cities\",\n Cities: \"Cities\",\n edit_company_tag: \"Edit Company tag\",\n add_benefit_tag: \"Add Benefit tag\",\n edit_benefit_tag: \"Edit Benefit tag\",\n add_category: \"Add Category\",\n edit_category: \"Edit Category\",\n \"Reminders & Instructions\": \"Reminders & Instructions\",\n send_budget_remainders: \"Send Budget Reminders\",\n send_usage_instructions: \"Send Usage Instructions\",\n custom_email_notif: \"Custom Email Notifications\",\n send_message_to_other_usr: \"Send message to users of chosen companies\",\n choose_comp_as_receivers: \"Choose companies as receivers\",\n send_message: \"Send message\",\n Providers: \"Providers\",\n add_provider: \"Add Provider\",\n download_vendor_report: \"Download Vendor Report\",\n provider_enabled: \"Provider is enabled\",\n provider_disabled: \"Provider is disabled\",\n edit_provider: \"Edit Provider\",\n add_benefit_group: \"Add Benefit Group\",\n Company: \"Company\",\n Remote: \"Remote\",\n publish_ben_group: \"Publish benefit group\",\n save_ben_gr_as_draft: \"Save benefit group as draft\",\n Draft: \"Draft\",\n vouch_price: \"Vouchers price\",\n edit_bg: \"Edit Benefit Group\",\n add_benefit: \"Add Benefit\",\n Quantity: \"Quantity\",\n short_name: \"Short name\",\n short_name_info: \"Short name will be used as display name in the statistics.\",\n num_of_installments: \"Number of installments\",\n VAT: \"PDV\",\n usg_instr: \"Usage Instructions\",\n add_tag: \"Add tag\",\n submit_tag: \"Submit tag\",\n edit_benefit: \"Edit Benefit\",\n rs: \"SR\",\n en: \"EN\",\n sub_monthly: \"Subscribed monthly\",\n sub_one_time: \"Subscribed one-time\",\n sub_vouchers: \"Subscribed vouchers\",\n Installments: \"Installments\",\n MCP: \"MCP\",\n total_spent: \"Total Spent\",\n benefit_preview: \"Benefit Group {{name}} Preview\",\n NEW: \"NEW\",\n choosen_ben: \"Choosen benefit\",\n price_in: \"Price in\",\n dinars: \"RSD\",\n tokens: \"tokens\",\n global_company_settings: \"Global Company Settings\",\n Hr: \"HR\",\n\n HEALTH: \"HEALTH\",\n FAMILY: \"FAMILY\",\n \"FOOD & DRINK\": \"FOOD & DRINK\",\n HOME: \"HOME\",\n LEISURE: \"LEISURE\",\n \"WELLNESS & WELLBEING\": \"WELLNESS & WELLBEING\",\n \"CHARITY & FOUNDATIONS\": \"CHARITY & FOUNDATIONS\",\n \"LEARNING & DEVELOPMENT\": \"LEARNING & DEVELOPMENT\",\n COWORKING: \"COWORKING\",\n PETS: \"PETS\",\n \"SPORT & RECREATION\": \"SPORT & RECREATION\",\n MOBILITY: \"MOBILITY\",\n DISCOUNTS: \"DISCOUNTS\",\n SAVINGS: \"SAVINGS\",\n TRAVEL: \"TRAVEL\",\n GIFT: \"GIFT\",\n \"IT EQUIPMENT\": \"IT EQUIPMENT\",\n \"AVAILABLE IN ENGLISH\": \"AVAILABLE IN ENGLISH\",\n \"LOKALNI BENEFITI\": \"LOCAL BENEFITS\",\n REFUNDACIJA: \"REFUND\",\n \"**PARTNER NAGRAĐUJE**\": \"**PARTNER REWARDS**\",\n dnd_or: \"Drag and drop image or\",\n click_to_upload: \"click here to upload\",\n supported_formats: \"Supported formats .png, .jpg, .jpeg\",\n Draft: \"Draft\",\n delete_benefit_group_alert:\n \"Are you sure you want to delete this benefit group?\",\n delete_benefit_alert: \"Are you sure you want to delete benefit?\",\n benefit_name: \"Benefit name\",\n delete_tier_alert: \"Are you sure you want to delete this tier?\",\n \"Total Benefits\": \"Total Benefits\",\n Show: \"Show\",\n delete_company_alert: \"Are you sure you want to delete company?\",\n\n /* Toast Notifications */\n failed_to_get_favorite_benefits: \"Failed to get favorite benefits.\",\n failed_to_remove_from_favorites: \"Failed to remove benefit from favorites.\",\n failed_to_add_to_favorites: \"Failed to add benefit to favorites.\",\n failed_to_delete_company: \"Deleting Company failed.\",\n failed_to_send_ver_link:\n \"Verification link was not sent, please contact support.\",\n failed_to_enable_user: \"Enabling user failed.\",\n failed_to_login: \"Login failed.\",\n failed_to_reset_password: \"Reset password failed.\",\n add_rating: \"You must select rating!\",\n failed_to_leave_rating: \"Leaving Review failed.\",\n failed_to_get_benefit_groups: \"Fetching Benefit groups failed.\",\n failed_to_get_used_benefits: \"Fetching Used Benefits failed.\",\n failed_to_get_sub_benefit_groups:\n \"Fetching Subscribed Benefit groups failed.\",\n success_review: \"Review successfully sent!\",\n failed_to_create_user: \"Creating user failed.\",\n success_user_create: \"User successfully created!\",\n failed_to_get_companies: \"Fetching companies failed.\",\n failed_to_get_roles: \"Fetching roles failed.\",\n failed_to_edit_user: \"Edit user failed.\",\n failed_to_get_users: \"Fetching users failed\",\n failed_to_accept_policy: \"Accepting privacy policy failed.\",\n failed_to_delete_user: \"Deleting User failed.\",\n failed_to_get_popular_benefit: \"Unable to get most popular benefit.\",\n failed_to_get_notifications: \"Fetching notifications failed.\",\n failed_to_get_categories: \"Fetching Categories failed.\",\n failed_to_benefit_subscribe: \"Subscribe to benefit failed.\",\n failed_to_get_employees_tokens: \"Fetching employee budget failed.\",\n failed_to_redeem_voucher: \"Redeem voucher failed.\",\n failed_to_set_valid_file_format:\n \"Invalid file format. Please select a valid file.\",\n failed_to_mark_as_read: \"Marking as read failed.\",\n failed_to_onboard: \"Onboarding failed.\",\n failed_to_get_single_benefit_info:\n \"Unable to get information about single benefit.\",\n failed_to_get_tiers: \"Fetching tiers failed.\",\n select_tiers_warning: \"Please select employee tiers to enable benefit group\",\n failed_to_update_benefit_group: \"Update benefit group failed.\",\n failed_to_get_benefit_group_users: \"Fetching Benefit group users failed.\",\n success_employee_edit: \"Employee successfully edited!\",\n success_add_bonus: \"Bonus successfully created!\",\n success_add_employee: \"Employee successfully added!\",\n select_users_warning: \"Please select users.\",\n success_employees_add: \"Employees created\",\n success_employees_edit: \"Employees updated\",\n failed_to_get_benefit_tags: \"Fetching benefit tags failed.\",\n failed_to_get_budget_spending: \"Fetching Budget Spending failed.\",\n failed_to_get_budget_per_categories: \"Fetching Budget per categories failed.\",\n failed_to_get_synced_employees: \"Fetching Synced Employees failed.\",\n failed_to_get_tier_budgets: \"Fetching Tier Budgets failed.\",\n failed_to_get_top_benefits: \"Fetching Top Benefits failed.\",\n failed_to_get_total_budgets: \"Fetching Total Budgets failed.\",\n failed_to_get_statistics: \"Fetching Statistics failed.\",\n failed_to_get_company_usage: \"Fetching Company Usage failed.\",\n delete_benefit_group_info:\n \"In order to delete this benefit group please first delete all benefits belonging to this benefit group.\",\n success_add_benefit: \"Benefit successfully added!\",\n failed_to_publish_benefit: \"Benefit publishing failed.\",\n success_publish_benefit: \"Successfully published benefit.\",\n success_edit_benefit: \"Benefit successfully edited!\",\n success_add_company_benefit_group:\n \"Company benefit group successfully added!\",\n success_edit_company_benefit_group:\n \"Company benefit group successfully edited!\",\n success_onboarding_finish: \"Onboarding is already finished.\",\n fill_form_warning: \"Please fill form properly.\",\n step_1_must_be_filled_warning: \"First step must be filled correctly!\",\n failed_to_finish_onboarding: \"Finish onboarding failed.\",\n failed_to_get_token_value: \"Fetching budget value failed.\",\n failed_to_get_refund_list: \"Failed to get list of refunds.\",\n failed_to_accept_refund: \"Failed to accept the refund.\",\n failed_to_get_company_reimbursement_state:\n \"Unable to get company reimbursement state.\",\n success_tier_create: \"Tier successfully created!\",\n success_tier_edit: \"Tier successfully edited!\",\n failed_to_currency_change: \"Failed to change tokens in to the currency.\",\n failed_to_get_additional_logs: \"Fetching additional logs failed\",\n failed_to_get_user_info: \"Unable to fetch info for the user\",\n the_company_is_not_in_bonus_budget_warning:\n \"WARNING: The company is no longer in the bonus budget. Bonuses for all employees last until the end of this month!\",\n the_company_is_not_in_sso_mode_warning:\n \"WARNING: The company is no longer in the ONLY SSO Login mode!\",\n failed_to_get_admin_statistics: \"Unable to fetch admin statistics.\",\n failed_to_send_emails: \"Sending emails failed.\",\n failed_to_get_providers: \"Fetching providers failed.\",\n failed_to_get_report: \"Fetching report failed.\",\n provider_delete_info:\n \"In order to delete this provider please first delete all benefit groups and benefits belonging to the provider.\",\n proved_delete_question: \"Are you sure you want to delete this provider?\",\n success_add_benefit_group: \"Benefit group successfully created!\",\n success_edit_benefit_group: \"Benefit group successfully updated!\",\n success_create_provider: \"Provided successfully created!\",\n success_update_provider: \"Provided successfully updated!\",\n select_benefit_group_warning: \"You need to select benefit group!\",\n delete_benefit_group_question:\n \"Are you sure you want to delete this benefit?\",\n delete_benefit_group_description:\n \"There might be users that are subscribed to this benefit. If you delete it, they will be automatically unsubscribed from the benefit.\",\n delete_company_tag_question:\n \"Are you sure you want to delete this company tag?\",\n failed_to_delete_company_tag: \"Deleting company tag failed.\",\n success_delete_company_tag: \"Company tag successfully deleted!\",\n failed_to_delete_benefit_tag: \"Deleting benefit tag failed.\",\n success_delete_benefit_tag: \"Benefit tag successfully deleted!\",\n delete_benefit_group_category_question:\n \"Are you sure you want to delete this benefit group category?\",\n failed_to_delete_benefit_group_category:\n \"Deleting benefit group category failed.\",\n success_delete_benefit_group_category: \"Category successfully deleted!\",\n delete_city_question: \"Are you sure you want to delete this city?\",\n failed_to_delete_city: \"Failed to delete the city.\",\n success_add_tag: \"Benefit tag successfully created!\",\n success_update_tag: \"Benefit tag successfully updated!\",\n success_add_category: \"Category successfully created!\",\n success_update_category: \"Category successfully updated!\",\n success_add_benefit_category: \"Company tag successfully created!\",\n success_update_company_tag: \"Company tag successfully updated!\",\n failed_to_get_user_history: \"Unable to fetch user history.\",\n bonus_start_date_disclaimer:\n \"If you don't select a start date, bonus will be active from the first day of next month.\",\n bonus_end_date_disclaimer:\n \"If you don't select an end date, bonus will be active for a period of three months by default.\",\n \"Recurring Bonus\": \"Recurring Bonus\",\n mcp_period_info: \"*Minimum contract period: {{month}} months\",\n mcp_take_warning:\n \"Unsubscribing will not be possible until the commitment period ends, and once it ends, the subscription will be automatically canceled.\",\n mcp_take_info: \"*Price is split in installments as shown above.\",\n add_company: \"Add Company\",\n id_num: \"Identification number\",\n\n inv_email: \"Invoice email\",\n Address: \"Address\",\n enable_vat: \"Enable VAT\",\n vat_enable_desc:\n \"When you check the box, the company will be able to use VAT\",\n only_bonus_budget: \"Only bonus budget\",\n bonus_budget_desc:\n \"When you check the box, the company have only bonus budget\",\n only_sso_login: \"Only SSO login\",\n sso_login_desc:\n \"When you check the box, the companies HR have only SSO login option\",\n test_phase: \"Test phase\",\n test_phase_desc: \"When you check the box, the company is in the test phase\",\n enable_reimbursement: \"Enable reimbursement\",\n enable_reimbursement_desc:\n \"When you check the box, the company will be able to use reimbursement\",\n enable_currency: \"Enable Currency\",\n enable_currency_desc:\n \"When you check the box, the company will see the values in currency\",\n payment_deadline: \"Payment deadline\",\n company_tags: \"Company tags\",\n tag_name: \"Tag name\",\n add_tag: \"Add tag\",\n upload_logo: \"Upload logo as png file\",\n no_image: \"No image to display\",\n upload_image: \"Upload image\",\n Tags: \"Tags\",\n edit_company: \"Edit Company\",\n search_users: \"Search users\",\n add_user: \"Add User\",\n clear_all: \"Clear all\",\n Selected: \"Selected\",\n user_info: \"User info\",\n Roles: \"Roles\",\n first_name: \"First name\",\n last_name: \"Last name\",\n formal_mail_flag: \"Formal email flag\",\n additional_members_fields: \"Additional Member fields\",\n add_user: \"Add user\",\n Enroll: \"Enroll\",\n Phone: \"Phone\",\n Locations: \"Locations\",\n user_disabled: \"User is disabled\",\n enable_user: \"Enable user\",\n Role: \"Role\",\n \"Is Verified\": \"Is Verified\",\n edit_user: \"Edit User\",\n voc_name: \"Vocative name\",\n disabled_usr_desc: \"This user is currently disabled.\",\n remaining_tokens_total_tokens: \"Remaining budget / Total budget\",\n number_of_different_benefits:\n \"Total number of different benefits user is subscribed to\",\n month: \"Month\",\n \"one time\": \"One time\",\n voucher: \"Voucher\",\n subscribed_success_to_mcp_title:\n \"You have successfully subscribed to a benefit that has a minimum contract period.\",\n subscribed_success_to_mcp_info:\n \"Once it becomes active, you cannot unsubscribe from it until the minimum contract period expires. Then you will be unsubscribed automatically.\",\n subscribed_success_to_mcp_info2:\n \"Your subscription will last for {{minimumContractPeriod}} months, and will expire on\",\n Male: \"Male\",\n Female: \"Female\",\n Other: \"Other\",\n male: \"Male\",\n female: \"Female\",\n other: \"Other\",\n Married: \"Married\",\n Single: \"Single\",\n Divorced: \"Divorced\",\n married: \"Married\",\n single: \"Single\",\n divorced: \"Divorced\",\n ben_group_no_ben: \"Benefit Group currently does not have benefits.\",\n empty_list: \"List is empty\"\n};\n\nconst RS = {\n /* AUTH */\n LWE: \"Uloguj se sa email adresom\",\n LWM: \"Uloguj se sa Microsoft nalogom\",\n Password: \"Lozinka\",\n remember_me: \"Ostani upamćen\",\n forgot_password: \"Zaboravljena lozinka\",\n Login: \"Uloguj se\",\n go_back: \"Vrati se korak nazad\",\n \"404_desc\": \"Izvini, stranica nije pronađena\",\n submit_1: \"Pošalji\",\n required_field: \"* Obavezno polje\",\n logout: \"Odjavi se\",\n privacy_policy: \"Politika privatnosti\",\n terms: \"Uslovi korišćenja\",\n\n /* MEMBER */\n hi: \"Zdravo\",\n choose_benefits_message: \"odaberi svoje benefite za\",\n rt_tt_ratio: \"Preostali budžet / Ukupan budžet\",\n history: \"Istorija\",\n BTD: \"Povratak na panel\",\n user_did_not_choose: \"Korisnik nije odabrao nijedan benefit.\",\n time_to_pick: \"Preostalo za biranje benefita\",\n time_to_pick_locked: \"Platforma za odabir benefita biće otključana od:\",\n Member: \"Zaposleni\",\n available_prov: \"Dostupni provajderi\",\n Search: \"Pretraži\",\n Price: \"Cena\",\n SBG: \"Sortiraj benefit grupe\",\n sort_by: \"Sortiraj po\",\n filter_by: \"Filtriraj po\",\n locations: \"Lokacije\",\n SL: \"Odaberi lokacije\",\n FBT: \"Filtriraj tip benefita\",\n reset_filter: \"Resetuj filter\",\n close: \"Zatvori\",\n Category: \"Kategorija\",\n open_filters: \"Otvori filtere\",\n Browse_Benefits: \"Pretraži benefite\",\n Company_Benefits: \"Kompanijski benefiti\",\n My_Benefits: \"Moji benefiti\",\n Favorite_Benefits: \"Omiljeni benefiti\",\n NFB: \"Trenutno nema omiljenih benefita.\",\n TM: \"Ovaj mesec\",\n NM: \"Sledeći mesec\",\n DEF: \"Kompanijski benefiti\",\n SAB: \"Prikaži sve benefite\",\n SOC: \"Prikaži samo izmene\",\n NABTM: \"Nemaš odabranih benefita ovog meseca\",\n NABNM: \"Nemaš odabranih benefita za sledeći mesec\",\n NADB: \"Nemaš podrazumevane benefite\",\n add_favorites: \"Dodaj u omiljene\",\n remove_favorites: \"Ukloni iz omiljenih\",\n rate_the_benefit: \"Oceni ovaj benefit\",\n rating: \"ocene\",\n Price_includes_VAT: \"U cenu je uračunat PDV od\",\n remaining: \"Preostalo\",\n enter_the_value: \"Unesi vrednost u valuti\",\n Subscribe: \"Pretplati se\",\n Redeem: \"Odaberi\",\n Redeemed: \"Odabrano\",\n Return_voucher: \"Vrati vaučer\",\n upload: \"Otpremiti\",\n Unsubscribe: \"Otkaži pretplatu\",\n Subscribed: \"Pretplaćen\",\n Resubscribe: \"Ponovi pretplatu\",\n min_voucher_price: \"Minimalna cena vaučera je {{price}} u valuti\",\n tokens_shortage: \"Nemaš dovoljno budžeta da odabereš vaučer\",\n tokens_shortage_sub: \"Nemaš dovoljno budžeta da se pretplatiš.\",\n choose_benefits_message: \"Zdravo {{name}}, odaberi svoje benefite za\",\n\n /* HR */\n benefit_group_management: \"Upravljanje benefit grupom\",\n save: \"Sačuvaj\",\n cancel: \"Otkaži\",\n preview: \"Pregled\",\n disable_benefit_warning:\n \"Ako onemogućiš benefit, svi korisnici će automatski izgubiti pristup.\",\n tiers_info:\n \"Potrebno je da kreiraš razrede kako bi upravljali pristupom grupama benefita.\",\n on: \"UKLJUČENO\",\n off: \"ISKLJUČENO\",\n bg_disabled: \"Benefit grupa je onemogućena\",\n bg_enabled: \"Benefit grupa je omogućena\",\n access: \"Pristup\",\n uncheck_all: \"Poništi sve\",\n check_all: \"Odaberi sve\",\n disable_installments_warning:\n \"Ako ovo onemogućiš, korisnici neće moći da dobiju jednokratne benefite na rate.\",\n installments_enabled: \"Plaćanje na rate omogućeno\",\n installments_disabled: \"Plaćanje na rate onemogućeno\",\n download: \"Preuzmi\",\n active_users: \"Aktivni korisnici\",\n Benefits: \"Benefiti\",\n filter_by_group_category: \"Filtriraj po kategoriji grupe\",\n filter_by_benefit_tags: \"Filtriraj po tagovima benefita\",\n filter_by_status: \"Filtriraj po statusu\",\n enabled: \"Omogućeno\",\n disabled: \"Onemogućeno\",\n Dashboard: \"Kontrolni panel\",\n budget_spent_tiers: \"Budžet potrošen po razredima\",\n chosen_month_budget: \"Budžet za odabrani mesec\",\n previous_month_budget: \"Budžet za prethodni mesec\",\n total_budget: \"Ukupan budžet\",\n chosen_month: \"Odabrani mesec\",\n previous_month: \"Prethodni mesec\",\n budget_spent: \"Potrošen budžet\",\n budget_spent_by_category: \"Budžet potrošen po kategorijama\",\n tokens_used: \"Iskorišćeni budžet\",\n spent_budget: \"Potrošen budžet\",\n budget_unused: \"Nepotrošeni budžet\",\n usage_statistics: \"Statistika korišćenja\",\n total_users: \"Ukupno korisnika\",\n employees_using_the_system: \"Zaposleni koji koriste sistem\",\n employees_not_using_the_system: \"Zaposleni koji ne koriste sistem\",\n Employees: \"Zaposleni\",\n gen_usr_rep: \"Generiši izveštaj o korišćenju\",\n gen_ref_rep: \"Generiši izveštaj o refundaciji\",\n select_report_type: \"Odaberi tip izveštaja\",\n chosen_for_this_month: \"Odabrano za ovaj mesec\",\n chosen_for_next_month: \"Odabrano za naredni mesec\",\n \"Select Item\": \"Odaberi\",\n downloading: \"Preuzimanje\",\n sync_widget: \"Sinhronizuj widget\",\n sync_title: \"Sinhronizovani zaposleni\",\n top_benefits: \"Najbolji benefiti\",\n combination_statistics: \"Statistika kombinacija\",\n uniquely_chosen_combinations_title:\n \"jedinstveno odabrane kombinacije benefita\",\n over_2_mil: \"Preko 2 miliona mogućih kombinacija\",\n Refunds: \"Refundacija\",\n Settings: \"Podešavanja\",\n \"Company Benefits\": \"Kompanijski benefiti\",\n Logout: \"Odjavi se\",\n left: \"preostalo\",\n benefit_has_installments: \"Ova grupa benefita ima cenu podeljenu na rate.\",\n decline_unsub_warning:\n \"Otkazivanje pretplate neće biti moguće dok ne istekne minimalni period ugovora, a nakon isteka, pretplata će automatski biti ukinuta\",\n company_benefit_groups: \"Kompanijske benefit grupe\",\n add_local_benefit_groups: \"Dodaj kompanijsku benefit grupu\",\n edit_local_benefit_group: \"Ažuriraj kompanijsku benefit grupu\",\n please_wait: \"Molimo sačekaj\",\n basic_info: \"Osnovne informacije\",\n Name: \"Ime\",\n Description: \"Opis\",\n Summary: \"Rezime\",\n Photo: \"Fotografija\",\n Taxes: \"Porezi\",\n Update: \"Ažuriraj\",\n add_benefit: \"Dodaj benefit\",\n edit_local_benefit: \"Ažuriraj benefit\",\n title: \"naslov\",\n expiration_type: \"Tip isteka\",\n min_contract_period: \"Minimalni period ugovora\",\n ben_price_in_tokens: \"Cena benefita u tokenima\",\n save_as_draft: \"Sačuvaj benefit kao nacrt\",\n publish_benefit: \"Objavi benefit\",\n Create: \"Dodaj\",\n select_categories: \"Odaberi kategoriju\",\n benefits: \"Benefiti\",\n Vouchers: \"Vaučeri\",\n Options: \"Opcije\",\n Tokens: \"Tokeni\",\n only_predefined_values: \"Samo unapred definisane vrednosti\",\n refund_voucher: \"Vaučer za refundaciju\",\n Publish: \"Objavi\",\n Edit: \"Ažuriraj\",\n duration_type: \"Tip trajanja\",\n add_local_benefit: \"Dodaj benefit\",\n search_employees: \"Pretraži zaposlene\",\n add_employee: \"Dodaj zaposlenog\",\n add_employees_csv: \"Dodaj CSV zaposlenih\",\n update_employees_csv: \"Ažuriraj CSV zaposlenih\",\n add_bonus: \"Dodaj bonus\",\n filter_by_tiers: \"Filtriraj po razredima\",\n filter_by_budget_percentage: \"Filtriraj po potrošenom budžetu\",\n Sort: \"Sortiraj\",\n sort_by: \"Sortiraj po\",\n Selected: \"Odabrano\",\n Delete: \"Obriši\",\n no_result_found: \"Nema rezultata\",\n Tier: \"Razred\",\n Budget: \"Budžet\",\n \"Spent(%)\": \"Potrošeno(%)\",\n Verified: \"Verifikovano\",\n add_employees: \"Dodaj zaposlene\",\n download_template: \"Preuzmi šablon\",\n download_template_info:\n \"Da bi dodao zaposlene, prvo moraš preuzeti .csv šablon klikom na dugme ispod.\",\n submit_the_file: \"Pošalji datoteku\",\n upload_the_file: \"Otpremi datoteku\",\n step2_title_employees: \"Popuni fajl sa zaposlenima\",\n step2_text_1:\n \"Nakon što preuzmeš .csv šablon, otvori fajl i popuni ga sa zaposlenima. Sačuvaj dokument kao CSV fajl i otpremi ga.\",\n step2_text_2:\n \"Unutar .csv šablona naći ćeš primere kako treba da dodaš svoje zaposlene.\",\n required_fields_employees:\n \"Polja: ime, prezime, email, razred i lokacije su obavezna i ne smeju biti prazna.\",\n step2_title_bonuses: \"Popuni fajl sa bonusima\",\n step2_text_3:\n \"Nakon što popuni .csv šablon sa zaposlenima, možete ga popuniti bonusima.\",\n bonus_type_info:\n \"BonusType može imati jednu od sledećih vrednosti: mesečno, tri_meseca, šest_meseci ili godišnje.\",\n bonus_start_date_info:\n \"Ako uneseš polje BonusAmount, a BonusStartDate je prazan, stavićemo podrazumevani datum kada je CSV otpremljen.\",\n bonus_end_date_info:\n \"Ako uneseš polje BonusAmount, a BonusEndDate je prazan, stavićemo podrazumevani datum na 3 meseca od dana kada je CSV otpremljen.\",\n bonus_type_default_info:\n \"Ako uneseš polje BonusAmount, a BonusType je prazan, postavićemo podrazumevani tip kao jednokratni i neobnovljiv.\",\n required_fields_bonuses:\n \"Ako uneseš BonusStartDate, BonusEndDate ili BonusType, obavezno polje je BonusAmount.\",\n update_employees: \"Ažuriraj Zaposlene\",\n update_employees_info:\n \"Da bi ažurirao zaposlene, prvo moraš preuzeti .csv šablon klikom na dugme ispod.\",\n \"Add Bonuses\": \"Dodaj bonus\",\n of_tokens: \"u tokenima\",\n subject: \"Tema\",\n message: \"Poruka\",\n \"Bonus Start Date\": \"Datum početka bonusa\",\n \"Bonus End Date\": \"Datum završavanja bonusa\",\n \"User is disabled\": \"Korisnik je onemogućen\",\n resend_ver_link: \"Pošalji verifikacioni link\",\n add_bonus_budget: \"Dodaj bonus budžet\",\n enable_user: \"Omogući korisnika\",\n Gender: \"Pol\",\n \"Birth date\": \"Datum rođenja\",\n \"Enroll date\": \"Datum upisa\",\n Relationship: \"Status veze\",\n Team: \"Tim\",\n Bonuses: \"Bonusi\",\n Contact: \"Kontakt\",\n Details: \"Detalji\",\n Rank: \"Rang\",\n Surname: \"Prezime\",\n Birthday: \"Datum rođenja\",\n \"Unique ID\": \"Jedinstveni ID\",\n \"Branch Code\": \"Šifra filijale\",\n disabled_user_info: \"Ovaj korisnik je trenutno onemogućen.\",\n Info: \"Informacije\",\n Position: \"Pozicija\",\n Family: \"Porodica\",\n \"Monthly tokens\": \"Mesečni budžet\",\n \"Enable HR Role\": \"Omogući HR ulogu\",\n \"Edit Employee\": \"Ažuriraj zaposlenog\",\n \"Benefit Group\": \"Benefit grupa\",\n Expiration: \"Istek\",\n Provider: \"Provajder\",\n \"Disable User\": \"Onemogući korisnika\",\n choose_disabling_date: \"Odaberi kada želiš da korisnik bude obrisan.\",\n immediate_delete: \"Ako želiš da ga obrišeš odmah, odaberi današnji datum.\",\n Disable: \"Onemogući\",\n employees: \"zaposlene\",\n delete_employees: \"Odaberi kada želite da\",\n to_be_deleted: \"budu obrisani.\",\n \"Rollover duration (cycles)\": \"Trajanje prenosa (ciklusi)\",\n \"Rollover resets on\": \"Prenos se obnavlja na\",\n turned_on_rollover_info:\n \"Ako je ovo uključeno, omogućava prenosenje neiskorišćenog budžeta svakog korisnika u naredni mesec.\",\n max_budget_info:\n \"Na ovaj način možeš maksimizirati korišćenje vašeg budžeta za beneficije.\",\n \"Scheduled rollover deletion\": \"Zakazano brisanje prenosa\",\n \"Add Tier\": \"Dodaj razred\",\n \"Rollover is enabled\": \"Prenos je omogućen\",\n \"Rollover is disabled\": \"Prenos je onemogućen\",\n \"tier settings\": \"Podešavanja razreda\",\n \"company brand settings\": \"Podešavanja brenda kompanije\",\n \"Add logo\": \"Dodaj logo\",\n Remove: \"Ukloni\",\n \"Company logo\": \"Logo kompanije\",\n upload_logo_info: \"Postavi logo sa pejzažnom orijentacijom (min 100x100px)\",\n benefiti_welcome: \"Dobrodošli na platformu Benefiti.rs!\",\n first_time_setup: \"Ovo je vaše prvo podešavanje kompanije.\",\n add_tiers_info:\n \"Dodaj onoliko razreda koliko ti je potrebno, imenuj ih i odluči koliko tokina se mesečno dodeljuje svakom razredu. Ovo možeš kasnije izmeniti!\",\n \"Edit Tier\": \"Ažuriraj razred\",\n empty_refunds: \"Još uvek nema refundacija.\",\n Rejected: \"Odbijeno\",\n Accepted: \"Prihvaćeno\",\n Pending: \"Na čekanju\",\n \"Show All\": \"Prikaži sve\",\n Status: \"Status\",\n Branch: \"Filijala\",\n selected: \"odabrano\",\n Accept: \"Prihvati\",\n or: \"ili\",\n Decline: \"Odbij\",\n employee: \"Zaposleni\",\n Price: \"Cena\",\n Date: \"Datum\",\n \"Auto Accept\": \"Automatski prihvati\",\n \"Auto Decline\": \"Automatski odbij\",\n Type: \"Tip\",\n \"Single Refund\": \"Jedna refundacija\",\n Image: \"Slika\",\n Activity: \"Aktivnost\",\n Companies: \"Kompanije\",\n Users: \"Korisnici\",\n Notifications: \"Obaveštenja\",\n show_rollover_dates: \"Prikaži datume resetovanja prenosa\",\n rollover_resets: \"Resetovanje prenosa\",\n no_rollover: \"Ova kompanija nema prenos\",\n show_usage_report: \"Prikaži izveštaj o korišćenju\",\n \"Select company\": \"Odaberi kompaniju\",\n unique_user_sub: \"Jedinstvene pretplate korisnika\",\n \"Select Date\": \"Odaberi datum\",\n \"Choose month\": \"Odaberi mesec\",\n filter_by_companies: \"Filtriraj po kompanijama\",\n filter_by_roles: \"Filtriraj po ulogama\",\n prev_day: \"Prethodni dan\",\n next_day: \"Sledeći dan\",\n no_activity_logs: \"Nema zapisa za \",\n \"Company tags\": \"Oznake kompanije\",\n \"Benefit tags\": \"Oznake benefita\",\n \"Add Company tag\": \"Dodaj oznaku kompanije\",\n benefit_group_cat: \"Kategorije grupa benefita\",\n add_benefit_group_cat: \"Dodaj kategoriju grupe benefita\",\n add_cities: \"Dodaj gradove\",\n Cities: \"Gradovi\",\n edit_company_tag: \"Izmeni oznaku kompanije\",\n add_benefit_tag: \"Dodaj oznaku benefita\",\n edit_benefit_tag: \"Izmeni oznaku benefita\",\n add_category: \"Dodaj kategoriju\",\n edit_category: \"Izmeni kategoriju\",\n \"Reminders & Instructions\": \"Podsetnici i uputstva\",\n send_budget_remainders: \"Pošalji podsetnike za budžet\",\n send_usage_instructions: \"Pošalji uputstva za korišćenje\",\n custom_email_notif: \"Prilagođena e-mail obaveštenja\",\n send_message_to_other_usr: \"Pošalji poruku korisnicima odabranih kompanija\",\n choose_comp_as_receivers: \"Odaberi kompanije kao primaoce\",\n send_message: \"Pošalji poruku\",\n Providers: \"Provajderi\",\n add_provider: \"Dodaj provajdera\",\n download_vendor_report: \"Preuzmi izveštaj provajdera\",\n provider_enabled: \"Provajder je omogućen\",\n provider_disabled: \"Provajder je onemogućen\",\n edit_provider: \"Ažuriraj provajdera\",\n add_benefit_group: \"Dodaj benefit grupu\",\n Company: \"Kompanija\",\n Remote: \"Remote\",\n publish_ben_group: \"Objavi grupu benefita\",\n save_ben_gr_as_draft: \"Sačuvaj grupu benefita kao nacrt\",\n Draft: \"Nacrt\",\n vouch_price: \"Cena vaučera\",\n edit_bg: \"Ažuriraj benefit grupu\",\n add_benefit: \"Dodaj benefit\",\n Quantity: \"Količina\",\n short_name: \"Kratko ime\",\n short_name_info: \"Kratko ime će se koristiti kao prikazno ime u statistici.\",\n num_of_installments: \"Broj rata\",\n VAT: \"PDV\",\n usg_instr: \"Uputstvo za upotrebu\",\n add_tag: \"Dodaj oznaku\",\n submit_tag: \"Pošalji oznaku\",\n edit_benefit: \"Ažuriraj benefit\",\n rs: \"SR\",\n en: \"EN\",\n sub_monthly: \"Pretplaćeno mesečno\",\n sub_one_time: \"Pretplaćeno jednokratno\",\n sub_vouchers: \"Pretplaćeni vaučeri\",\n Installments: \"Rata\",\n MCP: \"MPU\",\n total_spent: \"Ukupno potrošeno\",\n benefit_preview: \"Pregled benefit grupe {{name}}\",\n NEW: \"NOVO\",\n choosen_ben: \"Odabrani benefit\",\n price_in: \"Cena u\",\n dinars: \"RSD\",\n tokens: \"tokenima\",\n global_company_settings: \"Globalna podešavanja kompanije\",\n \"currency is enabled\": \"Prebacivanje tokena u valutu je uključeno\",\n \"currency is disabled\": \"Prebacivanje tokena u valutu je isključeno\",\n Hr: \"HR\",\n HEALTH: \"ZDRAVLJE\",\n FAMILY: \"PORODICA\",\n \"FOOD & DRINK\": \"HRANA I PIĆE\",\n HOME: \"DOM\",\n LEISURE: \"SLOBODNO VREME\",\n \"WELLNESS & WELLBEING\": \"WELLNESS I DOBROBIT\",\n \"CHARITY & FOUNDATIONS\": \"DOBROTVORNE ORGANIZACIJE I FONDACIJE\",\n \"LEARNING & DEVELOPMENT\": \"UČENJE I RAZVOJ\",\n COWORKING: \"COWORKING\",\n PETS: \"KUĆNI LJUBIMCI\",\n \"SPORT & RECREATION\": \"SPORT I REKREACIJA\",\n MOBILITY: \"MOBILNOST\",\n DISCOUNTS: \"POPUSTI\",\n SAVINGS: \"ŠTEDNJA\",\n TRAVEL: \"PUTOVANJA\",\n GIFT: \"POKLON\",\n \"IT EQUIPMENT\": \"IT OPREMA\",\n \"AVAILABLE IN ENGLISH\": \"DOSTUPNO NA ENGLESKOM\",\n \"LOKALNI BENEFITI\": \"LOKALNI BENEFITI\",\n REFUNDACIJA: \"REFUNDACIJA\",\n \"**PARTNER NAGRAĐUJE**\": \"**PARTNER NAGRAĐUJE**\",\n dnd_or: \"Prevuci i otpusti sliku ili\",\n click_to_upload: \"klikni ovde da je otpremiš\",\n supported_formats: \"Podržani formati su .png, .jpg, .jpeg\",\n Draft: \"Nacrt\",\n delete_benefit_group_alert:\n \"Da li sigurno želiš da obrišeš ovu benefit grupu?\",\n delete_benefit_alert: \"Da li sigurno želiš da obrišeš benefit?\",\n benefit_name: \"Ime benefita\",\n delete_tier_alert: \"Da li sigurno želiš da obrišeš ovaj razred?\",\n \"Total benefits\": \"Ukupno benefita\",\n delete_company_alert: \"Da li si siguran da želiš da obrišeš kompaniju?\",\n\n /* Toast Notifications */\n failed_to_get_favorite_benefits: \"Neuspešno dobijanje omiljenih benefita.\",\n failed_to_remove_from_favorites:\n \"Neuspešno uklanjanje iz omiljenih benefita.\",\n failed_to_add_to_favorites: \"Neuspešno dodavanje u omiljene benefite.\",\n failed_to_delete_company: \"Brisanje kompanije nije uspelo.\",\n failed_to_send_ver_link:\n \"Link za verifikaciju nije poslat, kontaktiraj podršku.\",\n failed_to_enable_user: \"Omogućavanje korisnika nije uspelo.\",\n failed_to_login: \"Prijava nije uspela.\",\n failed_to_reset_password: \"Resetovanje lozinke nije uspelo.\",\n add_rating: \"Moraš izabrati ocenu!\",\n failed_to_leave_rating: \"Ostavljanje recenzije nije uspelo.\",\n failed_to_get_benefit_groups: \"Preuzimanje benefit grupa nije uspelo.\",\n failed_to_get_used_benefits: \"Preuzimanje korišćenih benefita nije uspelo.\",\n failed_to_get_sub_benefit_groups:\n \"Preuzimanje pretplaćenih benefit_grupa nije uspelo.\",\n success_review: \"Recenzija uspešno poslata!\",\n failed_to_create_user: \"Kreiranje korisnika nije uspelo.\",\n success_user_create: \"Korisnik uspešno kreiran!\",\n failed_to_get_companies: \"Preuzimanje kompanija nije uspelo.\",\n failed_to_get_roles: \"Preuzimanje uloga nije uspelo.\",\n failed_to_edit_user: \"Izmena korisnika nije uspela.\",\n failed_to_get_users: \"Preuzimanje korisnika nije uspelo.\",\n failed_to_accept_policy: \"Prihvatanje politike privatnosti nije uspelo.\",\n failed_to_delete_user: \"Brisanje korisnika nije uspelo.\",\n failed_to_get_popular_benefit:\n \"Neuspešno dobijanje najpopularnijih benefita.\",\n failed_to_get_notifications: \"Preuzimanje obaveštenja nije uspelo.\",\n failed_to_get_categories: \"Preuzimanje kategorija nije uspelo.\",\n failed_to_benefit_subscribe: \"Pretplata na benefit nije uspela.\",\n failed_to_get_employees_tokens: \"Preuzimanje budžeta zaposlenih nije uspelo.\",\n failed_to_redeem_voucher: \"Iskorišćavanje vaučera nije uspelo.\",\n failed_to_set_valid_file_format:\n \"Nevalidan format datoteke. Molimo da odabereš važeći format.\",\n failed_to_mark_as_read: \"Označavanje kao pročitano nije uspelo.\",\n failed_to_onboard: \"Onboarding nije uspeo.\",\n failed_to_get_single_benefit_info:\n \"Nije moguće preuzeti informacije o pojedinačnom benefitu.\",\n failed_to_get_tiers: \"Preuzimanje nivoa nije uspelo.\",\n select_tiers_warning:\n \"Molimo da odabereš razrede zaposlenih za omogućavanje benefit grupe.\",\n failed_to_update_benefit_group: \"Ažuriranje benefit grupe nije uspelo.\",\n failed_to_get_benefit_group_users:\n \"Preuzimanje korisnika benefit grupe nije uspelo.\",\n success_employee_edit: \"Zaposleni uspešno ažuriran!\",\n success_add_bonus: \"Bonus uspešno kreiran!\",\n success_add_employee: \"Zaposleni uspešno dodat!\",\n select_users_warning: \"Molimo vas da odaberete korisnike.\",\n success_employees_add: \"Zaposleni uspešno kreirani.\",\n success_employees_edit: \"Zaposleni uspešno ažurirani.\",\n failed_to_get_benefit_tags: \"Preuzimanje oznaka beneficija nije uspelo.\",\n failed_to_get_budget_spending: \"Preuzimanje budžeta nije uspelo.\",\n failed_to_get_budget_per_categories:\n \"Preuzimanje budžeta po kategorijama nije uspelo.\",\n failed_to_get_synced_employees:\n \"Preuzimanje sinhronizovanih zaposlenih nije uspelo.\",\n failed_to_get_tier_budgets: \"Preuzimanje budžeta po razredima nije uspelo.\",\n failed_to_get_top_benefits: \"Preuzimanje top benefita nije uspelo.\",\n failed_to_get_total_budgets: \"Preuzimanje ukupnih budžeta nije uspelo.\",\n failed_to_get_statistics: \"Preuzimanje statistika nije uspelo.\",\n failed_to_get_company_usage: \"Preuzimanje korišćenja kompanije nije uspelo.\",\n delete_benefit_group_info:\n \"Kako bi obrisao/obrisala ovu benefit grupu, prvo moraš obrisati sve benefite u toj grupi.\",\n success_add_benefit: \"Benefit uspešno kreiran!\",\n failed_to_publish_benefit: \"Objavljivanje benefita nije uspelo.\",\n success_publish_benefit: \"Benefit uspešno objavljen.\",\n success_edit_benefit: \"Benefit uspešno ažuriran!\",\n success_add_company_benefit_group:\n \"Kompanijska benefit grupa je uspešno dodata!\",\n success_edit_company_benefit_group:\n \"Kompanijska benefit grupa je uspešno ažurirana!\",\n success_onboarding_finish: \"Onboarding je već završen.\",\n fill_form_warning: \"Molimo te da pravilno popuniš formu.\",\n step_1_must_be_filled_warning: \"Prvi korak mora biti pravilno popunjen!\",\n failed_to_finish_onboarding: \"Završetak onboardinga nije uspeo.\",\n failed_to_get_token_value: \"Preuzimanje vrednosti budžeta nije uspelo.\",\n failed_to_get_refund_list: \"Preuzimanje liste refundacija nije uspelo.\",\n failed_to_accept_refund: \"Prihvatanje refundacije nije uspelo.\",\n failed_to_get_company_reimbursement_state:\n \"Nije moguće preuzeti stanje refundacije kompanije.\",\n success_tier_create: \"Razred uspešno kreiran!\",\n success_tier_edit: \"Razred uspešno ažuriran!\",\n failed_to_currency_change: \"Promena tokena u valutu nije uspela.\",\n failed_to_reset_password: \"Resetovanje lozinke nije uspelo.\",\n failed_to_get_additional_logs: \"Preuzimanje dodatnih logova nije uspelo.\",\n failed_to_get_user_info: \"Nije moguće preuzeti informacije o korisniku.\",\n the_company_is_not_in_bonus_budget_warning:\n \"UPOZORENJE: Kompanija više nije u bonus budžetu. Bonusi za sve zaposlene traju do kraja ovog meseca!\",\n the_company_is_not_in_sso_mode_warning:\n \"UPOZORENJE: Kompanija više nije u režimu samo SSO prijavljivanja!\",\n failed_to_get_admin_statistics:\n \"Nije moguće preuzeti administratorske statistike.\",\n failed_to_send_emails: \"Slanje mejlova nije uspelo.\",\n failed_to_get_providers: \"Preuzimanje provajdera nije uspelo.\",\n failed_to_get_report: \"Preuzimanje izveštaja nije uspelo.\",\n provider_delete_info:\n \"Kako bi obrisali ovog provajdera, prvo moraš obrisati sve benefit grupe i benefite koje pripadaju provajderu.\",\n proved_delete_question:\n \"Da li si sigurnan da želiš da obrišeš ovog provajdera?\",\n success_add_benefit_group: \"Benefit grupa uspešno kreirana!\",\n success_edit_benefit_group: \"Benefit grupa uspešno ažurirana!\",\n success_create_provider: \"Provajder uspešno kreiran!\",\n success_update_provider: \"Provajder uspešno ažuriran!\",\n select_benefit_group_warning: \"Moraš odabrati benefit grupu!\",\n delete_benefit_group_question:\n \"Da li si sigurnan da želiš da obrišeš ovu benefit grupu?\",\n delete_benefit_group_description:\n \"Moguće je da korisnici pretplaćeni na ovu benefit grupu. Ako je obrišeš, automatski će biti odjavljeni.\",\n delete_company_tag_question:\n \"Da li si siguran da želiš da obrišeš ovu oznaku kompanije?\",\n failed_to_delete_company_tag: \"Brisanje oznake kompanije nije uspelo.\",\n success_delete_company_tag: \"Oznaka kompanije uspešno obrisana!\",\n failed_to_delete_benefit_tag: \"Brisanje oznake beneficije nije uspelo.\",\n success_delete_benefit_tag: \"Oznaka benefita uspešno obrisana!\",\n delete_benefit_group_category_question:\n \"Da li si siguran da želiš da obrišeš ovu kategoriju benefit grupe?\",\n failed_to_delete_benefit_group_category:\n \"Brisanje kategorije benefit grupe nije uspelo.\",\n success_delete_benefit_group_category: \"Kategorija uspešno obrisana!\",\n delete_city_question: \"Da li si siguran da želiš da obrišeš ovaj grad?\",\n failed_to_delete_city: \"Brisanje grada nije uspelo.\",\n success_add_tag: \"Oznaka benefita uspešno kreirana!\",\n success_update_tag: \"Oznaka benefita uspešno ažurirana!\",\n success_add_city: \"Grad uspešno dodat!\",\n success_update_city: \"Grad uspešno ažuriran!\",\n delete_country_question: \"Da li si siguran da želiš da obrišeš ovu državu?\",\n failed_to_delete_country: \"Brisanje države nije uspelo.\",\n success_add_country: \"Država uspešno dodata!\",\n success_update_country: \"Država uspešno ažurirana!\",\n failed_to_get_companies_benefit_statistics:\n \"Preuzimanje statistika beneficija kompanija nije uspelo.\",\n failed_to_upload_csv_file: \"Otpremanje CSV datoteke nije uspelo.\",\n bonus_start_date_disclaimer:\n \"Ako ne odaberete datum početka, bonus će biti aktivan od prvog dana sledećeg meseca.\",\n bonus_end_date_disclaimer:\n \"Ako ne odaberete datum završetka, bonus će po defaultu biti aktivan na period od tri meseca.\",\n \"Recurring Bonus\": \"Ponavljajući bonus\",\n mcp_period_info: \"*Minimalni period ugovora: {{month}} meseca\",\n mcp_take_warning:\n \"Otkazivanje pretplate neće biti moguće dok ne istekne minimalni period ugovora, a nakon isteka, pretplata će automatski biti ukinuta.\",\n mcp_take_info: \"*Cena je podeljena na rate kako je prikazano gore.\",\n add_company: \"Dodaj kompaniju\",\n Subscriptions: \"Pretplate\",\n company_name: \"Ime kompanije\",\n id_num: \"Identifikacioni broj\",\n inv_email: \"Email za fakture\",\n Address: \"Adresa\",\n enable_vat: \"Omogući PDV\",\n vat_enable_desc: \"Kada označiš polje, kompanija će moći da koristi PDV\",\n only_bonus_budget: \"Samo budžet za bonuse\",\n bonus_budget_desc: \"Kada označiš polje, kompanija ima samo budžet za bonuse\",\n only_sso_login: \"Samo SSO prijava\",\n sso_login_desc:\n \"Kada označiš polje, HR kompanije ima samo opciju za SSO prijavu\",\n test_phase: \"Test faza\",\n test_phase_desc: \"Kada označiš polje, kompanija je u test fazi\",\n enable_reimbursement: \"Omogući refundaciju\",\n enable_reimbursement_desc:\n \"Kada označiš polje, kompanija će moći da koristi refundaciju\",\n enable_currency: \"Omogući valutu\",\n enable_currency_desc:\n \"Kada označiš polje, kompanija će videti vrednosti u valuti\",\n payment_deadline: \"Rok za plaćanje\",\n company_tags: \"Oznake kompanije\",\n tag_name: \"Naziv oznake\",\n add_tag: \"Dodaj oznaku\",\n upload_logo: \"Otpremi logo u png formatu\",\n no_image: \"Nema slike za prikaz\",\n upload_image: \"Otpremi sliku\",\n \"Payment Deadline\": \"Rok za plaćanje\",\n \"Invoice email\": \"Email za fakture\",\n Tags: \"Oznake\",\n edit_company: \"Ažuriraj kompaniju\",\n search_users: \"Pretraga korisnika\",\n add_user: \"Dodaj korisnika\",\n clear_all: \"Obriši sve\",\n Selected: \"Odabrano\",\n user_info: \"Informacije o korisniku\",\n Roles: \"Uloge\",\n first_name: \"Ime\",\n last_name: \"Prezime\",\n formal_mail_flag: \"Zastavica za formalni email\",\n additional_members_fields: \"Dodatna polja za zaposlene\",\n Enroll: \"Datum upisa\",\n Phone: \"Telefon\",\n Locations: \"Lokacije\",\n user_disabled: \"Korisnik je onemogućen\",\n enable_user: \"Omogući korisnika\",\n Role: \"Uloga\",\n \"Is Verified\": \"Verifikovan\",\n edit_user: \"Ažuriraj korisnika\",\n voc_name: \"Vokativno ime\",\n disabled_usr_desc: \"Ovaj korisnik je trenutno onemogućen.\",\n remaining_tokens_total_tokens: \"Preostali budžet / Ukupan budžet\",\n number_of_different_benefits:\n \"Ukupan broj različitih benefita na koje je korisnik pretplaćen\",\n month: \"Mesečni\",\n \"one time\": \"Jednokratni\",\n voucher: \"Vaučer\",\n subscribed_success_to_mcp_title:\n \"Uspešno si se pretplatio/pretplatila na benefit koji ima minimalni period trajanja ugovora.\",\n subscribed_success_to_mcp_info:\n \"Kada benefit postane aktivan, nećeš moći da ga otkažeš dok ne istekne minimalni period ugovora. Nakon toga, tvoja pretplata će biti automatski otkazana.\",\n subscribed_success_to_mcp_info2:\n \"Pretplata će trajati {{minimumContractPeriod}} meseci i isteći će\",\n Male: \"Muški\",\n Female: \"Ženski\",\n Other: \"Drugo\",\n male: \"Muški\",\n female: \"Ženski\",\n other: \"Drugo\",\n married: \"Oženjen/Udata\",\n single: \"Slobodan/Slobodna\",\n divorced: \"Razveden/Razvedena\",\n Married: \"Oženjen/Udata\",\n Single: \"Slobodan/Slobodna\",\n Divorced: \"Razveden/Razvedena\",\n ben_group_no_ben: \"Benefit grupa trenutno nema benefita.\",\n empty_list: \"Lista je prazna\"\n};\n\nconst RESOURCES = { ENG: ENG, RS: RS };\n\nexport default RESOURCES;\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\nimport RESOURCES from \"./language\";\n\nconst resources = {\n en: { translation: RESOURCES.ENG },\n rs: { translation: RESOURCES.RS }\n};\n\nconst locales = localStorage.getItem(\"locales\");\n\ni18n.use(initReactI18next).init({\n debug: process.env.NODE_ENV === \"production\",\n resources,\n fallbackLng: locales || \"rs\",\n interpolation: { escapeValue: false }\n});\n","import \"react-app-polyfill/ie9\";\nimport \"react-app-polyfill/stable\";\nimport React, { useEffect } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport AppRouter from \"./Router\";\nimport { useStore } from \"./store/store\";\nimport { Provider } from \"react-redux\";\nimport { UserProvider } from \"./modules/user/context/user.context\";\n\n// MSAL imports\nimport { PublicClientApplication, EventType } from \"@azure/msal-browser\";\nimport { msalConfig } from \"./config/azureAuth.config\";\nimport { MsalProvider } from \"@azure/msal-react\";\nimport { ToastContainer } from \"react-toastify\";\nimport ErrorBoundary from \"./components/ErrorBoundary/ErrorBoundary\";\nimport { GlobalErrorBoundaryFallback } from \"./components/ErrorBoundary/GlobalErrorBoundaryFallback\";\n\nimport \"./utils/i18n\";\n\nconst Application = ({ pca }) => {\n const store = useStore();\n\n useEffect(() => {\n const locales = localStorage.getItem(\"locales\");\n\n if (!locales) localStorage.setItem(\"locales\", \"rs\");\n }, []);\n\n return (\n \n }>\n \n \n \n \n \n \n \n \n );\n};\n\nexport const msalInstance = new PublicClientApplication(msalConfig);\n\nmsalInstance.initialize().then(() => {\n // Default to using the first account if no account is active on page load\n if (\n !msalInstance.getActiveAccount() &&\n msalInstance.getAllAccounts().length > 0\n ) {\n // Account selection logic is app dependent. Adjust as needed for different use cases.\n msalInstance.setActiveAccount(msalInstance.getAllAccounts()[0]);\n }\n\n // Optional - This will update account state if a user signs in from another tab or window\n msalInstance.enableAccountStorageEvents();\n\n msalInstance.addEventCallback(event => {\n if (event.eventType === EventType.LOGIN_SUCCESS && event.payload.account) {\n const account = event.payload.account;\n msalInstance.setActiveAccount(account);\n }\n });\n\n ReactDOM.render(\n ,\n document.getElementById(\"root\")\n );\n});\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAFCAYAAAB8ZH1oAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAACqADAAQAAAABAAAABQAAAAC5KC8kAAAAO0lEQVQIHWPkyjjc8P/f/3oGPICRibGRESSPTzFI0bcZtg1ghbgUwxSB5OEK0RUjKwLJYQCQM0AYXQIASEMhJETMzfgAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/activity-log.99f51e14.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAsQAAALEBxi1JjQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAF/SURBVEiJ7dS/SxVQFAfwj09N66mDtPgrSfAHpP0Yk/YcQ1taXMWgoEF9Cg79B00ORnvU0wIDf2BboxBNURAoBYrgoFNNNdw72OXqe67iF85yzvd87zn3nHu5wLlHTYV4I0Ywhlu4hgJ+YhtreIdfZz24Ec+whw1M4AaaUUQfRvESB3iNgWrF7+FHrGyoCn4zpuJBz1F3GnkO+3iQ+LtQxlG0ZfQnnA5s4hOupsL1eIXPuJ4R38U02qPNRF9nRmcR347HLmMdS7iS6aocBVOU8Cbjh3l8RSu8F4Z00t0dxapTtOPwhBx4gdUC/qq8rjnUxNwc6tCG3wU8QovQbjFD3sR4xj8eYymKeIumqA1qsYAv6EkS+oWBloRr6cCs8EZ6E24XtoSFqc+1VhLWdDTxdwodHkYrZ8THYm5uIf7DML5jBbcrkXEHH4TVvFsFHzTgqXANHzGJQWFWLcILfxxju3iCSzmhStvTgPt4iJvojv4dYV5l4a/6U23lFziH+Aez1Ui2TWxxJgAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAsQAAALEBxi1JjQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGnSURBVEiJ7dU9axRhFAXgJ6vGxKAWWogfoIiNH4UQEGEKCbaiJjYWxlIQLAyi6D/wFwgBIdFCizWxUfxAW0EwBImFgpVFslpogmKhkhT3XdmM77JrIKlyYGDmcu+Z89577gyrWGEcw8RykReooe9/irpwCnfxFt/wHR8wgiNLJe/CZczgGS7gADaiB/tT7DjOYS7dt4UCHzGOQ23kfsFrvEFvK/Ib4qgnS/FdqCalNXHCclvOYBpXcsRrcQuT2JMhn8ZVbE+5BX7hfCb3Fe6gsx7sxtOkcEPm5VVca3iuKx/GWCZ/vWjv43TvIe4nZTnMJeWN5H0pNtukpjMJq1awLhX9bpL8UwyywAOcxUt0YL5JzTz+YA1sxjsx4By65X1+Pakso0d05ZEwA9iGKdxEpVRQH+iwaMuORD6DfaXcvWIhb4vOLMIWPMFzbG0gr2FQDHQ2XdUM+QA+W2yIf1BJ6gqcTgWt1v+waMd7HG2R+xeF+Ob8wD30Y7fo6SYcxEW8EDtySYPv2yGvD3QnhoSnPwlHfRULOYoTkteXQr4smBQ/jVWsHBYACEJeoXinDrYAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/capacity-left.5616fdc3.svg\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABNDSURBVHgB7Z0LXM3nH8c/J6mEiSTXOjV0G2KGzTbtv/3nMky5jM0lKVL9SW6ba8wuWCaMQkomMV0Ym13dRxtqSIrVkdsQpYsu0vk/35/O6Zx0fud3crZ+OO/X68c5z3meczrn83y/z/X3fSTQB9JAC6BkiBEkXeQSSFmKK7ssKi9BRC4fi3FDez2SfitmFzL9F0Af2H+1GFbvv/tIelTccXjNjIaOyOiSyJFSAaQA8oOQhcnwmBijtjARjIzKAuVyeR+g1A2QQI5nCildrAK6Sbin7F87v5RfY6audOvV8aBEIpGhFhhBR5gAFuwKjl4xKos9XcguNxjgWDJjkCsTI4o9zGK/USS7pNARnQQhIejD2LVwjHsPi42ffwDjejpr+lSyePogzPHrp5rkeX1NdNYxi87B0AFBvyYpza5kPLQIZbswfvgriF3jDWPjeniWmRfQH3P9+qulXQuNRPaCFeTIFh636MyEcZUKeS+tgjAhPNl/JIZrTa979HXFd5H+MDWtfXP0JLM4aCAWTRsEiaQqjVkGLi8KpR9PkSQFKpKTLDoN0fZ+vIJUuqhIaOktvdXbEfHrJqGBaX08SwQHDmTWMUBNjBsRO5A9P0RVDA6WxUIOSYI2F6ZRkGPNOgdf+XTtQgikv5sL577MG5jgWWAuc1MLpgxQS7sRsR2yGZ/wlrMaOWhhZUWvkRoFIdOSVGDh1eXhuPrFeghl0JudsGvDZFg0boCnmbn+/fFx0CC1NLKMSzM/4y3XfPg7sF8VTA9JlHE15XlEEGp8KiCJVDy/8slXuLZyE4Ty5isOiF/v+9SK8hHrSX08XV2Mm1vicWnWZ+TiNZZr7tEP9qsXQlJf2daurKlb/IggElTsl1RrM6iBuvzxagjFrWcH/BITiEbmpnia+Mi/Hz6ZMVgt7eaWBMiClkBeUaGxXLPBb8F+7WJITNV+D/qNE6rnVROkssGR1vSm11ZsrLGx0kRXl3Y4unMGrJs3xtMAjTE+nlbdMhIeWkb5A43lLD36wy5kXnUxFLgyK1Frp5WC5B5LlprZtOZtxKk7lx0cKliUTo5tsIu5r7atmuJJZvLo1xE8bSCMjKq6Uznf7OUso6KkVGO5pm+/DrtVC2DcnPf70/ST0iMpBbHo5brQMT4cJq2t+Qrj+qpIXF6ympmoMFF6uNpxDX3bloLnGUVFkPdbCF0wQm1GImf7Hm7CU15errFc4x6ueH7j56jX0BxaoB9mquIJ9ymVjYun2fM2cNq9ESZtWvK+w7UVEbi8eBWE0tW5LRLXT37iLIXE+HzWEDYTUSVG3s9HkTl1EeT3NYvRqNsL6LhjDeo1bgghZGbnBD6cMa+yEDfFiySK8/eRqG/dnPdNroduQmaA4GEKur3QDod3BMG2TTM8CfiP6YMv5nioiZH7/X6kD/eDvLRMY7mGnR3h/MNmGDcR1nbKrtzGuz7raPmCsxLu09r0mjM1KztHmcm0XWu4/LSFWQq/+7q1NRGZU4J5TVcV2zaWOLg9CFbNGkHM+LzXG6sXvaeWdufbn3HRazZvuUYvdYHLj9GQGAubRrp46RYGea9D6oXrbLQvcaM0I0h9pddv5rn29FhGpqPMTKJw7qstv/u6xXoaZCl8tUYVm9bNcGrvHLS0eg5iZOTA7gj/7AO1tPyjJ/GX7zzeBtzcqT0ctq3S1Jt6BBJjqG84UjOuKZLcuDUmVLqrnDuF6OW+lFNLgZk9c1/fRsBUiyjUyP3lP5+JUgohtLG2wG9xM2Hb1hJiYtL7ryFmlZdaWu6+g0h/LwAV94o1lmvYyQGOiethbCms43IjpwB9x67GmfRr1V4pfZcJIumieJqTW4TXR4Tgj9OXlFlMpW3htDcSprZteT/kdtw+ZE1bgvLbuRCClImxnw0eXTq0ghiY4vkGvpw/XC3tdsIPyGIuuaLonsZyjbp1gsPOdajfQljlupNXhN5DlyPrck5NL7sasZlKtWn13Lv34OG7HifOZCvTTG2Y+0oM1yrKrW27kfXhUjzg+QKqkCh7NvnDpWPdivL6S+3x2ewhMFNZQihISsGlj5bh/q07Gss1cLBH+8hluokxbDkyaxaDUSEllyWtnnz171y4TwrDb6cylWmcpezeADO7duD90J3f48KYIDwoKIIQqNe1i3WJ7drVnfuyt2mutnRQ8MdppI8IwP0bORrLUG/UMT6Mq6xCuHI9Fy97LEd65k2NeSQSI9caBSGu/p2HYZPX48gfF5Vp9OHkK7WJcnf/MfaF/AX3vugHeb1HB4iBwpNnkcG6tg/yCzTm4Spn4gatg2gFJMabH4TiguymtqwWvAtUf9/KxwCvtUg+q+6+hIhScDwZqX3HCRZFDJRckOFcv3Eov8sjBuvgUEdHW+9TAVXsoaxiCxCDsNC6hFtYVII+o77E0RMq7otEYV1iUy2iFJ06i7TBPii/kwexU3A8RWsFMrNtwwbNUYLFuHYjjw36wtQ6SdoQtMmhsKgUb48NxU9H0pRpVFOcdq3nusZ8FBw7hfSR/2O9L/GKUnrpKjJGT0V5rua/kaaTHOLCmBjCOiDkXcgyTqVmQxcE7+EpLrnPqX3weIYyjRs87t0Esw62vGULWSN5btAE3L95G2Ik/+gJ3gpDvShn5hGoIRcCeZV3vL5CUooMuqLTpqqS0vvo57kG3+w9qUwzaWnFel8RWi2lOO0iq4WBKM2+hicJEzan5/xdFEzt2wnKn8eGDb2HfYHk1MuoDTrvcistK4fXrC3YkpCkTONEYROS2kQhS7noNRP3/87Bk4CJtSWcvhVuGXn59/D2uJpG4MKp1bbDouIy+M6NQdy+ZGWaSYvm3NxXg472vGWpW3luiA9Kr96AmCE35cR6U2Yd7ATlJ5c+aMI6nNChAa+JWu8DpT9g7LQobN+j4r7Y7LBjQhjMXfjHFCXpmTg/2JtZyi2IEWobO0QsFSwGWUZ/5sqPnvwLj8tjbcwtZm3K6MBIRMepuC82WHL4Zi3M2YQbHyWZ2Ujt7yk6SzFuZoH2TIzGr74kKD+J4T4pHId+vwB98Ng7pR9UVMBrdjS+TvxdmWbSqgUctn/FLKUjb9lS2RWkDWCiXLkOMVDP4jk4JYSzdY3OgvLnFxZzXduDSfoRg9DL1vUKtr7uOWMz1kQfUKaZtLJi/fa12kVhva60gRNQerluRan3XGN03BwCc7biJwRqR8ky9h/LgD4xpjuX9AXtybhbUIwmlZvkTKyt4MzGKXf2/qq9sMCdLP8EzzH35PLL12jQXiq4zCW29DrWoxd36RPjmm4j0yf12NpyTbeRiQmhM7aqOLN1HOd/YC3HcLeNyDAIIjIMgogMgyAiw5juAxcz+UdOQF/o873+KSTHLTo/Y7eXixuDyxIZBkFEhkEQkWEQRGQYBBEZBkFEhkEQkWEQRGQYBBEZBkFEhkEQkWEQRGQYBBEZBkFEhkEQkWEQRGQYBBEZkptbE0W9Ylhw9ARuxeyGPrB6fzAa9+4OMWMs9k1shL4EITHE/n0NLktkGAQRGQZBRIZBEJFhTIeZ6JN2LS3wn1ccKCCX4DKFyWdR37JZrXah6wO6RyX/yB8aX5fUqwfLEe+ofae8/GLs+ulPvZ+ZYlyLk2U0QsHJ4sIm6iRG3g+HcMFzBqQhc+usB0TRG7LnLkd5nuaQGjmxu9E+KkQZus/iuQa4X/4A0z+JQ0FhCfSF3lxWsyYNsXOdD158QdgtxMTdg0mcGHyR2v4N6HZuh9g1vAHI7h5I4qIcqcZB8X6vNz6f5Q4jHSqgNvQiCNWW3+JnonsnW8Flcr/bj4z3p9a5GAoa9XTlbuvmEyX/8O84Xy12y+TRr7GKOFFvojy2IM0sGuLIzpnoaNdCcBkSg0Kt8oXNqwvMnTvAccda3ras6HQaLnjNUrsncsjbXbDlS0+9nKHyWII0YZZxaMd0OLcXFh2HoFqWGbgY5TnCQgH+2zTs5oL2G5fyipLPXG1mwALcv1UVu2XU4JcQHeL52Geo1FqQNi0pkOUsncS4u/83pI+ainKesHligG6LpjiKdHu3JvIP/c7dPawaUGf4gG5cp+ZxRKmVICTGjq984PS8sIhqROHJM8gYM503oKSYaNBByoXW4IvyXZyRhbRBE1jv7K4yrV8fF3y90guNa3kyhM6CULzd2NUT8HJXYWEnCBIj9b9jeMUQGgn634SL8r17A2+UbxIl9a3RzOqrLMW9bxdsW+2tFlRTKDoJ0qpFEySE+6L3i88LLpP342GkvTuR9z701kET0PSd/0CMmLIuMUX5NrVtozFPyV/ZSO2rHiZkwBsu+C4yQOeDbQQL0qihGbav8UZPYae/cVCo1YsTZvFaRutAL7SbPwVihoLRUJxJvjC5JVnZOD9kolrvy61XR3yz1ocbFghFkCB0Us7BbYF4tbtwyyj47RTSh03Gg0IeMaYyMRaIWwwFZtK2cN4bwUUk1UTJRdkjsVve7O2IH6OnCD5tiAThDYZo0cScC6DfVYcReO7eX3HRezavGK0CxqHdwimAHke5/zTUwFMQTL5AbaVX/kbaO15cYB0F3Tvb4kDsNEGnDfEKQqruiwrgji8SSuEff0I28zOUXdccFrVVwFjYLJ6mFIMO06LQeHWFXIc4KxQ9z5ECSvOJQgF1BnujJLMqzF83VqF3rp2I1ta88eFlJEhKTa9wbopZRo8uUgiFosWlD/PnFaP1FE8mRpCaZYRs/AW7fj6NuuJA0gWcPn9VcH5TZilOezbxBmqjtiRt8ATWC6sKr9ubufxEOgJKw2lDrGLIjFjlkFV/oYVlY3wb4aebZZAYQ31RzhMRuu2Hk9EuOFBNjBURv2B+iH7WzGvLpat3MGRiGE6dFR64ksJPOcaFoVH3ThrzlLFeV/pwfxSlnFOmde9kg/gwTaJIUpiFyP9UTSIxqDfVp6fw0N/F5zNxru9Y3ojQ1j4j0Wa2r5oYYVsPYQabvqbAmnUNnXTz9thVyMgSHuGOxicdt4aioauzxjzkvihucfEFmTKte2cb7N5Y4xFQJIhZouIZTRRuDfXSSQwa9J3rNxbyB5qPjrP2GQXpso/U0lZu+hV+82MhJuj0gl7uy5B2QXgwNQqW6fgNf6A2CupPI3pV9+Xq/PAIKMumqudUyQ8aQbaSGvUDJEbsKi/upE6h0Epf+tDJ/JYx6X3YLlU/KmhD7BEELdkJMUIrga+OCMFJlXj32qBj8Zx2r0ejHl005iFRzrHeF4XKVUBHQCUlzEJzOgJKztpyWRjXqKNJkwYHEsIn4a1XnSCUouRzSPfw5RfDeyRsP52ltoK4Of44Js2JgZihM1TeGPUlknUIE27crCkXpL9hVxeNeWiGm2Lhl2RVdYntbaxwPHE2nDu2XEnPOUFyk0NCX3upveDg7HQmU8aYQN4lT2ozbJd+CInKYYzhWw9Dn0vG/yQU737A+LU6RRuVmNSHy49buGPzNFFRUoIzL7tzFVqBfVtLnP1hwUF6zAnCajCJsRICoFME/vKdy/UgNNGS3BRZhqoYMUfgt2BbXYZW1JkbOfkY5rcBPx1OE1xGYlwPzj9G825ZrSgtw3n3iaruK4ppIKMHqlMnodAyar93Np1bdi3jCetq7TUcNp/O5P4wBdRm+M2PeaLEUECHpb33v43cWEUotEvFIXY1mvbtozEPufr0YX7I++UoPV2kSFcKos1K7qVmcLO2fEc6tPIfC9vlc5hlVOm8avMBTF8S90SKoYAaeo9JYfh+f6rgMvUamXNHr1oO668xD43ZMgPmBSusg1CbXGQvkFKPjNxLsi4zMfgPZrEa7c4N+lTFiP8hBfO/2I3Ce+LYyPA4kCijpkZg7/6zgsuQKFLWjtKuew3IXjx/YJFqQk2zve5QcV1kGWdeGcp7vkbzUYNhvzpYzU1RpOsRzP8WFOlvz1Jdk19YwiwlXKdpHgpdLg2ZB0uPfmrpzGHkyVH2RvX8jx5w/9B8ptHjh27Kh3erTosx7rBfpX4mbnR8EtebqniS/ZQGaHMcRfHeqhJaXRtGZqawX/sxmo+sOo/dCPLxL+edlz2St6Y3YKJElWVfC+bclBbLkK6Yp3b2689H0+Dz4dcof1CBp5W7zH0FLNyO2D3CYzgamZqwihsMK1aBJagI7pl3JrHGfJregC1ZLnpw+06wptcVlqEqxo49JzHQax1Xi552KKQ6nQyxJT5JcBlJfWMShYlxdpGmPLwrhlRQArm7vFp32Hr8MNiyuSlVMXbuO4VxzJTL7j85x+Q9LnQIwYTZW7A5TpAo9Bt6VnacNKJ1CfehaZV1ZQ9l9Nzqg3dhs2Qm5xcV0C7wcUGbRTFr+29DrtmbiRL7La/7op5rVybGZmhB0Jo6NT698k7bWQ3rF2z35QIYmZspX6MTdjxnRHMn7jyr0Bkqo6dFstmIw9VfIqugcUZX1bEGHzptA3p+47JFzA/Shqwoer7v0DlMnhvD+dNnHXJffvO3KUThhGCXnTYXVR2dN8qR0uwaTx82emrE+Nz84hQY4GCiHPCdGxOMSiEqZz90otbbtStNMIouudRXyv53e3g2u9yVvSiVaDj0+Ckhj+voyLm2QQaujTDdVbm2xL5+GGrL/wGesjv8aTV9uwAAAABJRU5ErkJggg==\"","module.exports = __webpack_public_path__ + \"static/media/pdf-logo.de52c718.jpg\";"],"sourceRoot":""}