{"version":3,"sources":["shared/assets/images/dashboard.svg","shared/assets/images/campaigns.svg","shared/assets/images/leads.svg","shared/assets/images/tasks.svg","shared/assets/images/call.svg","shared/assets/images/inbox.svg","shared/assets/images/performance.svg","shared/assets/images/marketing.svg","shared/assets/images/settings.svg","shared/assets/images/leadvolt-lightning.svg","shared/assets/images/sidebar-logo.svg","shared/assets/images/auto-calling-a.svg","shared/assets/images/auto-calling-b.svg","shared/assets/images/auto-calling-c.svg","shared/assets/images/filter-grey.svg","shared/assets/images/voicemail.svg","shared/assets/images/mute.svg","shared/assets/images/fax.svg","shared/assets/images/hangup.svg","shared/assets/images/check.svg","shared/assets/images/trash.svg","shared/assets/images/trash-green.svg","shared/assets/images/edit.svg","shared/assets/images/sort.svg","shared/assets/images/performance-green.svg","shared/assets/images/news.svg","shared/components/IconCount.js","modules/user-status/user-status-model.js","shared/components/UserStatus.js","shared/components/ui/Loader.js","modules/user-status/user-status-queries.js","shared/session/session-events.ts","shared/errors.js","shared/validators.js","shared/utils/index.js","modules/user-status/user-status-events.js","modules/user-status/user-status-actions.js","shared/components/toast/components/ToastText.js","shared/components/toast/components/ToastTitle.js","shared/components/toast/components/ToastSuccess.js","shared/components/toast/components/ToastError.js","shared/components/toast/components/ToastInfo.js","shared/components/toast/components/ToastAttention.js","shared/components/toast/components/ToastErrors.js","shared/components/toast/components/ToastWarn.js","shared/css/mixins.js","shared/components/Box.js","modules/notifications/notifications-querys.js","modules/notifications/notifications-store.ts","modules/notifications/notifications-actions.ts","shared/components/toast/components/ToastMessage.js","shared/components/toast/Toast.js","shared/mixins.js","modules/auth/queries.js","modules/my-account/general/general-validators.js","modules/system-settings/system-setting-queries.js","modules/system-settings/system-setting-events.js","modules/system-settings/system-setting-actions.js","modules/auth/auth.actions.js","shared/constants/meta.js","shared/constants/index.js","shared/utils/agency-utils.js","shared/components/dialog/DialogProfile.js","modules/user-status/user-status-utils.js","shared/components/AvatarWithStatus.js","shared/hooks/useAgency.js","shared/utils/company-utils.js","modules/phone-calls/phone-calls-querys.js","modules/phone-calls/twilio.js","modules/phone-calls/phone-calls-model.js","modules/phone-calls/phone-calls-events.js","shared/helpers.js","modules/phone-calls/phone-calls-actions.js","shared/hooks/useUser.js","modules/leads/leads-model.js","modules/leads/lead-details-utils.js","modules/leads/leads-drivers/leads-drivers-utils.js","modules/leads/leads-type-commercial-auto/leads-type-commercial-auto-utils.js","modules/leads/leads-type-auto/leads-type-auto-utils.js","modules/leads/leads-type-life/leads-type-life-utils.js","modules/leads/leads-type-home/leads-type-home-utils.js","modules/leads/leads-type-employee-benefits/leads-type-employee-benefits-utils.js","modules/leads/leads-type-general-liability/leads-type-general-liability-utils.js","modules/leads/leads-type-workers-compensation/leads-type-workers-compensation-utils.js","modules/leads/leads-utils.js","modules/my-account/phone-numbers/phone-numbers-utils.js","modules/phone-calls/phone-calls-utils.js","shared/hooks/useUserStatus.js","modules/phone-calls/phone-calls-hooks.js","modules/phone-calls/Components/DialerPhones.js","modules/phone-calls/Components/Dialer.js","shared/hooks/useInfinityPagination.js","modules/phone-calls/Components/DialerBackdrop.js","modules/phone-calls/Components/DialerButton.js","shared/components/Menu.js","shared/components/ui/text/TextSpacing.js","shared/components/ui/dropdowns/Dropdown.js","shared/components/ui/dropdowns/DropdownOption.js","shared/components/ui/dropdowns/DropdownWrap.js","shared/components/ui/buttons/PrimaryBtn.js","modules/onboarding/components/DialogInvitations.js","shared/constants/agency-invitations.js","shared/constants/company-invitations.js","modules/agency-invitation/agency-invitation-queries.js","modules/agency-invitation/agency-invitation-permissions.js","modules/agency-invitation/agency-invitation-events.js","modules/agency-invitation/agency-invitation-actions.js","modules/my-account/invitations/invitations-queries.js","modules/company-invitation/company-invitation-queries.js","modules/company-invitation/company-invitation-permissions.js","modules/company-invitation/company-invitation-events.js","modules/company/campany-events.js","modules/company-invitation/company-invitation-actions.js","modules/agency/agency-store.js","shared/utils/invitations-utils.js","modules/phone-calls/Components/AutomaticCallsIcon.js","shared/components/ui/StyledBadge.js","modules/notifications/components/NotificationsListItem.js","modules/notifications/notifications-utils.js","modules/notifications/components/NotificationCard.js","modules/notifications/hooks/useNotificationsList.js","modules/notifications/hooks/useNewSMSMessagesNotifications.ts","modules/notifications/NotificationsIcon.js","modules/notifications/hooks/useNotificationsCount.js","modules/chat/chat-events.js","modules/chat/chat-querys.js","modules/chat/chat-actions.js","shared/apollo/index.js","shared/apollo/Apollo.js","modules/chat/ChatIcon.js","shared/components/TopBar.js","shared/components/Breadcrumbs.js","modules/phone-calls/phone-call-recordings/phone-call-recordings-queries.js","shared/utils/storage-utils.js","modules/phone-calls/voice-mail-message/voice-mail-message-events.js","modules/phone-calls/voice-mail-message/voice-mail-message-queries.js","modules/phone-calls/voice-mail-message/voice-mail-message-store.js","modules/phone-calls/voice-mail-message/voice-mail-message-actions.js","modules/phone-calls/Components/VoiceMailMessagesDialog.js","modules/phone-calls/Components/ControlButton.js","modules/phone-calls/Components/VoiceMailButton.js","modules/phone-calls/Components/ControlsPortal.js","modules/phone-calls/Components/CallInfo.js","modules/phone-calls/Components/DialPad.js","modules/leads/leads-notes/leads-notes-queries.js","modules/leads/leads-type-auto/leads-type-auto-queries.js","modules/leads/leads-type-commercial-auto/leads-type-commercial-auto-queries.js","modules/leads/leads-drivers/leads-drivers-queries.js","modules/leads/leads-type-general-liability/leads-type-general-liability-queries.js","modules/leads/leads-type-life/leads-type-life-queries.js","modules/leads/leads-type-home/leads-type-home-queries.js","modules/leads/leads-type-workers-compensation/leads-type-workers-compensation-queries.js","modules/leads/leads-type-employee-benefits/leads-type-employee-benefits-queries.js","modules/leads/leads-history/leads-history-queries.js","modules/leads/leads-queries.js","modules/leads/leads-store.js","modules/leads/leads-validators.js","modules/leads/leads-events.js","modules/leads/leads-actions.js","modules/users/user-utils.js","modules/email/email-queries.js","modules/email/email-store.js","modules/my-account/email/email-queries.js","modules/email/email-validators.js","modules/email/email-model.js","modules/email/email-events.js","modules/email/email-actions.js","modules/agents/agents-queries.js","modules/agents/agents-events.js","modules/agents/agents-actions.js","shared/constants/8base.js","modules/leads/components/forms/TaskForm.js","modules/phone-calls/Components/LeadCallForm.js","modules/users/user-events.js","modules/users/user-queries.js","modules/users/user-actions.js","modules/users/users-hooks.ts","modules/users/components/UserCard.js","modules/phone-calls/Components/PhoneCard.js","modules/phone-calls/Components/TransferCallDialog.js","modules/phone-calls/Components/TransferCallButton.js","modules/phone-calls/Components/CallControls.js","modules/notifications/hooks/usePushNotifications.ts","shared/components/Layout.js","shared/components/ProtectedRoute.js","shared/components/ui/buttons/DeleteBtn.js","shared/components/YesNoDialog.js","modules/company/components/PlanCard.js","shared/components/ui/Icons.js","shared/components/ui/inputs/Label.js","shared/constants/colors.js","shared/stripe/stripe.js","modules/my-account/billing/payment-method/components/PaymentForm.js","modules/company/company-model.js","modules/company/company-queries.js","modules/company/company-validators.js","modules/onboarding/onboarding-validators.js","modules/agents/agents-utils.js","modules/my-account/billing/billing-queries.js","modules/my-account/billing/billing-validators.js","modules/my-account/billing/billing-events.js","modules/my-account/billing/billing-actions.js","modules/onboarding/onboarding-events.js","modules/onboarding/onboarding-actions.js","modules/company/company-actions.js","modules/onboarding/onboarding-hooks.js","modules/company/company-hooks.js","modules/my-account/billing/components/CouponInput.js","modules/onboarding/components/CompanyForm.js","shared/utils/useDebounce.js","modules/onboarding/CreateCompanyView.js","shared/components/ui/MainLoader.js","shared/components/dialog/DecisionDialog.tsx","modules/agency/components/SwitchAgencyView.js","modules/onboarding/InvitationsView.js","shared/hoc/withCompany.js","shared/rollbar/index.js","shared/components/Session.js","shared/components/ui/dropdowns/DropdownBodyOnTable.tsx","shared/components/ui/text/TextEllipsis.js","shared/components/tables/Table.js","shared/components/ui/CustomLink.js","shared/components/ui/Margin.js","shared/components/CardIndicator.js","shared/components/tables/TableHeader.js","shared/components/PaperHeader.js","shared/components/ui/text/Title.js","shared/components/ui/buttons/PlusBtn.js","shared/components/calendar/DayComponent.js","shared/components/calendar/WeekComponent.js","shared/components/ui/SmallLoader.js","shared/components/tables/TableLite.js","shared/graphql/index.js","shared/components/ui/buttons/AuthBtn.js","shared/components/ui/buttons/ButtonIcon.js","shared/components/ui/buttons/ButtonWithoutIcon.js","shared/components/ui/DateBox.js","shared/components/ui/text/TextContact.js","shared/components/ui/text/Text.js","shared/components/ui/PriorityBadge.js","shared/components/ui/TitleDetail.js","shared/components/ui/text/SecondaryTitle.js","shared/components/ui/buttons/CreateButton.js","shared/components/ui/buttons/FilterBtn.js","shared/components/ui/buttons/FilterButtonWithFocus.js","shared/components/ui/buttons/SortBtn.js","shared/components/ui/inputs/SearchInput.js","shared/components/ui/Padding.js","shared/components/tables/TableToolBar.js","shared/components/agents-slider/AgentSlide.js","shared/components/dialog/DialogForm.js","shared/components/agents-slider/AgentsSlider.js","shared/components/SelectMultipleAgents.js","shared/components/ui/inputs/RadioInputField.js","shared/components/ui/dropdowns/DropdownFooter.js","shared/components/ui/dropdowns/DropdownWithCheck/DropdownWithCheck.js","shared/components/ui/text/FormTitle.js","shared/components/ItemFilter.js","shared/components/card/ListCardBody.js","shared/components/ui/selects/SelectInput.js","shared/components/forms/TagsInput.js","shared/components/ui/dropdowns/OptionsDropdown.js","shared/components/ui/dropdowns/SimpleDropdown.js","shared/components/tables/filters/FilterFooter.js","shared/components/tables/filters/FilterCategory.js","shared/components/tables/AgingTableLite.js","shared/auth/index.js","modules/auth/routes/root/index.js","shared/api/index.js","modules/auth/routes/callback/index.js","modules/auth/index.js","modules/dashboard/components/AnnouncementForm.js","modules/announcement/announcement-queries.js","modules/announcement/announcement-validators.js","modules/announcement/announcement-events.js","modules/announcement/announcement-actions.js","modules/announcement/announcement-model.js","modules/dashboard/components/Announcement.js","modules/dashboard/components/Task.js","modules/dashboard/components/TasksByDay.js","modules/campaigns/campaigns-queries.ts","modules/campaigns/campaign-events.ts","modules/campaigns/campaigns-validators.js","modules/campaigns/campaigns-actions.ts","modules/dashboard/dashboard-queries.js","modules/dashboard/dashboard-events.js","modules/dashboard/dashboard-action.js","modules/lead-task/lead-task-queries.js","modules/lead-task/lead-task-validators.js","modules/lead-task/lead-task-events.js","modules/lead-task/lead-task-actions.js","modules/campaigns/campaigns-utils.js","modules/lead-task/lead-task-utils.js","modules/dashboard/dashboard-utils.js","modules/campaigns/components/PriorityCell.js","modules/campaigns/components/StatusCell.js","modules/campaigns/campaigns-cells.js","modules/dashboard/components/TopPerformersSlide.js","modules/metrics/metrics-events.js","modules/metrics/metrics-cells.js","modules/metrics/metrics-queries.js","modules/metrics/metrics-actions.js","modules/metrics/AgingTable.js","modules/metrics/MetricsTable.js","modules/metrics/metrics-utils.js","modules/metrics/MetricsTableWrapper.js","shared/components/forms/FormValues.js","modules/dashboard/components/ReportItem.js","modules/dashboard/components/AgencyReportTabs.js","modules/dashboard/DashboardView.js","shared/components/Typography.js","modules/design-system/components.js","modules/design-system/DesignSystemView.js","modules/campaigns/components/DeleteCampaignProgress.tsx","modules/campaigns/components/DeleteCampaignDialog.tsx","modules/campaigns/components/CampaignListRow.tsx","shared/components/Field.js","modules/campaigns/components/WorkflowAutomationSelect.js","modules/workflow/workflow-automation/workflow-automation-queries.js","modules/workflow/workflow-automation/workflow-automation-events.js","modules/workflow/workflow-automation/workflow-automation-validator.js","modules/workflow/workflow-automation/workflow-automation-actions.js","modules/workflow/workflow-automation/workflow-automation-hooks.ts","modules/vendors/vendors-events.js","modules/vendors/vendors-queries.js","modules/vendors/vendors-validators.js","modules/vendors/vendors-actions.js","modules/my-account/phone-numbers/phone-numbers-events.js","modules/campaigns/components/EnhancedCampaignForm.tsx","modules/campaigns/components/CampaignFilter.js","modules/campaigns/components/CreateCampaignButton.tsx","modules/campaigns/campaigns-model.js","modules/campaigns/components/CampaignListHeader.tsx","modules/campaigns/CampaignsView.tsx","modules/campaigns/campaign-hooks.ts","modules/campaigns/components/CampaignForm.js","modules/campaigns/components/CampaignProgress.js","modules/campaigns/components/DialogDeleteCampaign.js","modules/my-account/phone-numbers/phone-numbers-querys.js","modules/my-account/billing/subscription-plan/subscription-plan-queries.js","modules/my-account/phone-numbers/phone-numbers-actions.js","modules/campaigns/CampaignDetailsView.js","modules/email/components/SearchInput.js","shared/hooks/useURLQuery.js","modules/email/components/EmailListItem.js","modules/email/components/EmailList.js","modules/email/email-utils.js","shared/components/GoogleButton.js","shared/components/MicrosoftButton.js","modules/email/components/EmailForm.js","modules/email/components/EmailDialog.js","modules/email/components/ComposeEmailProvider.js","modules/email/hooks/useEmailList.js","modules/email/components/EmailProfileContext.js","modules/email/components/EmailDetails.js","modules/email/components/ManualEmailsView.js","modules/email/hooks/useGmailList.js","modules/email/components/GmailListItem.js","modules/email/components/GmailList.js","modules/email/components/GmailReplyDialog.js","modules/email/components/GmailDetails.js","modules/email/components/GmailEmailsView.js","modules/email/hooks/useOutlookList.js","modules/email/components/OutlookListItem.js","modules/email/components/OutlookList.js","modules/email/components/OutlookReplyDialog.js","modules/email/components/OutlookDetails.js","modules/email/components/OutlookEmailsView.js","modules/email/Email.js","modules/leads/hooks/useAgencyLeads.js","Welcome.js","modules/leads/leads-history/leads-history-model.js","modules/leads/leads-history/components/containers.js","modules/leads/components/ColumnInfo.js","modules/leads/leads-history/components/interfaces.js","modules/leads/leads-history/components/LeadHistoryItem.js","modules/leads/leads-history/components/NoteHistoryItem.js","modules/leads/leads-history/components/TaskHistoryItem.js","modules/leads/leads-history/components/EmailHistoryItem.js","modules/leads/leads-history/components/CallHistoryItem.js","modules/leads/leads-history/components/SmsHistoryItem.js","modules/leads/leads-history/components/StageHistoryItem.js","modules/leads/leads-history/components/DeletedHistoryItem.js","modules/phone-calls/Components/PhoneNumber.js","modules/leads/leads-stage/leads-stage-queries.js","modules/leads/leads-stage/leads-stage-store.js","modules/leads/leads-stage/leads-stage-action.js","modules/leads/components/LeadCell.js","modules/leads/leads-history/leads-history-utils.js","modules/leads/components/LeadFilter.js","modules/leads/components/LeadsDialog.js","modules/leads/components/forms/LeadForm.js","modules/leads/components/LeadFormDialog.js","modules/my-account/components/Card.js","modules/leads/components/LeadAssignUserDialog.js","modules/leads/components/forms/Message.js","modules/leads/components/forms/MsgForm.js","modules/leads/leads-notes/leads-notes-validators.js","modules/leads/leads-notes/leads-notes-events.js","modules/leads/leads-notes/leads-notes-actions.js","modules/leads/components/forms/NoteForm.js","modules/leads/components/LeadActions.js","modules/leads/LeadsView.js","modules/leads/components/CsvPreviewCell.js","modules/leads/components/LeadsCsvPreviewDialog.js","shared/components/FileUpload.js","modules/leads/components/LeadsCsvUploadDialog.js","modules/leads/components/LeadsCsvStatusUploadDialog.js","modules/leads/components/LeadsCsvDialogs.js","modules/lead-task/lead-task-model.js","modules/lead-task/components/LeadTasksListTable/TableHeader.js","modules/lead-task/components/LeadTasksListTable/RowActions.js","modules/lead-task/components/PriorityCell.js","modules/lead-task/components/LeadTasksListTable/RowCell.js","modules/lead-task/components/LeadTasksListTable/TableRows.js","modules/lead-task/components/LeadTasksListTable/InfoModal.js","modules/lead-task/components/LeadTasksListTable/TableBody.js","modules/lead-task/components/LeadTasksListTable/TableFooter.js","modules/lead-task/components/LeadTasksListTable/OnTopHideShowColumns.js","modules/lead-task/components/DialogDeleteLeadTask.js","modules/lead-task/components/DialogUpdateLeadTaskStatus.js","modules/lead-task/LeadTaskView.js","shared/hoc/withSession.js","modules/calendar/components/dialogs/ChangeTaskStatus.js","modules/calendar/CalendarView.js","modules/leads/leads-history/components/LeadHistorySearch.js","modules/leads/leads-history/leads-history-events.js","modules/leads/leads-history/leads-history-action.js","modules/leads/leads-history/components/LeadHistory.js","modules/leads/leads-recordings/hooks/useLeadRecordings.js","modules/leads/leads-recordings/components/PaginationContainer.js","modules/leads/leads-recordings/components/RecordingItem.js","modules/leads/leads-recordings/components/SideBar.js","modules/leads/leads-recordings/LeadRecordingsDrawer.js","modules/leads/components/LeadDetailsHeader.js","modules/leads/components/forms/LeadAmountForm.js","modules/leads/components/forms/LeadStageForm.js","modules/leads/components/forms/LeadCampaignForm.js","modules/leads/components/forms/LeadAssigneesForm.js","modules/leads/components/forms/LeadInfoCard.js","shared/components/forms/FormFields.js","modules/leads/leads-type-auto/components/LeadTypeAutoForm.js","modules/leads/leads-type-auto/components/LeadTypeAutoDialogForm.js","modules/leads/leads-type-auto/leads-type-auto-events.js","modules/leads/leads-type-auto/leads-type-auto-actions.js","modules/leads/components/PaperInfo.js","modules/leads/leads-type-auto/components/LeadTypeAutoInfo.js","modules/leads/leads-type-commercial-auto/components/LeadTypeCommercialAutoForm.js","modules/leads/leads-type-commercial-auto/components/LeadTypeCommercialAutoDialogForm.js","modules/leads/leads-type-commercial-auto/leads-type-commercial-auto-events.js","modules/leads/leads-type-commercial-auto/leads-type-commercial-auto-actions.js","modules/leads/leads-type-commercial-auto/components/LeadTypeCommercialAutoInfo.js","modules/leads/leads-type-general-liability/components/LeadTypeGeneralLiabilityForm.js","modules/leads/leads-type-general-liability/components/LeadTypeGeneralLiabilityDialogForm.js","modules/leads/leads-type-general-liability/leads-type-general-liability-validators.js","modules/leads/leads-type-general-liability/leads-type-general-liability-events.js","modules/leads/leads-type-general-liability/leads-type-general-liability-actions.js","modules/leads/leads-type-general-liability/components/LeadTypeGeneralLiabilityInfo.js","modules/leads/leads-type-life/components/LeadTypeLifeForm.js","modules/leads/leads-type-life/components/LeadTypeLifeDialogForm.js","modules/leads/leads-type-life/leads-type-life-events.js","modules/leads/leads-type-life/leads-type-life-actions.js","modules/leads/leads-type-life/components/LeadTypeLifeInfo.js","modules/leads/leads-type-home/components/LeadTypeHomeForm.js","modules/leads/leads-type-home/components/LeadTypeHomeDialogForm.js","modules/leads/leads-type-home/leads-type-home-events.js","modules/leads/leads-type-home/leads-type-home-actions.js","modules/leads/leads-type-home/components/LeadTypeHomeInfo.js","modules/leads/leads-type-workers-compensation/components/LeadTypeWorkersCompensationForm.js","modules/leads/leads-type-workers-compensation/components/LeadTypeWorkersCompensationDialogForm.js","modules/leads/leads-type-workers-compensation/leads-type-workers-compensation-events.js","modules/leads/leads-type-workers-compensation/leads-type-workers-compensation-actions.js","modules/leads/leads-type-workers-compensation/components/LeadTypeWorkersCompensationInfo.js","modules/leads/leads-type-employee-benefits/components/LeadTypeEmployeeBenefitsForm.js","modules/leads/leads-type-employee-benefits/components/LeadTypeEmployeeBenefitsDialogForm.js","modules/leads/leads-type-employee-benefits/leads-type-employee-benefits-events.js","modules/leads/leads-type-employee-benefits/leads-type-employee-benefits-actions.js","modules/leads/leads-type-employee-benefits/components/LeadTypeEmployeeBenefitsInfo.js","modules/leads/components/MiniCardNotes.js","modules/leads/components/LeadNotes.js","modules/leads/components/MiniCard.js","modules/leads/components/LeadTasks.js","modules/leads/leads-drivers/components/LeadDriverForm.js","modules/leads/leads-drivers/components/LeadDriverDialogForm.js","modules/leads/leads-drivers/leads-drivers-model.js","modules/leads/leads-drivers/leads-drivers-store.js","modules/leads/leads-drivers/leads-driver-events.js","modules/leads/leads-drivers/leads-drivers-actions.js","modules/leads/leads-drivers/components/LeadDriverInfo.js","modules/leads/LeadDetailsView.js","modules/my-account/invitations/components/Status.js","modules/my-account/invitations/invitation-events.js","modules/my-account/invitations/invitations-actions.js","modules/my-account/invitations/components/InvitationsList.js","modules/my-account/invitations/invitations-model.js","modules/my-account/invitations/components/Invitation.js","modules/my-account/invitations/InvitationsView.js","modules/my-account/company/components/AdminsTableRow.js","modules/my-account/company/components/AdminsTable.js","modules/my-account/company/components/Invitation.js","modules/my-account/company/CompanyView.js","modules/my-account/company-invitations/components/Invitation.js","modules/my-account/company-invitations/CompanyInvitationsView.js","modules/vendors/vendors-model.js","shared/components/tables/CustomTable.js","modules/vendors/components/VendorForm.js","modules/vendors/components/VendorFormDialog.js","modules/vendors/vendors-utils.js","modules/vendors/VendorsView.js","modules/my-account/phone-numbers/components/PhoneStatus.js","modules/my-account/phone-numbers/components/DeleteNumberModal.js","modules/my-account/phone-numbers/components/PhoneNumberPriority.js","modules/my-account/phone-numbers/components/PhoneNumbersList.js","modules/my-account/phone-numbers/phone-numbers-hooks.js","modules/my-account/phone-numbers/components/SearchBarNumbers.js","modules/my-account/phone-numbers/components/AvailablePhoneNumberList.js","modules/my-account/phone-numbers/phone-numbers-model.js","modules/subscription-plan/subscription-plan-item/subscription-plan-item-queries.js","modules/subscription-plan/subscription-plan-item/subscription-plan-item-events.js","modules/subscription-plan/subscription-plan-item/subscription-plan-item-actions.js","modules/subscription-plan/subscription-plan-item/subscription-plan-item-model.js","modules/my-account/phone-numbers/components/AddPhoneNumbers.js","modules/subscription-plan/subscription-plan-item/subscription-plan-item-hooks.js","modules/my-account/phone-numbers/PhoneNumberView.js","modules/my-account/email/email-validators.js","modules/my-account/email/email-events.js","modules/my-account/email/email-actions.js","modules/email/components/TestConnectionButton.js","modules/settings/inbound/inbound-queries.js","modules/settings/outbound/outbound-queries.js","modules/settings/inbound/inbound-store.js","modules/settings/inbound/inbound-model.js","modules/settings/inbound/inbound-validation.js","modules/settings/inbound/inbound-actions.js","modules/settings/inbound/components/InboundForm.js","modules/email/azure-queries.js","modules/email/azure-events.js","modules/email/azure-actions.js","modules/settings/outbound/components/MicrosoftServiceForm.js","modules/settings/inbound/InboundService.js","modules/email/components/GmailServiceItem.js","modules/email/components/OutlookServiceItem.js","modules/email/components/OutboundServiceItem.js","modules/email/components/ChooseServiceDialog.js","modules/email/components/AgencyEmailServiceInfo.js","modules/email/components/AgencyEmailService.js","modules/settings/outbound/outbound-store.js","modules/settings/outbound/outbound-model.js","modules/settings/outbound/outbound-validation.js","modules/settings/outbound/outbound-actions.js","modules/settings/outbound/components/OutboundForm.js","modules/settings/outbound/OutboundService.js","modules/settings/phone-calls/phone-calls-settings/phone-calls-settings-events.js","modules/settings/phone-calls/phone-calls-settings/phone-calls-settings-queries.js","modules/settings/phone-calls/phone-calls-settings/phone-calls-settings-actions.js","modules/settings/phone-calls/components/CampaignListItem.js","modules/settings/phone-calls/components/CampaignsList.js","shared/utils/useList.js","modules/settings/phone-calls/phone-calls-settings/phone-calls-settings-model.js","modules/settings/phone-calls/PhoneCallSettings.js","modules/phone-calls/voice-mail-message/voice-mail-message-model.js","modules/settings/voice-mail-messages/components/VoiceMailMessageItem.js","modules/settings/phone-calls/components/AudioRecorder.js","modules/settings/voice-mail-messages/components/VoiceMailMessageForm.js","modules/settings/voice-mail-messages/components/VoiceMailMessageDialog.js","modules/settings/voice-mail-messages/components/VoiceMailMessagesTable.js","modules/settings/voice-mail-messages/VoiceMailMessages.js","modules/settings/registration-status/components/Container.js","modules/settings/registration-status/components/Card.js","modules/settings/registration-status/components/Icons.js","modules/settings/registration-status/constants.ts","modules/settings/registration-status/components/TrustProductStatus.js","modules/settings/registration-status/components/TrustProductRegistrationRow.jsx","modules/settings/registration-status/components/MessagingProductStatus.tsx","modules/settings/registration-status/components/MessagingProductRegistrationRow.tsx","modules/settings/registration-status/RegistrationStatus.js","shared/hooks/useFetch.ts","modules/my-account/general/general-model.js","modules/my-account/general/components/AgencyRolesTable.tsx","modules/my-account/general/components/RoleTable.tsx","modules/my-account/general/GeneralView.tsx","modules/my-account/email/EmailView.js","modules/my-account/team/components/UsersTableRow.js","modules/my-account/team/team-queries.js","modules/my-account/team/team-validators.js","modules/my-account/team/team-events.js","modules/my-account/team/team-actions.js","modules/my-account/team/components/team-actions/UpdateDetailsForm.js","modules/my-account/team/components/UsersTable.js","modules/my-account/team/components/invite-team-member/Invitation.js","modules/my-account/team/TeamView.js","modules/my-account/components/Layout.js","modules/my-account/billing/subscription-plan/subscription-plan-events.js","modules/my-account/billing/subscription-plan/subscription-plan-validators.js","modules/my-account/billing/subscription-plan/subscription-plan-actions.js","modules/my-account/billing/subscription-plan/components/ChangePlanDialog.js","modules/my-account/billing/subscription-plan/components/NextInvoiceInformation.js","modules/my-account/billing/subscription-plan/components/SubscriptionPlanChanger.js","modules/my-account/billing/payment-method/payment-method-queries.js","modules/my-account/billing/payment-method/payment-method-events.js","modules/my-account/billing/payment-method/payment-method-validators.js","modules/my-account/billing/payment-method/payment-method-actions.js","modules/my-account/billing/payment-method/components/PaymentDialogForm.js","modules/my-account/billing/payment-method/components/PaymentMethodChanger.js","modules/my-account/billing/components/StatusCell.js","modules/my-account/billing/components/BillingHistory.js","modules/my-account/billing/billing-hooks.js","modules/my-account/billing/components/CancelSubscriptionDialog.js","modules/my-account/billing/components/CancelPlanCard.js","modules/my-account/billing/components/RenovateSubscription.js","modules/my-account/billing/BillingView.js","modules/agency/agency-queries.js","modules/agency/agency-validators.js","modules/agency/agency-events.js","modules/agency/agency-actions.js","modules/agency/components/AgencyActions.js","modules/agency/agency-model.js","modules/agency/components/AgencyFilter.js","shared/components/ListInputsEditable.js","modules/agency/components/forms/AgencyForm.js","modules/agency/components/AgencyFormDialog.js","modules/my-account/agency/AgencyView.js","modules/settings/SettingsView.js","modules/phone-calls/phone-call-recordings/phone-call-recordings-actions.js","modules/reports/phone-call-recording/PhoneCallRecordings.js","modules/reports/email-logs/components/LogFilter.js","modules/reports/email-logs/hooks/useAgencyEmails.js","modules/reports/email-logs/components/EmailLogRow.js","modules/reports/email-logs/EmailLogs.js","modules/reports/sms-logs/SmsRow.js","modules/reports/sms-logs/SmsLogs.js","modules/reports/phone-calls-logs/PhoneCallsLogs.js","modules/reports/agent-info/components/AgentsInfoFilter.js","modules/reports/agent-info/components/AgentsInfoHeader.js","modules/reports/agent-info/components/AgentsInfoRow.js","modules/reports/agent-info/AgentsInfo.js","modules/reports/agent-calls/agent-calls-utils.js","modules/reports/agent-calls/components/AgentsCallsFilter.js","modules/reports/agent-calls/components/AgentsCallsHeader.js","shared/utils/moment-utils.js","modules/reports/agent-calls/components/AgentsCallsRow.js","modules/reports/agent-calls/agent-calls-querys.js","modules/reports/agent-calls/agent-calls-actions.js","modules/reports/agent-calls/AgentsCalls.js","gerated/types.ts","modules/reports/agent-calls/agent-calls-hooks.js","modules/reports/phone-calls-logs/InbounCallLogs.js","modules/reports/voicemail/voicemail-events.ts","modules/reports/voicemail/voicemail-actions.ts","modules/reports/voicemail/VoiceMailView.tsx","modules/reports/agent-scores/AgentScoreTable.js","modules/reports/agent-scores/agent-score-events.js","modules/reports/agent-scores/agent-score-queries.js","modules/reports/agent-scores/agent-score-actions.js","modules/reports/agent-scores/agent-score-models.js","modules/reports/agent-scores/AgentScore.js","modules/system-settings/system-setting-models.js","modules/reports/leads-funnel/context/LeadFunnelContext.js","modules/reports/leads-funnel/components/LeadsFunnelFilter.js","modules/reports/leads-funnel/components/LeadsFunnelCampaign.js","modules/reports/leads-funnel/components/LeadsFunnelHeader.js","modules/reports/leads-funnel/leads-funnel-queries.js","modules/reports/leads-funnel/leads-funnel-actions.js","modules/reports/leads-funnel/leads-funnel-hooks.js","modules/reports/leads-funnel/components/LeadsFunnelChart.js","modules/reports/leads-funnel/LeadsFunnel.js","modules/reports/ReportsView.js","shared/components/ModuleSubMenu.js","modules/workflow/workflow-automation/workflow-automation-utils.js","modules/workflow/email-template/email-template-queries.js","modules/workflow/email-template/email-template-validators.js","modules/workflow/email-template/email-template-events.js","modules/workflow/email-template/email-template-actions.js","modules/workflow/email-template/email-template-hooks.js","modules/workflow/sms-template/sms-template-queries.js","modules/workflow/sms-template/sms-template-validator.js","modules/workflow/sms-template/sms-template-events.js","modules/workflow/sms-template/sms-template-action.js","modules/workflow/sms-template/sms-template-hooks.js","modules/workflow/workflow-automation-conditions.js","modules/workflow/workflow-automation/workflow-automation-model.js","modules/workflow/workflow-automation/components/WorkflowAutomationForm.js","modules/workflow/workflow-automation/components/WorkflowAutomationDialog.js","modules/workflow/workflow-automation/WorkflowAutomationView.js","modules/workflow/sms-template/components/SmsTemplateTableItem.js","modules/workflow/sms-template/sms-template-utils.js","modules/workflow/workflow-templates-model.js","modules/workflow/sms-template/components/SmsTemplateEditor.js","modules/workflow/sms-template/components/SmsTemplateForm.js","modules/workflow/sms-template/components/SmsTemplateDialog.js","modules/workflow/sms-template/components/SmsTemplatesTable.js","modules/workflow/sms-template/SmsTemplatesView.js","modules/workflow/email-template/components/TemplateCreator.js","modules/workflow/email-template/email-template-utils.js","modules/workflow/email-template/EmailTemplateView.js","modules/workflow/WorkflowView.js","shared/components/dialog/AppUpdateAvailable.js","webpack:///./src/shared/assets/images/google.svg?34f7","registerServiceWorker.js","webpack:///./src/shared/assets/images/microsoft.svg?70a9","shared/assets/images/reply.svg","webpack:///./src/shared/assets/images/trash.svg?9bf7","shared/assets/images/chat.svg","shared/assets/images/notifications.svg","shared/assets/images/no-notifications.svg","shared/assets/images/invitations.svg","shared/assets/images/landline.svg","shared/assets/images/mobile_phone.svg","App.js","index.js","shared/assets/images/filter-green.svg","shared/assets/images/table-sort-grey.svg","shared/assets/images/trasnfer.svg","shared/assets/images/call-green.svg","shared/assets/images/Search-dark.svg","shared/assets/images/call-phone.svg","shared/assets/images/chevron.svg","shared/assets/images/information.svg","shared/assets/images/left-arrow.svg","shared/assets/images/right-arrow.svg","shared/assets/images/update.svg","shared/assets/images/campaigns-gray.svg","shared/assets/images/alert.svg","shared/assets/images/create-company.svg","shared/assets/images/Billing-information.svg","shared/assets/images/First-Agency-Info.svg","shared/assets/images/Subscription-plan.svg","shared/assets/images/chat-green.svg","shared/assets/images/compose-email-green.svg","shared/assets/images/compose-email-white.svg","shared/assets/images/info.svg","shared/assets/images/tasks-green.svg","shared/assets/images/inbox-green.svg","shared/assets/images/update-grey.svg","shared/assets/images/recording-green.svg","shared/assets/images/call-phone-green.svg","shared/assets/images/chevron-down.svg","shared/assets/documents/campaign-leads-endpoint.md","shared/assets/images/compose-email.svg","shared/assets/images/google.svg","shared/assets/images/microsoft.svg","shared/assets/documents/csv/leads.csv","shared/assets/documents/csv/leads_drivers.csv","shared/assets/documents/csv/leads_auto.csv","shared/assets/documents/csv/leads_auto_with_drivers.csv","shared/assets/documents/csv/leads_commercial_auto.csv","shared/assets/documents/csv/leads_commercial_auto_with_drivers.csv","shared/assets/documents/csv/leads_home.csv","shared/assets/documents/csv/leads_home_with_drivers.csv","shared/assets/documents/csv/leads_life.csv","shared/assets/documents/csv/leads_life_with_drivers.csv","shared/assets/documents/csv/leads_employee_benefits.csv","shared/assets/documents/csv/leads_employee_benefits_with_drivers.csv","shared/assets/documents/csv/leads_general_liability.csv","shared/assets/documents/csv/leads_general_liability_with_drivers.csv","shared/assets/documents/csv/leads_workers_compensation.csv","shared/assets/documents/csv/leads_workers_compensation_with_drivers.csv","shared/assets/documents/csv/leads_ricochet.csv","shared/assets/images/leadvolt-lightning.png"],"names":["module","exports","Container","styled","div","_templateObject","_taggedTemplateLiteral","Span","span","_templateObject2","IconCount","_ref","name","countStyle","props","_objectWithoutProperties","_excluded","count","React","createElement","style","noCountMessage","Icon","Object","assign","size","cursor","Tooltip","message","defaultProps","USER_STATUSES","Status","StatusText","StatusCircle","_templateObject3","color","status","LoaderContainer","Loader","BoostLoader","USER_STATUS_CREATE_MUTATION","gql","USER_STATUS_LIST_QUERY","USER_STATUS_LIST_SUBSCRIPTION","OnSessionFetch","createEvent","OnSessionError","OnSelectedAgencyChange","OnMetaUpdate","OnApolloClient","OnUserUpdate","OnUserUpdateError","OnInvitationsSkipped","OnTokenExpired","apollClient","client","get","Error","ValidationError","_Error2","_inherits","_super2","_createSuper","arr","_this2","_classCallCheck","call","_wrapNativeSuper","isIncludesInOptions","stringToTest","listOptions","includes","isValidString","allowEmpty","arguments","length","undefined","allowNull","whiteSpace","test","isValidNumber","value","allowZero","allowNegative","numberToTest","parseInt","toString","match","isNaN","isValidFloat","decimalPlaces","parseFloat","decimalPart","split","isValidInteger","Number","isInteger","isValidEmail","email","isValidDate","date","moment","isValid","isValidPhoneNumber","number","fileToBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","result","onerror","error","sanitize8BaseEmptyFields","data","keys","forEach","key","Array","isArray","sanitize8BaseReference","connect","id","sanitize8BaseReferences","map","sanitize8BaseReconnects","reconnect","sanitize8BaseDocumentUpdate","downloadUrl","create","unCapitalize","charAt","toLowerCase","slice","createValidations","validations","modelName","messageValid","concat","errorMessages","validation","required","Boolean","type","push","field","numberWithCommas","replace","chunkArray","array","chunkSize","_toConsumableArray","debounce","func","timeout","wait","_len","args","_key","later","apply","clearTimeout","setTimeout","OnUserStatusCreateEvent","OnUserStatusError","OnuserStatuslistEvent","createUserStatus","_asyncToGenerator","_regeneratorRuntime","mark","_callee","userStatus","response","wrap","_context","prev","next","current","user","mutate","mutation","variables","refetchQueries","sent","t0","abrupt","dispatch","log","stop","_x","fetchUserStatuses","_ref2","_callee2","_context2","query","fetchPolicy","_x2","ToastText","Text","ToastTitle","ToastSuccess","title","text","Fragment","ToastError","_ref$text","ToastInfo","ToastAttention","ToastErrors","values","idx","IconWarn","img","ToastWarn","Row","alignItems","src","alert","alt","customScrollBar","css","Box","fullWidth","width","minWidth","height","minHeight","maxHeight","padding","paddingTop","paddingBottom","paddingLeft","paddingRight","marginTop","marginBottom","marginLeft","marginRight","position","top","bottom","left","right","background","borderRadius","boxShadow","border","borderTop","borderBottom","borderLeft","borderRight","overflow","hoverable","hoverColor","display","flexDirection","flexGrow","flexWrap","justifyContent","gap","textAlign","withCustomScroll","NEW_SMS_NOTIFICATIONS_SUBSCRIPTION","QUERY_USER_NOTIFICATION","_templateObject4","UPDATE_NOTIFICATION","_templateObject5","UPDATE_NOTIFICATION_BY_FILTER","_templateObject6","CREATE_USER_PUSH_SUBSCRIPTION","_templateObject7","_templateObject8","OnFetchNotifications","OnFetchNotificationsError","OnNotificationMarkRead","OnNotificationMarkReadError","OnAllNotificationMarkRead","OnAllNotificationMarkReadError","OnServiceWorkerRegistered","markAllNotificationsAsRead","createAction","agency","read","set","filter","equals","markNotificationsAsRead","ids","in","_x3","markNotificationAsRead","_x4","_markNotificationAsRead","_callee4","_context4","fetchNotifications","_ref3","_callee3","page","first","skip","sort","_response$data$user$n","_response$data","_response$data$user","_response$data$user$n2","notifications","_context3","createdAt","userId","notificationRelation","items","notificationsList","console","_x5","_x6","_x7","createUserPushSubscription","_x8","_createUserPushSubscription","_callee5","_context5","endpoint","metadata","ToastMessage","_sms$lead","notification","sms","lead","firstName","receivedFrom","history","useHistory","Column","Paragraph","onClick","_sms$lead2","config","autoClose","toast","POSITION","BOTTOM_LEFT","success","setIsErrorToastShowing","onClose","errors","info","attention","warn","onErrorMixinFC","err","trim","onChangeDataHookMixin","object","newObject","_objectSpread","AgencyFragment","SelectedAgencyFragment","UserFragment","CompanyFragment","AgencyInvitationFragment","CompanyInvitationFragment","AGENCY_INVITATIONS_SUBSCRIPTION","COMPANY_INVITATIONS_SUBSCRIPTION","MetaFragment","_templateObject9","SESSION_QUERY","_templateObject10","SUBSCRIPTION_STATUS","INCOMPLETE_EXPIRED","USER_QUERY","_templateObject11","UPDATE_USER","_templateObject12","updateUserValidator","_templateObject13","_templateObject14","_templateObject15","userData","lastName","timezone","cellPhone","SYSTEM_SETTINGS_QUERY","OnSystemSettings","initialValue","OnSystemSettingsError","fetchSystemSettings","systemSettingsList","fetchUser","_args","updateUser","validate","_args2","avatar","t1","fetchSession","agencyInvitationFilter","createdBy","not_equals","companyInvitationFilter","t2","updateMeta","_ref4","_OnSessionFetch$get","selectedAgency","onboardingStep","userUpdate","skipInvitations","CAMPAIGN_STATUSES","PRIORITIES","DATE_SCHEMA_FORMATS","ADMIN","MANAGER","AGENT","AGENCY_ROLES","PRIORITY_VALUES","PRIORITY_OPTIONS","label","String","TYPE_VALUES","LEAD_TYPE_AUTO","LEAD_TYPE_COMMERCIAL_AUTO","LEAD_TYPE_HOME","LEAD_TYPE_LIFE","LEAD_TYPE_GENERAL_LIABILITY","LEAD_TYPE_WORKERS_COMPENSATION","LEAD_TYPE_EMPLOYEE_BENEFITS","GENDERS","MALE","FEMALE","OTHER","PREFER_NOT_SAYING","MARITAL_STATUSES","WIDOW","SINGLE","MARRIED","MARITAL_STATUSES_OPTIONS","LIST_INITIAL_STATE","loading","LEAD_CSV_FORMATS","LEAD_CSV_FORMAT_OPTIONS","getActiveAgency","session","agencies","getUserAgencies","agencyId","setActiveAgency","find","userAgencyUserRelation","item","getRolesOnSelectedAgency","roles","userAdminRelation","some","c","company","rolesInAgency","userHasAnyRoleInAgency","userRoles","role","getUserAgencyRoles","activeAgency","agencyUser","getUserRolesInAgency","_user$userAgencyUserR","userAgency","_slicedToArray","Dialog","Header","Body","Footer","Button","button","Name","p","Email","JobTitle","StyledLink","Link","StatusLabel","DropDownContainer","HeadDropdown","Chevron","rotate","OptionContainer","Switch","Switch8b","DropdownOption","isBusy","statusOptions","Component","DialogProfile","isOpen","auth","onOutsideClick","callsState","callsAction","showSwitch","_useState","useState","_useState2","isStatusOpen","setStatusOpen","dialogRef","useRef","userAgencyRoles","useEffect","handleClick","event","contains","target","document","addEventListener","removeEventListener","handleLogout","clearStore","localStorage","clear","authClient","logout","useEventSubscription","option","Head","ref","Grid","Layout","inline","columns","Avatar","Dropdown","isHead","chevron","closeOnClickOutside","i","toUpperCase","onChange","inverted","to","compose","withApollo","withAuth","getColorFromStatus","AvatarWithStatusWrap","AvatarStatus","AvatarWithStatus","useAgency","setAgency","useSubscription","getAdminCompanies","relation","isCompanyAvailable","subscription","subscriptions","UNPAID","CANCELED","INCOMPLETE","isCompanyAvailableFromAgencyId","CREATE_PHONE_CALL","CREATE_PHONE_CALL_WITH_LEAD","QUERY_LEADS_PHONES","QUERY_LEAD_STAGES","CREATE_LEAD_DISPOSITION","INBOUND_PHONE_CALLS_LIST","PHONE_CALLS_LIST","PHONE_NUMBERS_QUERY","LEAD_DATA_QUERY","TRANSFER_CALL_MUTATION","PHONE_CALL_PARTICIPANT_SUBSCRIPTION","FETCH_PHONE_CALL_PARTICIPANT","FETCH_LEAD_CALL_CADENCE_AND_AGENCY","_templateObject16","FETCH_CALL_INFO","_templateObject17","CREATE_LEAD_CALL_CADENCE","_templateObject18","UPDATE_LEAD_CALL_CADENCE","_templateObject19","TwilioDevice","Device","require","CALL_TYPES","callControlsDefaultState","show","connection","callId","from","_type","ringing","duration","interval","phoneNumber","calling","inboundCallPreview","campaign","TWILIO_CONFIG","codecPreferences","fakeLocalDTMF","enableRingingState","DEVICE_EVENTS","TWILIO_ERROR_CODES","AUTOMATIC_CALLS_STATUSES","FILTER_DATA","dateStart","dateEnd","aceptedBy","rejectedBy","SORT_OPTIONS","FILTER_CATEGORIES_SHARE","placeholher","identifier","FILTER_CATEGORIES_OUTBOUND","assignedTo","options","FILTER_CATEGORIES_INBOUND","onLeadDispositionCreate","onLeadDispositionCreateError","onPhoneNumberList","onVoiseMailMessageList","onVoiseMailMessageListError","onTransferCall","onTransferCallError","onOnlineUsersList","OnFetchCallParticipant","OnFetchCallParticipantError","OnDeletePhoneCallRecordingEvent","OnDeletePhoneCallRecordingError","OnFetchPhoneCallRecordingsEvent","OnFetchPhoneCallRecordingsError","OnFetchInboundCallsEvent","OnFetchInboundCallsError","OnFetchOutboundCallsEvent","OnFetchOutboundCallsError","OnFetchTwilioTokeError","OnPhoneCallRegistryEvent","OnPhoneCallRegistryError","OnLeadPhonesListEvent","OnLeadPhonesListError","OnLeadStagesListEvent","OnLeadStagesListError","OnCallStartEvent","OnCallStartError","OnPhoneCallFinishedEvent","OnFetchLeadCallCadenceEvent","OnFetchLeadCallCadenceError","OnCreateLeadCallCadenceEvent","OnCreateLeadCallCadenceError","OnUpdateLeadCallCadenceEvent","OnUpdateLeadCallCadenceError","OnFetchCallInfoEvent","OnFetchCallInfoError","getUserToken","JSON","parse","token","getRandomNumber","min","max","shouldRound","random","Math","round","ACTIVE","createPhoneCallRegistry","leadId","fetchLeadCallCadenceAndAgency","_fetchLeadCallCadenceAndAgency","_callee6","resp","_context6","fetchCallInfo","_fetchCallInfo","_callee7","callSid","twilioSubAccountSid","_context7","subAccountSid","createLeadCallCadence","_createLeadCallCadence","_callee8","_context8","updateLeadCallCadence","_updateLeadCallCadence","_callee9","callCadenceId","_context9","fetchLeadPhoneList","limit","_x9","shouldFetchToken","initializeTwilioClient","_x10","_x11","_initializeTwilioClient","_callee10","refetch","_yield$response$json","twiliodev","_args10","_context10","fetch","process","headers","Authorization","json","setup","_fetchLeadStages","_callee11","_context11","_createLeadDisposition","_callee12","amount","callType","rest","newData","_context12","outboundPhoneCall","inboundPhoneCall","stage","createSort","sortData","priority","fetchPhoneCalls","AND","filterData","gte","startOf","toISOString","lte","endOf","_x13","_x14","fetchIboundPhoneCalls","_x15","_x16","fetchPhoneNumbers","_x17","_fetchPhoneNumbers","_callee13","subStatus","_args13","_context13","active","OR","isFree","phoneNumbersList","_fetchLeadDataService","_callee14","_context14","_transferCallService","_callee15","users","phones","_context15","transferCall","_x19","_x20","_x21","_x22","fetchCallParticipant","_ref5","_x23","useUser","_useState2$","setUser","_OnSessionFetch$get2","currentUser","state","TABLE_COLUMNS","Received","property","Contact","AssignedTo","Campaign","LastAction","Priority","ACTIVE_COLUMNS","leadType","leadVendor","hasNotes","SMS_FILTER_DATA","SMS_SORT_OPTIONS","LEAD_TYPE_OPTIONS","FILTER_CATEGORIES_TEXT_TYPES","FILTER_CATEGORIES","middleName","createdAfter","createdBefore","SMS_FILTER_CATEGORIES","GENDER_OPTIONS","BIRTHMONTH_OPTIONS","BIRTHDAY_OPTIONS","getDateOfBirthYears","BIRTHYEAR_OPTIONS","Date","getFullYear","YES_OR_NOT","STATES_OPTIONS","LEAD","gender","birthMonth","birthDay","birthYear","ifsScore","assignees","agents","phone","code","firstAddress","secondAddress","city","zipCode","creditScore","canSeeTaskAndNotesOptions","leadDetailMap","_lead$campaign","address","getLeadType","zip","street1","street2","getLeadPhoneNumbers","checkEmptyColumnValues","row","column","leadLeadTypeAutoRelation","leadLeadTypeCommercialAutoRelation","leadLeadTypeHomeRelation","leadLeadTypeLifeRelation","leadLeadTypeGeneralLiabilityRelation","leadLeadTypeWorkersCompensationRelation","leadLeadTypeEmployeeBenefitRelation","driverCreateMap","driver","isUpdate","checkBoolOrString","string","birthDate","maritalStatus","ageFirstLicensed","licensedState","licenseStatus","fullTimeStudent","education","occupation","creditRating","parseTo","relationshipToApplicant","daytimePhone","eveningPhone","preferredContactNumber","preferredContactTime","makeOfVehicle","modelOfVehicle","yearOfVehicle","ownership","primaryUse","averageOneWayMileage","annualMileage","vehicleParking","antiLockBreaks","securitySystem","salvagedVehicle","yearsAtCurrentResidence","insuranceCompany","continuouslyInsuredYears","continuouslyInsuredMonths","currentInsuranceCompanyYears","currentInsuranceCompanyMonths","insuredPast30Days","yearsInField","policyExpirationDate","howManyIncidentsInThePast5Years","incidentsPast5Years","violationsPast5Years","activityPast5Years","vin","ticketsAccidentsClaimsPast3Years","additionalDrivers","additionalVehicles","completedBehindTheWheel","currentBodilyInjuryCoverages","currentPropertyDamageCoverages","currentCoverageLevel","coverageLevel","currentComprehensiveDeductible","currentCollisionDeductible","fillingRequired","bankruptcyInPast5Years","multiplePolicyDiscount","eNewsletter","suspendedOrRevokedInThePast5Years","dUIDWIInThePast5Years","dateOfDUIDWI","desiredCollisionCoverage","desiredComprehensiveCoverage","averageDaysPerWeekUsed","primaryDriver","leadDriverValidations","leadDriver","NaN","leadCommercialAutoMap","leadCommercialAuto","leadCommercialAutoValidations","businessName","yearsInBusiness","businessType","coverageAmount","payroll","sales","numberOfVehicles","numberOfDrivers","leadCommercialAutoCreateMap","numberOfEmployees","leadAutoMap","leadAuto","leadAutoValidations","alternate","otherInfo","leadAutoCreateMap","leadLifeMap","leadLife","dateGenerated","format","leadLifeValidations","lifeInsuranceInformation","policyType","faceAmount","knownMedicalCondition","smoke","term","heightFeet","heightInches","age","weight","leadLifeCreateMap","dateLeadGenerated","spouse","bankAccount","telemarketerName","callbackTime","beneficiary","spouseAge","driveRecording","leadHomeMap","leadHome","claims","addressLineToBeInsured","cityToBeInsured","stateToBeInsured","zipToBeInsured","addressToBeInsured","leadHomeCreateMap","continuouslyInsured","currentlyInsured","homeUpgrades","newPurchase","ageOfRoof","bathrooms","bedrooms","bestTimeToContact","brushHazardWithin500Feet","burglarAlarm","businessConductedOnPremises","cathedralVaultedCeilings","centralHeatingAir","comments","constructionType","copperWaterPipes","coverageNeededOnContents","coverageNeededOnHouse","credit","currentInsuranceCompany","deadBolts","dob","dogType","dwellingType","enclosedPorchPatio","fencedInPool","fireAlarm","fireExtinguishers","fireHydrantProximity","fireStationProximity","fireplaces","floodPain","foundationType","frequencyOfPayment","garageType","hardwoodFloors","heatType","homeUpgradesDescribed","homeValue","hotTub","indoorSprinklers","insuredSince","mannedSecurityStation","monitoredBurglarAlarm","numberOfClaims","occupancyStatus","policyExpiration","porches","premium","requestedDeductible","requestedLiability","sauna","servicePanelType","smokeDetectors","smokerInHousehold","squareFootage","stories","sumpPump","swimmingPool","tennisCourts","timeAtCurrentResidence","timeAtPreviousResidence","timeWithCurrentCompany","wiringType","woodBurningStove","yearBuilt","leadEmployeeBenefitsMap","leadEmployeeBenefits","leadEmployeeBenefitsValidations","annualPayroll","companyName","natureOfBusiness","leadEmployeeBenefitsCreateMap","leadGeneralLiabilityMap","leadGeneralLiability","leadGeneralLiabilityCreateMap","grossSales","leadWorkersCompensationMap","leadWorkersCompensation","leadWorkersCompensationValidations","leadWorkersCompensationCreateMap","priorityMap","optionList","findPriority","canDeleteLeads","getLeadFullName","getLeadPhoneNumberRelationInput","reduce","acum","curr","parsePhone","parsedPhone","update","delete","LeadPhoneType","MOBILE","disconnect","getLeadFromRowCsv","index","_lead$email","leadTypeFields","leadDrivers","countDrivers","types","indexOf","every","t","join","typePrefix","substr","leadTypeMaps","auto","commercialAuto","life","home","employeeBenefit","generalLiability","workersCompensation","startsWith","attribute","countDriver","startColumn","columnIndex","columnName","keyPhone","_defineProperty","mapLeadTypeRelationName","preprocessDataFromCsv","newCsvColumns","newCsvData","campaignIndex","elem","genderIndexes","hasGenderColumn","e","maritalStatusesIndexes","hasMaritalStatusColumn","datesIndexes","hasDateColumns","priorityIndex","typeIndex","subarr","_","selectedPriority","findPriorityNumber","acending","maxNum","minNum","diference","years","order","year","_lead$leadLeadPhoneNu","leadLeadPhoneNumberRelation","PhoneNumberUtil","getInstance","parseAndKeepRawInput","getNationalNumber","parsePhoneNumber","str","parseSavedNumbers","numbers","purchasedNumbers","failedNumbers","stringify","getPhoneNumbersString","getPhoneNumberStr","formatPhoneNumber","timeFormats","singular","plural","d","formatDuration","formats","depth","_formats","floor","twilioConnectionErrors","parseListToSelectOptions","list","getBestPhoneNumber","selectedNumber","isTollFree","tollFreePrefixes","_parsePhoneNumber","_item$number","_item$number$number","_item$number2","_item$number2$number","randomIndex","getCadenceInterval","subtract","_handleLeadCallCadence","callInfo","_updateLeadCallCadenc","twilioSID","callCadence","startTime","day1","lastCalled","useUserStatus","_useUser","_useQuery","useQuery","subscribeToMore","unsubscribe","updateQuery","userStatusesList","subscriptionData","UserStatus","node","onError","AWAY","useTwilioDeviceSubscription","callback","subscriptionRef","subscriptionCallback","params","on","removeListener","usePhoneCallComponent","isInitialized","ready","setReady","_useState3","_useState4","startingCall","setStartingCall","_useUser2","phoneNumbers","useEvent","isReady","makeCall","useCallback","receiverName","callerNumber","onReady","connectionError","onOffline","usePhoneCallControls","_useState5","_useState6","_useState6$","setState","_useState7","_useState8","muted","setMuted","_useUser3","audioStream","microphoneStream","_useState9","_useState10","showDialPad","setShowDialPad","_useState11","_useState12","isErrorToastShowing","fecthNumbers","setInterval","minutes","clearInterval","onAccept","onCancel","disconnectAll","close","acceptCall","accept","prevState","ignoreCall","ignore","rejectCall","sendDialDigit","digit","sendDigits","muteToggle","mute","handleHangUp","handleVoiceMail","audio","AudioContext","window","webkitAudioContext","mediaStream","setInputTracksFromStream","stream","play","context","track","createMediaElementSource","output","createMediaStreamDestination","handleVoiceMailEnded","getTracks","navigator","mediaDevices","getUserMedia","then","createMediaStreamSource","resume","_call$lead","phoneCallCreate","customParameters","conn","_data$phoneCallPartic","phoneCallParticipant","inboundCall","outboundCall","isCalling","parameters","CallSid","handleLeadCallCadence","start","now","toggleDialPad","closeDialPad","useLeadStages","_useState13","_useState14","_useState14$","setList","fetchLeadStages","leadStagesList","DropdownList","MenuOption","Menu","Item","MenuContainer","forwardRef","setNumber","loadingPaginate","leadName","formatedPhone","callPhoneIconUrl","Dialer","showList","viewNumber","loadingPhoneList","phoneList","_useState4$","setPhoneList","dialerRef","externalRef","numberOfCurrentItems","total","setPage","isNearScreen","setIsNearScreen","element","observer","IntersectionObserver","entries","el","isIntersecting","rootMargin","observe","handleNextPage","prevPage","resetPagination","useInfinityPagination","_ref2$leadsList","leadsList","mappedPhones","num","viewNum","showPhoneList","handleInputChange","filteredPhoneList","filterList","InputField","placeholder","input","onFocus","stretch","DialerPhones","Backdrop","DialerBackdrop","disabled","DialerButton","children","setShow","routes","path","iconUrl","component","List","ul","RouterLink","FakeLink","Li","li","Image","Logo","StyledIcon","StretchedTooltip","withRouter","companyAvailable","route","pathName","location","pathname","routePath","isActive","placement","iconName","TextSpacing","BodyHeader","currentOption","defaultOpen","bodyHeader","showActiveOption","offset","currentOptionValues","DefaultHead","optionsFiltered","DropdownBoost","toggleDropdown","renderOptionsMap","onDisabledClick","DropdownWrap","PrimaryBtn","DialogInvitations","onCloseDialog","onClickAcceptAgencyInvitation","onClickDeclineAgencyInvitation","onClickAcceptCompanyInvitation","onClickDeclineCompanyInvitation","isLoading","agencyInvitations","companyInvitations","invitation","avatarUrl","previewUrl","username","agencyName","header","description","showButtons","Card","Section","offsetY","offsetX","Heading","UPDATE_AGENCY_INVITATION_MUTATION","FIND_ROLES_IN_AGENCY","CREATE_ROLES_IN_AGENCY","UPDATE_ROLES_IN_AGENCY","canAcceptAgencyInvitation","userEmail","canDeclineAgencyInvitation","OnAcceptAgencyInvitationEvent","OnDeclineAgencyInvitationEvent","OnAgencyInvitationError","acceptAgencyInvitation","agencyUsersList","agencyUserRoles","eventData","include","t3","agencyUserUpdate","agencyUserCreate","declineAgencyInvitation","createManagerAgencies","managed","_iterator","_step","_createForOfIteratorHelper","s","n","done","f","finish","agencyUsersUpdate","QUERY_INVITATIONS","CREATE_INVITATION","DELETE_INVITATION","RESEND_INVITATION","CREATE_INVITATION_COMPANY","COMPANY_INVITATION_LIST","DELETE_COMPANY_INVITATION","UPDATE_COMPANY_INVITATION_MUTATION","CREATE_ADMIN_MUTATION","canAcceptCompanyInvitation","canDeclineCompanyInvitation","OnCompanyinvitationListEvent","OnCompanyinvitationError","OnDeclineCompanyinvitationEvent","OnAcceptCompanyinvitationEvent","OnfetchCompanyList","OnCompanyfetched","OnCompanyUpdated","OnCompanyError","OnCreateCompanyInvitationEvent","OnCreateCompanyInvitationError","OnDeleteCompanyInvitationEvent","OnDeleteCompanyInvitationError","OnSubcriptionPlansListEvent","OnSubcriptionPlansListError","fetchCompanyInvitationList","pageSize","queryOffset","userID","createCompanyInvitation","createCompanyInvitationValidator","deleteCompanyInvitation","invitationId","createAdmin","companyId","acceptCompanyInvitation","_invitation$company","agencyCompanyRelation","declineCompanyInvitation","_ref6","_OnSessionFetch$get3","_Flux$DashStore","AgencyStore","_super","_this","addEvent","Flux","DashStore","getPendingInvitations","agencyInvitationsList","companyInvitationsList","pulse","keyframes","IconCountWrap","iconA","iconB","iconC","AutomaticCallsIcon","imgUrl","colorsAndText","1","textColor","bg","2","3","4","5","Badge","StyledBadge","customPriority","colors","NotificationsListItem","timeFromNow","fromNow","formatedDate","_getNotificationInfo","_userTrigger$avatar","userTrigger","disposition","userTriggerName","userTriggerAvatar","NOTIFICATIONS_TYPES_GROUPS","LEADS","url","linkText","NOTIFICATIONS_TYPES","LEAD_ASSIGN","LEAD_UNASSIGN","LEAD_UPDATE","LEAD_EXPIRATION","expiration","expirationDate","created","difference","diff","MAILS","emailId","subject","MAIL_FROM_LEAD","MAIL_RECEIVED","CAMPAIGNS","CAMPAIGN_ASSIGN","CAMPAIGN_UNASSIGN","CAMPAIGN_UPDATE","getNotificationInfo","onLinkClick","areas","area","justifySelf","NotificationCard","unread","updating","setUpdating","markAllAsRead","useMemo","loader","more","variant","content","initialState","useNewSMSMessageNotifications","onSubscriptionData","notificationId","smsObj","Notification","NotificationsIcon","refresh","_notificationsList$co","useNotificationsList","pin","onFetchChannelMembers","onFetchChannelMembersError","onFetchUnreadMessages","onFetchUnreadMessagesError","CHAT_CHANNEL_MEMBER_QUERY","UNREAD_MESSAGES_QUERY","NEW_MESSAGE_SUBSCRIPTION","_fetchChannelsMembers","_fetchUnreadMessages","channels","responses","results","responsesData","channel","lastReadTS","all","WORKSPACE_ENDPOINT","createApolloClient","getToken","httpLink","HttpLink","uri","authLink","setContext","_headers","authorization","errorLink","_error$response$error","graphQLErrors","wsLink","WebSocketLink","connectionParams","workspaceId","environmentName","webSocketImpl","_WebSocket","WebSocketWithoutProtocol","WebSocket","splitLink","definition","getMainDefinition","kind","operation","link","ApolloClient","cache","InMemoryCache","apolloClient","Apollo","apollo","ApolloProvider","ChatIcon","userToken","channelsMembers","setChannelsMembers","unreadCount","setUnreadCount","showChatSidebar","setShowChatSidebar","fetchChannelsMembers","channelMembersList","fetchUnreadMessages","prevCount","messages","messagesList","subcriptionCallback","subscribe","_data$Message","_data$Message$node","Message","_data$Message2","Chat","authToken","isSidebarVisible","onChangeSidebar","BarRow","TitleContainer","AgencyContainer","IconsContainer","Agency","CurrentBadge","TRIALING","handleOnChangeAgency","setAgencyId","getTitle","dialogIsOpen","setDialogIsOpen","setTitle","invitationsCount","setInvitationsCount","dialogInvitationIsOpen","setDialogInvitationIsOpen","setAgencyInvitations","setCompanyInvitations","isLoadingInvitations","setIsLoadingInvitations","setInvitations","_getPendingInvitation","_getPendingInvitation2","pendingAgencyInvitations","pendingCompanyInvitations","agencyInvitationSubcriptionCallback","AgencyInvitation","_data$AgencyInvitatio","previous","companyInvitationSubcriptionCallback","CompanyInvitation","_data$CompanyInvitati","unlisten","listen","handleOnSubscription","useSimpleSubscription","agencyStore","isAgencyEnabled","optionComponent","isEnabled","_useAutomaticCalls","_agency$phoneCallSett","socketRef","_usePhoneCallComponen","_useUser5","_useState15","_useState16","setActive","_useState17","_useState18","statusType","setStatusType","_useState19","_useState20","socket","setSocket","agencySetting","phoneCallSettings","automaticCalls","requestLead","emit","makeCallToLead","tel","startRequesting","socketClient","socketIOClient","lastConnection","getItem","removeAllListeners","onlineUsersCallback","onResponse","useAutomaticCalls","alignContent","emptyLabel","Toast","R","BreadcrumbsContainer","Breadcrumb","routeComponent","matchOptions","exact","ignoreRoutes","Paper","BreadcrumbsBoost","matchPath","FETCH_PHONE_CALL_RECORDINGS","DELETE_PHONE_CALL_RECORDING","FETCH_FILE_UPLOAD_INFO","uploadFile","_info$data$fileUpload","apiKey","policy","signature","form","body","handle","fileUploadInfo","FormData","append","method","filename","OnFetchVoiceMailMessagesEvent","OnFetchVoiceMailMessagesError","OnCreateVoiceMailMessageEvent","OnCreateVoiceMailMessageError","OnUpdateVoiceMailMessageEvent","OnUpdateVoiceMailMessageError","OnDeleteVoiceMailMessageEvent","OnDeleteVoiceMailMessageError","VoiceMailMessageFragment","FETCH_VOICE_MAIL_MESSAGES","CREATE_VOICE_MAIL_MESSAGE","UPDATE_VOICE_MAIL_MESSAGE","DELETE_VOICE_MAIL_MESSAGE","VoiceMailMessageStore","createFilter","byAgency","byName","byUrl","byActive","byProperty","_filter$name","namePredicate","_filter$url","urlPredicate","_filter$active","activePredicate","_filter$user","userPredicate","fetchVoiceMailMessages","orderBy","fetchVoiceMailMessagesForCalls","createVoiceMailMessage","voiceMail","onProgress","uploadedInfo","_args3","dispatchEvent","fileId","updateVoiceMailMessage","_args4","File","deleteVoiceMailMessage","VoiceMailMessagesDialog","_React$Component","open","handleSubmit","onSubmit","selected","_createClass","this","_this$state","shouldCloseOnOverlayClick","scrollable","ActionButton","ControlButton","voicemailIconUrl","sending","VoiceMailButton","onSubmitVoiceMail","onVoiceMailEnded","modalRef","audioRef","handleVoiceMailSubmit","voiceMailMessagesList","controls","hidden","crossOrigin","ControlsPortal","controlsRoot","getElementById","createPortal","propTypes","PropTypes","oneOfType","arrayOf","isRequired","IconPulse","CallInfo","displayName","align","DialPadContainer","section","DialCloseBtn","DialBtn","DialPad","send","rounded","LEAD_NOTE_FRAGMENT","FETCH_LEAD_NOTES","NOTE_CREATE_MUTATION","NOTE_UPDATE_MUTATION","NOTE_DELETE_MUTATION","LEAD_AUTO_FRAGMENT","LEAD_TYPE_AUTO_UPDATE_MUTATION","LEAD_COMMERCIAL_AUTO_FRAGMENT","LEADS_TYPE_COMMERCIAL_AUTO_UPDATE_MUTATION","LEAD_DRIVER_FRAGMENT","FETCH_LEAD_DRIVERS","LEAD_DRIVER_CREATE_MUTATION","LEAD_DRIVER_UPDATE_MUTATION","LEAD_DRIVER_DELETE_MUTATION","LEAD_GENERAL_LIABILITY_FRAGMENT","LEAD_TYPE_GENERAL_LIABILITY_UPDATE_MUTATION","LEAD_LIFE_FRAGMENT","LEAD_TYPE_LIFE_UPDATE_MUTATION","LEAD_HOME_FRAGMENT","LEAD_TYPE_HOME_UPDATE_MUTATION","LEAD_WORKERS_COMPENSATION_FRAGMENT","LEAD_TYPE_WORKERS_COMPENSATION_UPDATE_MUTATION","LEAD_EMPLOYEE_BENEFITS_FRAGMENT","LEAD_TYPE_EMPLOYEE_BENEFITS_UPDATE_MUTATION","LeadHistoryFragment","FETCH_LEAD_HISTORY_QUERY_RESOLVER","AGENT_FRAGMENT","USER_FRAGMENT","LEAD_TASK_FRAGMENT","LEAD_FRAGMENT","LEAD_FRAGMENT_V2","LEAD_HISTORY_FRAGMENT","LEADS_FOR_TASK_LIST_QUERY_V2","LEADS_LIST_QUERY_V2","LEADS_COUNT","LEADS_LIST_LIGHT_QUERY","LEADS_LIST_LIGHT_SUBSCRIPTION","FILTER_OPTIONS_QUERY","LEAD_USERS_UPDATE_MUTATION","LEAD_CREATE_MUTATION","LEAD_UPDATE_MUTATION","LEAD_DELETE_MUTATION","TASK_CREATE_MUTATION","TASK_UPDATE_MUTATION","LEAD_TASK_TYPE_LIST_QUERY","_templateObject20","LEAD_DETAIL_QUERY","_templateObject21","CREATE_SMS_MUTATION","_templateObject22","FETCH_SMS_LIST","_templateObject23","FETCH_LEADS_COUNT_IN_CAMPAIGN","_templateObject24","FETCH_MESSAGES_BY_LEAD","_templateObject25","FETCH_LEAD_RECORDINGS","_templateObject26","ASSIGN_USERS_TO_LEAD","_templateObject27","UPDATE_LEAD","_templateObject28","_templateObject29","FETCH_CAMPAIGNS","_templateObject30","FETCH_LEAD_TASKS","_templateObject31","DELETE_LEAD_PHONE_NUMBERS","_templateObject32","OnFetchLeadEvent","OnFetchLeadEventError","OnUpdateLeadAmount","OnUpdateLeadAmountError","OnFetchCampaigns","OnFetchCampaignsError","OnUpdateLeadCampaign","OnUpdateLeadCampaignError","OnUpdateLeadAssignees","OnUpdateLeadAssigneesError","OnFetchLeadTasks","OnFetchLeadTasksError","OnFetchLeadMessages","OnFetchLeadMessagesError","OnLeadMessageCreate","OnLeadMessageCreateError","OnFetchLeadRecordings","OnFetchLeadRecordingsError","LeadStore","leadMessageValid","driverMessageValid","genderOptions","addressLine1","addressLine2","leadMessage","maritalStatusOptions","createAndUpdateLeadValidator","drivers","_step$value","updateLeadValidator","phoneUtil","isPossibleNumber","createAndUpdateTaskValidator","task","createLeadsFromRicochetColumnValidator","createLeadFromStandardValidator","_step2","_iterator2","createLeadFromRicochetValidator","creationDate","onTaskCreate","onTaskUpdateEvent","OnCsvUploadFinised","OnLeadsListEvent","OnLeadsError","OnFetchSmsListEvent","OnLeadCreateEvent","OnDeleteLeadsResult","OnAssignUserstoLeadEvent","OnAssignUserstoLeadError","OnLeadsUpdateEvent","OnDeleteLeadEvent","OnLeadsChunkBulkCreateEvent","OnValidatedLeadDataForUploadEvent","OnTaskError","OnTaskTypeListEvent","OnTaskTypeListError","search","_filterData$stage","rolesFilter","agencyFilter","stageNameFilter","typeSelectedFilter","typeFilter","is_not_empty","searhArray","word","notesLeadRelation","flat","phoneNumberFromFilter","textFields","leadSource","is_empty","none","fetchLeads","fetchLeadsLight","_responseCount$data","responseCount","responseLeads","fetchUserLeads","fetchFilterOptions","updateLeadUsers","_ref7","userIds","uid","updateLead","_ref8","_getLeadPhoneNumberRe","force","_x12","updateLeadPriority","_ref9","deleteLeads","_ref10","leadList","deleteLead","_ref11","createLead","_ref12","_x18","createTask","_ref13","updateTask","_ref14","fetchLeadTaskTypes","_ref15","fetchLeadDetails","_ref16","updateLeadAmount","_ref17","updateLeadCampaign","_ref18","_callee16","_context16","_x24","_x25","updateLeadAssignees","_ref19","_callee17","_context17","_x26","_x27","fetchAgencyCampaigns","_ref20","_callee18","_context18","_x28","fetchLeadTasks","_ref21","_callee19","_context19","_x29","createSms","_ref22","_callee20","_context20","files","meta","leadPhoneNumber","_x30","createLeads","_ref23","_callee21","csvColumns","csvData","formattedLeads","leadIndex","leads","getListPromises","requestPromise","sizeChunck","chunksLeads","_args21","_context21","chunkLeads","r","importedLead","imported","isLast","totalChunk","catch","ceil","promise","nextChunk","_x31","_x32","_x33","createLeadsFromRicochet","_ref24","_callee22","leadsType","importedLeadId","vehicles","_result","attr","_i","promises","_args22","_context22","col","creation","second","country","_vehicles$order","_vehicles$order2","_vehicles$order3","make","model","toDate","_x34","_x35","_x36","_x37","fetchSMSMessages","_ref25","_callee23","_context23","_x38","_x39","fetchLeadMessages","_ref26","_callee24","_args24","_context24","_x40","assignUsersToLeads","_ref27","_callee26","_context26","_ref28","_callee25","_context25","assigned","_x43","_x41","_x42","fetchLeadRecordings","_x44","_x45","_fetchLeadRecordings","_callee27","_context27","getAssignedUsersLabel","firstUserFullName","firstUser","othersUsers","mapUserToDropdownWithCheck","assignedIds","a","checked","mapUserToMultipleSelect","FETCH_MAILS","FETCH_MAIL","CREATE_EMAIL_MESSAGE","FETCH_EMAIL_CONFIGURATION","FETCH_GMAIL_EMAILS","FETCH_GMAIL_EMAIL","CREATE_GOOGLE_EMAIL","FETCH_OUTLOOK_EMAILS","FETCH_OUTLOOK_EMAIL","CREATE_OUTLOOK_EMAIL","AgencyEmailServiceFragment","FETCH_AGENCY_EMAIL_SERVICES","CREATE_AGENCY_EMAIL_SERVICE","FETCH_AVAILABLE_EMAIL_SERVICES","UPDATE_AGENCY_EMAIL_SERVICE","OnFetchEmails","OnFetchEmailsError","OnFetchEmail","OnFetchEmailError","OnCreateEmail","OnCreateEmailError","OnFetchEmailConfig","OnFetchEmailConfigError","OnFetchGmailList","OnFetchGmailListError","OnFetchGmailItem","OnFetchGmailItemError","OnReplyGoogleEmail","OnReplyGoogleEmailError","OnFetchOutlookEmails","OnFetchOutlookEmailsError","OnFetchOutlookEmail","OnFetchOutlookEmailError","OnCreateOutlookEmail","OnCreateOutlookEmailError","OnReplyOutlookEmail","OnReplyOutlookEmailError","OnFetchAgencyEmailService","OnFetchAgencyEmailServiceError","OnFetchAvailableEmailServices","OnFetchAvailableEmailServicesError","OnSetAgencyEmailService","OnSetAgencyEmailServiceError","USER_SIGNATURE_QUERY","EmailStore","createEmailValidator","cc","LIST_FILTER_OPTIONS","OnUserSignatureEvent","OnUserSignatureError","OnCreateGoogleEmailEvent","OnCreateGoogleEmailError","INBOX","SEND","ARCHIVE","TRASH","createFilterForList","filters","folder","archived","deleted","_fullText","fetchEmails","fetchEmail","fetchAgencyEmails","createNewEmail","ccopy","EMAIL_TYPES","SENT","attachments","fetchUserSignature","fetchEmailConfiguration","_yield$client$query","emailInboundServicesList","emailOutboundServicesList","gmailServicesList","outlookServicesList","_emailInboundServices","inbound","_emailOutboundService","outbound","_gmailServicesList$it","gmail","_outlookServicesList$","outlook","fetchGoogleEmails","after","q","labels","fetchGoogleEmail","_createGoogleEmail","replyGoogleEmail","threadId","fetchOutlookEmails","fetchOutlookEmail","outlookId","createOutlookEmail","replyId","replyOutlookEmail","fetchAgencyEmailService","_response$data$agency","_yield$client$mutate","agencyEmailServiceCreate","agencyEmailServicesList","agencyEmailService","fetchAvailableEmailServices","_yield$client$query2","_yield$client$query2$","b","agencyAvailableEmailServices","setAgencyEmailService","emailService","AGENTS_LIST_QUERY","OnAgentsListEvent","OnAgentsError","fetchAgents","agentsList","SUBSCRIPTIONS_OPERATIONS","formType","TaskContainer","Title","LeadsBox","DateBox","TaskPriority","Description","UserBoxLoader","initialForm","taskTypesReducer","leadTaskTypesList","taskLeadsReducer","TaskForm","setLeadForTask","onSuccess","hasAgents","hasLeads","initialFormState","taskDate","dateStr","setForm","setSearch","setConfig","setService","_usePromise","usePromise","reducer","_usePromise2","taskTypes","loadingTaskTypes","_usePromise3","_usePromise4","fetchedleads","loadingLeads","_usePromise5","onCompleted","currentState","loadingAgents","searchTimeout","handleFormChange","currentForm","usedLeads","taskCreateHandler","leadID","selectedUsers","end","add","summary","organizer","onFormSuccess","DialogForm","createText","onClickCreate","SelectField","selectedLead","selectedType","DateInputField","withTime","Margin","Label","SelectMultipleAgents","disable","defaultValue","TextAreaField","leadField","BaseCard","LeadCallForm","_statusOptions$","_scoresOptions$","addTaskModal","setAddTaskModal","setLoading","carrier","quotedPremium","currentPremium","insurance","notes","handleChange","_useLeadStages","scoresOptions","defaultStatus","defaultScore","fetchLeadDataService","submitForm","newForm","obj","createLeadDisposition","offsetBottom","clearable","OnUsersInAgencyFetch","OnUsersInAgencyFetchError","OnFetchAgents","OnFetchAgentsError","OnFetchManagerAndAgentUsersEvent","OnFetchManagerAndAgentUsersError","OnAdminDeletedEvent","OnAdminDeletedError","FETCH_USERS","MUTATION_DELETE_ADMIN","FETCH_USER_INFORMATION","CREATE_STRIPE_CUSTOMER","fetchManagerAndAgents","fetchAgencyAgents","fetchUsersInAgency","removeAdminFromCompany","admin","fetchUserInfoInAgency","useUsersInAgency","usersList","UserCard","_user$avatar","setSelected","isSelected","Checkbox","PhoneCard","onRemove","modalId","Close","TransferCallDialog","_useModal","useModal","closeModal","region","setRegion","online","onlineUser","useOnlineUsers","setPhones","onAddPhoneNumber","getCountryCode","onRemovePhoneNumber","Modal","ellipsis","BoostIcon","Select","Input","transferIcon","TransferCallButton","openModal","slideIn","slideOut","animateSlideInOut","isLead","Controls","muteIconUrl","padIconUrl","hangupIconUrl","CallControls","animateBack","_usePhoneCallControls","displayToast","setDisplayToast","closeCallback","timeoutId","phoneCallParticipantSubscriptionCallback","PhoneCallParticipant","wasRemovedFromCall","Transition","unmountOnExit","mountOnEnter","fontSize","urlBase64ToUint8Array","base64String","base64","repeat","rawData","atob","outputArray","Uint8Array","charCodeAt","moveLeft","moveRight","animateToLeft","LayoutContainer","LayoutContent","setIsLoading","setStatus","permission","requestPermission","registration","pushSubscription","actualSub","serviceWorker","pushManager","getSubscription","userVisibleOnly","applicationServerKey","usePushNotifications","reload","childrenLayout","TopBar","Breadcrumbs","renderComponent","render","restProps","rendered","ProtectedRoute","renderRoute","_this$props","isAuthorized","_excluded2","Redirect","_this$props2","rProps","_excluded3","Route","StyledBtn","DeleteBtn","YesNoDialog","onYes","onNo","_ref$yesText","yesText","_ref$noText","noText","_ref$isLoading","UserPrice","OthersPrice","BoostRow","Total","BoostText","PlanCard","plan","numberOfSeats","onSelect","onQuantityChange","readOnly","monthlyPrice","capitalizeName","handleSelect","handlePlus","quantity","handleMinus","Radio","selectedValue","isFreeTrial","sizes","xs","sm","md","lg","StyledIconBoost","IconBoost","IconAskInfo","trigger","tooltipPlacement","tooltipText","modifiers","flip","enabled","INFO_SVG","IconCompanyInformation","COMPANY_INFORMATION_SVG","IconBillingInformation","BILLING_INFORMATION_SVG","IconAgencyInformation","AGENCY_INFORMATION_SVG","IconSubscriptionPlan","SUBSCRIPTION_PLAN_SVG","IconInfo","IconTrash","gray","IconUpdateAlt","IconSort","IconLeftArrow","IconRightArrow","IconCallGreen","CALL_GREEN_SVG","IconChatGreen","CHAT_GREEN_SVG","IconComposeEmailGreen","COMPOSE_EMAIL_GREEN_SVG","IconTasksGreen","TASKS_GREEN_SVG","IconPerformanceGreen","IconInboxGreen","INBOX_GREEN_SVG","IconUpdate","IconUpdateGrey","UPDATE_GRAY_SVG","IconSearchDark","SEARCH_DARK_SVG","CustomIconBoost","IconFilterGreen","FILTER_GREEN_SVG","IconFilterGrey","FILTER_GREY_SVG","IconClose","FaTimes","IconRecordingGreen","RECORDING_GREEN_SVG","StyledLabel","BoostLabel","iconStyle","base","CardContainer","PaymentForm","hasFreeTrial","hasMembershipCode","cardHolderName","card","membershipCode","paymentMethodId","last4","expireDate","useOldMethod","handleCardEdit","handleCardUndo","growChildren","rightIcon","CardElement","selectedPlan","taxId","website","subscriptionPlan","agentEmails","managerEmails","adminEmails","coupon","businessPhone","mobilePhone","brandName","postalCode","callerIdName","invoice","companySub","CREATE_COMPANY_MUTATION","companyFragment","COMPANIES_QUERY","FETCH_COMPANY_FOR_BILLING_STATUS","COMPANY_BILLING_SUBSCRIPTION","COMPANY_QUERY","UPDATE_COMPANY_MUTATION","SUBSCRIPTION_PLANS_QUERY","GET_MEMBERSHIP_INFO","createCompanyValidator","isSoleProprietorship","isPossiblePhoneNumber","updateCompanyValidator","onboardingInvitationsValidator","getAssignedAgents","generateInvitationsFromEmails","agentInvitations","managerInvitations","CompanyInvoiceFragment","FETCH_COMPANY_INVOICES","CREATE_COMPANY_SUBSCRIPTION","CREATE_PAYMENT_METHOD","FETCH_PAYMENT_INTENT","FETCH_COUPONS","renewSubscriptionValidator","oldSubscription","stripeCustomerId","OnSubscriptionCanceled","OnSubscriptionCanceledError","OnSubscriptionRenew","OnSubscriptionRenewError","OnUpcomingInvoiceFetch","OnUpcomingInvoiceFetchError","OnValidCouponFetch","OnValidCouponFetchError","OnFetchCompanyInvoicesEvent","OnFetchCompanyInvoicesError","OPEN","INVOICE_STATUS","fetchCompanyInvoices","cancelSubscription","companySubscriptionId","ok","renewCompanySubscription","stripe","elements","paymentMethod","companySubscription","_paymentIntent","paymentIntent","fetchPaymentIntentFromInvoice","stripeInvoiceId","confirmCardPayment","client_secret","payment_method","last_payment_error","createSubscription","latest_invoice","payment_intent","t4","voidInvoice","createPaymentMethod","customerId","cardElement","getElement","createStripePaymentMethod","planId","couponId","subscriptionPlanId","createStripeSubscription","_fetchPaymentIntentFromInvoice","stripePaymentIntent","retrieveUpcomingInvoice","_JSON$parse2","_body$errors","_fetchValidCoupon","_response$data$compan","valid","companySubCouponsList","OnBoardingError","OnCreateCompanyEvent","OnOnBoardingInvitationsCreateError","OnOnBoardingProcessFinished","createCompany","membershipInfo","customer","parentPaymentMethod","resCompany","_invoice","_create","_update","_resCompany","_companySubscription","_invoice3","_paymentIntent3","_result2","_invoice2","_paymentIntent2","_result3","contactPhone","adminCompanyRelation","IFS_SCORES_DEFAULT","twilioBusinessType","userSelectedAgencyRelation","agencyAgencyUserRelation","companyUpdate","companyCreate","invoiceId","t5","createCustomer","line1","line2","t6","t7","billing_details","company_id","t8","t9","t10","t11","t12","withData","createStripeCustomer","finalizeCompanySubscription","createInvitations","_generateInvitationsF","agencyInvs","companyInvs","_invitation","companyIds","createSubscriptionPlansFilter","fetchCompany","filterAdmins","fetchCompanies","fetchSubscriptionPlans","updateCompany","useSubscriptionPlans","setFilter","subscriptionPlansList","useCompany","setCompanyId","startPolling","stopPolling","Company","setCompany","BoostButton","BoostColumn","CouponInput","setText","setCoupon","fetchValidCoupon","handleClear","handleBlur","percentage","months","onClear","onBlur","squared","PENDING","COMPANY_STATUS","emailRegexp","CompanyForm","onCloseForm","useStripe","useElements","_useCompany","loadingCompany","loadingSubmit","setLoadingSubmit","setHasMembershipCode","loadingMembershipLookup","setLoadingMembershipLookup","setCustomerId","setPaymentMethod","parentCompanyName","setParentCompanyName","_useSubscriptionPlans","subscriptionPlans","loadingPlans","debouncedMembershipCode","debouncedFunc","setDebouncedFunc","handler","useDebounce","_fetchMembershipCode","fetchMembershipCode","res","_res$data","_res$data$company","_res$data$company2","_res$data$company3","_res$data$company4","companyPaymentMethods","custId","company_name","companyInvoices","nameOnCard","onSeatsChange","change","_data$company$subscri2","handleValidationReject","failedEmails","hasMoreThan1Seat","plans","_data$company","_data$company2","_form$subscriptionPla","FormTitle","offsetTop","PhoneInput","defaultCountry","withCountryCallingCode","maxWidth","showErrorOnTouched","maxLength","TagsInput","tags","onlyUnique","validationRegex","onValidationReject","addOnBlur","aligItems","CreateCompanyView","logoutIsOpen","setLogoutIsOpen","showAnnualPrice","onCloseLogout","MainLoaderContainer","MainLoader","DecisionDialog","confirmText","cancelText","handleConfirm","onConfirm","selectAgency","handleCancel","isSkipOpen","setIsSkipOpen","onSkipClose","withCompany","WrappedComponent","rollbar","Rollbar","accessToken","REACT_APP_ROLLBAR_TOKEN","captureUncaught","captureUnhandledRejections","Session","_SimpleView","sessionRequired","apolloRequired","sessionError","systemHasError","throwError","bind","_assertThisInitialized","errorInfo","prevProps","prevComp","currComp","prevSub","currSub","_componentDidMount","msg","InvitationsView","SwitchAgencyView","SimpleView","any","StyledBody","DropdownBodyOnTable","withPortal","TextEllipsis","Table","BoostTable","PaginationContainer","ActionsCell","BodyCell","StyledCell","CustomHeaderCell","StyledHeaderCell","HeaderCell","DataTable","Actions","columnsSize","dropdownOptions","withCheck","withLabelActions","withPagination","withIconSort","ignoreColumns","paginationCtnRef","leftDropdown","BodyRow","customBodyRender","CustomCellValue","Pagination","defaultPage","CustomLink","StyledHeading","BoostCard","CardIndicator","StyledLayout","TableHeader","PaperHeaderContainer","PaperHeader","StyledTitle","Btn","PlusBtn","PointerCard","Bar","DayComponent","points","weekday","day","dateToSelect","pointsBackgrounds","fontWeight","point","backgroundColor","WeekComponent","week","selectedDay","onRightClick","onLeftClick","onSelectDay","tasks","leftArrow","fullDate","pointsActives","pointsInActives","rightArrow","SmallLoader","TableBody","StyledBodyRow","StyledHeader","TableLite","CURRENT_USER_QUERY","USER_SIGN_UP_MUTATION","AuthBtn","renderContent","Logout","Login","authorize","Query","StyledButton","StyledText","ButtonIcon","iconSvg","ButtonWithoutIcon","DateContainer","TextContact","TextContactHeader","TextTable","6","7","PriorityBadge","priorityPos","TitleDetail","SecondaryTitle","BtnText","CreateButton","FilterBtn","FilterButtonWithFocus","icon","SortBtn","SearchIcon","SearchInput","onIconClick","searchIcon","Padding","BoostAvatar","Slide","Performance","positions","bgColor","Position","AgentSlide","performance","Tab","Show","_ref$tabs","tabs","tabSelected","setTabSelected","views","tab","view","CustomMultiValueContainer","CustomOption","CustomLabel","MultiValueContainer","components","MultiValueLabel","MultiValueRemove","Option","innerProps","isDisabled","IndicatorsContainer","isMulti","styles","multiValue","container","control","menu","zIndex","menuList","InputContainer","RadioButton","square","RadioLabel","RadioInputField","DropdownFooter","DropdownMenu","StyledDropdown","IconContainer","ItemsContainer","DropdownWithCheck","itemList","setIsOpen","setItems","ac","cv","setControl","onConfirmHandler","newItemList","onCancelHandler","newControl","renderItems","oldId","inputChangeHandler","prevValue","closeDropdown","StyledRow","ItemFilter","ListCardBody","className","HeaderTitle","SelectWithoutBorder","setValue","onItemClickHandler","selectedOption","getValueLabel","Tag","ReactTag","inputProps","Set","MenuItem","danger","OptionsIcon","OptionsDropdown","SimpleDropdown","FilterFooter","closeText","CategoryTitle","strong","RadioGroupContainer","FilterCategory","category","onFilter","inputValue","setInputValue","onCategoryChange","DateInput","minDate","maxDate","AgingTableLite","logoutRedirectUri","origin","redirectUri","Auth","createClient","strategy","AUTH_STRATEGIES","WEB_8BASE","subscribable","domain","clientId","AuthContainerClass","AuthContainer","Client","CallbackContainerClass","_handleAuthentication","idToken","jwtData","setIdToken","request","jwtToken","namespace","authProfileId","authResult","getAuthorizedData","handleAuthentication","setItem","unix","CallbackContainer","AuthCallback","StyledButtonIcon","AnnouncementForm","announcement","onChangeInput","getRandomQuote","Form","SectionBody","UpdateIcon","rows","author","AnnouncementFragment","ANNOUNCEMENT_LIST_QUERY","ANNOUNCEMENT_UPDATE_MUTATION","ANNOUNCEMENT_CREATE_MUTATION","createAndUpdateAnnouncementValidator","OnAnnouncementError","OnAnnouncementCreateEvent","OnAnnouncementUpdateEvent","OnAnnouncementListEvent","dateCreatedStart","fetchAnnouncements","attempts","updateAnnouncement","createAnnouncement","StyledPaper","SubTitle","Author","UpdateButton","TextHelp","QuoteOpen","QuoteClose","Announcement","onUpdate","activeAgencyId","setData","loadingForm","setLoadingForm","handleOnClickUpdate","ramdomizeData","_objectSpread2","quote","getRandomly","quotes","handleOnCreateAndUpdate","announcementModel","userFirstName","defaultTitle","userCanUpdateAndCreate","announcementData","preventDefault","TaskTitle","h3","TaskText","Task","time","assignedBy","TasksByDay","fromNowDate","selectedDayFormat","refetchTasks","taskFormIsOpen","setTaskFormIsOpen","tasksFromDay","agent","CampaignFragment","CAMPAIGN_DETAIL_QUERY","CAMPAIGN_LIST_QUERY","CAMPAIGN_LIST_LIGHT_QUERY","CAMPAIGN_PROGRESS_QUERY","CAMPAIGN_CREATE_MUTATION","CAMPAIGN_DELETE_MUTATION","CAMPAIGN_UPDATE_MUTATION","FETCH_CAMPAIGN_LEADS","OnCampaignsList","OnCampaignsListError","OnCampaignReplaceList","OnCampaignReplaceListError","OnCampaignCreate","OnCampaignUpdate","OnCampaignDelete","OnCampaignDeleteError","OnCampaignError","OnCampaignDeleteProgress","OnCampaignDetailsEvent","OnFetchCampaignProgressEvent","OnFetchCampaignProgressError","createAndUpdateCampaignValidator","startsAt","endsAt","deleteCampaignValidator","campaignId","nextCampaignId","dateCreatedEnd","lastUpdatedStart","updatedAt","lastUpdatedEnd","createOrder","createCampaign","newCampaign","fetchCampaignsList","fetchCampaigns","fetchCampaignsLight","deleteCampaign","fetchCampaignDetail","fetchCampaignProgress","updateCampaign","_args8","fetchAvailableCampaigns","_args9","moveLeadsAndDelete","_response$data$leadsL","groups","progress","forceDeleteCampaign","_response$data$leadsL2","allSettled","DASHBOARD_ELEMENTS_QUERY","LEADS_LAST_24HOURS","FETCH_TOP_PERFORMERS","FETCH_AGENCY_BI_REPORT","UPDATE_FEEDBACK_ON_REPORT","GET_REPORT","OnFetchTopPerformersEvent","OnFetchTopPerformersError","OnDashBoardElementsEvent","OnDashBoardElementsError","OnLeadsLast24HoursEvent","OnFetchAgencyReportEvent","OnFetchAgencyReportError","OnFeedbackReportCreate","OnFeedbackReportCreateError","fetchUsers","dateFilter","previusMonth","actualMonth","performers","myUser","leadLeadStageHistoryRelation","agencyCampaignRelation","campaing","campaignLeadRelation","exist","u","fetchLeadsInLast24Hours","_fetchTopPerformers","alias","direction","createPerformersFilter","period","_fetchAgencyReport","periodType","createFeedback","_createFeedback","reportId","feedback","report","feedbackObj","agencyReport","LEAD_TASK_DETAIL_QUERY","LEAD_TASK_LIST_QUERY","LEAD_TASK_DELETE_MUTATION","LEAD_TASK_UPDATE_MUTATION","createAndUpdateLeadTaskValidator","leadTask","emailMarketingCampaign","OnLeadTaskList","OnLeadTaskDetails","OnLeadTaskUpdate","OnLeadTaskDelete","OnLeadTaskError","onDate","onStatus","fetchLeadTask","deleteLeadTask","fetchLeadTaskDetail","updateLeadTask","campaignMap","vendor","workflows","createdAtFormat","bigInt","campaignMapDashboardTable","_campaignMap","agentsFormat","endsFormat","leadTaskMap","leadTaskMapTable","leadTaskMapDashboardTable","_leadTaskMap","getWeekForCalendar","dataWeek","_date","_d","PERIOD_OF_TIME_OPTIONS","PriorityCell","rowData","setPriority","StatusCell","nameCellComponent","Arrow","currency","Intl","NumberFormat","notation","NextArrow","PrevArrow","settings","variableWidth","dots","infinite","slidesToShow","slidesToScroll","nextArrow","prevArrow","TopPerformersSlide","setPerformers","setPeriod","fetchTopPerformers","Slider","agentFirstName","agentLastName","agentAvatar","NoData","OnFetchCampaignMetricsEvent","OnFetchCampaignMetricsError","OnFetchCampaignAgingLeadsEvent","OnFetchCampaignAgingLeadsError","OnFetchAgencyMetricsEvent","OnFetchAgencyMetricsError","OnFetchUserMetricsEvent","OnFetchUserMetricsError","OnFetchCampaignsEvent","metricCellComponent","_rowData","leadNameCellComponent","leadStatusCellComponent","agencyMetrics","campaignMetrics","userMetrics","fetchCampaignsByAgency","getCampaignAgingLeads","_fetchCampaignMetrics","_fetchAgencyMetrics","_fetchUserMetrics","_fetchCampaignAgingLeads","_fetchCampaigns","StyledLayoutFilters","Padded","AgingTable","paginationRef","setCampaignId","setCampaign","campaigns","setCampaigns","leadCount","setLeadCount","fetchedLeads","setFetchedLeads","fetchCampaignAgingLeads","agingCampaignLeads","cleanResult","__typename","_campaigns$","_campaigns$2","MetricsTable","aggregateMetrics","performanceMetrics","entityType","setEntityType","createdFromCheck","setCreatedFromCheck","dateRangeCheck","setDateRangeCheck","dateStartsAt","setDateStartsAt","dateEndsAt","setDateEndsAt","range","setRange","setShouldFetchMetrics","isDateStateClear","ButtonGroup","MetricsWrapper","_ref$type","setAggregateMetrics","setPerformanceMetrics","_useState21","_useState22","_useState23","_useState24","_useState25","_useState26","shouldFetchMetrics","_useState27","_useState28","initialFetchDone","setInitialFetchDone","setMetrics","metric","totalContactAttempts","totalContactsMade","uniqueLeadsContacted","uniqueLeadsQualified","uniqueLeadsCompetitive","uniqueLeadsConverted","avgSpeedToContactAttempt","speedToContactAttempt","avgSpeedToContact","speedToContact","leadContactRate","leadsContactRate","leadCompetitiveRate","leadsCompetitiveRate","leadConversionRate","leadsConversionRate","fetchAgencyMetrics","fetchCampaignMetrics","fetchUserMetrics","campaignMetricsAggregate","agencyMetricsAggregate","userMetricsAggregate","fetchedCampaigns","firstCampaign","Value","oneline","FormSectionBody","space","GridBoxFlexStart","FormValues","_ref$space","rowIndex","columnSize","toFixed","gapSize","fieldIndex","inputField","margin","dangerouslySetInnerHTML","__html","AccordionItem","chevronDown","StyledTextarea","textarea","RatingButton","FeedbackButtons","FeedbackForm","FeedbackFormTextArea","FeedbackFormSubmit","FeedbackFormCancel","Spacer","ReportItem","insightType","setFeedback","showFeedbackInput","setShowFeedbackInput","hideRatingButtons","setHideRatingButtons","setIsActive","showConfirmationMessage","setShowConfirmationMessage","insight","dateTime","rating","FaRegThumbsUp","FaRegThumbsDown","cols","FaCheck","OPTIONS","BusinessIntelligenceTabs","_agencyReportOutput$o","_agencyReportOutput$s","agencyReportId","setAgencyReportId","observations","suggestions","agencyReportOutput","setAgencyReportOutput","fetchAgencyReport","_data$agencyReportsLi","_data$agencyReportsLi2","_data$agencyReportsLi3","_data$agencyReportsLi4","_data$agencyReportsLi5","_data$agencyReportsLi6","agencyReportsList","Tabs","defaultSelectedTabId","tabId","Panel","Accordion","transition","transitionTimeout","allowMultiple","observation","AgencyReportItem","suggestion","DashboardLayout","NormalLayout","DashboardView","setWeek","setLeads","setUsers","setTasks","newLeads24hours","setNewLeads24hours","loadingAnnouncement","setLoadingAnnouncement","isLoadingCampaigns","setIsLoadingCampaigns","isLoadingLeadTasks","setIsLoadingLeadTasks","periodOfTime","setSelectedDay","dateReference","setDateReference","setAnnouncement","setPosition","oneDayAgo","getCampaigns","getTasks","getLeadsInLast24Hours","getAnnouncement","announcementFilter","positionData","campaignsList","leadTasksList","announcementsList","momentSelectedDay","calendar","agencyLeadSoldInLastMonth","mySales","userLead","LayoutComponent","enableInsights","qs","TasksByDate","DateReference","AgencyReportTabs","NormalMetrics","H1","h1","H2","h2","H3","H4","h4","Overline","OverlineBold","Small","SmallUpper","DesignSystem","prop","Code","Divider","DeleteCampaignProgress","setProgress","Progress","DeleteCampaignDialog","destroy","setDestroy","handleClose","isSearchable","CampaignListRow","_campaign$assignees","_campaign$workflows","_campaign$campaignLea2","automations","assigneesLabel","workflowsLabel","handleAssigneesChange","handleWorkflowsChange","handleDeleteClick","_campaign$campaignLea","userOptions","assignee","workflowOptions","automation","workflow","usersDropdown","workflowsDropdown","dropdown","Field","inputComponent","multiple","handleOnChange","CheckboxField","mapValues","WorkflowAutomationSelect","_defaultValue$map$","_defaultValue$map","emails","_defaultValue$map2","WorkflowAutomationFragment","WORKFLOW_AUTOMATIONS_LIST_QUERY","WORKFLOW_AUTOMATION_CREATE_MUTATION","WORKFLOW_AUTOMATION_UPDATE_MUTATION","WORKFLOW_AUTOMATION_DELETE_MUTATION","OnWorkflowAutomationList","OnWorkflowAutomationListError","OnWorkflowAutomaticationCreateEvent","OnWorkflowAutomaticationCreateError","OnWorkflowAutomaticationUpdateEvent","OnWorkflowAutomaticationUpdateError","OnWorkflowAutomaticationDeleteEvent","OnWorkflowAutomaticationDeleteError","createUpdateWorkflowAutomationValidator","conditions","condition","_condition$emailTempl","_condition$smsTemplat","emailTemplate","smsTemplate","fetchWorkflowAutomationsList","createWorkflowAutomation","workflowAutomation","normalize8baseReferenceConnect","updateWorkflowAutomation","prevConditions","_c$emailTemplate","_c$smsTemplate","deleteWorkflowAutomation","useWorkflowAutomations","workflowAutomationsList","OnVendorsEvent","OnVendorsError","OnVendorCreateEvent","OnVendorUpdateEvent","OnVendorDeleteEvent","VENDOR_FRAGMENT","VENDORS_LIST_QUERY","VENDOR_CREATE_MUTATION","VENDOR_UPDATE_MUTATION","VENDOR_DELETE_MUTATION","createAndUpdateVendorValidator","fetchVendors","createVendor","vendorData","updateVendor","deleteVendor","OnPhoneNumbersListEvent","OnPhoneNumbersListError","OnpurchasedPhoneNumbersError","OnPhoneNumberUpdateEvent","OnPhoneNumberUpdateError","OnPhoneNumberDeleteEvent","OnPhoneNumberDeleteError","OnTwilioPhonenumbersListEvent","OnTwilioPhonenumbersListError","OnPurchasedPhoneNumbersEvent","OnPurchasedPhoneNumbersError","CampaignForm","loadingVendors","setLoadingVendors","vendors","setVendors","_useUsersInAgencyLate","useUsersInAgencyLater","loadingUsers","_useWorkflowAutomatio","useWorkflowAutomationsLater","loadingWorkflows","fetchWorkflows","vendorsOptions","vendorsList","cloned","FilterDropdown","DropdownBody","FilterBody","FilterIconLabel","FilterIcon","CampaignFilter","categories","filterIconGreen","filterIconGrey","onFilterClick","CreateCampaignButton","targetAmount","currentAmount","CampaignListHeader","setFilters","setSort","handleFilter","toggleFilter","handleSortChange","CampaignsView","_useCampaignList","useCampaignList","workflowAutomations","usersOptions","setUsersOptions","initialData","onCreate","BoostProgress","CampaignProgress","raised","setRaised","setTarget","sold","valueText","DialogDeleteCampaign","QUERY_PHONE_NUMBERS","CREATE_PHONE_NUMBER","UPDATE_PHONE_NUMBER","SubscriptionPlanFragment","CompanySubFragment","FETCH_COMPANY_SUBSCRIPTION_PLANS","workspaceEndpoint","fetchPhoneNumbersList","_fetchPhoneNumbersList","fetchTwilioPhoneNumbersList","_fetchTwilioPhoneNumbersList","sessionReq","getPhonesEnpoint","_sessionReq$user","_sessionReq$user$sele","_purchasePhoneNumbers","_canCreatePhoneNumber","_canCreatePhoneNumber2","canCreate","reason","savedNumbers","_parseSavedNumbers","_parseSavedNumbers2","successfulNumbers","companySubsList","canCreatePhoneNumber","_response","_deletePhoneNumber","updatePhoneNumber","_updatePhoneNumber","_data$number","restData","CustomDropdownWrap","CampaignDetailsView","useParams","isLoadingForm","setIsLoadingForm","setAgents","setWorkflowAutomations","isOpenForm","setIsOpenForm","isOpenDelete","setIsOpenDelete","setPhoneNumbers","selectedPhoneNumber","setSelectedPhoneNumber","cachedAmount","setCachedAmount","toggleOpenForm","_data$campaign","_data$campaign$phoneN","campaignUpdate","campaignName","toLocaleLowerCase","campaignEndpoint","compare","handleOnChangeEmailMarketing","CopyToClipboard","href","docs","download","Search","TextInput","searching","handleClearable","useURLQuery","loc","useLocation","ignoreQueryPrefix","setQuery","prevSearch","EmailListItem","_useURLQuery","_useURLQuery2","LoaderBlock","TouchableText","EmailList","available","onNextPage","GoogleButton","MicrosoftButton","FormColumn","InputColumn","paddingLess","Div","ReadOnly","Normal","TextBody","IconDelete","onLoading","onNotLoading","EmailForm","dest","onSubmitWithGoogle","onSubmitWithOutlook","onTrash","setTo","setCc","setSubject","setBody","setAttachments","setSignature","service","prevBody","isEnableSignature","emailAttachList","attachmentsList","aux","deleteFile","submit","sub","isReply","FileInput","maxFiles","pick","profile","htmlFor","Editor","init","menubar","plugins","toolbar","onEditorChange","initialSubject","EmailDialog","ComposeEmailContext","createContext","ComposeEmailProvider","setDest","Provider","onCompose","createGoogleEmail","EmailProfileContext","EmailDetails","setEmail","useContext","onReply","_email$lead","mail","canReply","MailListToolbarRow","StyledColumn","StyledDivBorder","InboxSection","ThreadContainer","ManualEmailsView","setTop","_useEmailList","mailList","useEmailList","getBoundingClientRect","onFolderChange","onSearch","getSelectedListOptionLabel","composeEmail","GmailListItem","payload","_from$value$split","_from$value$split2","internalDate","GmailList","hasMore","onMore","GmailReplyDialog","submitting","setSubmitting","editorRef","googleEmailCreate","getContent","onInit","editor","GmailDetails","googleEmail","labelIds","GmailEmailsView","_useGmailList","googleEmailsList","useGmailList","handleType","handleSearch","getSelectedGmailOptionLabel","google","OutlookListItem","_email$from$name$spli","_email$from$name$spli2","OutlookList","OutlookReplyDialog","OutlookDetails","_email$from","outlookProfile","outlookEmail","OutlookEmailsView","_useOutlookList","outlookEmailsList","useOutlookList","handlFolder","getSelectedOutlookOptionLabel","microsoft","mode","setMode","setProfile","checkRegistration","setRegistration","ENTITIES","OPERATIONS","ENTITY_SELECTOR_OPTIONS","MarginLessCol","horizontal","Content","isData","ColumnInfo","ColumnName","ColumnValue","RowHeader","clickable","LeadHistoryItem","onDetailsClick","isFullHistory","yesterday","clone","InnerWrapper","isSame","ReactJsonView","NoteHistoryItem","onNoteClick","note","handleInfoClick","TaskHistoryItem","onTaskClick","EmailHistoryItem","onEmailClick","thread","CallHistoryItem","_disposition$status","onDispositionClick","durationLabel","phoneCallDispositionRelation","ArrowContainer","SmsHistoryItem","_event$sms","_event$sms2","onSmsClick","arrowIcon","FaArrowDown","FaArrowUp","StageHistoryItem","DeletedHistoryItem","entity","PhoneNumber","isValidNumberForRegion","LEAD_STAGE_FRAGMENT","QUERY_LEADS_STAGES","CREATE_LEAD_STAGE_HISTORY","ASSING_LEAD_STAGE","OnFetchLeadStages","OnFetchLeadStagesError","OnSetLeadStage","OnSetLeadStageError","assignLeadStage","assignLeadToStage","stageId","ASSING_LEAD_STAGE_MUTATION","TableBodyCell","TextContactContainer","LeadCell","_lead$stage","cell","stages","stagesOptions","contact","SelectInput","canAssignAgents","lastHistoryActionType","lastHistoryActionData","fullHistory","onInfoClick","action","getActionItem","LeadFilter","setCategories","prevCategories","prevFilters","fields","BoldText","memo","selectedLeads","GridBoxFlexEnd","Add","CenteredIcon","LeadForm","handleOnChangeInput","handleDeleteInputPhone","j","handleOnChangeNumber","handleOnChangeCode","_e$target","tooltip","UNREACHABLE","LANDLINE","score","LeadFormDialog","afterSubmit","setFields","dataLead","newLead","withPadding","CardTitle","PaginationWrapper","ButtonContainer","LeadAssignUserDialog","onAssignUsersToLeads","setSelectedUsers","prevSelectedUsers","prevUserId","Msg","isLeadUser","MsgAuthor","MsgText","MsgDate","formattedDate","MsgContainer","MsgNumber","MsgBody","FaMinusCircle","CardMargin","RowPhone","MsgHistory","TitleCardHeader","TitlePhones","MsgForm","_ref$messages","setMsg","setNumbers","setFiles","setUserId","handlePhoneNumbersFrom","_user$selectedAgency","_user$selectedAgency$","phoneNumbersRelation","sessionData","_user","fetchData","invalidPhoneContent","QUERY_AGENCY_TYPE","_agencyTypeQuery","_agencyTypeQuery$data","_agencyTypeQuery$data2","_agencyTypeQuery$data3","phoneNumbersFrom","agencyTypeQuery","agencyType","fileList","invalidOptions","file2","addFile","createNoteValidator","lenght","onLeadNoteUpdate","onLeadNoteDelete","OnFetchLeadNotes","OnFetchLeadNotesError","OnNoteCreateEvent","OnNoteError","createNote","updateNote","deleteNote","fetchLeadNotes","filterLeadNotes","filterDispositionNotes","NoteContainer","TextAreaContainer","Noteform","selectedNote","setNote","noteCreateHandler","noteUpdateHandler","CustomIcon","LeadActions","onDelete","canDelete","isNoteModalOpen","setIsNoteModalOpen","isMsgModalOpen","setIsMsgModalOpen","callIcon","informationIcon","NoteForm","SortFilter","CustomHeader","CustomGrid","columnGap","CustomGridCell","CustomBtn","ListCard","SortTableBtn","SortTableConfirm","SortTableConfirmOptions","SortTableMenu","RadioInput","HeaderCellContainer","BatchHeader","TableRow","StyledTableHeader","CardHeader","LeadsView","assignUsersLoading","setAssignUsersLoading","deletingLead","setDeletingLead","setSelectedLeads","setSelectedLead","leadForTask","isOpenAssignUser","setIsOpenAssignUser","sortTableActive","setSortTableActive","tableColumns","setTableColumns","activeColumns","setActiveColumns","_useState29","_useState30","isTaskModalOpen","setIsTaskModalOpen","_useState31","_useState32","leadTaskTypeList","setLeadTaskTypeList","_useState33","_useState34","_useAgencyLeads","_useSubscription","_data$Lead","Lead","useAgencyLeads","onSubmitSearch","onSubmitFilters","onClearFilters","_data$campaignsList","headerCheckboxHandler","oldSelectedLeads","tableSortHandler","sortIdentifier","newColumnList","deleteLeadsHandler","leadsToDelete","l","onDeleteLeads","onAssignUsersLeads","handleAssingUsersToLeads","filteredLeads","handleOnNo","childNodes","textContent","leadStages","sortedColumnsSizes","columnsStr","getColumnsSizes","headerCols","tableHeader","sortColumns","batchActions","canSeeBatchActions","setTaskModal","sortTableIcon","newActiveList","columnClone","confirmSortTableHandler","newLeadsColumns","cancelSortTableHandler","previousPath","onScroll","columnList","oldSelectedList","LeadsDialog","currentAgencyId","CsvPreviewCell","_React$PureComponent","fieldProps","fieldName","campaignOptions","ifsScoresOptions","homeDob","homeBestTimeToContact","homeInsuredSince","homePolicyExpiration","getFieldProps","ifsOptions","val","PureComponent","RICOCHET","LeadsCsvPreviewDialog","csvFormat","onBlurInput","onUploadCsv","setLeadsType","uploading","setUploading","isMassiveUpload","setMassiveUpload","setHeight","setWidth","worker","clientWidth","clientHeight","onResize","Worker","_data$errors","_data$errors2","_data$errors3","terminate","onContinue","postMessage","VariableSizeGrid","columnCount","columnWidth","rowCount","rowHeight","itemData","shouldCloseOnEscPress","Dropzone","TextDanger","TextDropzone","FileName","FileUpload","onClickRemoveFile","setMessage","onDrop","acceptedFiles","newFiles","preview","handleOnClickClose","_file","_useDropzone","useDropzone","getRootProps","getInputProps","links","_links","leads_drivers","leads_auto","leads_auto_with_drivers","leads_commercial_auto","leads_commercial_auto_with_drivers","leads_home","leads_home_with_drivers","leads_life","leads_life_with_drivers","leads_employee_benefits","leads_employee_benefits_with_drivers","leads_general_liability","leads_general_liability_with_drivers","leads_workers_compensation","leads_workers_compensation_with_drivers","leads_ricochet","LeadsCsvUploadDialog","onClickContinue","onChangeFileUpload","hasData","setFormat","handleContinue","LeadsCsvStatusUploadDialog","accumulatorLeads","totalLeads","STANDARD","LeadsCsvDialogs","setCsvData","setCsvColumns","setCsvFormat","setAccumulatorLeads","setTotalLeads","isOpenLoaderCSVDialog","setIsOpenLoaderCSVDialog","isOpenPreviewDialog","setIsOpenPreviewDialog","isOpenStatusUploadDialog","setIsOpenStatusUploadDialog","isLoadingPreview","setIsLoadingPreview","setHasData","_location$state","handleOnChangeFileUpload","Papa","complete","_complete","skipEmptyLines","handleOnClickRemoveFile","handleOnBlurInput","keyIndex","handleOnUploadCsv","handleOnClosePreview","handleOnClickContinue","_location$state2","_location$state$param","_yield$preprocessData","_yield$preprocessData2","csvNewColumns","csvNewData","useSub","goBack","CAMPAIGNS_OPTIONS","Type","CALENDAR_EVENT_RENDER","_def","extendedProps","classList","CALENDAR_EVENT_TIME_FORMAT","hour","minute","meridiem","hour12","CALENDAR_HEADER","center","selectedTasks","StyledIconInfo","StyledIconCheck","RowActions","handleOnDeleteTask","handleInfoModal","handleOnChangeStatus","TableTextEllipsis","TableRows","taskCheckboxChangeHandler","RowCell","InfoModal","dialogTitle","isOpenInfoModal","onCloseInfoModal","openTaskFormDialog","closeTaskFormDialog","TableFooter","handlePageChange","StyledDropdownBodyOnTable","OnTopHideShowColumns","hideShowColumns","handleHideShowColumns","DialogDeleteLeadTask","DialogUpdateLeadTaskStatus","StyledBox","ButtonLink","LeadTaskView","leadTasks","setLeadTasks","leadTaskForUpdateOrDelete","setLeadTaskForUpdateOrDelete","setSelectedTasks","setIsOpenInfoModal","statusDialogOpen","setStatusDialogOpen","deleteDialogOpen","setDeleteDialogOpen","filterCategories","setFilterCategories","_useState35","_useState36","handleExecuteSearch","handleChangeStatusNo","handleChangeStatus","leadTaskForUpdate","leadTaskForDelete","handleDeleteTaskNo","handleDeleteTask","updatedLeadTask","leadTaskUpdate","leadTaskDelete","filterCategoriesClone","FILTER_DATA_LEADS","handleOnChangeFilter","allTasks","newList","pageNum","withSession","setUserAgencyRol","modalData","setModalData","selectedTask","setSelectedTask","selectedDate","setSelectedDate","isOpenChangeTaskStatus","setIsOpenChangeTaskStatus","currentFilter","customButtons","toTasksList","click","openTaskForm","FullCalendar","defaultView","dayGridPlugin","interactionPlugin","timeGridPlugin","events","eventRender","eventTimeFormat","showNonCurrentDates","firstDay","dateClick","eventClick","publicId","ChangeTaskStatus","LeadHistorySearch","timeoutRef","OnFetchleadHistoryEvent","OnFetchleadHistoryError","OnFetchFullLeadhistoryEvent","OnFetchFullLeadhistoryError","fetchLeadHistory","fetchFullLeadHistory","CustomColumn","mb","animate","SideBar","LeadHistory","filtered","setFullHistory","setDifference","setInfo","setType","setGap","setCount","bodyRef","leadHistoriesResolver","_event$call$phoneCall","regexp","RegExp","filterItem","handleTypeChange","getHistoryItem","onExited","RecordingPlayerCell","RecordingItem","leadRecording","tableCols","recordingDate","recordingTime","AudioPlayer","recordingUrl","timeFormat","preload","volume","layout","showJumpControls","customVolumeControls","customAdditionalControls","mse","srcDuration","LeadRecordingsDrawer","nodeRef","_useLeadRecordings","queryState","setQueryState","fetchLeadRecordingsData","leadRecordingsData","phoneCallRecordingsList","useLeadRecordings","leadRecordings","isLoadingLeadRecordings","toastError","BoostHeading","NavBar","NavInfo","NavActions","NavItem","LeadDetailsHeader","setMessages","loadingMessages","setLoadingLeadMessages","setOpen","sMSMessagesList","customArg","LeadAmountForm","_ref$amount","LeadStageForm","setStages","LeadCampaignForm","LeadAssigneesForm","sel","LeadInfoCard","formattedPhoneNumbers","isTextContact","formatContactData","FormFields","inputFiled","LeadTypeAutoForm","leadTypeData","LeadTypeAutoFormDialog","OnleadsAutoUpdateEvent","OnleadsAutoError","updateLeadAuto","PaperInfo","btnText","onClickBtn","LeadTypeAutoInfo","leadTypeInfo","setLeadTypeInfo","setLeadTypeFields","leadTypeAutoUpdate","_leadAutoMap","formatData","leadAutoToUpdate","LeadTypeCommercialAutoForm","LeadTypeCommercialAutoFormDialog","OnLeadsCommercialAutoUpdateEvent","OnLeadsCommercialAutoError","updateLeadCommercialAuto","LeadTypeCommercialAutoInfo","leadTypeCommercialAutoUpdate","_leadCommercialAutoMa","leadCommercialAutoToUpdate","LeadTypeGeneralLiabilityForm","LeadTypeGeneralLiabilityFormDialog","leadGeneralLiabilityMessageValid","updateLeadGeneralLiabilityValidator","OnLeadsGeneralLiabilityUpdateEvent","OnLeadsGeneralLiabilityError","updateLeadGeneralLiability","LeadTypeGeneralLiabilityInfo","leadTypeGeneralLiabilityUpdate","_leadGeneralLiability","leadTypeToUpdate","LeadTypeLifeForm","LeadTypeLifeFormDialog","OnLeadsLifeUpdateEvent","OnLeadsLifeError","updateLeadLife","LeadTypeLifeInfo","leadTypeLifeUpdate","_leadLifeMap","leadLifeToUpdate","BtnAdd","BtnPlusChar","BtnDelete","BtnLess","ClaimRow","claim","onChangeClaim","onDeleteClaim","LeadTypeHomeForm","onAddNewClaim","claimIndex","LeadTypeHomeFormDialog","OnLeadsHomeUpdateEvent","OnLeadsHomeError","updateLeadHome","LeadTypeHomeInfo","leadTypeHomeUpdate","_leadHomeMap","leadHomeToUpdate","newClaims","newLeadHomeData","LeadTypeWorkersCompensationForm","LeadTypeWorkersCompensationFormDialog","OnLeadsWorkersCompensationUpdateEvent","OnLeadsWorkersCompensationError","updateLeadWorkersCompensation","LeadTypeWorkersCompensationInfo","leadTypeWorkersCompensationUpdate","_leadWorkersCompensat","leadWorkersCompensationToUpdate","LeadTypeEmployeeBenefitsForm","LeadTypeEmployeeBenefitsFormDialog","OnLeadsEmployeeBenefitsUpdateEvent","OnLeadsEmployeeBenefitsError","updateLeadEmployeeBenefits","LeadTypeEmployeeBenefitsInfo","leadTypeEmployeeBenefitUpdate","_leadEmployeeBenefits","leadEmployeeBenefitsToUpdate","MiniCardContainer","MiniCardHeader","MiniCardTitle","MiniCardFooter","TypeBox","MiniCard","typeBox","priorityBadge","optionsDropdown","canSeeOptions","LeadNotes","setNotes","leadNotesList","leadDispositionsList","NoteItem","LeadTasks","TaskItem","sections","LeadDriverForm","SectionTitle","k","LeadDriverDialogForm","LEAD_DRIVER","OnFetchLeadDrivers","OnFetchLeadDriversError","OnLeadDriverCreateEvent","LeadDriverStore","OnLeadDriverCreateError","OnLeadDriverUpdateEvent","OnLeadDriverDeleteEvent","OnLeadDriverError","fetchLeadDrivers","leadDriversList","createLeadDriver","updateLeadDriver","deleteLeadDriver","leadDriverId","DriverHeader","StyledMargin","LeadDriverInfo","setDrivers","setLeadDriver","isOpenLeadDriverForm","setIsOpenLeadDriverForm","loadingLeadDriver","setLoadingLeadDriver","loadingDeleteDriver","setLoadingDeleteDriver","isUpdateLeadDriver","setIsUpdateLeadDriver","isOpenLeadDriverDelete","setIsOpenLeadDriverDelete","handleOnNoLeadDriverDelete","fullName","formatDriversData","driverIndex","driverMapped","driverMap","dataLeadDriver","driversLeadRelation","LeadDetailsView","setLead","leadLastCalled","_lead$callCadence","OnCreateInvitationCompanyEvent","OnCreateInvitationCompanyError","OnDeleteinvitationEvent","OnDeleteinvitationError","OnResendInvitationEvent","OnResendInvitationError","OnInvitationListEvent","OnInvitationListError","OnCreateInvitationEvent","OnCreateInvitationError","fetchInvitationList","createInvitation","createAgencyInvitationValidator","deleteInvitation","resendInvitation","resend","createInvitationCompany","InvitationsList","invitations","CompanyInvitationList","menuOpen","setMenuOpen","setInvitation","loadingDelete","setLoadingDelete","loadingResend","setLoadingResend","deleteModal","deleteInvitationAction","resendInvitationAction","defaultPageSize","data-e2e-id","USER_INVITATION_TYPES","Invitation","formDefault","formErrors","setFormErrors","handleSelectChange","saveInvitation","disabledSubmit","hasError","modal","setModal","loadingUser","setLoadingUser","setTotal","validUser","userRole","_data$agencyInvitatio","fetchInviations","BoostTag","AdminsTableRow","handleDelete","AdminsTable","admins","setLoaderUpdate","onUsersCount","setDeleteModal","CardHeaderWithButton","CardBody","ColumnLeft","ColumnRight","CompanyView","isOpenUpdate","setIsOpenUpdate","loaderUpdate","isInviteModalOpen","setisInviteModalOpen","companies","setCompanyName","handleCloseUpdate","initOptionsSelectCompany","companyData","companiesList","companyOfActiveAgency","currentCompany","companiesWithCompanyUpdated","handleTotalChange","renderInputCompany","companyOptions","CompanyInvitationsView","setCompanies","_data$companyInvitati","fetchCompanyInvitations","VENDOR","StyledTableBody","VendorForm","VendorFormDialog","vendorsMap","vendorCampaignRelation","isUpdateForm","setIsUpdateForm","setVendor","handleOnNoDelete","handleVendorEvent","vendorMap","PhoneStatus","DeleteNumberModal","deletePhoneNumber","PhoneNumberPriority","canBeUp","canBeDown","priorityUp","priorityDown","PhoneNumbersList","_usePhoneNumbersList","_data$phoneNumbersLis","usePhoneNumbersList","_usePhoneNumbersList2","openMenu","itemId","closeDeleteModal","shouldShowDeleteModal","PAGE_SIZE","setRefetch","SearchBarNumbers","searchAction","handleSearchChange","selectedNumbers","allSelected","friendlyName","SubscriptionPlanItemFragment","FETCH_SUBSCRIPTION_PLAN_ITEMS","OnSubItemFetchByName","OnSubItemFetchByNameError","fetchSubscriptionItemByName","AddPhoneNumbers","setSelectedNumbers","purchasing","setPurchasing","_useSubscriptionItem","itemName","setName","subscriptionPlanItemsList","useSubscriptionItem","loadingItem","phoneType","setPhoneType","_useTwilioPhoneNumber","_useState8$","useTwilioPhoneNumbersList","_useTwilioPhoneNumber2","changePhoneType","handlePhonesChange","allNumbers","currentNumbers","purchase","parsedNumbers","purchasePhoneNumbers","AvailablePhoneNumberList","PhoneNumberView","_agency$company","showModal","setShowModal","updateUserSignatureValidator","OnUserSignatureUpdateEvent","OnUserSignatureUpdateError","OnTestConnectEvent","OnTestConnectError","updateUserSignature","testConnection","TestConnectionButton","setColor","InboundFragment","INBOUND_SERVICE_SETTINGS_QUERY","CREATE_INBOUND_SERVICE_MUTATION","UPDATE_INBOUND_SERVICE_MUTATION","UPDATE_MANY_INBOUND_SERVICES","OutboundFragment","QUERY_OUTBOUND_SERVICE_SETTINGS","CREATE_OUTBOUND_SERVICE_MUTATION","DISABLE_EMAIL_SERVICES","DISABLE_THIRD_PARTY_SERVICES","UPDATE_OUTBOUND_SERVICE_MUTATION","UPDATE_MANY_OUTBOUND_SERVICES","FETCH_GMAIL_SERVICE","CREATE_GMAIL_SERVICE","UPDATE_GMAIL_SERVICE","LOGOUT_FROM_GMAIL_SERVICE","FETCH_GOOGLE_AUTH_URL","EXCHANGE_CODE_FOR_TOKENS","OnFetchInboundService","OnFetchInboundServiceError","OnUpdateInboundService","OnUpdateInboundServiceError","OnDisableInboundServices","OnDisableInboundServicesError","CONNECTION_SECURITY_OPTIONS","PROTOCOL_OPTIONS","updateInboundServiceValidation","server","port","con","protocol","password","fetchInboundServices","emailInboundServiceCreate","emailInboundService","updateInboundService","disableInboundServices","InboundForm","emailInboundServiceUpdate","isCustom","FETCH_OUTLOOK_SERVICES","CREATE_OUTLOOK_SERVICE","UPDATE_OUTLOOK_SERVICE","FETCH_AZURE_AUTH_URL","LOGOUT_FROM_AZURE","OnAzureAuthUrl","OnAzureAuthUrlError","OnFetchOutlookService","OnFetchOutlookServiceError","OnEnableOutlookService","OnEnableOutlookServiceError","OnExchangeOutlookCode","OnExchangeOutlookCodeError","OnAzureLogout","OnAzureLogoutError","fetchOutlookService","outlookServiceCreate","outlookService","enableOutlookService","fetchAzureAuthUrl","exchangeOutlookCode","logoutFromAzure","MicrosoftServiceForm","redirecting","setRedirecting","saving","setSaving","exiting","setExiting","azureAuthUrl","outlookServiceUpdate","azureExchangeTokens","azureLogout","onSignIn","onSave","onSignOut","InboundService","GmailServiceItem","OutlookServiceItem","OutboundServiceItem","ChooseServiceDialog","services","setServices","EmailServiceTypename","GMAIL","OUTLOOK","agencyEmailServiceId","AgencyEmailServiceInfo","AgencyEmailService","agencyEmailServiceUpdate","hasService","OnGmailServiceFetch","OnGmailServiceFetchError","OnGmailServiceUpdate","OnGmailServiceUpdateError","OnGoogleAuthUrl","OnGoogleAuthUrlError","OnExchangeToken","OnExchangeTokenError","OnFetchOutboundService","OnFetchOutboundServiceError","OnUpdateOutboundService","OnUpdateOutboundServiceError","OnDisableEmailService","OnDisableEmailServiceError","OnGoogleLogoutEvent","OnGoogleLogoutEventError","updateOutboundServiceValidation","fetchOutboundServices","emailOutboundServiceCreate","emailOutboundService","updateOutboundService","disableOutboundServices","_yield$client$query3","_yield$client$mutate2","gmailServiceCreate","fallback","OutboundForm","emailOutboundServiceUpdate","OutboundService","OnFetchPhoneCallSettingEvent","OnFetchPhoneCallSettingError","OnCreatePhoneCallSettingEvent","OnCreatePhoneCallSettingError","OnUpdatePhoneCallSettingEvent","OnUpdatePhoneCallSettingError","FETCH_PHONE_CALL_SETTING_LIST","CREATE_PHONE_CALL_SETTING","UPDATE_PHONE_CALL_SETTING","QUERY_CAMPAIGNS_LIST","fetchPhoneCallSettingByAgency","configuration","phoneCallSettingsList","createPhoneCallSetting","recordCalls","updatePhoneCallSetting","CampaignListItem","shouldShowAgents","_agents","_toArray","firstAgents","agentsText","CampaignsList","_useList","useList","_useList$data","INITIAL_SETTINGS","callsDelay","campignAssineeFilter","timeToForward","forwardingPhoneNumber","callCadenceConfig","day2To7","day8To30","day31To89","PhoneCallSettings","_form$forwardingPhone","_form$forwardingPhone2","_form$forwardingPhone3","phoneCallSettingCreate","removeTypenameRecursively","cleanData","handleCadenceChange","handleForwardingPhoneChange","voicemail","VOICE_MESSAGE_TYPE_OPTIONS","PlayerCell","VoiceMailMessageItem","voiceMailMessageStore","voiceMailMessageUpdate","recorder","MicRecorder","bitRate","AudioRecorder","onRecorded","recording","setRecording","setTime","getMp3","buffer","blob","lastModified","rawSeconds","seconds","formatSeconds","VoiceMailMessageForm","setFile","objectURL","setObjectURL","handleRecorded","URL","createObjectURL","canPublish","source","VoiceMailMessageDialog","handleOnClose","initialMessage","VoiceMailMessagesTable","del","setDelete","userLoading","messageToUpdate","setMessageToUpdate","onConfirmDelete","handleUpdate","VoiceMailMessages","Approved","FaRegCheckCircle","Rejected","FaRegTimesCircle","Review","FaRegClock","TWILIO_TRUST_PRODUCT_STATUSES","TWILIO_MESSAGING_PRODUCT_STATUSES","TrustProductStatus","ColorRing","visible","ariaLabel","TrustProductRegistrationRow","failedEvaluationsResults","TrustProductRejectionReasons","StyledUl","evalResult","failure_reason","MessagingProductStatus","MessagingProductRegistrationRow","rejectionReason","RejectionReason","RegistrationStatus","_productsData$data$pr","_productsData$data","requestOptions","_useFetch","optsRef","abortControllerRef","reFetch","AbortController","signal","resData","finally","abort","useFetch","productsData","isLoadingProductsData","productsError","toastErrors","products","product","TIMEZONE_OPTIONS","AgencyRolesTable","userAgencyRelation","RoleTable","roleRelationArray","titleHeader","AvatarGridBox","AvatarText","AvatarStyle","defaultAvatar","GeneralView","setId","setFirstName","setLastName","setTimezone","setCellPhone","workPhone","setWorkPhone","workPhoneExt","setWorkPhoneExt","setAvatar","setDownloadUrl","adminRelation","setAdminRelation","setUserAgencyRelation","LoaderSpinner","picture","_Avatar","CardBodyHeight","CardFooterFlexEnd","FullHeightContainer","TitleCardBody","EmailView","setIsEnableSignature","editorState","setEditorState","loaderComponent","setLoaderComponent","tagName","newContent","Roles","UsersTableRow","AGENCY_USERS_LIST","UPDATE_USER_AGENCY_ROLES","REMOVE_USER_FROM_AGENCY","updateUserRolesValidator","OnUsersListEvent","OnUsersListError","OnUpdateUserAgencyRolesEvent","OnUpdateUserAgencyRolesError","OnRemoveUserFromAgencyEvent","OnRemoveUserFromAgencyError","fetchUsersList","updateUserRolesInAgency","removeUserFromAgency","ROLES_OPTIONS","UpdateDetailsForm","setRoles","UsersTable","updateModal","setUpdateModal","handleEdit","TeamView","pagination","setPagination","SettingsLayout","SettingsMenu","OnUpdateCompanySubscription","OnUpdateCompanySubscriptionError","OnConfirmSubscriptionChange","OnConfirmSubscriptionChangeError","OnCancelSubscriptionChange","OnCancelSubscriptionChangeError","updateCompanySubscriptionValidator","updateCompanySubscription","confirmSubscriptionChange","cancelSubscriptionChange","ChangePlanDialog","companyUsersCount","dialogLoading","setDialogLoading","seats","setSeats","PrimaryButton","NextInvoiceInformation","setInvoice","setError","retryFetch","nextInvoice","amount_due","period_end","Alert","withModal","setSubscription","confirming","setConfirming","canceling","setCanceling","_company$subscription","pending_update","handlePaySubscription","handleCancelChange","pendingUpdate","FETCH_COMPANY_PAYMENT_METHOD","OnPaymentMethodUpdate","OnPaymentMethodUpdateError","OnFetchPaymentMethod","OnFetchPaymentMethodError","updatePaymentMethodValidator","updatePaymentMethod","fetchCompanyPaymentMethod","PaymentDialogForm","handleReady","PaymentMethodChanger","companyPaymentMethod","DRAFT","PAID","VOID","UNCOLLECTIBLE","TableContainer","BillingHistory","latestInvoice","_useCompanyInvoices","companyInvoicesList","useCompanyInvoices","Note","CancelSubscriptionDialog","CancelPlanCard","PlanList","RenovateSubscription","fetchLoading","handleSeatsChange","Scrollable","prevSubStatus","renewal","cancel","SubscriptionPlanChanger","agencyFragment","QUERY_AGENCY_LIST","MUTATION_CREATE_AGENCY","MUTATION_UPDATE_AGENCY","MUTATION_DELETE_AGENCY","agencyMessageValid","agencyCreateUpdateValidator","agentMail","OnAgencyError","OnAgencyListFetched","OnAgenyCreateEvent","OnAgencyPhoneCreateError","OnAgencyUpdateEvent","OnAgencyDeleteEvent","byCompany","byStartDate","startDate","byEndDate","endDate","bySearch","fetchAgencies","createAgency","agencyCreate","agencyInvitationAgencyRelation","ifsScores","voicemailUrl","updateAgency","deleteAgency","AgencyActions","onUpdateClick","isDeleteDialogOpen","isDeleting","setIsDeleting","orderWay","FORM_TOOLTIP_STRINGS","AgencyFilter","filterValues","setFilterValues","newState","BtnAddItem","BtnDeleteItem","BtnPlus","ListInputsEditable","inputPlaceholder","inputLabel","btnAddText","onDeleteItem","onAddItem","AgencyForm","setFormData","initialCompanyId","setVoicemailUrl","managers","setManagers","voicemails","setVoicemails","setIfsScores","fetchVoicemailList","_yield$fetchVoiceMail","v","newIfsScores","AgencyFormDialog","formData","SearchBar","AgencyView","dialog","setDialog","deleteDialog","setDeleteDialog","searchRef","refreshAgencies","newFilters","agenciesList","pageOffset","insideRef","allow","Sidebar","pathnameActive","setPathnameActive","isCompanyPaid","BillingView","VendorsView","fetchPhoneCallRecordings","deletePhoneCallRecording","PhoneCallRecordings","recordings","setRecordings","handleConfirmDelete","recordingType","columnsNumber","LogFilter","EmailLogRow","_email$to","EmailLogs","_useAgencyEmails","useAgencyEmails","SmsRow","fromComponent","toComponent","typeComponent","fromNumber","toNumber","HeaderLeftSide","HeaderRightSide","SmsLogs","smsMessages","setSmsMessages","setCurrentFilter","showFilter","setShowFilter","categoriesClone","filterHandler","newFilter","confirmFilterHandler","sortHandler","smsMessage","handlePageChanger","TableBodyRow","PhoneCallsLogs","phoneCalls","setPhoneCalls","setDisposition","phoneCallsList","unshift","_data$status","phoneCall","AgentsInfoFilter","handleToggle","handleDropdownClose","handleApply","onCloseDropdown","AgentsInfoHeader","AgentsInfoRow","createdTask","updatedTask","leadHistoriesList","AgentInfo","_useUsersInAgency","getDates","dateNow","columnStart","columnEnd","Group","AgentsCallsHeader","addLeftCero","unit","momentDuration","hours","STATUSES","BAD","REGULAR","totalTalkTime","talkTimeAverage","callsPerHours","outboundDialsCount","totalDialsCount","contacts","dialPerContact","quotesPerClose","FETCH_AGENT_CALL_REPORT_QUERY","fetchAgentCallsReport","_fetchAgentCallsReport","agentsCalls","AgentCalls","AdminOrderBy","AgencyEmailServiceOrderBy","AgencyInvitationOrderBy","AgencyOrderBy","AgencyUserOrderBy","AgentOrderBy","AgentStatus","AggregationFunctionType","AnnouncementOrderBy","ApiTokenOrderBy","ApplicationStatusEnum","AuthenticationProfileOrderBy","AuthFrom","AutomaticCallConfigOrderBy","BillingInvoicesListFilterType","CallType","CampaignOrderBy","ChannelMemberOrderBy","ChannelOrderBy","CiCdMigrationOrderBy","CompanyInvitationOrderBy","CompanyInvoiceOrderBy","CompanyOrderBy","CompanyPaymentMethodOrderBy","CompanySubCouponOrderBy","CompanySubOrderBy","ComputedFieldMode","DatePartFunctionType","DateTypeFormatEnum","DeployModeEnum","DeployStatusEnum","DriverIncidentOrderBy","EmailInboundServiceOrderBy","EmailOutboundServiceOrderBy","EnvironmentVariableOrderBy","FieldType","FileOrderBy","FileTypeFormatEnum","FreePhoneNumberOrderBy","FunctionInfoOrderBy","FunctionType","GmailProfileOrderBy","GmailServiceOrderBy","IfsScoreOrderBy","InboundPhoneCallOrderBy","LeadActionOrderBy","LeadCallCadenceOrderBy","LeadContactOrderBy","LeadDispositionOrderBy","LeadDriverOrderBy","LeadHistoryOrderBy","LeadNoteOrderBy","LeadOrderBy","LeadPhoneNumberOrderBy","LeadSourceOrderBy","LeadStageHistoryOrderBy","LeadStageOrderBy","LeadTaskOrderBy","LeadTaskTypeOrderBy","LeadTypeAutoOrderBy","LeadTypeCommercialAutoOrderBy","LeadTypeEmployeeBenefitOrderBy","LeadTypeGeneralLiabilityOrderBy","LeadTypeHomeOrderBy","LeadTypeLifeOrderBy","LeadTypeWorkersCompensationOrderBy","LifeInsuranceOrderBy","MailOrderBy","MailThreadOrderBy","ManagerOrderBy","MarketingCampaignClickOrderBy","MarketingCampaignConditionOrderBy","MarketingCampaignOpeningOrderBy","MarketingCampaignOrderBy","MarketingEmailTemplateOrderBy","MarketingSmsTemplateOrderBy","MessageOrderBy","MetaOrderBy","MutationType","NotificationOrderBy","NumberTypeFormatEnum","OutlookFolder","OutlookProfileOrderBy","OutlookServiceOrderBy","PaymentMethodOrderBy","PermissionResourceTypeEnum","PhoneCallOrderBy","PhoneCallParticipantOrderBy","PhoneCallRecordingOrderBy","PhoneCallSettingOrderBy","PhoneNumberOrderBy","PhoneNumberWarningOrderBy","RelativePredicateOpEnum","RelativePredicateUnitEnum","ResendedAngencyInvitationOrderBy","RoleOrderBy","SchemaOriginType","SettingOrderBy","ShortUrlOrderBy","SmartTypeFormatEnum","SmsMessageOrderBy","SortOrder","StringTrimMode","SubscriptionPlanItemOrderBy","SubscriptionPlanOrderBy","SwitchTypeFormatEnum","SystemApplicationStatusEnum","SystemBillingInvoicesListFilterType","SystemBranchEnvironmentMode","SystemCiCommitMode","SystemComputedFieldMode","SystemDateTypeFormatEnum","SystemDeployModeEnum","SystemDeployStatusEnum","SystemFieldType","SystemFileTypeFormatEnum","SystemFunctionInfoOrderBy","SystemFunctionType","SystemInboxEventStatusEnum","SystemInboxEventTypeEnum","SystemNumberTypeFormatEnum","SystemOrganizationTypeEnum","SystemSchemaOriginType","SystemSettingOrderBy","SystemSmartTypeFormatEnum","SystemSwitchTypeFormatEnum","SystemTextTypeFormatEnum","SystemUserType","SystemWorkspaceKind","SystemWorkspaceStatus","TableIndexType","TeamInvitationOrderBy","TeamMemberOrderBy","TextTypeFormatEnum","UrlOrderBy","UserOrderBy","UserStatusOrderBy","VendorOrderBy","VoiceMailMessageOrderBy","VoiceMailOrderBy","WorkflowAutomationOrderBy","WorkflowClickOrderBy","WorkflowConditionOrderBy","WorkflowEmailOpeningOrderBy","WorkflowEmailTemplateOrderBy","WorkflowSmsTemplateOrderBy","WorkspaceKind","WorkspaceStatus","XTableOrderBy","_useAgentCallsReport","useAgentCallsReport","_useAgentCallsReport2","InboundPhoneCallsLogs","inboundPhoneCallsList","defaultOption","CampaignFragmentFragmentDoc","typeCondition","selectionSet","selections","VoicemailListDocument","variableDefinitions","variable","definitions","VoiceailDeleteDocument","onVoicemailslist","onVoicemailslistError","onVoicemailsDelete","onVoicemailsDeleteError","voiceMailsList","deleteVoicemail","_data$data","_data$data2","reset","voiceMailDelete","VoicemailsViews","_recordings$items","_useFetchAction","useFetchAction","_useFetchAction2","_useCallAction","useCallAction","_useCallAction2","deleteItem","onSeek","_onSeek","TableBoost","AgentScoreTable","_ref$loading","totalPagination","onChangePage","footer","tableHead","recordingId","tableBodyRow","onAgentScoreReportError","onAgentScoreReport","AGENT_SCORE_REPORT_QUERY","fetchAgentScoreReport","agentsScore","TypeCallRecording","callDuration","twilioId","leadAddress","leadBirth","leadGender","leadCreditScore","leadIfsScore","campaingName","campaingId","sortOptions","AgentScore","setTotalPagination","filterState","setFilterState","valueFilters","setValueFilters","queryFilters","setQueryFilters","dataAgentScore","handleChangeFilters","systemSettingsName","INITIAL_FILTERS","fromDate","LeadsFunnelContext","LeadsFunnelProvider","selectedCampaignId","setSelectedCampaignId","handleChangeSelectedCampaignId","newCampaignId","handleFiltersChange","useLeadsFunnelContext","leadsFunnelContext","LeadFunnelFilter","_useLeadsFunnelContex","localFilters","setLocalFilters","handleDateFiltersChange","dateString","LeadsFunnelCampaign","LeadsFunnelHeader","FETCH_LEADS_FUNNEL_STAGE_AMOUNT_QUERY","_fetchLeadsFunnelStageAmount","fetchLeadStageAmount","useLeadsFunnelAmount","fetchLeadsFunnelStageAmount","BACKGROUND_SCALE","LeadsFunnelChart","_useLeadsFunnelAmount","_useLeadsFunnelAmount2","stagesData","isLoadingStagesData","canvasRef","ctx","getContext","chart","Chart","stg","datasets","datalabels","formatter","dataIndex","indexAxis","responsive","listeners","currStage","stageName","callbacks","dataset","LeadsFunnel","MenuTitle","ReportsView","settingsCallScoring","systemSettingsCallScoring","setting","AgentsInfo","AgentsCalls","NavLink","RouterNavLink","ModuleSubMenu","defaultActive","activeStyle","workflowAutomationMapTable","emailsOpen","openings","linksClicked","clicks","LEAD_STAGES_OPTIONS","LEAD_STAGES","CALLED_NO_MESSAGE","QUOTE_COMPETITIVE","QUOTE_NOT_COMPETITIVE","WRONG_NUMBER","ERROR_DID_NOT_REQUEST_A_QUOTE","CURRENT_PREMIUM","IFS_SCORE","POLICY_EXPIRATION_DATE","NOT_INTERESTED","SOLD","WorkflowEmailTemplateFragment","EMAIL_TEMPLATE_LIST_QUERY","EMAIL_TEMPLATE_CREATE_MUTATION","EMAIL_TEMPLATE_UPDATE_MUTATION","EMAIL_TEMPLATE_DELETE_MUTATION","createAndUpdateEmailTemplateValidator","template","OnEmailsTemplateCreateEvent","OnEmailsTemplateCreateError","OnEmailsTemplateUpdateEvent","OnEmailsTemplateUpdateError","OnEmailsTemplateClonteEvent","OnEmailsTemplateClonteError","OnEmailsTemplateDeleteEvent","OnEmailsTemplateDeleteError","OnEmailsTemplateListEvent","OnEmailsTemplateListError","fetchEmailsTemplate","createEmailTemplate","cloneEmailTemplate","updateEmailTemplate","deleteEmailTemplate","useEmailTemplates","workflowEmailTemplatesList","WorkflowSmsTemplateFragment","FETCH_SMS_TEMPLATES","CREATE_SMS_TEMPLATE","UPDATE_SMS_TEMPLATE","DELETE_SMS_TEMPLATE","createSmsTemplateValidator","updateSmsTemplateValidator","OnFetchSmsTemplatesEvent","OnFetchSmsTemplatesError","OnCreateSmsTemplatesEvent","OnCreateSmsTemplatesError","OnUpdateSmsTemplatesEvent","OnUpdateSmsTemplatesError","OnCloneSmsTemplatesEvent","OnCloneSmsTemplatesError","OnDeleteSmsTemplatesEvent","OnDeleteSmsTemplatesError","fetchSmsTemplates","createSmsTemplate","updateSmsTemplate","cloneSmsTemplate","deleteSmsTemplate","useSmsTemplates","workflowSmsTemplatesList","WORKFLOW_AUTOMATION_CONDITIONS","LEAD_CREATION","LEAD_CHANGED_AMOUNT","LEAD_CHANGED_EMAIL","LEAD_CHANGED_PHONENUMBER","LEAD_CHANGED_ASSIGNEES","LEAD_STAGE_CALLED_NO_MESSAGE","LEAD_STAGE_SOLD","LEAD_STAGE_CHANGED","LEAD_DISPOSITION_EXPIRATION_DATE","LEAD_DISPOSITION_EXPIRATION_15_DAYS","LEAD_DISPOSITION_EXPIRATION_30_DAYS","LEAD_QUOTE_LINK_CREATED","WORKFLOW_AUTOMATION_CONDITION","WORKFLOW_AUTOMATION","WORKFLOW_AUTOMATION_CONDITIONS_OPTIONS","SCHEDULED_WORKFLOW","ButtonAdd","ButtonDelete","Minus","Plus","FormContainer","WorkflowAutomationForm","_useEmailTemplates","loadingEmailTemplates","_useSmsTemplates","loadingSmsTemplates","scheduledConditions","handleNameChange","newName","handleConditionNameChange","handleTemplateChange","handleArgsChange","isScheduled","handleAddCondition","handleRemoveCondition","_condition$args","_condition$args2","SubmitButton","WorkflowAutomationDialog","WorkflowAutomation","WorkflowAutomationView","workflowForm","setWorkflowForm","workflowDelete","setWorkflowDelete","handleOnYesDelete","handleCloseForm","SmsTemplateTableItem","onClone","handleClone","WORKFLOW_TEMPLATE_TAGS","quoteLink","TextContainer","OptionsContainer","FieldList","loop","smsTags","formatToSmsTags","parent","SmsTemplateEditor","cursorRef","innerHTML","character","onPaste","clipboardData","getData","execCommand","handleSavePosition","getSelection","getRangeAt","startContainer","startOffset","getCaretPosition","handleFieldInsert","focus","setStart","collapse","contentEditable","insertNode","setStartAfter","insertField","onKeyUp","SmsTemplateForm","onDone","textRef","line","SmsTemplateDialog","SmsTemplatesTable","_clone$selected","setUpdate","erase","setErase","setClone","onCloneClick","onDeleteClick","onConfirmClone","agendyId","SmsTemplatesView","isCreateOpen","setCreateOpen","SmsTemplateTable","mergeTags","formatToMergeTags","TemplateCreator","onOpenChange","setEditor","loadDesign","handleLoad","handleOnSubmit","exportHtml","html","design","EmailEditor","onLoad","EmailTemplateView","templates","setTemplate","isOpenCreator","setIsOpenCreator","handleCreate","handleDeleteYes","handleCloneYes","WorkflowView","OnAppUpdate","AppUpdateAvailable","_g","handleRefresh","cacheNames","caches","cacheName","logo","isLocalhost","hostname","registerValidSW","_registerValidSW","swUrl","register","onupdatefound","installingWorker","installing","onstatechange","controller","_extends","prototype","hasOwnProperty","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_path","svgRef","enableBackground","viewBox","fill","ForwardRef","fillRule","stroke","strokeWidth","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeDasharray","strokeDashoffset","fontFamily","textAnchor","mixBlendMode","transform","_desc","x1","y1","x2","y2","ChartDataLabels","FunnelController","TrapezoidElement","LinearScale","CategoryScale","stripePromise","loadStripe","theme","createTheme","COLORS","BLACK","PRIMARY","APP_PRIMARY","TEXT_LIGHT_GRAY","GRAY_30","ICON_GRAY","root","icons","GoogleIcon","MicrosoftIcon","ReplyDefault","TrashCustom","BellIcon","NoBellIcon","GroupIcon","LandlineIcon","MobilePhoneIcon","App","onRequestSuccess","onRequestError","_request$user","_request$user$selecte","resJson","registrationComplete","AsyncContent","DesignSystemView","routeProps","CalendarView","LeadDetailView","SettingsView","isRegistered","BrowserRouter","BoostProvider","Elements","AppProvider","AuthClient","ToastContainer","unregister","checkValidServiceWorker","registerServiceWorker","onActive","ReactDOM"],"mappings":"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,CACE1B,IAAK,iBACL2S,MAAO,mBACPjR,KAAM,UAER,CACE1B,IAAK,qBACL2S,MAAO,uBACPjR,KAAM,SAGV,CACE,CACE1B,IAAK,UACL2S,MAAO,UACPjR,KAAM,QAER,CACE1B,IAAK,0BACL2S,MAAO,4BACPjR,KAAM,QAER,CACE1B,IAAK,eACL2S,MAAO,gBACPjR,KAAM,SAGV,CACE,CACE1B,IAAK,mBACL2S,MAAO,oBACPjR,KAAM,QAER,CACE1B,IAAK,sBACL2S,MAAO,uBACPjR,KAAM,SACNod,QAASuL,IAEX,CACErqB,IAAK,yBACL2S,MAAO,4BACPjR,KAAM,SAGV,CACE,CACE1B,IAAK,oBACL2S,MAAO,uBACPjR,KAAM,QAER,CACE1B,IAAK,mBACL2S,MAAO,qBACPjR,KAAM,QAER,CACE1B,IAAK,aACL2S,MAAO,cACPjR,KAAM,SAGV,CACE,CACE1B,IAAK,YACL2S,MAAO,cACPjR,KAAM,QAER,CACE1B,IAAK,aACL2S,MAAO,cACPjR,KAAM,QAER,CACE1B,IAAK,8BACL2S,MAAO,iCACPjR,KAAM,SAGV,CACE,CACE1B,IAAK,WACL2S,MAAO,YACPjR,KAAM,QAER,CACE1B,IAAK,aACL2S,MAAO,aACPjR,KAAM,QAER,CACE1B,IAAK,aACL2S,MAAO,cACPjR,KAAM,SAGV,CACE,CACE1B,IAAK,UACL2S,MAAO,UACPjR,KAAM,QAER,CACE1B,IAAK,iBACL2S,MAAO,kBACPjR,KAAM,QAER,CACE1B,IAAK,uBACL2S,MAAO,yBACPjR,KAAM,SAGV,CACE,CACE1B,IAAK,uBACL2S,MAAO,yBACPjR,KAAM,QAER,CACE1B,IAAK,eACL2S,MAAO,gBACPjR,KAAM,SACNod,QAASuL,IAEX,CACErqB,IAAK,wBACL2S,MAAO,0BACPjR,KAAM,SAGV,CACE,CACE1B,IAAK,eACL2S,MAAO,gBACPjR,KAAM,QAER,CACE1B,IAAK,kBACL2S,MAAO,mBACPjR,KAAM,QAER,CACE1B,IAAK,UACL2S,MAAO,WACPjR,KAAM,SAGV,CACE,CACE1B,IAAK,gBACL2S,MAAO,iB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D,EAAOC,QAAU,IAA0B,iD,oBCA3CD,EAAOC,QAAU,IAA0B,kC,oBCA3CD,EAAOC,QAAU,IAA0B,yC,oBCA3CD,EAAOC,QAAU,IAA0B,yC,oBCA3CD,EAAOC,QAAU,IAA0B,yC,oBCA3CD,EAAOC,QAAU,IAA0B,6C,oBCA3CD,EAAOC,QAAU,IAA0B,8C,impECA3CD,EAAOC,QAAU,IAA0B,0C,oBCA3CD,EAAOC,QAAU,IAA0B,oD,oBCA3CD,EAAOC,QAAU,IAA0B,2C,oBCA3CD,EAAOC,QAAU,IAA0B,oC,oBCA3CD,EAAOC,QAAU,IAA0B,uC,oBCA3CD,EAAOC,QAAU,IAA0B,mC,oBCA3CD,EAAOC,QAAU,IAA0B,2C,oBCA3CD,EAAOC,QAAU,IAA0B,wC,oBCA3CD,EAAOC,QAAU,IAA0B,qD,oBCA3CD,EAAOC,QAAU,IAA0B,mD,oBCA3CD,EAAOC,QAAU,IAA0B,gE,oBCA3CD,EAAOC,QAAU,IAA0B,wC,oBCA3CD,EAAOC,QAAU,IAA0B,qD,oBCA3CD,EAAOC,QAAU,IAA0B,wC,oBCA3CD,EAAOC,QAAU,IAA0B,qD,oBCA3CD,EAAOC,QAAU,IAA0B,qD,oBCA3CD,EAAOC,QAAU,IAA0B,kE,oBCA3CD,EAAOC,QAAU,IAA0B,qD,oBCA3CD,EAAOC,QAAU,IAA0B,kE,oBCA3CD,EAAOC,QAAU,IAA0B,wD,oBCA3CD,EAAOC,QAAU,IAA0B,qE,oBCA3CD,EAAOC,QAAU,IAA0B,4C,kBCA3CD,EAAOC,QAAU,skV","file":"static/js/main.9e179a5c.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/dashboard.9af7f3bc.svg\";","module.exports = __webpack_public_path__ + \"static/media/campaigns.dabf3d31.svg\";","module.exports = __webpack_public_path__ + \"static/media/leads.1a5dfd13.svg\";","module.exports = __webpack_public_path__ + \"static/media/tasks.3b4e325c.svg\";","module.exports = __webpack_public_path__ + \"static/media/call.31b54594.svg\";","module.exports = __webpack_public_path__ + \"static/media/inbox.06592783.svg\";","module.exports = __webpack_public_path__ + \"static/media/performance.f17a57ce.svg\";","module.exports = __webpack_public_path__ + \"static/media/marketing.9343290d.svg\";","module.exports = __webpack_public_path__ + \"static/media/settings.cfa4da12.svg\";","module.exports = __webpack_public_path__ + \"static/media/leadvolt-lightning.1714069d.svg\";","module.exports = __webpack_public_path__ + \"static/media/sidebar-logo.7242aca5.svg\";","module.exports = __webpack_public_path__ + \"static/media/auto-calling-a.c1a4c13b.svg\";","module.exports = __webpack_public_path__ + \"static/media/auto-calling-b.f780f924.svg\";","module.exports = __webpack_public_path__ + \"static/media/auto-calling-c.afa8ccbb.svg\";","module.exports = __webpack_public_path__ + \"static/media/filter-grey.c07c1aee.svg\";","module.exports = __webpack_public_path__ + \"static/media/voicemail.8b47e6b5.svg\";","module.exports = __webpack_public_path__ + \"static/media/mute.15caae7a.svg\";","module.exports = __webpack_public_path__ + \"static/media/fax.daee2a98.svg\";","module.exports = __webpack_public_path__ + \"static/media/hangup.cee84f10.svg\";","module.exports = __webpack_public_path__ + \"static/media/check.8e7d7375.svg\";","module.exports = __webpack_public_path__ + \"static/media/trash.7428091f.svg\";","module.exports = __webpack_public_path__ + \"static/media/trash-green.ccbc65cc.svg\";","module.exports = __webpack_public_path__ + \"static/media/edit.3974444f.svg\";","module.exports = __webpack_public_path__ + \"static/media/sort.5e7cbd82.svg\";","module.exports = __webpack_public_path__ + \"static/media/performance-green.3d2fe92b.svg\";","module.exports = __webpack_public_path__ + \"static/media/news.ad2cd140.svg\";","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { Icon, Tooltip } from '@8base/boost';\n\nconst Container = styled.div`\n position: relative;\n display: inline-block;\n height: 24px;\n`;\n\nconst Span = styled.span`\n color: #fff;\n background-color: var(--color-primary);\n position: absolute;\n top: -8px;\n right: -8px;\n font-size: 12px;\n line-height: 20px;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n text-align: center;\n`;\n\nconst IconCount = ({ name, countStyle, ...props }) => {\n const count = props.count ? {props.count} : null;\n\n if (props.count > 0 || props.noCountMessage === '') {\n return (\n \n {count}\n \n \n );\n }\n\n return (\n \n {count}\n \n \n \n \n );\n};\n\nIconCount.propTypes = {\n name: PropTypes.string.isRequired,\n noCountMessage: PropTypes.string,\n count: PropTypes.number.isRequired,\n countStyle: PropTypes.object.isRequired,\n};\n\nIconCount.defaultProps = {\n noCountMessage: '',\n};\n\nexport default IconCount;\n","export const USER_STATUSES = {\n ON_A_CALL: 'ON A CALL',\n AWAY: 'AWAY',\n WITH_CLIENT: 'WITH CLIENT',\n WRAPPING_ON_A_CALL: 'WRAPPING ON A CALL',\n ACTIVE: 'ACTIVE',\n};\n","import styled from 'styled-components';\nimport { USER_STATUSES } from '../../modules/user-status/user-status-model';\n\nexport const Status = styled.div`\n cursor: pointer;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n padding: 0px 17px;\n`;\n\nexport const StatusText = styled.div`\n font-size: 12px;\n color: #384a59;\n`;\n\nexport const StatusCircle = styled.div`\n width: 15px;\n height: 15px;\n border: 1px solid #efefef;\n border-radius: 100%;\n background-color: ${(props) => props.color};\n margin-right: 5px;\n position: relative;\n\n ${(props) =>\n props.status === USER_STATUSES.ON_A_CALL\n ? `\n &::before {\n content: '';\n display: block;\n width: 6px;\n height: 2px;\n background-color: white;\n position: absolute;\n top: calc(50% - 1px);\n left: calc(50% - 3.5px);\n }\n `\n : ''}\n`;\n","import React from 'react';\nimport { Loader as BoostLoader } from '@8base/boost';\nimport styled from 'styled-components';\n\nconst LoaderContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 30px 0px;\n`;\n\nconst Loader = () => {\n return (\n \n \n \n );\n};\n\nexport default Loader;\n","import gql from 'graphql-tag';\n\nexport const USER_STATUS_CREATE_MUTATION = gql`\n mutation UserStatusCreateMutation($data: UserStatusCreateInput!) {\n userStatusCreate(data: $data) {\n status\n }\n }\n`;\n\nexport const USER_STATUS_LIST_QUERY = gql`\n query UserStatusQuery($user: ID!) {\n userStatusesList(filter: { user: { id: { equals: $user } } }, last: 1) {\n items {\n id\n status\n user {\n id\n firstName\n lastName\n }\n createdAt\n }\n }\n }\n`;\n\nexport const USER_STATUS_LIST_SUBSCRIPTION = gql`\n subscription UserStatusSubscription($user: ID!) {\n UserStatus(filter: { mutation_in: [create], node: { user: { id: { equals: $user } } } }) {\n mutation\n node {\n id\n status\n createdAt\n }\n }\n }\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\nimport { ApolloClient } from '@apollo/client';\n\nexport const OnSessionFetch = createEvent<{\n user: any;\n}>();\n\nexport const OnSessionError = createEvent();\n\nexport const OnSelectedAgencyChange = createEvent();\n\nexport const OnMetaUpdate = createEvent();\n\nexport const OnApolloClient = createEvent>>();\n\nexport const OnUserUpdate = createEvent();\n\nexport const OnUserUpdateError = createEvent();\n\nexport const OnInvitationsSkipped = createEvent();\n\nexport const OnTokenExpired = createEvent();\n\nexport function apollClient(): ApolloClient> {\n const client = OnApolloClient.get();\n\n if (client) {\n return client;\n }\n throw new Error('Missing apollo client');\n}\n","export class IntegrityError extends Error {\n constructor(message) {\n super(message);\n this.name = 'IntegrityError';\n }\n}\n\nexport class ValidationError extends Error {\n constructor(arr) {\n super(arr);\n this.name = 'ValidationError';\n this.arr = arr;\n }\n}\n","import moment from 'moment';\n\n/**\n * Checks if value is in a list\n *\n * @param {string} stringToTest - The string to find\n * @param {Array} listOptions - The list of options\n *\n * @returns {boolean} True or False depending if the value is in the list or not\n */\nexport const isIncludesInOptions = (stringToTest, listOptions) => {\n return listOptions.includes(stringToTest);\n};\n\n/**\n * Validate if a string is valid or not.\n *\n * @param {string} stringToTest - The string to validate.\n * @param {boolean} allowEmpty - If a empty string should be valid or not.\n * @param {boolean} allowNull - Returns true if the value is null.\n *\n * @returns {boolean} If the string is valid or not.\n */\nexport const isValidString = (stringToTest, allowEmpty = false, allowNull = false) => {\n const whiteSpace = /^[\\s]$/;\n\n if (stringToTest === null && allowNull) return true;\n\n if (typeof stringToTest !== 'string') return false;\n\n if (stringToTest.length === 0 && allowEmpty === false) return false;\n\n if (whiteSpace.test(stringToTest)) return false;\n\n return true;\n};\n\n/**\n * Validate if a string is a valid number.\n *\n * @param {string} value - The string to validate as a number.\n * @param {boolean} allowZero - If the string should accept 0 as a valid number.\n * @param {boolean} allowNegative - If the string should negative values.\n * @returns {boolean} If the string is valid number or not.\n */\nexport const isValidNumber = (value, allowZero = false, allowNegative = false) => {\n const numberToTest = parseInt(value.toString(), 10);\n\n if (typeof value === 'string' && !value.match(/^-{0,1}\\d+$/)) return false;\n\n if (isNaN(numberToTest) || typeof numberToTest !== 'number') return false;\n\n if (numberToTest === 0 && allowZero === false) return false;\n\n if (numberToTest < 0 && allowNegative === false) return false;\n\n return true;\n};\n\n/**\n * Validate if a value is a valid floating-point number.\n *\n * @param {string|number} value - The value to validate as a floating-point number.\n * @param {number} [decimalPlaces=2] - The number of decimal places to allow. Defaults to 2 if not specified.\n * @param {boolean} [allowZero=false] - If the value should accept 0 as a valid number.\n * @param {boolean} [allowNegative=false] - If the value should allow negative values.\n * @returns {boolean} If the value is a valid floating-point number or not.\n */\nexport function isValidFloat(value, decimalPlaces = 2, allowZero = false, allowNegative = false) {\n const numberToTest = parseFloat(value);\n\n if (typeof value === 'string' && !value.match(/^-?\\d*(\\.\\d+)?$/)) return false;\n\n if (isNaN(numberToTest)) return false;\n\n if (numberToTest === 0 && !allowZero) return false;\n\n if (numberToTest < 0 && !allowNegative) return false;\n\n if (decimalPlaces !== undefined) {\n const decimalPart = value.toString().split('.')[1];\n if (decimalPart && decimalPart.length > decimalPlaces) return false;\n }\n\n return true;\n}\n\n/**\n * Validate if a value is a valid number.\n *\n * @param {string} numberToTest - The number To Test.\n *\n * @returns {boolean} If the value is valid number or not.\n */\nexport const isValidNumberRegExp = (numberToTest) => {\n const re = /^[0-9]*$/;\n return re.test(numberToTest);\n};\n\n/**\n * Validate if a number is a valid integer.\n *\n * @param {number} numberToTest - The number to validate as integer.\n * @param {boolean} allowZero - If the number should accept 0 as a valid number.\n * @param {boolean} allowNegative - If the number should negative values.\n *\n * @returns {boolean} If the number is a valid integer.\n */\nexport const isValidInteger = (numberToTest, allowZero = false, allowNegative = false) => {\n if (!Number.isInteger(numberToTest)) return false;\n\n if (numberToTest === 0 && allowZero === false) return false;\n\n if (numberToTest < 0 && allowNegative === false) return false;\n\n return true;\n};\n\n/**\n * Validate if the provided string is a valid email address.\n *\n * @param {string} email - String to validate as email.\n *\n * @returns {boolean} Wether an email is valid or not.\n */\nexport const isValidEmail = (email) => {\n let emailExpression = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@(([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{2,})$/;\n\n return emailExpression.test(email) ? true : false;\n};\n\n/**\n * Validate if the provided string is a valid Date.\n *\n * @param {string} date - String date.\n *\n * @returns {boolean} Is valid date.\n */\nexport const isValidDate = (date) => {\n return moment(date).isValid();\n};\n\n/**\n * Validate if the provided string is a valid phone number.\n *\n * @param {string} number - Phone.\n *\n * @returns {boolean} Is valid or not.\n */\nexport const isValidPhoneNumber = (number) => {\n let phoneRegExp = /^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;\n\n return phoneRegExp.test(number);\n};\n","import { ValidationError } from '../../shared/errors';\nimport {\n isValidString,\n isValidNumber,\n isValidEmail,\n isValidDate,\n isValidPhoneNumber,\n} from '../../shared/validators';\n\n/* eslint-disable */\nexport const fileToBase64 = (file) =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(error);\n });\n\n/**\n * Helper to remove null keys from objects\n * WARNING: This function\n * mutates the data\n *\n * @param {data} object to mutate\n * @param data\n * @param key\n * @param {key} string the key of the property to mutate\n */\nexport const sanitize8BaseNonNull = (data, key) => {\n if (data[key] === null) delete data[key];\n};\n\nexport const sanitize8BaseEmptyFields = (data) => {\n Object.keys(data).forEach((key) => {\n const value = data[key];\n\n if (\n value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0)\n ) {\n delete data[key];\n }\n });\n};\n\n/**\n * Helper to change non null keys to 8base 'connect' reference\n * WARNING: This function mutates the data\n *\n * @param {data} object to mutate\n * @param data\n * @param key\n * @param {key} string the key of the property to mutate\n */\nexport const sanitize8BaseReference = (data, key) => {\n if (data[key] !== undefined && data[key] !== null && data[key] !== '')\n data[key] = { connect: { id: data[key] } };\n else delete data[key];\n};\n\n/**\n * Helper to change Array keys to 8base 'connect' multiple references\n * WARNING: This function mutates the data\n *\n * @param data\n * @param key\n */\nexport const sanitize8BaseReferences = (data, key) => {\n if (Array.isArray(data[key])) {\n data[key] = {\n connect: data[key].map((id) => {\n return { id: id };\n }),\n };\n } else delete data[key];\n};\n\n/**\n * Helper function to non null objects to 8base 'connect' reference\n * WARNING: This function mutates the data.\n *\n * @param {object} data - The data to mutate.\n * @param {string} key - The property to mutate.\n */\nexport const sanitize8BaseReferenceFromObject = (data, key) => {\n if (data[key] !== null && data[key] !== '' && data[key] !== undefined) {\n if (data[key].id === undefined)\n throw new Error(\n `${key} property on 'data' does not have a field 'id' so is not possible to create the 'connect'`,\n );\n data[key] = { connect: { id: data[key].id } };\n } else delete data[key];\n};\n\n/**\n * @param property\n * @param {property} string the key of the property to be sorted\n * include \"-\" in front of the property to sort in decreasing mode\n */\nexport const dynamicSort = (property) => {\n let sortOrder = 1;\n if (property[0] === '-') {\n sortOrder = -1;\n property = property.substr(1);\n }\n return function(a, b) {\n /**\n * next line only works with strings and numbers\n */\n const result = a[property] < b[property] ? -1 : a[property] > b[property] ? 1 : 0;\n return result * sortOrder;\n };\n};\n\n/**\n * Helper to change Array keys to 8base 'reconnect' multiple references\n * WARNING: This function mutates the data\n *\n * @param {data} object to mutate\n * @param data\n * @param key\n * @param {key} string the key of the property to mutate\n */\nexport const sanitize8BaseReconnects = (data, key) => {\n if (Array.isArray(data[key])) {\n data[key] = {\n reconnect: data[key].map((id) => {\n return { id: id };\n }),\n };\n } else delete data[key];\n};\n\n/**\n * Helper to change non null keys to 8base 'create' reference for Documents\nWARNING: This function mutates the data.\n *\n * @param {data} object - To mutate.\n * @param data\n * @param key\n * @param {key} string - The key of the property to mutate.\n */\nexport const sanitize8BaseDocumentCreate = (data, key) => {\n if (data[key] !== null && data[key] !== '') data[key] = { create: data[key] };\n else delete data[key];\n};\n\n/**\n * Helper to change non null keys to 8base 'create' reference for Documents\n * WARNING: This function mutates the data\n *\n * @param {data} object to mutate\n * @param data\n * @param key\n * @param {key} string the key of the property to mutate\n */\nexport const sanitize8BaseDocumentUpdate = (data, key) => {\n if (data[key] !== null && data[key].downloadUrl === undefined) data[key] = { create: data[key] };\n else delete data[key];\n};\n\n/**\n * Helper to change data key to 8base 'reconnect'\n * WARNING: This function mutates the data\n *\n * @param {data} object to mutate\n * @param data\n * @param key\n * @param {key} string the key of the property to mutate\n */\nexport const sanitize8BaseReconnect = (data, key) => {\n if (data[key] !== undefined) {\n data[key] = {\n reconnect: { id: data[key] },\n };\n } else delete data[key];\n};\n\nexport const checkUrl = (url, compare) => {\n let aux = false;\n if (typeof compare === 'object') {\n compare.forEach((value) => {\n if (url.pathname.search(value) >= 1) {\n aux = true;\n }\n });\n } else {\n if (url.pathname.search(compare) > 0) {\n aux = true;\n }\n }\n return aux;\n};\n\n/**\n * Helper to capitalize a string making its\n * first letter uppercase\n *\n * @param {value} string\n * @param value\n */\nexport const capitalize = (value) => {\n return value.charAt(0).toUpperCase() + value.slice(1);\n};\n\n/**\n * Helper to uncapitalize a string making its\n * first letter lowercase\n *\n * @param {value} string\n * @param value\n */\nexport const unCapitalize = (value) => {\n return value.charAt(0).toLowerCase() + value.slice(1);\n};\n\n/**\n * @param {string} filter String to compare and filter the list\n * @param {Array} list Array to be filtered\n * @returns {Array} Filtered list\n */\nexport function filterList(filter, list) {\n // if is undefined of if is an empty string return the same list\n if (!filter || filter === '') {\n return list;\n }\n const newList = list.filter((item) => {\n const itemString = JSON.stringify(item).toUpperCase();\n return itemString.includes(filter.toUpperCase());\n });\n return newList;\n}\n\n/**\n * Create validations for form\n *\n * @param {Array} validations array with validations fields\n * @param {String} modelName model name\n */\nexport const createValidations = (validations, modelName) => {\n const messageValid = `The ${modelName} must have a valid `;\n const errorMessages = [];\n\n validations.forEach((validation) => {\n let isValid = true;\n\n if (validation.required || Boolean(validation.value) || Number.isNaN(validation.value)) {\n if (validation.type === 'string') isValid = isValidString(validation.value);\n if (validation.type === 'number') isValid = isValidNumber(validation.value);\n if (validation.type === 'boolean')\n isValid = validation.value !== undefined && validation.value !== null;\n if (validation.type === 'email') isValid = isValidEmail(validation.value);\n if (validation.type === 'date') isValid = isValidDate(validation.value);\n if (validation.type === 'phone') isValid = isValidPhoneNumber(validation.value);\n }\n\n if (!isValid) {\n errorMessages.push(messageValid + validation.field);\n }\n });\n\n if (errorMessages.length !== 0) throw new ValidationError(errorMessages);\n};\n\n/**\n * Formats a number to put commas in it\n *\n * @param {int|string} number - Integer number\n *\n * @returns {string} The formatted number\n */\nexport const numberWithCommas = (number) => {\n return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\n/**\n * Returns a new object without the keys with falsy values or values with empty strings\n *\n * @template T\n * @param {T} object input object\n * @returns {T} output new object\n */\nexport function removeEmptyKeys(object) {\n const objectKeys = Object.keys(object);\n\n const notEmptyKeys = objectKeys.reduce((obj, key) => {\n const value = object[key];\n if (value && value !== '') {\n obj[key] = value;\n }\n return obj;\n }, {});\n\n return notEmptyKeys;\n}\n\n/**\n * Split array into chunks\n * @param {Array} array The array to be split\n * @param {int} chunkSize The size of each chunk\n */\nexport function chunkArray(array = [], chunkSize) {\n return array.length\n ? [array.slice(0, chunkSize), ...chunkArray(array.slice(chunkSize), chunkSize)]\n : [];\n}\n/**\n * Split array into chunks\n * @param {Array|Object} obj The object to be mapped\n * @param {Array} keys The keys to be removed\n * @returns {Object} - Resulto object without keys\n */\nexport function removeUnusedKeys(obj, keys) {\n if (obj instanceof Array) {\n return obj.map((item) => removeUnusedKeys(item, keys));\n } else if (typeof obj === 'object') {\n const newObj = { ...obj };\n\n Object.keys(newObj).forEach((key) => {\n const value = newObj[key];\n if (keys.includes(key)) {\n delete newObj[key];\n } else if (typeof value === 'object' || Array.isArray(value)) {\n newObj[key] = removeUnusedKeys(value, keys);\n }\n });\n\n return newObj;\n }\n}\n\n/**\n * Returns a function, that, as long as it continues to be invoked,\n * will not be triggered. The function\n * will be called after it stops being called for\n * wait milliseconds\n *\n * @param {function} func function to invoke\n * @param {number} wait timeout\n */\nexport function debounce(func, wait = 500) {\n let timeout;\n return (...args) => {\n const later = () => {\n // null timeout to indicate the debounce ended\n timeout = null;\n\n func(...args);\n };\n\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n };\n}\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnUserStatusCreateEvent = createEvent();\n\nexport const OnUserStatusError = createEvent();\n\nexport const OnuserStatuslistEvent = createEvent();\n","import { log, error } from '@cobuildlab/pure-logger';\nimport { USER_STATUS_CREATE_MUTATION, USER_STATUS_LIST_QUERY } from './user-status-queries';\nimport { OnApolloClient } from '../../shared/session/session-events';\nimport { sanitize8BaseEmptyFields, sanitize8BaseReference } from '../../shared/utils';\nimport {\n OnUserStatusCreateEvent,\n OnUserStatusError,\n OnuserStatuslistEvent,\n} from './user-status-events';\n\n/**\n * Creates a user status\n *\n * @param {object} userStatus data from dialog profile\n * @returns {object} the response data\n */\nexport const createUserStatus = async (userStatus) => {\n const client = OnApolloClient.get();\n let response;\n\n sanitize8BaseEmptyFields(userStatus);\n userStatus.current = { connect: { id: userStatus.user } };\n sanitize8BaseReference(userStatus, 'user');\n\n try {\n response = await client.mutate({\n mutation: USER_STATUS_CREATE_MUTATION,\n variables: { data: userStatus },\n refetchQueries: ['UserStatusQuery']\n });\n } catch (e) {\n error('createUserStatus', e);\n\n return OnUserStatusError.dispatch(e);\n }\n\n log('createUserStatus', response);\n OnUserStatusCreateEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Action for fetch the user statuses\n *\n * @param {object} user user id.\n * @returns {object} the response data\n */\nexport const fetchUserStatuses = async (user) => {\n const client = OnApolloClient.get();\n let response;\n\n if (client) {\n const variables = {\n user,\n };\n\n try {\n response = await client.query({\n query: USER_STATUS_LIST_QUERY,\n fetchPolicy: 'network-only',\n variables,\n });\n } catch (e) {\n error('fetchUserStatuses', e);\n\n return OnUserStatusError.dispatch(e);\n }\n\n log('fetchUserStatuses', response);\n OnuserStatuslistEvent.dispatch(response.data);\n\n return response.data;\n }\n};\n","import { Text } from '@8base/boost';\nimport styled from 'styled-components';\n\nexport const ToastText = styled(Text)`\n font-size: 14px;\n line-height: 28px;\n color: #384a59 !important;\n display: inline-block;\n height: 28px;\n font-family: 'Poppins';\n`;\n","import { Text } from '@8base/boost';\nimport styled from 'styled-components';\n\nexport const ToastTitle = styled(Text)`\n font-size: 14px;\n line-height: 28px;\n letter-spacing: 0.44px;\n font-weight: bold !important;\n color: ${({ color }) => color} !important;\n height: 28px;\n display: inline-block;\n font-family: 'Poppins';\n font-weight: 500;\n`;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport { ToastText } from './ToastText';\nimport { ToastTitle } from './ToastTitle';\n\nconst ToastSuccess = ({ title, text }) => {\n return (\n <>\n \n {title}\n \n \n {text}\n \n >\n );\n};\n\nToastSuccess.propTypes = {\n text: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n};\n\nexport default ToastSuccess;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport { ToastText } from './ToastText';\nimport { ToastTitle } from './ToastTitle';\n\nconst ToastError = ({ text = '' }) => {\n return (\n <>\n \n Ooops!\n \n \n {text}\n \n >\n );\n};\n\nToastError.propTypes = {\n text: PropTypes.string.isRequired,\n};\n\nexport default ToastError;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport { ToastText } from './ToastText';\nimport { ToastTitle } from './ToastTitle';\n\nconst ToastInfo = ({ title, text }) => {\n return (\n <>\n \n {title}\n \n \n {text}\n \n >\n );\n};\n\nToastInfo.propTypes = {\n text: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n};\n\nexport default ToastInfo;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport { ToastText } from './ToastText';\nimport { ToastTitle } from './ToastTitle';\n\nconst ToastAttention = ({ text = '' }) => {\n return (\n <>\n \n Look!\n \n \n {text}\n \n >\n );\n};\n\nToastAttention.propTypes = {\n text: PropTypes.string.isRequired,\n};\n\nexport default ToastAttention;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport { ToastText } from './ToastText';\nimport { ToastTitle } from './ToastTitle';\n\n/**\n * @param {object} props - Component props.\n * @param {string[]} props.arr - Error messages.\n * @returns {React.ReactNode} ToastErrors component.\n */\nconst ToastErrors = ({ arr }) => {\n let values = arr.map((value, idx) => {\n return (\n \n {value}\n \n );\n });\n\n return (\n <>\n \n Ooops\n \n \n {values}\n \n >\n );\n};\n\nToastErrors.propTypes = {\n arr: PropTypes.array.isRequired,\n};\n\nexport default ToastErrors;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport { Row } from '@8base/boost';\nimport { ToastText } from './ToastText';\nimport { ToastTitle } from './ToastTitle';\nimport styled from 'styled-components';\nimport alert from '../../../assets/images/alert.svg';\n\nconst IconWarn = styled.img`\n height: 15px;\n width: 17.5px;\n margin-right: 6px;\n`;\n\nconst ToastWarn = ({ text = '' }) => {\n return (\n <>\n \n \n \n \n Warning\n \n \n \n \n {text}\n \n >\n );\n};\n\nToastWarn.propTypes = {\n text: PropTypes.string.isRequired,\n};\n\nexport default ToastWarn;\n","import { css } from 'styled-components';\n\nexport const customScrollBar = css`\n &::-webkit-scrollbar {\n width: 8px; /* Tamaño del scroll en vertical */\n height: 8px; /* Tamaño del scroll en horizontal */\n }\n &:not(:hover)::-webkit-scrollbar-thumb,\n &:not(:hover)::-webkit-scrollbar-track {\n background: transparent;\n box-shadow: 0 0 2px 1px transparent;\n }\n &::-webkit-scrollbar-thumb,\n &::-webkit-scrollbar-track {\n transition: all 1s ease-in-out;\n }\n &::-webkit-scrollbar-thumb {\n background: #ccc;\n border-radius: 4px;\n }\n &:hover::-webkit-scrollbar-thumb:hover {\n background: #b3b3b3;\n box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.2);\n }\n &::-webkit-scrollbar-thumb:active {\n background-color: #999999;\n }\n &::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 4px;\n }\n &::-webkit-scrollbar-track:hover,\n &::-webkit-scrollbar-track:active {\n background: #d4d4d4;\n }\n`;\n","import { styled } from '@8base/boost';\nimport { customScrollBar } from '../css/mixins';\n\nexport const Box = styled.div`\n ${(props) => props.fullWidth && `width: 100%;`}\n ${(props) => props.width && `width: ${props.width};`}\n ${(props) => props.minWidth && `min-width: ${props.minWidth};`}\n ${(props) => props.height && `height: ${props.height};`}\n ${(props) => props.minHeight && `min-height: ${props.minHeight};`}\n ${(props) => props.maxHeight && `max-height: ${props.maxHeight};`}\n\n ${(props) => props.padding && `padding: ${props.padding * 8}px;`}\n\n ${(props) => props.paddingTop && `padding-top: ${props.paddingTop * 8}px;`}\n ${(props) => props.paddingBottom && `padding-bottom: ${props.paddingBottom * 8}px;`}\n ${(props) => props.paddingLeft && `padding-left: ${props.paddingLeft * 8}px;`}\n ${(props) => props.paddingRight && `padding-right: ${props.paddingRight * 8}px;`}\n \n ${(props) => props.marginTop && `margin-top: ${props.marginTop * 8}px;`}\n ${(props) => props.marginBottom && `margin-bottom: ${props.marginBottom * 8}px;`}\n ${(props) => props.marginLeft && `margin-left: ${props.marginLeft * 8}px;`}\n ${(props) => props.marginRight && `margin-right: ${props.marginRight * 8}px;`}\n\n ${(props) => props.position && `position: ${props.position};`}\n ${(props) => props.top && `top: ${props.top};`}\n ${(props) => props.bottom && `bottom: ${props.bottom};`}\n ${(props) => props.left && `left: ${props.left};`}\n ${(props) => props.right && `right: ${props.right};`}\n\n ${(props) => props.background && `background: ${props.background};`}\n ${(props) => props.borderRadius && `border-radius: .5rem;`}\n ${(props) => props.boxShadow && `box-shadow: 0 1px 3px 0 rgb(50, 50, 93, 0.14);`}\n\n ${(props) => props.border && `border: ${props.border};`}\n ${(props) => props.borderTop && `border-top: ${props.borderTop};`}\n ${(props) => props.borderBottom && `border-bottom: ${props.borderBottom};`}\n ${(props) => props.borderLeft && `border-left: ${props.borderLeft};`}\n ${(props) => props.borderRight && `border-right: ${props.borderRight};`}\n\n ${(props) => props.overflow && `overflow: ${props.overflow};`}\n\n ${(props) => props.hoverable && `cursor: pointer;`}\n ${(props) =>\n props.hoverColor &&\n `\n &:hover {\n background-color: ${props.hoverColor};\n }\n `}\n\n ${(props) => props.display && `display: ${props.display};`}\n ${(props) => props.flexDirection && `flex-direction: ${props.flexDirection};`}\n ${(props) => props.flexGrow && `flex-grow: ${props.flexGrow};`}\n ${(props) => props.flexWrap && `flex-wrap: ${props.flexWrap};`}\n ${(props) => props.alignItems && `align-items: ${props.alignItems};`}\n ${(props) => props.justifyContent && `justify-content: ${props.justifyContent};`}\n\n ${(props) =>\n props.gap &&\n `\n & > *:not(:last-child) {\n ${\n props.gap === 'sm'\n ? `margin-${props.flexDirection === 'row' ? 'right' : 'bottom'}: 8px;`\n : ''\n}\n ${\n props.gap === 'md'\n ? `margin-${props.flexDirection === 'row' ? 'right' : 'bottom'}: 16px;`\n : ''\n}\n ${\n props.gap === 'lg'\n ? `margin-${props.flexDirection === 'row' ? 'right' : 'bottom'}: 24px;`\n : ''\n}\n }\n `}\n\n ${(props) => props.textAlign && `text-align: ${props.textAlign};`}\n\n ${(props) => props.withCustomScroll && `${customScrollBar}`}\n`;\n","import gql from 'graphql-tag';\n\nexport const SUBSCRIPTION_NOTIFICATION = gql`\n subscription($agency: ID, $user: ID!) {\n Notification(\n filter: {\n mutation_in: [create, update]\n node: { agency: { id: { equals: $agency } }, user: { id: { equals: $user } } }\n updatedFields: { contains: [\"read\"] }\n }\n ) {\n node {\n id\n read\n email {\n id\n subject\n from\n }\n sms {\n id\n text\n receivedFrom\n lead {\n id\n firstName\n }\n }\n }\n mutation\n }\n }\n`;\n\nexport const NEW_SMS_NOTIFICATIONS_SUBSCRIPTION = gql`\n subscription SmsNotificationSub($userId: ID!, $agencyId: ID!) {\n Notification(\n filter: {\n mutation_in: [create]\n node: {\n type: { equals: \"NEW_SMS\" }\n user: { id: { equals: $userId } }\n agency: { id: { equals: $agencyId } }\n sms: { id: { is_not_empty: true } }\n }\n }\n ) {\n node {\n id\n read\n email {\n id\n subject\n from\n }\n sms {\n id\n text\n receivedFrom\n lead {\n id\n firstName\n }\n }\n }\n }\n }\n`;\n\nexport const QUERY_NOTIFICATION = gql`\n query FetchNotifications(\n $filter: NotificationFilter\n $first: Int\n $skip: Int\n $sort: [NotificationSort!]\n ) {\n notificationsList(filter: $filter, first: $first, skip: $skip, sort: $sort) {\n count\n items {\n id\n type\n read\n createdAt\n userTrigger {\n id\n firstName\n lastName\n avatar {\n id\n downloadUrl\n }\n }\n lead {\n firstName\n lastName\n id\n }\n email {\n id\n subject\n from\n thread {\n id\n }\n }\n campaign {\n name\n id\n }\n disposition {\n id\n expirationDate\n }\n sms {\n id\n text\n receivedFrom\n }\n }\n }\n }\n`;\n\nexport const QUERY_USER_NOTIFICATION = gql`\n query FetchUserNotifications(\n $userId: ID!\n $filter: NotificationFilter\n $first: Int\n $skip: Int\n $sort: [NotificationSort!]\n ) {\n user(id: $userId) {\n notificationRelation(first: $first, skip: $skip, sort: $sort, filter: $filter) {\n items {\n id\n type\n read\n createdAt\n userTrigger {\n id\n firstName\n lastName\n avatar {\n id\n downloadUrl\n }\n }\n lead {\n firstName\n lastName\n id\n }\n email {\n id\n subject\n from\n thread {\n id\n }\n }\n campaign {\n name\n id\n }\n disposition {\n id\n expirationDate\n }\n sms {\n id\n text\n receivedFrom\n }\n }\n }\n }\n }\n`;\n\nexport const UPDATE_NOTIFICATION = gql`\n mutation UpdateNotification($filter: NotificationKeyFilter, $data: NotificationUpdateInput!) {\n notificationUpdate(filter: $filter, data: $data) {\n id\n }\n }\n`;\n\nexport const UPDATE_NOTIFICATION_BY_FILTER = gql`\n mutation UpdateNotifications(\n $data: NotificationUpdateByFilterInput!\n $filter: NotificationFilter!\n ) {\n notificationUpdateByFilter(data: $data, filter: $filter) {\n count\n }\n }\n`;\n\nexport const FETCH_NOTIFICATIONS_COUNT = gql`\n query FetchNotificationsCount($filter: NotificationFilter) {\n notificationsList(filter: $filter) {\n count\n }\n }\n`;\n\nexport const CREATE_USER_PUSH_SUBSCRIPTION = gql`\n mutation CreateUserPushSubscription($data: UserPushSubCreateInput!) {\n userPushSubCreate(data: $data) {\n id\n }\n }\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchNotifications = createEvent();\n\nexport const OnFetchNotificationsError = createEvent();\n\nexport const OnNotificationMarkRead = createEvent();\n\nexport const OnNotificationMarkReadError = createEvent();\n\nexport const OnAllNotificationMarkRead = createEvent();\n\nexport const OnAllNotificationMarkReadError = createEvent();\n\nexport const OnServiceWorkerRegistered = createEvent();\n","import { createAction } from '@cobuildlab/react-simple-state';\nimport { OnApolloClient } from '../../shared/session/session-events';\nimport {\n UPDATE_NOTIFICATION_BY_FILTER,\n QUERY_USER_NOTIFICATION,\n UPDATE_NOTIFICATION,\n CREATE_USER_PUSH_SUBSCRIPTION,\n} from './notifications-querys';\nimport {\n OnFetchNotifications,\n OnFetchNotificationsError,\n OnNotificationMarkRead,\n OnNotificationMarkReadError,\n OnAllNotificationMarkRead,\n OnAllNotificationMarkReadError,\n} from './notifications-store';\n\n/**\n * Marks all notifications of the specified user\n * as read\n *\n * @param user - The user id\n * @param agency - The agency id\n *\n * @returns The request result\n */\nexport const markAllNotificationsAsRead = createAction(\n OnAllNotificationMarkRead,\n OnAllNotificationMarkReadError,\n async (user, agency) => {\n const client = OnApolloClient.get();\n\n if (!client) return;\n\n const response = await client.mutate({\n mutation: UPDATE_NOTIFICATION_BY_FILTER,\n variables: {\n data: { read: { set: true } },\n filter: {\n agency: { id: { equals: agency } },\n user: { id: { equals: user } },\n read: { equals: false },\n },\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Marks the specified notifications as read\n *\n * @param ids - The list of notifications to update\n *\n * @returns The request result\n */\nexport const markNotificationsAsRead = createAction(\n OnNotificationMarkRead,\n OnNotificationMarkReadError,\n async (ids) => {\n const client = OnApolloClient.get();\n\n if (!client) return;\n\n const response = await client.mutate({\n mutation: UPDATE_NOTIFICATION_BY_FILTER,\n variables: {\n data: { read: { set: true } },\n filter: {\n id: {\n in: ids,\n },\n },\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Marks a notification as read\n *\n * @param id - Notification id\n *\n * @returns The request result\n */\nexport async function markNotificationAsRead(id: string) {\n const client = OnApolloClient.get();\n\n if (!client) return;\n\n const response = await client.mutate({\n mutation: UPDATE_NOTIFICATION,\n variables: {\n filter: {\n id,\n },\n data: {\n read: true,\n },\n },\n });\n\n return response.data;\n}\n\n/**\n * Fetches the notifications of the specified user\n * in the agency\n *\n * @param user - The user id\n * @param agency - The agency id\n *\n * @returns The list of notifications\n */\nexport const fetchNotifications = createAction(\n OnFetchNotifications,\n OnFetchNotificationsError,\n async (user, agency, page) => {\n const first = 10;\n const skip = first * (page - 1);\n const sort = [{ createdAt: 'DESC' }];\n const client = OnApolloClient.get();\n\n const filter = {\n agency: { id: { equals: agency } },\n };\n\n if (!client) return;\n let response;\n try {\n response = await client.query({\n query: QUERY_USER_NOTIFICATION,\n fetchPolicy: 'network-only',\n variables: {\n userId: user,\n filter,\n first,\n skip,\n sort,\n },\n });\n\n const notifications = response.data?.user?.notificationRelation?.items ?? [];\n\n return {\n notificationsList: {\n items: notifications,\n count: notifications.length,\n },\n };\n } catch (error) {\n console.log('fetchNotifications response', response);\n }\n },\n);\n\n/**\n * Creates a new user push subscription\n *\n * @param data - The data to create the push subscription\n */\nexport async function createUserPushSubscription(data: UserPushSubsCreateData): Promise {\n const client = OnApolloClient.get();\n\n if (!client) return;\n\n await client.mutate({\n mutation: CREATE_USER_PUSH_SUBSCRIPTION,\n variables: {\n data: {\n endpoint: data.endpoint,\n user: {\n connect: {\n id: data.user,\n },\n },\n metadata: data.metadata,\n },\n },\n });\n console.log('created push subscription');\n}\n\ntype UserPushSubsCreateData = {\n endpoint: string;\n user: string;\n metadata?: Record;\n};\n","import React from 'react';\nimport { Column, Row, Icon, Text, Paragraph } from '@8base/boost';\nimport { ToastText } from './ToastText';\nimport { useHistory } from 'react-router';\nimport { Box } from '../../Box';\nimport { markNotificationAsRead } from '../../../../modules/notifications/notifications-actions';\nimport PropTypes from 'prop-types';\n\n/**\n * @param {object} props - Component props\n * @param {string} props.notification - Notification id.\n * @param {object} props.sms - Sms object from database.\n * @param {string} props.sms.id - Id of the SMS.\n * @param {string} props.sms.text - Content of the SMS.\n * @param {string} props.sms.receivedFrom - Number where the message come from.\n * @param {object} [props.sms.lead] - Related lead object.\n * @param {string} props.sms.lead.id - Lead id.\n * @param {string} props.sms.lead.firstName - First name of the prospect.\n * @returns {React.ReactNode} Toast Message Notification component.\n */\nconst ToastMessage = ({ notification, sms }) => {\n const name = sms.lead?.firstName || `+1 ${sms.receivedFrom}`;\n const text = sms.text.slice(0, 100);\n const history = useHistory();\n\n const handleClick = () => {\n markNotificationAsRead(notification);\n\n if (sms.lead?.id) {\n history.push(`/leads/${sms.lead.id}`);\n } else {\n history.push('/reports/sms-logs');\n }\n };\n\n return (\n \n \n \n \n You have a new SMS message from {name}!\n \n \n {text}...{' '}\n \n see more\n \n \n \n \n );\n};\n\nToastMessage.propTypes = {\n notification: PropTypes.string.isRequired,\n sms: PropTypes.shape({\n id: PropTypes.string.isRequired,\n receivedFrom: PropTypes.string.isRequired,\n lead: PropTypes.shape({\n firstName: PropTypes.string.isRequired,\n }),\n text: PropTypes.string.isRequired,\n }).isRequired,\n};\n\nexport default ToastMessage;\n","import React from 'react';\nimport { toast } from 'react-toastify';\nimport {\n ToastSuccess,\n ToastError,\n ToastAttention,\n ToastInfo,\n ToastErrors,\n ToastWarn,\n ToastMessage,\n ToastEmail,\n} from './components';\n\nconst config = {\n autoClose: false,\n position: toast.POSITION.BOTTOM_LEFT,\n};\n\nexport const success = (title, text) => {\n toast.success(, config);\n};\n\nexport const error = (text, setIsErrorToastShowing) => {\n toast.error(, {\n autoClose: false,\n position: toast.POSITION.BOTTOM_LEFT,\n onClose: () => {\n if (typeof setIsErrorToastShowing === 'function') {\n setIsErrorToastShowing(false);\n }\n },\n });\n};\n\nexport const errors = (arr) => {\n toast.error(, config);\n};\n\nexport const info = (title, text) => {\n toast.info(, config);\n};\n\nexport const attention = (text) => {\n toast.warn(, config);\n};\n\nexport const warn = (text) => {\n toast.warn(, config);\n};\n\nexport const message = (notificationId, smsObj) => {\n toast.success(, {\n autoClose: false,\n position: toast.POSITION.BOTTOM_LEFT,\n });\n};\n\nexport const email = (notification, email) => {\n toast.success(, {\n autoClose: false,\n position: toast.POSITION.BOTTOM_LEFT,\n });\n};\n","import { error } from '@cobuildlab/pure-logger';\nimport * as toast from './components/toast/Toast';\n\n/**\n * The onChange data method for forms.\n *\n * @param {string} name - The Name of the Field.\n * @param {string} value - The Value of the Field to be changed.\n *\n * @returns {void}\n */\nexport function onChangeDataMixin(name, value) {\n const { data } = this.state;\n data[name] = value;\n this.setState({ data });\n}\n\n/**\n * @param {string} name - The Name of the Field.\n * @param {string} value - The Value of the Field to be changed.\n *\n * @returns {void}\n */\nexport function onChangeFilterMixin(name, value) {\n this.setState({\n filters: {\n ...this.state.filters,\n [name]: value,\n },\n });\n}\n\n/**\n * The onError method for View, shows the error on a Toast.\n *\n * @param {object} err - The Error Object.\n *\n * @returns {void}\n */\nexport function onErrorMixin(err) {\n error(err);\n\n if (Array.isArray(err.arr)) {\n toast.errors(err.arr);\n } else {\n toast.error(err.message.replace('GraphQL error:', '').trim());\n }\n this.setState({ isLoading: false, isLoadingForm: false });\n}\n\n/**\n * The onError method for View, shows the error on a Toast\n * This is only for functional components.\n *\n * @param {Array | Error} err - The Error Object\n *\n * @returns {void}\n */\nexport function onErrorMixinFC(err) {\n error(err);\n\n if (Array.isArray(err.arr)) {\n toast.errors(err.arr);\n } else {\n toast.error(err.message.replace('GraphQL error:', '').trim());\n }\n}\n\n/**\n * Handle on change for hooks.\n *\n * @param {object} object - Data object.\n * @param {Function} set - Hook function.\n * @param {string} key - Key name.\n * @param {string} value - Input value.\n *\n * @returns {void}\n */\nexport const onChangeDataHookMixin = (object, set, key, value) => {\n const newObject = { ...object };\n\n newObject[key] = value;\n\n set(newObject);\n};\n","import gql from 'graphql-tag';\nimport { SUBSCRIPTION_STATUS } from '@cobuildlab/lead-volt-share';\n\nexport const AgencyFragment = gql`\n fragment FragmentAgency on Agency {\n id\n name\n company {\n id\n name\n subscriptions(first: 1, orderBy: createdAt_DESC) {\n items {\n id\n status\n }\n }\n companyInvoices(first: 1, orderBy: createdAt_DESC) {\n items {\n id\n status\n }\n }\n }\n phoneCallSettings {\n id\n automaticCalls\n recordCalls\n campignAssineeFilter\n agency {\n id\n name\n }\n callCadenceConfig\n }\n ifsScore\n enableInsights\n }\n`;\nexport const SelectedAgencyFragment = gql`\n fragment FragmentSelectedAgency on Agency {\n id\n name\n enableInsights\n company {\n id\n name\n subscriptions(first: 1, orderBy: createdAt_DESC) {\n items {\n id\n status\n }\n }\n companyInvoices(first: 1, orderBy: createdAt_DESC) {\n items {\n id\n status\n }\n }\n }\n phoneCallSettings {\n id\n automaticCalls\n recordCalls\n campignAssineeFilter\n agency {\n id\n name\n }\n callCadenceConfig\n }\n ifsScore\n phoneNumbersRelation(filter: { active: { equals: true } }) {\n items {\n id\n active\n number {\n code\n number\n }\n }\n }\n }\n`;\nexport const UserFragment = gql`\n fragment UserFragment on User {\n email\n firstName\n id\n lastName\n cellPhone\n workPhone\n workPhoneExt\n timezone\n onboardingStep\n selectedAgency {\n ...FragmentSelectedAgency\n }\n avatar {\n id\n downloadUrl\n }\n }\n ${SelectedAgencyFragment}\n`;\nexport const CompanyFragment = gql`\n fragment CompanyFragment on Company {\n id\n name\n status\n agencyCompanyRelation {\n items {\n id\n name\n }\n }\n subscriptions(first: 1, orderBy: createdAt_DESC) {\n items {\n id\n expireDate\n cardHolderName\n cardExpireDate\n last4\n addressLine1\n addressLine2\n city\n state\n country\n subscriptionPlan {\n id\n name\n description\n monthlyPrice\n annualPrice\n annualSavings\n }\n }\n }\n companyInvoices(first: 1, orderBy: createdAt_DESC) {\n items {\n id\n invoiceId\n status\n }\n }\n }\n`;\n\nexport const AgencyInvitationFragment = gql`\n fragment AgencyInvitationFragment on AgencyInvitation {\n id\n createdBy {\n ...UserFragment\n }\n agency {\n ...FragmentAgency\n }\n email\n type\n status\n }\n ${UserFragment}\n ${AgencyFragment}\n`;\n\nexport const CompanyInvitationFragment = gql`\n fragment CompanyInvitationFragment on CompanyInvitation {\n id\n createdBy {\n ...UserFragment\n }\n company {\n ...CompanyFragment\n }\n email\n status\n }\n ${UserFragment}\n ${CompanyFragment}\n`;\nexport const AGENCY_INVITATIONS_SUBSCRIPTION = gql`\n subscription($email: String!) {\n AgencyInvitation(filter: { node: { email: { equals: $email } }, mutation_in: create }) {\n mutation\n node {\n ...AgencyInvitationFragment\n }\n }\n }\n ${AgencyInvitationFragment}\n`;\nexport const COMPANY_INVITATIONS_SUBSCRIPTION = gql`\n subscription($email: String!) {\n CompanyInvitation(filter: { node: { email: { equals: $email } }, mutation_in: create }) {\n node {\n ...CompanyInvitationFragment\n }\n }\n }\n ${CompanyInvitationFragment}\n`;\nexport const MetaFragment = gql`\n fragment MetaFragment on Meta {\n id\n name\n value\n }\n`;\n\nexport const SESSION_QUERY = gql`\n query FetchSession (\n $id: ID\n $agencyInvitationFilter: AgencyInvitationFilter!\n $companyInvitationFilter: CompanyInvitationFilter!\n ) {\n user(id: $id) {\n ...UserFragment\n userAgencyUserRelation (filter: { agency: { company: { subscriptions: { some: { status: { not_equals: \"${SUBSCRIPTION_STATUS.INCOMPLETE_EXPIRED}\" }}}}}}) {\n count\n items {\n id\n agency {\n ...FragmentAgency\n }\n roles\n }\n }\n userAdminRelation (filter: { company: { subscriptions: { some: { status: { not_equals: \"${SUBSCRIPTION_STATUS.INCOMPLETE_EXPIRED}\" }}}}}) {\n count\n items {\n id\n company {\n ...CompanyFragment\n }\n }\n }\n }\n agencyInvitationsList(filter: $agencyInvitationFilter) {\n count\n items {\n ...AgencyInvitationFragment\n }\n }\n companyInvitationsList(filter: $companyInvitationFilter) {\n count\n items {\n ...CompanyInvitationFragment\n }\n }\n }\n ${UserFragment}\n ${AgencyFragment}\n ${CompanyFragment}\n ${AgencyInvitationFragment}\n ${CompanyInvitationFragment}\n`;\n\nexport const USER_QUERY = gql`\n query User($id: ID) {\n user(id: $id) {\n ...UserFragment\n }\n }\n ${UserFragment}\n`;\n\nexport const UPDATE_USER = gql`\n mutation UpdateUser($data: UserUpdateInput!) {\n userUpdate(data: $data) {\n id\n }\n }\n`;\n\nexport const META_QUERY = gql`\n query Metas($userId: ID) {\n metasList(filter: { user: { id: { equals: $userId } } }) {\n count\n items {\n ...MetaFragment\n }\n }\n }\n ${MetaFragment}\n`;\n\nexport const CREATE_META_MUTATION = gql`\n mutation CreateMeta($data: MetaCreateInput!) {\n metaCreate(data: $data) {\n ...MetaFragment\n }\n }\n ${MetaFragment}\n`;\n\nexport const UPDATE_META_MUTATION = gql`\n mutation UpdateMeta($data: MetaUpdateInput!) {\n metaUpdate(data: $data) {\n ...MetaFragment\n }\n }\n ${MetaFragment}\n`;\n","import { ValidationError } from '../../../shared/errors';\nimport { isValidString, isValidNumber, isValidEmail } from '../../../shared/validators';\n\n/**\n * Validate the user data.\n *\n * @param {object} user info.\n * @returns {Array} If there is an error it adds to the array.\n */\n\nexport const updateUserValidator = (userData) => {\n let errorMessages = [];\n\n if (!isValidString(userData.firstName)) {\n errorMessages.push('The User must have a valid First Name');\n }\n\n if (!isValidString(userData.lastName)) {\n errorMessages.push('The User must have a valid Last Name');\n }\n\n if (!isValidEmail(userData.email)) {\n errorMessages.push('The User must have a valid Email');\n }\n\n if (!isValidString(userData.timezone)) {\n errorMessages.push('The User must have a valid Timezone');\n }\n\n if (userData.cellPhone && userData.cellPhone !== '' && !isValidNumber(userData.cellPhone)) {\n errorMessages.push('The User must have a valid cellphone');\n }\n\n if (errorMessages.length !== 0) throw new ValidationError(errorMessages);\n};\n","import gql from 'graphql-tag';\n\nexport const SYSTEM_SETTINGS_QUERY = gql`\n query systemSettingList {\n systemSettingsList {\n items {\n id\n name\n isEnabled\n value\n }\n }\n }\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnSystemSettings = createEvent({\n initialValue: [],\n});\n\nexport const OnSystemSettingsError = createEvent();\n","import { createAction } from '@cobuildlab/react-simple-state';\nimport { log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../shared/session/session-events';\nimport { SYSTEM_SETTINGS_QUERY } from './system-setting-queries';\nimport { OnSystemSettings, OnSystemSettingsError } from './system-setting-events';\n\nexport const fetchSystemSettings = createAction(\n OnSystemSettings,\n OnSystemSettingsError,\n async () => {\n const client = OnApolloClient.get();\n let response = null;\n\n response = await client.query({\n query: SYSTEM_SETTINGS_QUERY,\n fetchPolicy: 'network-only',\n });\n\n log('fetchSystemSettings', response.data.systemSettingsList.items);\n\n return response.data.systemSettingsList.items;\n },\n);\n","import { log, error } from '@cobuildlab/pure-logger';\nimport { USER_QUERY, SESSION_QUERY, UPDATE_USER } from './queries';\nimport {\n OnSessionError,\n OnSessionFetch,\n OnApolloClient,\n OnInvitationsSkipped,\n OnUserUpdate,\n OnUserUpdateError,\n OnMetaUpdate,\n} from '../../shared/session/session-events';\nimport { META_ONBOARDING_STEP_NAME, META_AGENCY_SELECTED_NAME } from '../../shared/constants/meta';\nimport { sanitize8BaseDocumentUpdate } from '../../shared/utils';\nimport { updateUserValidator } from '../my-account/general/general-validators';\nimport { fetchSystemSettings } from '../system-settings/system-setting-actions';\n\n/**\n * Fetches a User Profile by Id or the logged User if no Id provided.\n *\n * @param {number} id - The user id to fetch, if zero, the currently authenticated user is fetched\n *\n * @returns {Promise} The request result\n */\nexport const fetchUser = async (id = 0) => {\n const client = OnApolloClient.get();\n let response = null;\n\n try {\n if (id === 0) {\n response = await client.query({ query: USER_QUERY, fetchPolicy: 'network-only' });\n } else {\n response = await client.query({\n query: USER_QUERY,\n fetchPolicy: 'network-only',\n variables: { id },\n });\n }\n } catch (e) {\n error('fetchUser', e);\n throw e;\n }\n\n log('fetchUser', response.data.user);\n\n return response.data.user;\n};\n\n/**\n * Update User Profile data.\n *\n * @param {object} userData - The data to update the user\n * @param {boolean} validate - To validate or not the data\n *\n * @returns {Promise} The update user result\n */\nexport const updateUser = async (userData, validate = true) => {\n const client = OnApolloClient.get();\n let response;\n\n if (userData.avatar) {\n sanitize8BaseDocumentUpdate(userData, 'avatar');\n }\n if (validate) {\n try {\n updateUserValidator(userData);\n } catch (e) {\n error('updateUser', e);\n\n return OnUserUpdateError.dispatch(e);\n }\n }\n\n try {\n response = await client.mutate({\n mutation: UPDATE_USER,\n variables: { data: userData },\n });\n } catch (e) {\n error('updateUser', e);\n\n return OnUserUpdateError.dispatch(e);\n }\n\n log('updateUser', response);\n\n OnUserUpdate.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Fetches the logged User Profile.\n *\n * @returns {Promise} The request result\n */\nexport const fetchSession = async () => {\n const client = OnApolloClient.get();\n let user = null;\n let response = null;\n\n try {\n user = await fetchUser();\n } catch (e) {\n error('fetchSession', e);\n\n return OnSessionError.dispatch(e);\n }\n\n try {\n response = await client.query({\n query: SESSION_QUERY,\n fetchPolicy: 'network-only',\n variables: {\n id: user.id,\n agencyInvitationFilter: {\n email: { equals: user.email },\n createdBy: {\n id: {\n not_equals: null,\n },\n },\n },\n companyInvitationFilter: { email: { equals: user.email } },\n },\n });\n } catch (e) {\n error('fetchSession', e);\n\n return OnSessionError.dispatch(e);\n }\n\n log('fetchSession', response.data);\n\n try {\n await fetchSystemSettings();\n } catch (e) {\n error('fetchSystemSettings', e);\n throw e;\n }\n\n OnSessionFetch.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Updates a meta value in the API for the current User.\n *\n * @param {string} name - the name of the meta\n * @param {string} value - the value of the meta\n *\n * @returns {Promise} The request result\n */\nexport const updateMeta = async (name, value) => {\n const client = OnApolloClient.get();\n const { user } = OnSessionFetch.get();\n const data = { id: user.id };\n let response = null;\n\n switch (name) {\n case META_AGENCY_SELECTED_NAME:\n data.selectedAgency = { connect: { id: value } };\n break;\n case META_ONBOARDING_STEP_NAME:\n data.onboardingStep = value;\n break;\n default:\n return user;\n }\n\n try {\n response = await client.mutate({\n mutation: UPDATE_USER,\n variables: { data },\n });\n } catch (e) {\n error('updateMeta', e);\n\n return OnSessionError.dispatch(e);\n }\n\n log('updateMeta', response.data.userUpdate);\n\n OnMetaUpdate.dispatch(response.data);\n\n return response.data.userUpdate;\n};\n\n/**\n * Dispatches invitations skipped event\n *\n * @returns {void}\n */\nexport const skipInvitations = () => {\n return OnInvitationsSkipped.dispatch();\n};\n","export const META_ONBOARDING_STEP_NAME = 'Onboarding Step';\nexport const META_AGENCY_SELECTED_NAME = 'Selected Agency';\n","export const TOAST_SUCCESS_MESSAGE = 'TOAST_SUCCESS_MESSAGE';\n\nexport const CAMPAIGN_TYPES = ['MANUAL', 'WORKFLOW PROCESS', 'UPLOADED LIST', 'FILTERS', 'VENDOR'];\n\nexport const CAMPAIGN_STATUSES = ['NEW', 'FROZEN', 'ACTIVE', 'CLOSED'];\n\nexport const PRIORITIES = ['LOW', 'NORMAL', 'HIGH', 'VERY HIGH'];\n\n/**\n * Constants for the Tasks\n */\nexport const TASKS_INITIAL_STATUS = 'Open';\n\nexport const TASK_STATUS_CLOSED = 'Closed';\n\n/**\n * Constants for the Billing Status To Use the PriorityBadge UI Component\n */\n\nexport const BILLING_HISTORY_STATUS = {\n draft: { value: 3 },\n open: { value: 4 },\n paid: { value: 5 },\n uncollectible: { value: 6 },\n void: { value: 7 },\n};\n\n/**\n * Format for dates realted to dob columns.\n */\nexport const DATE_SCHEMA_FORMATS = ['MM-DD-YYYY', 'MM/DD/YYYY', 'YYYY-MM-DD', 'YYYY/MM/DD'];\n\n/**\n * constants for user roles.\n */\nexport const ADMIN = 'ADMIN';\n\nexport const MANAGER = 'MANAGER';\n\nexport const AGENT = 'AGENT';\n\nexport const AGENCY_ROLES = {\n AGENT: AGENT,\n MANAGER: MANAGER,\n};\n\nexport const PRIORITY_VALUES = {\n LOW: 1,\n NORMAL: 2,\n HIGH: 3,\n VERY_HIGH: 4,\n};\n\nexport const PRIORITY_OPTIONS = [\n { label: 'LOW', value: String(PRIORITY_VALUES.LOW) },\n { label: 'MEDIUM', value: String(PRIORITY_VALUES.NORMAL) },\n { label: 'HIGH', value: String(PRIORITY_VALUES.HIGH) },\n { label: 'VERY HIGH', value: String(PRIORITY_VALUES.VERY_HIGH) },\n];\n\nexport const LEAD_TYPE_AUTO = 'Auto';\n\nexport const LEAD_TYPE_COMMERCIAL_AUTO = 'Commercial Auto';\n\nexport const LEAD_TYPE_HOME = 'Home';\n\nexport const LEAD_TYPE_LIFE = 'Life';\n\nexport const LEAD_TYPE_GENERAL_LIABILITY = 'General Liability';\n\nexport const LEAD_TYPE_WORKERS_COMPENSATION = 'Workers Compensation';\n\nexport const LEAD_TYPE_EMPLOYEE_BENEFITS = 'Employee Benefits';\n\nexport const TYPE_VALUES = {\n LEAD_TYPE_AUTO,\n LEAD_TYPE_COMMERCIAL_AUTO,\n LEAD_TYPE_HOME,\n LEAD_TYPE_LIFE,\n LEAD_TYPE_GENERAL_LIABILITY,\n LEAD_TYPE_WORKERS_COMPENSATION,\n LEAD_TYPE_EMPLOYEE_BENEFITS: 'Employee Benefit',\n};\n\nexport const GENDERS = {\n MALE: 'MALE',\n FEMALE: 'FEMALE',\n OTHER: 'OTHER',\n PREFER_NOT_SAYING: 'PREFER NOT SAYING',\n};\n\nexport const MARITAL_STATUSES = {\n WIDOW: 'WIDOW',\n SINGLE: 'SINGLE',\n MARRIED: 'MARRIED',\n};\n\nexport const MARITAL_STATUSES_OPTIONS = [\n { label: 'Widow', value: MARITAL_STATUSES.WIDOW },\n { label: 'Single', value: MARITAL_STATUSES.SINGLE },\n { label: 'Married', value: MARITAL_STATUSES.MARRIED },\n];\n\n// Default IFS Scores for agencies.\nexport const IFS_SCORES = ['Excellent', 'Good', 'Fair', 'Poor'];\n\nexport const LIST_INITIAL_STATE = {\n items: [],\n count: 0,\n loading: true,\n};\n\nexport const LEAD_CSV_FORMATS = {\n STANDARD: 'STANDARD',\n RICOCHET: 'RICOCHET',\n};\n\nexport const LEAD_CSV_FORMAT_OPTIONS = [\n { label: 'Standard', value: LEAD_CSV_FORMATS.STANDARD },\n { label: 'Ricochet', value: LEAD_CSV_FORMATS.RICOCHET },\n];\n","import { OnSessionFetch } from '../session/session-events';\nimport { updateUser } from '../../modules/auth/auth.actions';\nimport { ADMIN } from '../constants/index';\nimport * as toast from '../components/toast/Toast';\n\n/**\n * Get active agency.\n *\n * @returns {{ id: string }} The agency object\n */\nexport const getActiveAgency = () => {\n const session = OnSessionFetch.get();\n\n if (!session) return null;\n\n const agencies = getUserAgencies();\n const agency = session.user.selectedAgency;\n\n if (agency) return agency;\n\n let agencyId = agency?.id;\n\n if (agencies.length === 0 && !agency) return null;\n\n // Here there is no agency selected, then select the first agency.\n if (agencyId === undefined && agencies.length > 0) {\n agencyId = agencies[0].id;\n setTimeout(() => {\n setActiveAgency(agencyId);\n }, 0);\n }\n\n return agencies.find((agency) => agency.id === agencyId);\n};\n\n/**\n * Set active agency.\n *\n * @param {string} agencyId agency ID\n * @returns {Function} promise\n */\nexport const setActiveAgency = (agencyId) => {\n const session = OnSessionFetch.get();\n const userId = session.user.id;\n return updateUser(\n {\n id: userId,\n selectedAgency: {\n connect: {\n id: agencyId,\n },\n },\n },\n false,\n );\n};\n\n/**\n * Get the agencies of the current user.\n *\n * @returns {Array} agencies\n */\nexport const getUserAgencies = () => {\n const session = OnSessionFetch.get();\n const user = session?.user;\n\n if (!user) return [];\n\n return user.userAgencyUserRelation.items.map((item) => item.agency);\n};\n\n/**\n * Extracts the Role of a User on an Agency, null if it does not have one\n *\n * @param {object} user The User\n * @param {object} agency The selected Agency\n * @returns {Array | null} user roles array\n */\nexport const getRolesOnSelectedAgency = (user, agency) => {\n if (!user || !agency) return null;\n\n const roles = [];\n\n if (user.userAdminRelation.items.length > 0) {\n const companies = user.userAdminRelation.items;\n if (companies.some((c) => c.company.id === agency.company.id)) {\n roles.push(ADMIN);\n }\n }\n\n if (user.userAgencyUserRelation.items.length > 0) {\n const rolesInAgency = user.userAgencyUserRelation.items.find(\n (item) => item.agency.id === agency.id,\n );\n\n if (rolesInAgency) {\n roles.push(...rolesInAgency.roles);\n }\n }\n\n return roles;\n};\n\n/**\n * Returns true if the User has the role or one of the roles\n * in the provided Agency\n *\n * @param {object} user The user\n * @param {object} agency The Agency\n * @param {string|string[]} roles Role name or array or Role names\n *\n * @returns {boolean} if the user has the role or one of the roles in the agency\n */\nexport const userHasAnyRoleInAgency = (user, agency, roles) => {\n const userRoles = getRolesOnSelectedAgency(user, agency);\n\n if (!userRoles) return false;\n\n if (Array.isArray(roles)) {\n return roles.some((role) => userRoles.includes(role));\n }\n\n return userRoles.includes(roles);\n};\n\n/**\n * Validate if the agency selected still belong to the current user.\n *\n * @param {string} agencyId agency ID\n * @param {Array} userAgencies list of user agencies\n * @returns {boolean} the agency belong to the user\n */\nexport const validateUserAgency = (agencyId, userAgencies) => {\n const exists = !!userAgencies.find((userAgency) => userAgency.id === agencyId);\n\n if (!exists) {\n const firstAgency = userAgencies[0];\n\n toast.warn(`\n The selected Agency don't belong to this user.\n ${firstAgency ? `The first agency ${firstAgency.name} will do selected automatically.` : ''}\n `);\n }\n\n return exists;\n};\n\n/**\n * get the user rol of the active agency.\n *\n * @returns {string} the user rol\n */\nexport const getUserAgencyRoles = () => {\n const session = OnSessionFetch.get();\n if (!session) return null;\n\n const roles = [];\n const activeAgency = getActiveAgency();\n if (!activeAgency) return null;\n const isAdmin = session.user.userAdminRelation.items.some(\n (item) => item.company.id === activeAgency.company.id,\n );\n\n if (isAdmin) roles.push(ADMIN);\n\n const agencyUser = session.user.userAgencyUserRelation.items.find(\n (item) => item.agency.id === activeAgency.id,\n );\n\n if (agencyUser) {\n roles.push(...agencyUser.roles);\n }\n\n return roles;\n};\n\n/**\n * Gets the roles of a user in an agency\n *\n * @param {object} user - The user to get the roles frmo\n *\n * @returns {Array} The list of roles\n */\nexport const getUserRolesInAgency = (user) => {\n if (!user) {\n return [];\n }\n\n const roles = [];\n const agency = user.selectedAgency.id;\n const company = user.selectedAgency.company.id;\n\n const isAdmin = user.userAdminRelation.items.some((item) => item.company.id === company);\n\n if (isAdmin) roles.push(ADMIN);\n\n const [userAgency] = user.userAgencyUserRelation.items.filter(\n (item) => item.agency.id === agency,\n );\n\n if (userAgency) {\n roles.push(...userAgency.roles);\n }\n\n return roles;\n};\n","import React, { useState, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { Avatar, Grid, Row, Dropdown, Switch as Switch8b } from '@8base/boost';\nimport { Link } from 'react-router-dom';\nimport { withApollo } from '@apollo/client/react/hoc';\nimport { withAuth } from '@8base/react-sdk';\nimport { compose } from 'recompose';\nimport { Status, StatusText, StatusCircle } from '../UserStatus';\nimport Loader from '../ui/Loader';\nimport {\n createUserStatus,\n fetchUserStatuses,\n} from '../../../modules/user-status/user-status-actions';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { onErrorMixinFC } from '../../mixins';\nimport { getUserAgencyRoles } from '../../utils/agency-utils'; // eslint-disable-line import/namespace, import/named\nimport { ADMIN, MANAGER } from '../../constants';\nimport chevron from '../../assets/images/chevron.svg';\nimport { OnUserStatusError } from 'modules/user-status/user-status-events';\n\nconst Dialog = styled.div`\n position: absolute;\n top: 70px;\n right: 25px;\n background-color: white;\n border-radius: 5px;\n box-sizing: border-box;\n border: 1px solid #d0d7dd;\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.04);\n z-index: 1000;\n`;\n\nconst Header = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n border-bottom: 1px solid #d0d7dd;\n padding: 16px;\n`;\n\nconst Body = styled.div`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n border-bottom: 1px solid #d0d7dd;\n padding: 12px 16px;\n cursor: pointer;\n background: #efefef;\n`;\n\nconst Footer = styled.div`\n padding: 16px;\n display: flex;\n flex-direction: column;\n text-align: left;\n justify-content: flex-start;\n align-items: flex-start;\n`;\n\nconst Button = styled.button`\n cursor: pointer;\n font-size: 12px;\n background: none;\n`;\n\nconst Name = styled.p`\n font-weight: bold;\n font-size: 12px;\n`;\n\nconst Email = styled.p`\n color: var(--color-primary);\n font-size: 12px;\n`;\n\nconst JobTitle = styled.p`\n color: #9b9b9b;\n font-size: 12px;\n`;\n\nconst StyledLink = styled(Link)`\n font-size: 12px;\n text-decoration: none;\n color: #000;\n margin-bottom: 8px;\n`;\n\nconst StatusLabel = styled.p`\n color: #323c47;\n font-size: 12px;\n letter-spacing: 1px;\n line-height: 27px;\n font-weight: 600;\n width: 50%;\n text-transform: uppercase;\n`;\n\nconst DropDownContainer = styled.div`\n width: 50%;\n`;\n\nconst HeadDropdown = styled.div`\n cursor: pointer;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n position: relative;\n height: 36px;\n`;\n\nconst Chevron = styled.img`\n transform: rotate(${(props) => props.rotate});\n margin-left: 10px;\n position: absolute;\n right: ${({ right }) => right};\n top: 12px;\n width: 8px;\n height: 12px;\n`;\n\nconst OptionContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n cursor: pointer;\n border-radius: 4px;\n padding: 11px 0px;\n\n &:hover {\n background-color: rgb(244, 247, 249);\n }\n`;\n\nconst Switch = styled(Switch8b)`\n width: 100%;\n justify-content: space-between;\n`;\nconst DropdownOption = ({ text, isBusy, color }) => (\n \n \n {text}\n \n);\n\nDropdownOption.propTypes = {\n isBusy: PropTypes.bool,\n text: PropTypes.string.isRequired,\n color: PropTypes.string.isRequired,\n};\n\nDropdownOption.defaultProps = {\n isBusy: false,\n};\n\nconst OnCallOption = () => (\n \n);\nconst AwayOption = () => ;\nconst ActiveOption = () => ;\nconst WithClientOption = () => (\n \n);\nconst WrappingCallOption = () => (\n \n);\n\nconst statusOptions = [\n {\n value: 'ON A CALL',\n Component: OnCallOption,\n },\n {\n value: 'AWAY',\n Component: AwayOption,\n },\n {\n value: 'ACTIVE',\n Component: ActiveOption,\n },\n {\n value: 'WITH CLIENT',\n Component: WithClientOption,\n },\n {\n value: 'WRAPPING ON A CALL',\n Component: WrappingCallOption,\n },\n];\n\nconst DialogProfile = ({\n user,\n status,\n isOpen,\n activeAgency,\n client,\n auth,\n onOutsideClick,\n callsState,\n callsAction,\n showSwitch,\n}) => {\n const [isStatusOpen, setStatusOpen] = useState(false);\n const dialogRef = useRef(null);\n\n const handleOnChangeStatus = (name, isActive) => {\n if (isActive) return;\n\n createUserStatus({\n status: name.toUpperCase(),\n user: user.id,\n });\n\n setStatusOpen(false);\n };\n\n const userAgencyRoles = getUserAgencyRoles();\n\n useEffect(() => {\n if (user && status === '') {\n fetchUserStatuses(user.id);\n }\n }, [user, status]);\n\n /**\n * Effect for closing dropdown when\n * user clicks outside of the dropdown itself\n */\n useEffect(() => {\n const handleClick = (event) => {\n if (dialogRef.current && !dialogRef.current.contains(event.target)) {\n onOutsideClick();\n }\n };\n\n document.addEventListener('mousedown', handleClick, false);\n\n return () => document.removeEventListener('mousedown', handleClick, false);\n }, [onOutsideClick]);\n\n const handleLogout = async () => {\n await client.clearStore();\n localStorage.clear();\n auth.authClient.logout();\n };\n\n useEventSubscription(OnUserStatusError, onErrorMixinFC);\n\n const option = statusOptions.find((option) => option.value === status);\n const Head = option ? option.Component : null;\n\n return (\n <>\n {isOpen ? (\n \n {user ? (\n <>\n \n \n \n \n \n \n <>\n \n {user.firstName} {user.lastName}\n \n {userAgencyRoles.includes(ADMIN) ? (\n <>\n Admin\n {user.userAdminRelation.items[0].company.name}\n >\n ) : (\n <>\n \n {userAgencyRoles.includes(MANAGER) ? 'Manager' : 'Agent'}\n \n {activeAgency && {activeAgency.company.name}}\n >\n )}\n {user.email}\n >\n \n \n \n setStatusOpen(!isStatusOpen)}>\n CHANGE STATUS\n \n \n \n <>\n setStatusOpen(!isStatusOpen)}>\n {status !== '' ? : Select an status}\n \n \n >\n \n \n {statusOptions.map((option, i) => (\n \n handleOnChangeStatus(option.value, option.value === status)\n }>\n \n \n ))}\n \n \n \n \n \n >\n ) : (\n \n )}\n \n ) : null}\n >\n );\n};\n\nDialogProfile.propTypes = {\n activeAgency: PropTypes.object,\n user: PropTypes.object.isRequired,\n status: PropTypes.string.isRequired,\n isOpen: PropTypes.bool.isRequired,\n client: PropTypes.object.isRequired,\n auth: PropTypes.object.isRequired,\n onOutsideClick: PropTypes.func.isRequired,\n callsAction: PropTypes.func.isRequired,\n callsState: PropTypes.bool.isRequired,\n showSwitch: PropTypes.bool,\n};\n\nDialogProfile.defaultProps = {\n activeAgency: null,\n showSwitch: false,\n};\n\nexport default compose(withApollo, withAuth)(DialogProfile);\n","/**\n * Returns the appropiate color for the given status\n *\n * @param {string} status - The user's status\n *\n * @returns {string} The corresponding color\n */\nexport const getColorFromStatus = (status) => {\n switch (status) {\n case 'ON A CALL':\n return '#FF0000';\n case 'AWAY':\n return '#1E4358';\n case 'ACTIVE':\n return '#3DB4AA';\n case 'WITH CLIENT':\n return '#4993EA';\n case 'WRAPPING ON A CALL':\n return '#F6C01E';\n default:\n return '#3DB4AA';\n }\n};\n\n/**\n * create filters for user statuses query.\n *\n * @param {object} filterData createdAt and user filters.\n * @returns {object} graphql filter object.\n */\nexport const createFilter = (filterData) => {\n return {\n ...(filterData && {\n AND: [\n ...(filterData.user && filterData.user !== ''\n ? [\n {\n user: { id: { equals: filterData.user } },\n },\n ]\n : []),\n ],\n }),\n };\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Avatar } from '@8base/boost';\nimport { StatusCircle } from './UserStatus';\nimport { getColorFromStatus } from '../../modules/user-status/user-status-utils';\nimport PropTypes from 'prop-types';\n\nconst AvatarWithStatusWrap = styled.div`\n position: relative;\n`;\n\nconst AvatarStatus = styled.div`\n position: absolute;\n right: -10px;\n bottom: -5px;\n`;\n\nconst AvatarWithStatus = ({ status, ...props }) => {\n return (\n \n \n {status !== '' && (\n \n \n \n )}\n \n );\n};\nAvatarWithStatus.propTypes = {\n status: PropTypes.string.isRequired,\n};\nexport default AvatarWithStatus;\n","import { useState } from 'react';\nimport { getActiveAgency } from '../utils/agency-utils';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnSessionFetch } from '../session/session-events';\n\n/**\n * @typedef {object} phoneCallSettings\n * @property {string} id\n * @property {boolean} automaticCalls\n * @property {boolean} recordCalls\n * @property {object} agency\n * @property {string} agency.name\n * @property {string} agency.id\n *\n */\n/**\n * @typedef {object} Company\n * @property {string} id\n * @property {string} name\n *\n */\n/**\n * @typedef {object} Agency\n * @property {string} id\n * @property {string} name\n * @property {Company} company\n * @property {phoneCallSettings} phoneCallSettings\n *\n */\n/**\n * @returns {Agency} Agency object\n */\nexport function useAgency () {\n const [agency, setAgency] = useState(() => getActiveAgency());\n\n useSubscription(OnSessionFetch, ({ user: { selectedAgency } }) => {\n setAgency(selectedAgency);\n }, []);\n \n return agency;\n}\n","import { OnSessionFetch } from '../session/session-events';\nimport { SUBSCRIPTION_STATUS } from '@cobuildlab/lead-volt-share';\n\n/**\n * Return the companies in which the user is an admin\n *\n * @returns {Array} The array of companies\n */\nexport function getAdminCompanies() {\n const { user } = OnSessionFetch.get();\n\n return user.userAdminRelation.items.map((relation) => relation.company);\n}\n\n/**\n * Checks if the specified agency belongs to a company\n * with a paid subscription\n *\n * @param {object} agency - The agency to check\n *\n * @returns {boolean} True if the company is paid\n */\nexport function isCompanyAvailable(agency) {\n const [subscription] = agency.company.subscriptions.items;\n\n return (\n subscription.status !== SUBSCRIPTION_STATUS.UNPAID &&\n subscription.status !== SUBSCRIPTION_STATUS.CANCELED &&\n subscription.status !== SUBSCRIPTION_STATUS.INCOMPLETE\n );\n}\n\n/**\n * Checks if the specified agency belongs to a company\n * with a paid subscription\n *\n * @param {string} agencyId - The agency id to check\n *\n * @returns {boolean} True if the company is paid\n */\nexport function isCompanyAvailableFromAgencyId(agencyId) {\n if (!agencyId) return false;\n\n const { user } = OnSessionFetch.get();\n\n const { agency } = user.userAgencyUserRelation.items.find(({ agency: a }) => a.id === agencyId);\n\n if (!agency) return false;\n\n const [subscription] = agency.company.subscriptions.items;\n\n return (\n subscription.status !== SUBSCRIPTION_STATUS.UNPAID &&\n subscription.status !== SUBSCRIPTION_STATUS.CANCELED &&\n subscription.status !== SUBSCRIPTION_STATUS.INCOMPLETE\n );\n}\n\n/**\n * Checks if the currently authenticated user is an admin\n * in the specified company\n *\n * @param {object} company - The company object\n *\n * @returns {boolean} - If the user is admin in the company or not\n */\nexport function isAdminInCompany(company) {\n if (!company) return false;\n\n const { user } = OnSessionFetch.get();\n\n return user.userAdminRelation.items.some(({ company: c }) => c.id === company.id);\n}\n","import gql from 'graphql-tag';\n\nexport const CREATE_PHONE_CALL = gql`\n mutation CreatePhoneCall($to: String!, $from: ID!, $userId: ID!, $agencyId: ID!) {\n phoneCallCreate(\n data: {\n to: $to\n from: { connect: { id: $from } }\n user: { connect: { id: $userId } }\n agency: { connect: { id: $agencyId } }\n }\n ) {\n id\n to\n from {\n id\n number {\n code\n number\n }\n }\n }\n }\n`;\n\nexport const CREATE_PHONE_CALL_WITH_LEAD = gql`\n mutation CreateLeadPhoneCall(\n $to: String!\n $from: ID!\n $userId: ID!\n $leadId: ID!\n $agencyId: ID!\n ) {\n __typename\n phoneCallCreate(\n data: {\n to: $to\n from: { connect: { id: $from } }\n user: { connect: { id: $userId } }\n lead: { connect: { id: $leadId } }\n agency: { connect: { id: $agencyId } }\n }\n ) {\n id\n to\n from {\n id\n number {\n code\n number\n }\n }\n lead {\n id\n firstName\n lastName\n }\n }\n }\n`;\n\nexport const UPDATE_PHONE_CALL = gql`\n mutation phoneCallUpdate($data: PhoneCallUpdateInput!, $filter: PhoneCallKeyFilter) {\n __typename\n phoneCallUpdate(data: $data, filter: $filter) {\n id\n status\n }\n }\n`;\nexport const UPDATE_INBOUND_PHONE_CALL = gql`\n mutation UpdateInboundPhoneCall($data: InboundPhoneCallUpdateInput!) {\n inboundPhoneCallUpdate(data: $data) {\n id\n }\n }\n`;\n\nexport const QUERY_LEADS_PHONES = gql`\n query leadPhonesQuery($agency: ID!, $skip: Int, $first: Int) {\n leadsList(\n filter: { campaign: { agency: { id: { equals: $agency } } } }\n skip: $skip\n first: $first\n sort: { firstName: ASC }\n ) {\n count\n items {\n leadLeadPhoneNumberRelation {\n items {\n id\n phone {\n code\n number\n }\n }\n }\n phones {\n code\n number\n }\n firstName\n lastName\n id\n }\n }\n }\n`;\n\nexport const QUERY_LEAD_STAGES = gql`\n query leadStages {\n leadStagesList {\n items {\n id\n name\n }\n }\n }\n`;\nexport const QUERY_SCORES = gql`\n query ifsScoresList {\n ifsScoresList {\n items {\n name\n id\n }\n }\n }\n`;\nexport const CREATE_LEAD_DISPOSITION = gql`\n mutation leadDispositionCreate(\n $data: LeadDispositionCreateInput!\n $stage: ID!\n $lead: ID!\n $amount: BigInt\n ) {\n leadDispositionCreate(data: $data) {\n id\n }\n leadUpdate(\n filter: { id: $lead }\n data: { stage: { connect: { id: $stage } }, amount: $amount }\n ) {\n id\n }\n }\n`;\nexport const INBOUND_PHONE_CALLS_LIST = gql`\n query FetchInboundPhoneCalls(\n $first: Int\n $skip: Int\n $filter: InboundPhoneCallFilter!\n $sort: [InboundPhoneCallSort!]\n ) {\n inboundPhoneCallsList(first: $first, skip: $skip, filter: $filter, sort: $sort) {\n items {\n id\n from\n to {\n number {\n code\n number\n }\n }\n user {\n firstName\n lastName\n }\n rejectedBy {\n firstName\n lastName\n }\n createdAt\n }\n }\n }\n`;\nexport const PHONE_CALLS_LIST = gql`\n query FetchOutboundPhoneCalls(\n $first: Int\n $skip: Int\n $filter: PhoneCallFilter!\n $sort: [PhoneCallSort!]\n ) {\n phoneCallsList(first: $first, skip: $skip, filter: $filter, sort: $sort) {\n count\n items {\n id\n from {\n number {\n code\n number\n }\n }\n to\n lead {\n firstName\n lastName\n }\n createdBy {\n firstName\n lastName\n }\n createdAt\n phoneCallDispositionRelation {\n carrier\n currentPremium\n quotedPremium\n status {\n name\n }\n expirationDate\n insurance\n notes\n ifsScore\n createdBy {\n id\n firstName\n lastName\n email\n }\n createdAt\n }\n }\n }\n }\n`;\n\nexport const PHONE_NUMBERS_QUERY = gql`\n query FetchAgencyPhones(\n $filter: PhoneNumberFilter\n $skip: Int\n $first: Int\n $orderBy: [PhoneNumberOrderBy]\n ) {\n phoneNumbersList(filter: $filter, skip: $skip, first: $first, orderBy: $orderBy) {\n items {\n id\n number {\n code\n number\n }\n }\n }\n }\n`;\n\nexport const LEAD_DATA_QUERY = gql`\n query FetchLeadData($id: ID!) {\n lead(id: $id) {\n id\n amount\n stage {\n id\n name\n }\n }\n }\n`;\n\nexport const TRANSFER_CALL_MUTATION = gql`\n mutation TransferPhoneCall(\n $users: [ID]!\n $phones: [SmartPhoneInput]!\n $call: ID!\n $callType: CallType!\n ) {\n transferCall(users: $users, phones: $phones, call: $call, callType: $callType) {\n success\n }\n }\n`;\n\nexport const PHONE_CALL_PARTICIPANT_SUBSCRIPTION = gql`\n subscription phoneCallParticipantSubscription($userId: ID) {\n PhoneCallParticipant(\n filter: { node: { user: { id: { equals: $userId } } }, mutation_in: update }\n ) {\n node {\n wasRemovedFromCall\n }\n }\n }\n`;\n\nexport const FETCH_PHONE_CALL_PARTICIPANT = gql`\n query FetchPhoneCallParticipant($id: ID, $callSid: String) {\n phoneCallParticipant(id: $id, callSid: $callSid) {\n id\n callSid\n inboundCall {\n id\n from\n to {\n id\n number {\n code\n number\n }\n }\n lead {\n id\n firstName\n lastName\n }\n agency {\n id\n name\n }\n }\n outboundCall {\n id\n from {\n id\n number {\n code\n number\n }\n }\n to\n lead {\n id\n firstName\n lastName\n }\n agency {\n id\n name\n }\n }\n }\n }\n`;\n\nexport const FETCH_LEAD_CALL_CADENCE_AND_AGENCY = gql`\n query FetchLeadCallCadenceAndAgency($id: ID) {\n lead(id: $id) {\n id\n callCadence {\n id\n day1\n day2To7\n day8To30\n day31To89\n createdAt\n lastCalled\n }\n campaign {\n agency {\n twilioSID\n }\n }\n }\n }\n`;\n\nexport const FETCH_CALL_INFO = gql`\n query FetchCallInfo($callSid: String!, $subAccountSid: String!) {\n fetchCallInfo(callSid: $callSid, subAccountSid: $subAccountSid) {\n result {\n startTime\n }\n }\n }\n`;\n\nexport const CREATE_LEAD_CALL_CADENCE = gql`\n mutation CreateLeadCallCadence($data: LeadCallCadenceCreateInput!) {\n leadCallCadenceCreate(data: $data) {\n id\n lead {\n id\n firstName\n lastName\n phones {\n code\n number\n }\n leadLeadPhoneNumberRelation {\n items {\n parsedPhone {\n code\n number\n }\n }\n }\n }\n }\n }\n`;\n\nexport const UPDATE_LEAD_CALL_CADENCE = gql`\n mutation UpdateLeadCallCadence(\n $filter: LeadCallCadenceKeyFilter\n $data: LeadCallCadenceUpdateInput!\n $force: Boolean\n ) {\n leadCallCadenceUpdate(filter: $filter, data: $data, force: $force) {\n id\n lead {\n id\n firstName\n lastName\n phones {\n code\n number\n }\n leadLeadPhoneNumberRelation {\n items {\n parsedPhone {\n code\n number\n }\n }\n }\n }\n }\n }\n`;\n","const Device = require('twilio-client').Device;\n\nexport const TwilioDevice = new Device();\n","// Phone call status types defined in database model\nexport const PHONE_CALL_STATUS = {\n queued: 'queued',\n initiated: 'initiated',\n ringing: 'ringing',\n inProgress: 'in-progress',\n completed: 'completed',\n busy: 'busy',\n noAnswer: 'no-answer',\n canceled: 'canceled',\n failed: 'failed',\n closed: 'closed',\n};\n\nexport const CALL_TYPES = {\n OUTBOUND: 'OUTBOUND',\n INBOUND: 'INBOUND',\n INCOMING: 'INCOMING',\n};\n\n// Default state for the call controls component\nexport const callControlsDefaultState = {\n show: false,\n connection: null,\n callId: '',\n lead: null,\n status: PHONE_CALL_STATUS.ringing,\n from: '',\n to: '',\n _type: CALL_TYPES.OUTBOUND,\n type: CALL_TYPES.OUTBOUND,\n ringing: false,\n duration: 0,\n interval: null,\n phoneNumber: '',\n calling: false,\n inboundCallPreview: false,\n campaign: '',\n loading: false,\n};\n\nexport const dialerWidth = 300;\n\nexport const TWILIO_CONFIG = {\n // Set Opus as our preferred codec. Opus generally performs better, requiring less bandwidth and\n // providing better audio quality in restrained network conditions. Opus will be default in 2.0.\n codecPreferences: ['opus', 'pcmu'],\n // Use fake DTMF tones client-side. Real tones are still sent to the other end of the call,\n // but the client-side DTMF tones are fake. This prevents the local mic capturing the DTMF tone\n // a second time and sending the tone twice. This will be default in 2.0.\n fakeLocalDTMF: true,\n // Use `enableRingingState` to enable the device to emit the `ringing`\n // state. The TwiML backend also needs to have the attribute\n // `answerOnBridge` also set to true in the `Dial` verb. This option\n // changes the behavior of the SDK to consider a call `ringing` starting\n // from the connection to the TwiML backend to when the recipient of\n // the `Dial` verb answers.\n enableRingingState: true,\n};\n\nexport const DEVICE_STATUSES = {\n ready: 'ready',\n offline: 'offline',\n};\nexport const DEVICE_EVENTS = {\n connect: 'connect',\n disconnect: 'disconnect',\n offline: 'offline',\n ready: 'ready',\n error: 'error',\n incoming: 'incoming',\n reject: 'reject',\n accept: 'accept',\n cancel: 'cancel',\n warning: 'warning',\n};\n\nexport const TWILIO_ERROR_CODES = [31009, 31000, 31005, 31204, 31205, 31001, 31002];\n\nexport const AUTOMATIC_CALLS_STATUSES = {\n ON: 'on',\n ON_AND_REQUESTING: 'onAndRequesting',\n ON_AND_IN_A_CALL: 'onAndInACall',\n};\n\nexport const FILTER_DATA = {\n dateStart: '',\n dateEnd: '',\n aceptedBy: '',\n rejectedBy: '',\n sort: '',\n};\n\nexport const SORT_OPTIONS = [\n { label: 'Date: Newest First', value: 'newest' },\n { label: 'Date: Oldest First', value: 'oldest' },\n];\n\nexport const FILTER_CATEGORIES_SHARE = {\n dateStart: {\n title: 'Date Start',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'dateStart',\n },\n dateEnd: {\n title: 'Date End',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'dateEnd',\n },\n};\nexport const FILTER_CATEGORIES_OUTBOUND = {\n ...FILTER_CATEGORIES_SHARE,\n assignedTo: {\n title: 'Assigned to',\n placeholher: 'Select',\n identifier: 'assignedTo',\n options: [],\n },\n};\nexport const FILTER_CATEGORIES_INBOUND = {\n ...FILTER_CATEGORIES_SHARE,\n aceptedBy: {\n title: 'Acepted By',\n placeholher: 'Select',\n identifier: 'aceptedBy',\n options: [],\n },\n rejectedBy: {\n title: 'Rejected By',\n placeholher: 'Select',\n identifier: 'rejectedBy',\n options: [],\n },\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const onLeadDispositionCreate = createEvent();\nexport const onLeadDispositionCreateError = createEvent();\n\nexport const onPhoneNumberList = createEvent();\nexport const onVoiseMailMessageList = createEvent();\nexport const onVoiseMailMessageListError = createEvent();\n\nexport const onTransferCall = createEvent();\nexport const onTransferCallError = createEvent();\n\nexport const onOnlineUsersList = createEvent();\n\nexport const OnFetchCallParticipant = createEvent();\n\nexport const OnFetchCallParticipantError = createEvent();\n\nexport const OnDeletePhoneCallRecordingEvent = createEvent();\n\nexport const OnDeletePhoneCallRecordingError = createEvent();\n\nexport const OnFetchPhoneCallRecordingsEvent = createEvent();\n\nexport const OnFetchPhoneCallRecordingsError = createEvent();\n\nexport const OnFetchInboundCallsEvent = createEvent();\n\nexport const OnFetchInboundCallsError = createEvent();\n\nexport const OnFetchOutboundCallsEvent = createEvent();\n\nexport const OnFetchOutboundCallsError = createEvent();\n\nexport const OnFetchTwilioTokeError = createEvent();\n\nexport const OnPhoneCallRegistryEvent = createEvent();\n\nexport const OnPhoneCallRegistryError = createEvent();\n\nexport const OnLeadPhonesListEvent = createEvent();\n\nexport const OnLeadPhonesListError = createEvent();\n\nexport const OnLeadStagesListEvent = createEvent();\n\nexport const OnLeadStagesListError = createEvent();\n\nexport const OnCallStartEvent = createEvent();\n\nexport const OnCallStartError = createEvent();\n\nexport const OnPhoneCallFinishedEvent = createEvent();\n\nexport const OnFetchLeadCallCadenceEvent = createEvent();\nexport const OnFetchLeadCallCadenceError = createEvent();\n\nexport const OnCreateLeadCallCadenceEvent = createEvent();\nexport const OnCreateLeadCallCadenceError = createEvent();\n\nexport const OnUpdateLeadCallCadenceEvent = createEvent();\nexport const OnUpdateLeadCallCadenceError = createEvent();\n\nexport const OnFetchCallInfoEvent = createEvent();\nexport const OnFetchCallInfoError = createEvent();\n","/**\n * Checks if an object has attributes.\n *\n * @param {object} obj - Object tu eval.\n *\n * @returns {boolean} True if object has no keys.\n */\nexport const emptyObject = (obj) => !Object.keys(obj).length > 0;\n\n/**\n * Checks an error object.\n *\n * @param {object} errors - Object of erros types objects.\n *\n * @returns {boolean} Return a bollean indicating if the object has errors.\n */\nexport const hasErrors = (errors) => {\n return Object.keys(errors).reduce((prev, current) => {\n if (prev) {\n return true;\n }\n return !emptyObject(errors[current]);\n }, false);\n};\n\n/**\n * Returns the authenticated user token.\n *\n * @returns {string} User bearer token.\n */\nexport function getUserToken() {\n const { token } = JSON.parse(localStorage.auth);\n return token;\n}\n\n/**\n * Returns a random number.\n *\n * @param {number} min - Min number.\n * @param {number} max - Max number.\n * @param {boolean} shouldRound - Max number.\n *\n * @returns {string} Random number.\n */\nexport function getRandomNumber(min, max, shouldRound = true) {\n if (typeof min !== 'number' || typeof max !== 'number') {\n const error = { message: 'Invalid params types' };\n throw error;\n }\n const random = (max - min) * Math.random() + min;\n\n return shouldRound ? Math.round(random) : random;\n}\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../shared/session/session-events';\nimport {\n CREATE_PHONE_CALL,\n CREATE_PHONE_CALL_WITH_LEAD,\n QUERY_LEADS_PHONES,\n QUERY_LEAD_STAGES,\n CREATE_LEAD_DISPOSITION,\n PHONE_CALLS_LIST,\n PHONE_NUMBERS_QUERY,\n INBOUND_PHONE_CALLS_LIST,\n LEAD_DATA_QUERY,\n TRANSFER_CALL_MUTATION,\n FETCH_PHONE_CALL_PARTICIPANT,\n FETCH_LEAD_CALL_CADENCE_AND_AGENCY,\n CREATE_LEAD_CALL_CADENCE,\n UPDATE_LEAD_CALL_CADENCE,\n FETCH_CALL_INFO,\n} from './phone-calls-querys';\nimport { TwilioDevice } from './twilio';\nimport { CALL_TYPES, TWILIO_CONFIG } from './phone-calls-model';\nimport {\n onLeadDispositionCreate,\n onTransferCall,\n onTransferCallError,\n OnFetchCallParticipant,\n OnFetchCallParticipantError,\n OnFetchInboundCallsEvent,\n OnFetchInboundCallsError,\n OnFetchOutboundCallsError,\n OnFetchOutboundCallsEvent,\n onLeadDispositionCreateError,\n OnFetchTwilioTokeError,\n OnPhoneCallRegistryEvent,\n OnPhoneCallRegistryError,\n OnLeadPhonesListEvent,\n OnLeadPhonesListError,\n OnLeadStagesListEvent,\n OnLeadStagesListError,\n OnFetchLeadCallCadenceEvent,\n OnFetchLeadCallCadenceError,\n OnCreateLeadCallCadenceEvent,\n OnCreateLeadCallCadenceError,\n OnUpdateLeadCallCadenceError,\n OnUpdateLeadCallCadenceEvent,\n OnFetchCallInfoError,\n OnFetchCallInfoEvent,\n} from './phone-calls-events';\nimport { SUBSCRIPTION_STATUS } from '@cobuildlab/lead-volt-share';\nimport * as R from 'ramda';\nimport { getUserToken } from '../../shared/helpers';\nimport moment from 'moment';\nimport { createAction } from '@cobuildlab/react-simple-state';\n\nconst { ACTIVE } = SUBSCRIPTION_STATUS;\n\n/**\n * Method to dispatch CALLER_MOUNTED_EVENT when a phone call component gets render\n * this makes the phone call provider initialize the twilio client\n */\nexport const callerMounted = () => {\n console.log('caller mounted');\n OnFetchTwilioTokeError.dispatch(true);\n};\n\n/**\n *\n * @typedef {object} createVariables\n * @property {string} userId id of the current user who make the call and update the state\n * @property {string} to phone number of who gets called\n * @property {string} from phone number from where the call is made\n */\n/**\n * @param {createVariables} data Variables for the mutation\n * @param {string} lead Lead id for create a conection\n */\nexport const createPhoneCallRegistry = async (data, lead) => {\n const client = OnApolloClient.get();\n try {\n const mutation = lead ? CREATE_PHONE_CALL_WITH_LEAD : CREATE_PHONE_CALL;\n const variables = lead ? { ...data, leadId: lead } : { ...data };\n\n const response = await client.mutate({\n mutation,\n variables,\n });\n OnPhoneCallRegistryEvent.dispatch(response.data);\n return response.data;\n } catch (e) {\n return OnPhoneCallRegistryError.dispatch(e);\n }\n};\n\n/**\n * @param {string} leadId - Lead id to get call cadence info.\n * @returns {Promise} Lead information.\n */\nexport async function fetchLeadCallCadenceAndAgency(leadId) {\n const client = OnApolloClient.get();\n const variables = { id: leadId };\n try {\n const resp = await client.query({\n fetchPolicy: 'network-only',\n query: FETCH_LEAD_CALL_CADENCE_AND_AGENCY,\n variables,\n });\n\n if (resp.data.lead) {\n OnFetchLeadCallCadenceEvent.dispatch(resp.data.lead);\n return resp.data.lead;\n }\n\n return null;\n } catch (err) {\n return OnFetchLeadCallCadenceError.dispatch(err);\n }\n}\n\n/**\n *\n * @param {string} callSid - The id of the twilio call.\n * @param {string} twilioSubAccountSid - The id of the twilio subaccount for the agency.\n * @returns {Promise} Twilio call information.\n */\nexport async function fetchCallInfo(callSid, twilioSubAccountSid) {\n const client = OnApolloClient.get();\n const variables = { callSid, subAccountSid: twilioSubAccountSid };\n\n try {\n const resp = await client.query({\n fetchPolicy: 'network-only',\n query: FETCH_CALL_INFO,\n variables,\n });\n OnFetchCallInfoEvent.dispatch(resp.data.fetchCallInfo.result);\n return resp.data.fetchCallInfo.result;\n } catch (error) {\n return OnFetchCallInfoError.dispatch(error);\n }\n}\n\n/**\n * @param {object} data - Parameters for creating the lead call cadence.\n * @param {number} data.day1 - The day number in the cadence sequence.\n * @param {string} data.lastCalled - ISO timestamp indicating when the lead was last called.\n * @param {object} data.lead - The lead information to associate with the cadence.\n * @param {object} data.lead.connect - Connection details for the lead.\n * @param {string} data.lead.connect.id - The unique identifier of the lead.\n *\n * @returns {Promise} Resolves when the cadence record is successfully created.\n */\nexport async function createLeadCallCadence(data) {\n const client = OnApolloClient.get();\n const variables = { data };\n\n try {\n const resp = await client.query({\n fetchPolicy: 'network-only',\n query: CREATE_LEAD_CALL_CADENCE,\n variables,\n });\n\n OnCreateLeadCallCadenceEvent.dispatch(resp.data);\n return resp.data;\n } catch (err) {\n return OnCreateLeadCallCadenceError.dispatch(err);\n }\n}\n\n/**\n * Updates the call cadence record for a lead by modifying specific fields,\n * such as the interval count and the timestamp of the last call.\n *\n * @param {string} callCadenceId - The unique identifier of the lead's call cadence record.\n * @param {object} data - The fields to update in the call cadence record.\n * @param {number} data.interval - The updated count for the specified interval.\n * @param {string} data.lastCalled - ISO timestamp indicating the new \"last called\" time.\n *\n * @returns {Promise} Resolves when the cadence record is successfully updated.\n */\nexport async function updateLeadCallCadence(callCadenceId, data) {\n const client = OnApolloClient.get();\n const variables = {\n filter: { id: callCadenceId },\n data,\n };\n\n try {\n const resp = await client.query({\n fetchPolicy: 'network-only',\n query: UPDATE_LEAD_CALL_CADENCE,\n variables,\n });\n OnUpdateLeadCallCadenceEvent.dispatch(resp.data);\n return resp.data;\n } catch (err) {\n return OnUpdateLeadCallCadenceError.dispatch(error);\n }\n}\n\nexport const fetchLeadPhoneList = async (agency, page = 1, limit = 10) => {\n const client = OnApolloClient.get();\n const skip = (page - 1) * limit;\n const variables = { agency, skip, first: limit };\n\n try {\n const response = await client.query({\n fetchPolicy: 'network-only',\n query: QUERY_LEADS_PHONES,\n variables,\n });\n\n OnLeadPhonesListEvent.dispatch(response.data);\n return response.data;\n } catch (e) {\n return OnLeadPhonesListError.dispatch(e);\n }\n};\n\nlet shouldFetchToken = false;\n/**\n * @param {string} user If is a refetch token action\n * @param {string} agency If is a refetch token action\n * @param {boolean} refetch If is a refetch token action\n */\nexport async function initializeTwilioClient(user, agency, refetch = false) {\n if (shouldFetchToken && !refetch) {\n return;\n }\n\n shouldFetchToken = true;\n\n try {\n const response = await fetch(\n `${process.env.REACT_APP_WORKSPACE_ENDPOINT}/webhook/twilioPhoneCallsToken?agency=${agency}&user=${user}`,\n {\n headers: {\n Authorization: `Bearer ${getUserToken()}`,\n },\n },\n );\n\n const { token } = await response.json();\n\n let twiliodev = TwilioDevice.setup(token, TWILIO_CONFIG);\n console.log('TWILIO DEVICE', twiliodev);\n } catch (error) {\n // eslint-disable-next-line require-atomic-updates\n shouldFetchToken = false;\n return OnFetchTwilioTokeError.dispatch(error);\n }\n}\n\n/**\n * Fetch lead stages\n */\nexport async function fetchLeadStages() {\n const client = OnApolloClient.get();\n\n try {\n const response = await client.query({\n query: QUERY_LEAD_STAGES,\n });\n\n OnLeadStagesListEvent.dispatch(response.data);\n\n return response.data;\n } catch (e) {\n return OnLeadStagesListError.dispatch(e);\n }\n}\n\n/**\n *\n * @typedef {object} leadDsipostion\n * @property {string} carrier Carrier\n * @property {string} status Status id to connect\n * @property {string} expirationDate date\n * @property {string} score Score id to connect\n * @property {string} insurance Insurance information\n * @property {string} notes Notes of the info\n * @property {string} lead Lead id to connect\n * @property {string} callType - The type of the call internally\n */\n/**\n * @param {leadDsipostion} data data object\n */\nexport async function createLeadDisposition(data) {\n const client = OnApolloClient.get();\n\n const { lead, status, callId, amount, callType, ...rest } = data;\n\n const newData = {\n ...rest,\n lead: { connect: { id: lead } },\n ...(callType === CALL_TYPES.OUTBOUND\n ? {\n outboundPhoneCall: { connect: { id: callId } },\n }\n : {\n inboundPhoneCall: { connect: { id: callId } },\n }),\n };\n\n if (status) {\n newData.status = { connect: { id: status } };\n }\n\n try {\n const response = await client.mutate({\n mutation: CREATE_LEAD_DISPOSITION,\n variables: { lead, data: newData, stage: status, amount },\n });\n\n onLeadDispositionCreate.dispatch(response.data);\n\n return response.data;\n } catch (e) {\n return onLeadDispositionCreateError.dispatch(e);\n }\n}\n\n/**\n * Creates a filter object for SMS\n *\n * @param {object} filterData - the data of the filter\n * @returns {object} the filter object\n */\nconst createFilter = (filterData) => {\n const agencyFilter = filterData.agency ? { agency: { id: { equals: filterData.agency } } } : {};\n return {\n AND: [\n ...[agencyFilter],\n ...(filterData.dateStart !== '' && filterData.dateStart\n ? [\n {\n createdAt: {\n gte: moment(filterData.dateStart)\n .startOf('day')\n .toISOString(),\n },\n },\n ]\n : []),\n ...(filterData.dateEnd !== '' && filterData.dateEnd\n ? [\n {\n createdAt: {\n lte: moment(filterData.dateEnd)\n .endOf('day')\n .toISOString(),\n },\n },\n ]\n : []),\n ...(filterData.assignedTo !== ''\n ? [\n {\n createdBy: { id: { equals: filterData.assignedTo } },\n },\n ]\n : []),\n ],\n };\n};\n/**\n * Creates a filter object for SMS\n *\n * @param {object} filterData - the data of the filter\n * @returns {object} the filter object\n */\nconst createInboundFilter = (filterData) => {\n const agencyFilter = filterData.agency ? { agency: { id: { equals: filterData.agency } } } : {};\n return {\n AND: [\n ...[agencyFilter],\n ...(filterData.dateStart !== '' && filterData.dateStart\n ? [\n {\n createdAt: {\n gte: moment(filterData.dateStart)\n .startOf('day')\n .toISOString(),\n },\n },\n ]\n : []),\n ...(filterData.dateEnd !== '' && filterData.dateEnd\n ? [\n {\n createdAt: {\n lte: moment(filterData.dateEnd)\n .endOf('day')\n .toISOString(),\n },\n },\n ]\n : []),\n ...(filterData.aceptedBy !== ''\n ? [\n {\n user: { id: { equals: filterData.aceptedBy } },\n },\n ]\n : []),\n ...(filterData.rejectedBy !== ''\n ? [\n {\n rejectedBy: { id: { equals: filterData.rejectedBy } },\n },\n ]\n : []),\n ],\n };\n};\n\n/**\n * Returns a Sort Object\n *\n * @param {string} sortData - the category to be sorted\n * @returns {object} the sort object\n *\n */\nconst createSort = (sortData) => {\n return {\n ...(sortData === 'top' && { sort: [{ priority: 'DESC' }] }),\n ...(sortData === 'low' && { sort: [{ priority: 'ASC' }] }),\n ...(sortData === 'newest' && { sort: [{ createdAt: `DESC` }] }),\n ...(sortData === 'oldest' && { sort: [{ createdAt: `ASC` }] }),\n };\n};\n\n/**\n * function to fetch PhoneCalls.\n *\n * @param {number} page - the current page of the phone calls\n * @param {object} data - an object which contains the filterData\n *\n * @returns {Promise} The request result\n */\nexport const fetchPhoneCalls = async (page, data) => {\n let filter;\n let sort;\n if (data) {\n filter = createFilter(data);\n if (data.sort !== '') {\n sort = createSort(data.sort).sort;\n }\n }\n\n const first = 10;\n const client = OnApolloClient.get();\n const skip = (page - 1) * first;\n\n let response;\n const variables = { first, skip, ...(filter && { filter }), ...(sort && { sort }) };\n\n try {\n response = await client.query({\n query: PHONE_CALLS_LIST,\n fetchPolicy: 'network-only',\n variables,\n });\n } catch (e) {\n console.error('call: phoneCalls', e);\n return OnFetchOutboundCallsError.dispatch(e);\n }\n console.log('call: phoneCalls', response);\n OnFetchOutboundCallsEvent.dispatch(response.data);\n return response.data;\n};\n/**\n * function to fetch PhoneCalls.\n *\n * @param {number} page - the current page of the phone calls\n * @param {object} data - an object which contains the filterData\n *\n * @returns {Promise} The request result\n */\nexport const fetchIboundPhoneCalls = async (page, data) => {\n let filter;\n let sort;\n if (data) {\n filter = createInboundFilter(data);\n if (data.sort !== '') {\n sort = createSort(data.sort).sort;\n }\n }\n const first = 10;\n const client = OnApolloClient.get();\n const skip = (page - 1) * first;\n\n let response;\n const variables = { first, skip, ...(filter && { filter }), ...(sort && { sort }) };\n\n try {\n response = await client.query({\n query: INBOUND_PHONE_CALLS_LIST,\n fetchPolicy: 'network-only',\n variables,\n });\n } catch (e) {\n error('phoneCalls', e);\n return OnFetchInboundCallsError.dispatch(e);\n }\n log('phoneCalls', response);\n OnFetchInboundCallsEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * @param {string} agencyId - Agency id.\n * @param {string} subStatus - The subscription status\n * @returns {Promise} - Promise with list type.\n */\nexport async function fetchPhoneNumbers(agencyId, subStatus = 'active') {\n const client = OnApolloClient.get();\n /**\n * If status is different than active, for example \"trialing\", that means\n * the company can use free number or their own paid phone numbers.\n */\n const filter =\n subStatus === ACTIVE\n ? { agency: { id: { equals: agencyId } }, active: { equals: true } }\n : {\n OR: [\n { agency: { id: { equals: agencyId } }, active: { equals: true } },\n { active: { equals: true }, isFree: { equals: true } },\n ],\n };\n\n const response = await client.query({\n query: PHONE_NUMBERS_QUERY,\n fetchPolicy: 'network-only',\n variables: { filter },\n });\n\n return response.data.phoneNumbersList.items;\n}\n\n/**\n * @param {string} id - Lead id.\n * @returns {object} - Lead object.\n */\nexport async function fetchLeadDataService(id) {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: LEAD_DATA_QUERY,\n fetchPolicy: 'network-only',\n variables: { id },\n });\n\n return response.data.lead;\n}\n/**\n * Transfers the specified call to a new user\n *\n * @param {Array} users - The ids of the users to transfer the call to\n * @param {Array} phones - The phone numbers to transfer the call to\n * @param {string} call - The id of the call to transfer\n * @param {string} callType - The original type of the call\n * @returns {Promise} - Whether or not the transfer succeded\n */\nexport async function transferCallService(users, phones, call, callType) {\n const client = OnApolloClient.get();\n let response;\n try {\n response = await client.mutate({\n mutation: TRANSFER_CALL_MUTATION,\n variables: {\n users,\n phones,\n call,\n callType,\n },\n });\n console.log('call: TRANSFERRED CALL', response);\n } catch (e) {\n console.error('call: Error transferring call:', e);\n throw e;\n }\n return response.data.success;\n}\n\n/**\n * @param {string} user - Lead id.\n * @param {string} conference - Lead id.\n * @param {string} phoneNumber - Lead id.\n * @returns {boolean} - Lead object.\n */\nexport const transferCall = createAction(onTransferCall, onTransferCallError, transferCallService);\n\nexport const fetchCallParticipant = createAction(\n OnFetchCallParticipant,\n OnFetchCallParticipantError,\n async (id) => {\n const client = OnApolloClient.get();\n let response;\n try {\n response = await client.query({\n query: FETCH_PHONE_CALL_PARTICIPANT,\n fetchPolicy: 'network-only',\n variables: { id },\n });\n console.log('call: fetchCallParticipant', response);\n } catch (e) {\n console.error('call: Error fetching call participant:', e);\n throw e;\n }\n return response.data;\n },\n);\n","import { useState, useEffect } from 'react';\nimport { OnSessionFetch } from '../session/session-events';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { getUserRolesInAgency } from '../utils/agency-utils';\n\n/**\n * @typedef {object} UserRelation\n * @property {number} count relation items count\n * @property {object} items relation object\n *\n */\n/**\n * @typedef {object} User\n * @property {string} id user id\n * @property {string} email user email\n * @property {string} firstName user firstName\n * @property {string} lastName user lastName\n * @property {string} avatar user avatar url\n * @property {UserRelation} metaUserRelation\n * @property {UserRelation} userAgentRelation\n * @property {UserRelation} userAdminRelation\n * @property {UserRelation} userManagerRelation\n *\n */\n/**\n * @typedef {[User, boolean]} HookState array\n *\n */\n/**\n * @returns {HookState} Array with user object and loading boolean\n */\nexport const useUser = () => {\n const current = OnSessionFetch.get()?.user;\n\n const [{ user, loading, roles }, setUser] = useState({\n user: current,\n roles: getUserRolesInAgency(current),\n loading: current ? false : true,\n });\n\n useEffect(() => {\n if (!user) {\n const currentUser = OnSessionFetch.get()?.user;\n if (currentUser) {\n setUser((state) => ({ ...state, user: currentUser, loading: false }));\n }\n }\n }, [user]);\n useSubscription(\n OnSessionFetch,\n ({ user }) => {\n setUser((state) => ({ ...state, user, loading: false }));\n },\n [],\n );\n\n return [user, loading, roles];\n};\n","import {\n GENDERS,\n PRIORITY_VALUES,\n LEAD_TYPE_AUTO,\n LEAD_TYPE_COMMERCIAL_AUTO,\n LEAD_TYPE_HOME,\n LEAD_TYPE_LIFE,\n LEAD_TYPE_GENERAL_LIABILITY,\n LEAD_TYPE_WORKERS_COMPENSATION,\n LEAD_TYPE_EMPLOYEE_BENEFITS,\n} from '../../shared/constants';\nimport { getDateOfBirthYears } from './leads-utils';\n\nexport const SORT_OPTIONS = [\n { label: 'Priority: Top First', value: 'top' },\n { label: 'Priority: Low First', value: 'low' },\n { label: 'Date: Newest First', value: 'newest' },\n { label: 'Date: Oldest First', value: 'oldest' },\n];\n\n/**\n * The \"size\" property in this column objects are strings of the CSS grid columns sizes\n */\nexport const TABLE_COLUMNS = {\n Received: { active: true, value: 'Received', property: 'createdAt', size: 'minmax(100px,1fr)' },\n Contact: { active: true, value: 'Contact', property: '', size: 'minmax(120px,150px)' },\n Status: { active: true, value: 'Status', property: '', size: 'minmax(110px,1fr)' },\n // IFSScore: { active: true, value: 'IFS Score', property: '' },\n AssignedTo: { active: true, value: 'Assigned To', property: '', size: 'minmax(150px,1fr)' },\n Campaign: { active: true, value: 'Campaign', property: '', size: 'minmax(150px,180px)' },\n LastAction: {\n active: true,\n value: 'Last Action',\n property: 'updatedAt',\n size: 'minmax(220px,1fr)',\n },\n Priority: { active: false, value: 'Priority', property: '', size: 'minmax(110px,1fr)' },\n};\n\nexport const PRIORITY_OPTIONS = [\n { label: 'LOW', value: `${PRIORITY_VALUES.LOW}` },\n { label: 'NORMAL', value: `${PRIORITY_VALUES.NORMAL}` },\n { label: 'HIGH', value: `${PRIORITY_VALUES.HIGH}` },\n { label: 'VERY HIGH', value: `${PRIORITY_VALUES.VERY_HIGH}` },\n];\n\nexport const ACTIVE_COLUMNS = [\n 'Received',\n 'Contact',\n 'Stage',\n // 'IFS Score',\n 'Assigned To',\n 'Campaign',\n 'Last Action',\n];\n\nexport const FILTER_DATA = {\n dateStart: '',\n dateEnd: '',\n leadType: '',\n leadVendor: '',\n assignedTo: '',\n hasNotes: 'Both',\n sort: '',\n};\n\nexport const LEAD_STAGES = {\n CALLED_NO_MESSAGE: 'Called no message',\n QUOTE_COMPETITIVE: 'Quote competitive',\n QUOTE_NOT_COMPETITIVE: 'Quote not competitive',\n WRONG_NUMBER: 'Wrong number',\n ERROR_DID_NOT_REQUEST_A_QUOTE: 'Error - did not request a quote',\n CURRENT_PREMIUM: 'Current premium',\n IFS_SCORE: 'IFS Score',\n POLICY_EXPIRATION_DATE: 'Policy Expiration Date',\n SOLD: 'Sold',\n NEW: 'New',\n};\n\nexport const SMS_FILTER_DATA = {\n dateStart: '',\n dateEnd: '',\n assignedTo: '',\n sort: '',\n type: '',\n};\n\nexport const SMS_SORT_OPTIONS = [\n { label: 'Date: Newest First', value: 'newest' },\n { label: 'Date: Oldest First', value: 'oldest' },\n];\n\nexport const STATUS_OPTIONS = [\n // { label: 'Ifs Score', value: 'IFS SCORE' },\n { label: 'Policy Expiration Date', value: 'POLICY EXPIRATION DATE' },\n { label: 'Called No Message', value: 'CALLED NO MESSAGE' },\n { label: 'Quote Competitive', value: 'QUOTE COMPETITIVE' },\n { label: 'Quote Not Competitive', value: 'QUOTE NOT COMPETITIVE' },\n { label: 'Wrong Number', value: 'WRONG NUMBER' },\n { label: 'Error - Did Not Request A Quote', value: 'ERROR - DID NOT REQUEST A QUOTE' },\n { label: 'Current Premium', value: 'CURRENT PREMIUM' },\n { label: 'Quoted Premium', value: 'QUOTED PREMIUM' },\n { label: 'New', value: 'NEW' },\n];\n\nexport const LEAD_TYPE_OPTIONS = [\n { label: 'Auto', value: LEAD_TYPE_AUTO, relation: 'leadLeadTypeAutoRelation' },\n {\n label: 'Commercial Auto',\n value: LEAD_TYPE_COMMERCIAL_AUTO,\n relation: 'leadLeadTypeCommercialAutoRelation',\n },\n { label: 'Home', value: LEAD_TYPE_HOME, relation: 'leadLeadTypeHomeRelation' },\n { label: 'Life', value: LEAD_TYPE_LIFE, relation: 'leadLeadTypeLifeRelation' },\n {\n label: 'General Liability',\n value: LEAD_TYPE_GENERAL_LIABILITY,\n relation: 'leadLeadTypeGeneralLiabilityRelation',\n },\n {\n label: 'Workers Compensation',\n value: LEAD_TYPE_WORKERS_COMPENSATION,\n relation: 'leadLeadTypeWorkersCompensationRelation',\n },\n {\n label: 'Employee Benefits',\n value: LEAD_TYPE_EMPLOYEE_BENEFITS,\n relation: 'leadLeadTypeEmployeeBenefitRelation',\n },\n];\n\n//We use this array to collect all posibles values for filter fields type text in leads.\nexport const FILTER_CATEGORIES_TEXT_TYPES = ['firstName', 'middleName', 'lastName'];\n\nexport const FILTER_CATEGORIES = {\n firstName: {\n title: 'First name',\n placeholher: 'first name',\n type: 'text',\n identifier: 'firstName',\n },\n middleName: {\n title: 'Middle name',\n placeholher: 'middle name',\n type: 'text',\n identifier: 'middleName',\n },\n lastName: {\n title: 'Last name',\n placeholher: 'last name',\n type: 'text',\n identifier: 'lastName',\n },\n createdAfter: {\n title: 'Created After',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'createdAfter',\n },\n createdBefore: {\n title: 'Created Before',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'createdBefore',\n },\n leadType: {\n title: 'Lead Type',\n placeholher: 'Select',\n identifier: 'leadType',\n options: [\n {\n label: 'All',\n value: 'ALL',\n },\n ...LEAD_TYPE_OPTIONS,\n ],\n },\n campaign: {\n title: 'Campaign',\n placeholher: 'Select',\n identifier: 'campaign',\n options: [{ label: 'All campaigns', value: '' }],\n },\n assignedTo: {\n title: 'Assigned to',\n placeholher: 'Select',\n identifier: 'assignedTo',\n options: [{ label: 'No one', value: 'no_one' }],\n },\n hasNotes: {\n title: 'Has Notes',\n options: ['Both', 'Yes', 'No'],\n type: 'radioGroup',\n identifier: 'hasNotes',\n },\n phoneNumber: {\n title: 'Phone number',\n placeholher: 'numbers',\n type: 'text',\n identifier: 'phoneNumber',\n },\n};\n\nexport const SMS_FILTER_CATEGORIES = {\n dateStart: {\n title: 'Date Start',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'dateStart',\n },\n dateEnd: {\n title: 'Date End',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'dateEnd',\n },\n assignedTo: {\n title: 'Assigned to',\n placeholher: 'Select',\n identifier: 'assignedTo',\n options: [],\n },\n type: {\n title: 'Type (Incoming/Outgoing)',\n placeholher: 'Select',\n identifier: 'type',\n options: [\n { label: 'Incoming', value: 'INCOMING' },\n { label: 'Outgoing', value: 'OUTGOING' },\n ],\n },\n};\n\nexport const GENDER_OPTIONS = [\n { label: 'Male', value: `${GENDERS.MALE}` },\n { label: 'Female', value: `${GENDERS.FEMALE}` },\n { label: 'Other', value: `${GENDERS.OTHER}` },\n { label: 'Prefer not saying', value: `${GENDERS.PREFER_NOT_SAYING}` },\n];\n\nexport const BIRTHMONTH_OPTIONS = [\n { label: 'January', value: 'January' },\n { label: 'February', value: 'February' },\n { label: 'March', value: 'March' },\n { label: 'April', value: 'April' },\n { label: 'May', value: 'May' },\n { label: 'June', value: 'June' },\n { label: 'July', value: 'July' },\n { label: 'August', value: 'August' },\n { label: 'September', value: 'September' },\n { label: 'October', value: 'October' },\n { label: 'November', value: 'November' },\n { label: 'December', value: 'December' },\n];\n\nexport const BIRTHDAY_OPTIONS = getDateOfBirthYears(31, 1, true);\n\nexport const BIRTHYEAR_OPTIONS = getDateOfBirthYears(new Date().getFullYear(), 1900);\n\nexport const YES_OR_NOT = [\n { label: 'Yes', value: true },\n { label: 'No', value: false },\n];\n\nexport const STATES_OPTIONS = [\n { label: 'Alabama', value: 'Alabama' },\n { label: 'Alaska', value: 'Alaska' },\n { label: 'Arizona', value: 'Arizona' },\n { label: 'Arkansas', value: 'Arkansas' },\n { label: 'California', value: 'California' },\n { label: 'Colorado', value: 'Colorado' },\n { label: 'Connecticut', value: 'Connecticut' },\n { label: 'Delaware', value: 'Delaware' },\n { label: 'Florida', value: 'Florida' },\n { label: 'Georgia', value: 'Georgia' },\n { label: 'Hawaii', value: 'Hawaii' },\n { label: 'Idaho', value: 'Idaho' },\n { label: 'Illinois', value: 'Illinois' },\n { label: 'Indiana', value: 'Indiana' },\n { label: 'Iowa', value: 'Iowa' },\n { label: 'Kansas', value: 'Kansas' },\n { label: 'Kentucky', value: 'Kentucky' },\n { label: 'Louisiana', value: 'Louisiana' },\n { label: 'Maine', value: 'Maine' },\n { label: 'Maryland', value: 'Maryland' },\n { label: 'Massachusetts', value: 'Massachusetts' },\n { label: 'Michigan', value: 'Michigan' },\n { label: 'Minnesota', value: 'Minnesota' },\n { label: 'Mississippi', value: 'Mississippi' },\n { label: 'Missouri', value: 'Missouri' },\n { label: 'Montana', value: 'Montana' },\n { label: 'Nebraska', value: 'Nebraska' },\n { label: 'Nevada', value: 'Nevada' },\n { label: 'New Hampshire', value: 'New Hampshire' },\n { label: 'New Jersey', value: 'New Jersey' },\n { label: 'New Mexico', value: 'New Mexico' },\n { label: 'New York', value: 'New York' },\n { label: 'North Carolina', value: 'North Carolina' },\n { label: 'North Dakota', value: 'North Dakota' },\n { label: 'Ohio', value: 'Ohio' },\n { label: 'Oklahoma', value: 'Oklahoma' },\n { label: 'Oregon', value: 'Oregon' },\n { label: 'Pennsylvania', value: 'Pennsylvania' },\n { label: 'Rhode Island', value: 'Rhode Island' },\n { label: 'South Carolina', value: 'South Carolina' },\n { label: 'South Dakota', value: 'South Dakota' },\n { label: 'Tennessee', value: 'Tennessee' },\n { label: 'Texas', value: 'Texas' },\n { label: 'Utah', value: 'Utah' },\n { label: 'Vermont', value: 'Vermont' },\n { label: 'Virginia', value: 'Virginia' },\n { label: 'Washington', value: 'Washington' },\n { label: 'West Virginia', value: 'West Virginia' },\n { label: 'Wisconsin', value: 'Wisconsin' },\n { label: 'Wyoming', value: 'Wyoming' },\n];\n\nexport const LEAD = {\n firstName: '',\n middleName: '',\n lastName: '',\n gender: '',\n birthMonth: '',\n birthDay: '',\n birthYear: '',\n email: '',\n campaign: '',\n ifsScore: '',\n assignees: [],\n agents: [],\n phones: [{ phone: { code: '1', number: '' } }],\n firstAddress: '',\n secondAddress: '',\n city: '',\n zipCode: '',\n state: '',\n leadType: '',\n priority: `${PRIORITY_VALUES.NORMAL}`,\n creditScore: '',\n amount: '0',\n};\n","import {\n ADMIN,\n AGENT,\n MANAGER,\n LEAD_TYPE_AUTO,\n LEAD_TYPE_HOME,\n LEAD_TYPE_LIFE,\n LEAD_TYPE_COMMERCIAL_AUTO,\n LEAD_TYPE_EMPLOYEE_BENEFITS,\n LEAD_TYPE_GENERAL_LIABILITY,\n LEAD_TYPE_WORKERS_COMPENSATION,\n} from '../../shared/constants';\nimport { userHasAnyRoleInAgency } from '../../shared/utils/agency-utils';\nimport { findPriority, getLeadPhoneNumbers } from './leads-utils';\nimport { formatPhoneNumber } from '../phone-calls/phone-calls-utils';\n\n/**\n * function to format contact data.\n *\n * @param {object} lead the lead which contains the data.\n * @returns {Array} the formatted data\n */\nexport const formatContactData = (lead) => {\n const {\n stage,\n gender,\n firstName,\n lastName,\n middleName,\n birthDay,\n birthMonth,\n birthYear,\n address: [firstAddress],\n email,\n creditScore,\n priority,\n ifsScore,\n } = lead;\n const phones = getLeadPhoneNumbers(lead);\n\n const formattedPhoneNumbers = phones.map((phone, i) => ({\n label: `Phone Number ${i + 1}`,\n value: formatPhoneNumber(phone.phone.number),\n }));\n\n const leadType = getLeadType(lead);\n const data = [\n [\n {\n label: 'Name',\n value:\n firstName && lastName ? `${firstName} ${middleName ? middleName : ''} ${lastName}` : '',\n },\n {\n label: 'Date of Birth',\n value: birthMonth && birthDay && birthYear ? `${birthMonth} ${birthDay}, ${birthYear}` : '',\n },\n { label: 'Gender', value: gender },\n { label: 'Email', value: email, isTextContact: true },\n ],\n [\n {\n label: 'Address',\n value: firstAddress ? `${firstAddress.street1} ${firstAddress.street2}` : '',\n },\n { label: 'City', value: firstAddress ? firstAddress.city : '' },\n { label: 'ZIP Code', value: firstAddress ? firstAddress.zip : '' },\n { label: 'Lead Type', value: leadType },\n ],\n [\n { label: 'Credit Score', value: creditScore },\n { label: 'IFS Score', value: ifsScore },\n { label: 'Status', value: stage?.name },\n { label: 'Priority', value: findPriority(priority) },\n ],\n formattedPhoneNumbers,\n ];\n\n return checkEmptyColumnValues(data);\n};\n\n/**\n * function to format detailed data.\n *\n * @param {object} param0 detailed data\n * @param {object} param0.auto lead type auto data\n * @param {object} param0.commercialAuto lead type commercial auto data\n * @param {string} param0.leadType lead type string\n * @returns {Array} the formatted data\n */\nexport const formatDetailedData = ({ auto, commercialAuto, leadType }) => {\n if (leadType === LEAD_TYPE_COMMERCIAL_AUTO) {\n const {\n name,\n businessName,\n businessType,\n payroll,\n sales,\n yearsInBusiness,\n numberOfDrivers,\n numberOfEmployees,\n numberOfVehicles,\n coverageAmount,\n } = commercialAuto;\n const data = [\n [\n { label: 'Name', value: name },\n { label: 'Business Name', value: businessName },\n { label: 'Business Type', value: businessType },\n ],\n [\n { label: 'Payroll', value: payroll },\n { label: 'Sales', value: sales },\n { label: 'Years In Business', value: yearsInBusiness },\n ],\n [\n { label: 'Number Of Drivers', value: numberOfDrivers },\n { label: 'Number Of Vehicles', value: numberOfVehicles },\n ],\n [\n { label: 'Number Of Employees', value: numberOfEmployees },\n { label: 'Coverage Amount', value: coverageAmount },\n ],\n ];\n\n return checkEmptyColumnValues(data);\n }\n\n return [];\n};\n\n/**\n * Returns true if the user has the role Manager in the provided agency\n *\n * @param {object} user current user\n * @param {object} agency agency data\n * @returns {boolean} if have the role or not\n */\nexport const canSeeTaskAndNotesOptions = (user, agency) => {\n return userHasAnyRoleInAgency(user, agency, [ADMIN, MANAGER, AGENT]);\n};\n\n/**\n * Lead detail form map function.\n *\n * @param {object} lead data\n * @returns {object} lead mapped\n */\nexport const leadDetailMap = (lead) => {\n return {\n ...lead,\n assignees: Array.isArray(lead.assignees) ? lead.assignees : lead.assignees.items,\n // agents: lead.agents.items,\n campaign: lead.campaign?.id,\n city: lead.address[0].city,\n leadType: getLeadType(lead),\n zipCode: lead.address[0].zip,\n state: lead.address[0].state,\n firstAddress: lead.address[0].street1,\n secondAddress: lead.address[0].street2,\n phones: getLeadPhoneNumbers(lead),\n amount: lead.amount,\n };\n};\n\n/**\n * Check if there is a column with an empty value\n * and replace that with N/A.\n *\n * @param {Array} data array of data\n * @returns {Array} data mapped\n */\nexport const checkEmptyColumnValues = (data) => {\n return data.map((row) => {\n return row.map((column) => {\n return {\n ...column,\n value: column.value === null || column.value === '' ? 'N/A' : column.value,\n };\n });\n });\n};\n\n/**\n * Func for get the lead type.\n *\n * @param {object} lead data\n * @returns {string} lead type\n */\nexport const getLeadType = (lead) => {\n if (lead.leadLeadTypeAutoRelation !== null) return LEAD_TYPE_AUTO;\n\n if (lead.leadLeadTypeCommercialAutoRelation !== null) return LEAD_TYPE_COMMERCIAL_AUTO;\n\n if (lead.leadLeadTypeHomeRelation !== null) return LEAD_TYPE_HOME;\n\n if (lead.leadLeadTypeLifeRelation !== null) return LEAD_TYPE_LIFE;\n\n if (lead.leadLeadTypeGeneralLiabilityRelation !== null) return LEAD_TYPE_GENERAL_LIABILITY;\n\n if (lead.leadLeadTypeWorkersCompensationRelation !== null) return LEAD_TYPE_WORKERS_COMPENSATION;\n\n if (lead.leadLeadTypeEmployeeBenefitRelation !== null) return LEAD_TYPE_EMPLOYEE_BENEFITS;\n};\n","import { checkEmptyColumnValues } from '../lead-details-utils';\nimport { createValidations } from '../../../shared/utils';\n\n/**\n * Format drivers to show a table with the data.\n *\n * @param {Array} drivers data from lead detail\n * @returns {Array} drivers mapped\n */\nexport const formatDriversData = (drivers) => {\n return drivers.map((driver, index) => {\n const firstName = driver.firstName ? driver.firstName : null;\n const lastName = driver.lastName ? driver.lastName : null;\n const fullName = lastName ? `${firstName} ${lastName}` : firstName;\n\n const rows = [\n [\n { label: 'Name', value: fullName },\n { label: 'Email', value: driver.email, isTextContact: true },\n { label: 'Date of Birth', value: driver.birthDate },\n { label: 'Gender', value: driver.gender },\n { label: 'Marital Status', value: driver.maritalStatus },\n { label: 'Cell Phone', value: driver.cellPhone },\n { label: 'Daytime Phone', value: driver.daytimePhone },\n { label: 'Evening Phone', value: driver.eveningPhone },\n { label: 'Age First Licensed', value: driver.ageFirstLicensed },\n { label: 'Licensed State', value: driver.licensedState },\n { label: 'License Status', value: driver.licenseStatus },\n { label: 'Relationship To Applicant', value: driver.relationshipToApplicant },\n { label: 'Preferred Contact Time', value: driver.preferredContactTime },\n { label: 'Preferred Contact Number', value: driver.preferredContactNumber },\n { label: 'Fulltime Student', value: driver.fullTimeStudent === true ? 'Yes' : 'No' },\n { label: 'Education', value: driver.education },\n { label: 'Occupation', value: driver.occupation },\n { label: 'Credit Rating', value: driver.creditRating },\n { label: 'Years In Field', value: driver.yearsInField },\n ],\n [\n { label: 'Make of Vehicle', value: driver.makeOfVehicle },\n { label: 'Model of Vehicle', value: driver.modelOfVehicle },\n { label: 'Year Of Vehicle', value: driver.yearOfVehicle },\n { label: 'Trim', value: driver.trim },\n { label: 'Style', value: driver.style },\n { label: 'Ownership', value: driver.ownership },\n { label: 'Primary Use', value: driver.primaryUse },\n { label: 'Average One Way Mileage', value: driver.averageOneWayMileage },\n { label: 'Annual Mileage', value: driver.annualMileage },\n { label: 'Vehicle Parking', value: driver.vehicleParking },\n { label: 'Anti Lock Breaks', value: driver.antiLockBreaks },\n { label: 'Security System', value: driver.securitySystem },\n { label: 'Salvaged Vehicle', value: driver.salvagedVehicle },\n { label: 'Additional Drivers', value: driver.additionalDrivers === true ? 'Yes' : 'No' },\n {\n label: 'Additional Vehicles',\n value: driver.additionalVehicles === true ? 'Yes' : 'No',\n },\n {\n label: 'Completed Behind The Wheel',\n value: driver.completedBehindTheWheel === true ? 'Yes' : 'No',\n },\n { label: 'Primary Driver', value: driver.primaryDriver },\n { label: 'Policy Expiration Date', value: driver.policyExpirationDate },\n { label: 'Vin', value: driver.vin },\n ],\n [\n { label: 'Years At Current Residence', value: driver.yearsAtCurrentResidence },\n { label: 'City', value: driver.address ? driver.address.city : null },\n { label: 'State', value: driver.address ? driver.address.state : null },\n { label: 'Address Line 1', value: driver.address ? driver.address.street1 : null },\n { label: 'Address Line 2', value: driver.address ? driver.address.street1 : null },\n { label: 'Zip Code', value: driver.address ? driver.address.zip : null },\n {\n label: 'How Many Incidents In The Past 5 Years',\n value: driver.howManyIncidentsInThePast5Years,\n },\n { label: 'Incidents In The Past 5 Years', value: driver.incidentsPast5Years },\n { label: 'Violations In The Past 5 years', value: driver.violationsPast5Years },\n { label: 'Activity In The Past 5 Years', value: driver.activityPast5Years },\n {\n label: 'Tickets Accidents Claims In The Past 3 Years',\n value: driver.ticketsAccidentsClaimsPast3Years === true ? 'Yes' : 'No',\n },\n { label: 'Current Bodily Injury Coverages', value: driver.currentBodilyInjuryCoverages },\n {\n label: 'Current Property Damage Coverages',\n value: driver.currentPropertyDamageCoverages,\n },\n { label: 'Current Coverage Level', value: driver.currentCoverageLevel },\n { label: 'Coverage Level', value: driver.coverageLevel },\n {\n label: 'Current Comprehensive Deductible',\n value: driver.currentComprehensiveDeductible,\n },\n { label: 'Current Collision Deductible', value: driver.currentCollisionDeductible },\n ],\n [\n { label: 'Insurance Company', value: driver.insuranceCompany },\n { label: 'Continuously Insured Years', value: driver.continuouslyInsuredYears },\n { label: 'Continuously Insured Month', value: driver.continuouslyInsuredMonths },\n { label: 'Current Insurance Company Years', value: driver.currentInsuranceCompanyYears },\n {\n label: 'Current Insurance Company Months',\n value: driver.currentInsuranceCompanyMonths,\n },\n {\n label: 'Insured In The Past 30 Days',\n value: driver.insuredPast30Days === true ? 'Yes' : 'No',\n },\n {\n label: 'Bankruptcy In Past 5 Years',\n value: driver.bankruptcyInPast5Years === true ? 'Yes' : 'No',\n },\n { label: 'Multiple Policy Discount', value: driver.multiplePolicyDiscount },\n { label: 'eNewsletter', value: driver.eNewsletter },\n {\n label: 'Suspended Or Revoked In The Past 5 Years',\n value: driver.suspendedOrRevokedInThePast5Years === true ? 'Yes' : 'No',\n },\n { label: 'DUIDWI In The Past 5 Years', value: driver.dUIDWIInThePast5Years },\n { label: 'Date Of DUIDWI', value: driver.dateOfDUIDWI },\n { label: 'Desired Collision Coverage', value: driver.desiredCollisionCoverage },\n { label: 'Desired Comprehensive Coverage', value: driver.desiredComprehensiveCoverage },\n { label: 'Average Days Per Week Used', value: driver.averageDaysPerWeekUsed },\n { label: 'Filling Required', value: driver.fillingRequired },\n ],\n ];\n\n return {\n header: fullName,\n rows: checkEmptyColumnValues(rows),\n };\n });\n};\n\n/**\n * Map for update form\n *\n * @param {object} driver data\n * @returns {object} driver mapped\n */\nexport const driverMap = (driver) => {\n const { address } = driver;\n\n return {\n ...driver,\n ...(address\n ? {\n city: address.city,\n state: address.state,\n street1: address.street1,\n street2: address.street2,\n zip: address.zip,\n }\n : {}),\n };\n};\n\n/**\n * Map for creates a driver.\n *\n * @param {object} driver data\n * @returns {object} mapped driver data\n */\nexport const driverCreateMap = (driver) => {\n const isUpdate = driver.id !== undefined;\n /**\n * @param {boolean | string} value - Value to check.\n * @param {string} string - Strign to compare.\n * @returns {boolean} - Boolean\n */\n function checkBoolOrString(value, string) {\n if (typeof value === 'string') {\n return value.toLowerCase() === string;\n }\n return value;\n }\n return {\n firstName: driver.firstName,\n lastName: driver.lastName,\n email: driver.email,\n birthDate: driver.birthDate ? new Date(driver.birthDate).toISOString().split('T')[0] : null,\n gender: driver.gender,\n maritalStatus: driver.maritalStatus,\n ageFirstLicensed: driver.ageFirstLicensed\n ? new Date(driver.ageFirstLicensed).toISOString().split('T')[0]\n : null,\n licensedState: driver.licensedState,\n licenseStatus: driver.licenseStatus,\n fullTimeStudent: isUpdate\n ? driver.fullTimeStudent\n : checkBoolOrString(driver.fullTimeStudent, 'yes'),\n education: driver.education,\n occupation: driver.occupation,\n creditRating: parseTo(driver.creditRating, 'int'),\n relationshipToApplicant: driver.relationshipToApplicant,\n // Contact Data\n cellPhone: driver.cellPhone,\n daytimePhone: driver.daytimePhone,\n eveningPhone: driver.eveningPhone,\n preferredContactNumber: driver.preferredContactNumber,\n preferredContactTime: isUpdate\n ? driver.preferredContactTime\n : driver.preferredContactTime\n ? new Date(driver.preferredContactTime)\n : null,\n // Vehicle Data\n makeOfVehicle: driver.makeOfVehicle,\n modelOfVehicle: driver.modelOfVehicle,\n yearOfVehicle: parseTo(driver.yearOfVehicle, 'int'),\n trim: driver.trim,\n style: driver.style,\n ownership: driver.ownership,\n primaryUse: driver.primaryUse,\n averageOneWayMileage: parseTo(driver.averageOneWayMileage, 'int'),\n annualMileage: driver.annualMileage ? parseTo(driver.annualMileage, 'int') : null,\n vehicleParking: driver.vehicleParking,\n antiLockBreaks: driver.antiLockBreaks,\n securitySystem: driver.securitySystem,\n salvagedVehicle: driver.salvagedVehicle,\n // Residence Data\n yearsAtCurrentResidence: parseTo(driver.yearsAtCurrentResidence, 'int'),\n address: {\n city: driver.city,\n state: driver.state,\n street1: driver.street1,\n street2: driver.street2,\n zip: driver.zip,\n },\n // Insurance Data\n insuranceCompany: driver.insuranceCompany,\n continuouslyInsuredYears: parseTo(driver.continuouslyInsuredYears, 'int'),\n continuouslyInsuredMonths: parseTo(driver.continuouslyInsuredMonths, 'int'),\n currentInsuranceCompanyYears: parseTo(driver.currentInsuranceCompanyYears, 'int'),\n currentInsuranceCompanyMonths: parseTo(driver.currentInsuranceCompanyMonths, 'int'),\n insuredPast30Days: isUpdate\n ? driver.insuredPast30Days\n : checkBoolOrString(driver.insuredPast30Days, 'yes'),\n // Other Data\n yearsInField: parseTo(driver.yearsInField, 'int'),\n policyExpirationDate: driver.policyExpirationDate\n ? new Date(driver.policyExpirationDate).toISOString().split('T')[0]\n : null,\n howManyIncidentsInThePast5Years: parseTo(driver.howManyIncidentsInThePast5Years, 'int'),\n incidentsPast5Years: driver.incidentsPast5Years,\n violationsPast5Years: driver.violationsPast5Years,\n activityPast5Years: driver.activityPast5Years,\n vin: driver.vin,\n ticketsAccidentsClaimsPast3Years: isUpdate\n ? driver.ticketsAccidentsClaimsPast3Years\n : checkBoolOrString(driver.ticketsAccidentsClaimsPast3Years, 'yes'),\n additionalDrivers: isUpdate\n ? driver.additionalDrivers\n : checkBoolOrString(driver.additionalDrivers, 'yes'),\n additionalVehicles: isUpdate\n ? driver.additionalVehicles\n : checkBoolOrString(driver.additionalVehicles, 'yes'),\n completedBehindTheWheel: isUpdate\n ? driver.completedBehindTheWheel\n : checkBoolOrString(driver.completedBehindTheWheel, 'yes'),\n currentBodilyInjuryCoverages: driver.currentBodilyInjuryCoverages,\n currentPropertyDamageCoverages: driver.currentPropertyDamageCoverages,\n currentCoverageLevel: driver.currentCoverageLevel,\n coverageLevel: driver.coverageLevel,\n currentComprehensiveDeductible: parseTo(driver.currentComprehensiveDeductible, 'int'),\n currentCollisionDeductible: driver.currentCollisionDeductible,\n fillingRequired: driver.fillingRequired,\n bankruptcyInPast5Years: isUpdate\n ? driver.bankruptcyInPast5Years\n : checkBoolOrString(driver.bankruptcyInPast5Years, 'yes'),\n multiplePolicyDiscount: driver.multiplePolicyDiscount,\n eNewsletter: parseTo(driver.eNewsletter, 'int'),\n suspendedOrRevokedInThePast5Years: isUpdate\n ? driver.suspendedOrRevokedInThePast5Years\n : checkBoolOrString(driver.suspendedOrRevokedInThePast5Years, 'yes'),\n dUIDWIInThePast5Years: driver.dUIDWIInThePast5Years\n ? new Date(driver.dUIDWIInThePast5Years).toISOString().split('T')[0]\n : null,\n dateOfDUIDWI: driver.dateOfDUIDWI\n ? new Date(driver.dateOfDUIDWI).toISOString().split('T')[0]\n : null,\n desiredCollisionCoverage: parseTo(driver.desiredCollisionCoverage, 'float'),\n desiredComprehensiveCoverage: parseTo(driver.desiredComprehensiveCoverage, 'float'),\n averageDaysPerWeekUsed: parseTo(driver.averageDaysPerWeekUsed, 'int'),\n primaryDriver: driver.primaryDriver,\n };\n};\n\n/**\n * Lead type life validations\n *\n * @param {object} leadDriver data\n */\nexport const leadDriverValidations = (leadDriver) => {\n const validations = [\n { value: leadDriver.firstName, field: 'firstname', type: 'string', required: true },\n { value: leadDriver.lastName, field: 'lastName', type: 'string' },\n { value: leadDriver.email, field: 'email', type: 'email' },\n { value: leadDriver.birthDate, field: 'birthDate', type: 'date' },\n { value: leadDriver.gender, field: 'gender', type: 'string' },\n { value: leadDriver.maritalStatus, field: 'maritalStatus', type: 'string' },\n { value: leadDriver.ageFirstLicensed, field: 'ageFirstLicensed', type: 'date' },\n { value: leadDriver.licensedState, field: 'licensedState', type: 'string' },\n { value: leadDriver.licenseStatus, field: 'licenseStatus', type: 'string' },\n { value: leadDriver.fullTimeStudent, field: 'fullTimeStudent', type: 'boolean' },\n { value: leadDriver.education, field: 'education', type: 'string' },\n { value: leadDriver.occupation, field: 'occupation', type: 'string' },\n { value: leadDriver.creditRating, field: 'creditRating', type: 'number' },\n { value: leadDriver.relationshipToApplicant, field: 'relationshipToApplicant', type: 'string' },\n { value: leadDriver.cellPhone, field: 'cellPhone', type: 'phone', required: true },\n { value: leadDriver.daytimePhone, field: 'daytimePhone', type: 'phone' },\n { value: leadDriver.eveningPhone, field: 'eveningPhone', type: 'phone' },\n { value: leadDriver.preferredContactNumber, field: 'preferredContactNumber', type: 'phone' },\n { value: leadDriver.preferredContactTime, field: 'preferredContactTime', type: 'date' },\n { value: leadDriver.makeOfVehicle, field: 'makeOfVehicle', type: 'string' },\n { value: leadDriver.modelOfVehicle, field: 'modelOfVehicle', type: 'string' },\n { value: leadDriver.yearOfVehicle, field: 'yearOfVehicle', type: 'number' },\n { value: leadDriver.trim, field: 'trim', type: 'string' },\n { value: leadDriver.style, field: 'style', type: 'string' },\n { value: leadDriver.ownership, field: 'ownership', type: 'string' },\n { value: leadDriver.primaryUse, field: 'primaryUse', type: 'string' },\n { value: leadDriver.averageOneWayMileage, field: 'averageOneWayMileage', type: 'number' },\n { value: leadDriver.annualMileage, field: 'annualMileage', type: 'number' },\n { value: leadDriver.vehicleParking, field: 'vehicleParking', type: 'string' },\n { value: leadDriver.antiLockBreaks, field: 'antiLockBreaks', type: 'string' },\n { value: leadDriver.securitySystem, field: 'securitySystem', type: 'string' },\n { value: leadDriver.salvagedVehicle, field: 'salvagedVehicle', type: 'string' },\n { value: leadDriver.yearsAtCurrentResidence, field: 'yearsAtCurrentResidence', type: 'number' },\n { value: leadDriver.address.city, field: 'city', type: 'string' },\n { value: leadDriver.address.state, field: 'state', type: 'string' },\n { value: leadDriver.address.street1, field: 'street1', type: 'string' },\n { value: leadDriver.address.street2, field: 'street2', type: 'string' },\n { value: leadDriver.address.zip, field: 'zip', type: 'string' },\n { value: leadDriver.insuranceCompany, field: 'insuranceCompany', type: 'string' },\n {\n value: leadDriver.continuouslyInsuredYears,\n field: 'continuouslyInsuredYears',\n type: 'number',\n },\n {\n value: leadDriver.continuouslyInsuredMonths,\n field: 'continuouslyInsuredMonths',\n type: 'number',\n },\n {\n value: leadDriver.currentInsuranceCompanyYears,\n field: 'currentInsuranceCompanyYears',\n type: 'number',\n },\n {\n value: leadDriver.currentInsuranceCompanyMonths,\n field: 'currentInsuranceCompanyMonths',\n type: 'number',\n },\n { value: leadDriver.insuredPast30Days, field: 'insuredPast30Days', type: 'boolean' },\n { value: leadDriver.yearsInField, field: 'yearsInField', type: 'number' },\n { value: leadDriver.policyExpirationDate, field: 'policyExpirationDate', type: 'date' },\n {\n value: leadDriver.howManyIncidentsInThePast5Years,\n field: 'howManyIncidentsInThePast5Years',\n type: 'number',\n },\n { value: leadDriver.incidentsPast5Years, field: 'incidentsPast5Years', type: 'string' },\n { value: leadDriver.violationsPast5Years, field: 'violationsPast5Years', type: 'string' },\n { value: leadDriver.activityPast5Years, field: 'activityPast5Years', type: 'string' },\n { value: leadDriver.vin, field: 'vin', type: 'string' },\n {\n value: leadDriver.ticketsAccidentsClaimsPast3Years,\n field: 'ticketsAccidentsClaimsPast3Years',\n type: 'boolean',\n },\n { value: leadDriver.additionalDrivers, field: 'additionalDrivers', type: 'boolean' },\n { value: leadDriver.additionalVehicles, field: 'additionalVehicles', type: 'boolean' },\n {\n value: leadDriver.completedBehindTheWheel,\n field: 'completedBehindTheWheel',\n type: 'boolean',\n },\n {\n value: leadDriver.currentBodilyInjuryCoverages,\n field: 'currentBodilyInjuryCoverages',\n type: 'string',\n },\n {\n value: leadDriver.currentPropertyDamageCoverages,\n field: 'currentPropertyDamageCoverages',\n type: 'string',\n },\n { value: leadDriver.currentCoverageLevel, field: 'currentCoverageLevel', type: 'string' },\n { value: leadDriver.coverageLevel, field: 'coverageLevel', type: 'string' },\n {\n value: leadDriver.currentComprehensiveDeductible,\n field: 'currentComprehensiveDeductible',\n type: 'number',\n },\n {\n value: leadDriver.currentCollisionDeductible,\n field: 'currentCollisionDeductible',\n type: 'string',\n },\n { value: leadDriver.fillingRequired, field: 'fillingRequired', type: 'string' },\n { value: leadDriver.bankruptcyInPast5Years, field: 'bankruptcyInPast5Years', type: 'boolean' },\n { value: leadDriver.multiplePolicyDiscount, field: 'multiplePolicyDiscount', type: 'string' },\n { value: leadDriver.eNewsletter, field: 'eNewsletter', type: 'number' },\n {\n value: leadDriver.suspendedOrRevokedInThePast5Years,\n field: 'suspendedOrRevokedInThePast5Years',\n type: 'boolean',\n },\n { value: leadDriver.dUIDWIInThePast5Years, field: 'dUIDWIInThePast5Years', type: 'date' },\n { value: leadDriver.dateOfDUIDWI, field: 'dateOfDUIDWI', type: 'date' },\n {\n value: leadDriver.desiredCollisionCoverage,\n field: 'desiredCollisionCoverage',\n type: 'number',\n },\n {\n value: leadDriver.desiredComprehensiveCoverage,\n field: 'desiredComprehensiveCoverage',\n type: 'number',\n },\n { value: leadDriver.averageDaysPerWeekUsed, field: 'averageDaysPerWeekUsed', type: 'number' },\n { value: leadDriver.primaryDriver, field: 'primaryDriver', type: 'string' },\n ];\n\n createValidations(validations, 'lead drivers');\n};\n\n/**\n * Function to safely convert\n * strings to either integers or floats\n *\n * @param {any} value - The value to parse\n * @param {string} to - The format to parse to\n *\n * @returns {number} The parsed int\n */\nfunction parseTo(value, to = 'int') {\n if (value === undefined || value === null) {\n return null;\n }\n\n if (typeof value !== 'string' && typeof value !== 'number') {\n return Number.NaN;\n }\n\n if (typeof value === 'string') {\n return to === 'int' ? parseInt(value) : parseFloat(value);\n }\n\n return value;\n}\n","import { checkEmptyColumnValues } from '../lead-details-utils';\nimport { createValidations } from '../../../shared/utils';\n\n/**\n * function to format data.\n *\n * @param {object} leadCommercialAuto - data\n *\n * @returns {Array} the formatted data\n */\nexport const formatData = (leadCommercialAuto) => {\n const {\n name,\n businessName,\n businessType,\n payroll,\n sales,\n yearsInBusiness,\n numberOfDrivers,\n numberOfEmployees,\n numberOfVehicles,\n coverageAmount,\n } = leadCommercialAutoMap(leadCommercialAuto);\n const data = [\n [\n { label: 'Name', value: name },\n { label: 'Business Name', value: businessName },\n { label: 'Business Type', value: businessType },\n ],\n [\n { label: 'Payroll', value: payroll },\n { label: 'Sales', value: sales },\n { label: 'Years In Business', value: yearsInBusiness },\n ],\n [\n { label: 'Number Of Drivers', value: numberOfDrivers },\n { label: 'Number Of Vehicles', value: numberOfVehicles },\n ],\n [\n { label: 'Number Of Employees', value: numberOfEmployees },\n { label: 'Coverage Amount', value: coverageAmount },\n ],\n ];\n\n return checkEmptyColumnValues(data);\n};\n\n/**\n * Map for table info and form\n *\n * @param {object} leadCommercialAuto data\n * @returns {object} lead commercial auto mapped\n */\nexport const leadCommercialAutoMap = (leadCommercialAuto) => {\n return {\n ...leadCommercialAuto,\n };\n};\n\n/**\n * Lead type commercial auto validations\n *\n * @param {object} leadCommercialAuto - The lead commercial auto\n *\n * @returns {void}\n */\nexport const leadCommercialAutoValidations = (leadCommercialAuto) => {\n const validations = [\n {\n value: leadCommercialAuto.businessName,\n field: 'business name',\n type: 'string',\n },\n {\n value: leadCommercialAuto.name,\n field: 'name',\n type: 'string',\n },\n {\n value: leadCommercialAuto.yearsInBusiness,\n field: 'years in business',\n type: 'number',\n },\n {\n value: leadCommercialAuto.businessType,\n field: 'business type',\n type: 'string',\n },\n {\n value: leadCommercialAuto.coverageAmount,\n field: 'coverage amount',\n type: 'number',\n },\n {\n value: leadCommercialAuto.payroll,\n field: 'payroll',\n type: 'number',\n },\n {\n value: leadCommercialAuto.sales,\n field: 'sales',\n type: 'number',\n },\n {\n value: leadCommercialAuto.numberOfVehicles,\n field: 'number of vehicles',\n type: 'number',\n },\n {\n value: leadCommercialAuto.numberOfDrivers,\n field: 'number of drivers',\n type: 'number',\n },\n ];\n\n createValidations(validations, 'lead type commercial auto');\n};\n\n/**\n * Map for creates a lead type commercial auto.\n *\n * @param {object} leadCommercialAuto data\n * @returns {object} data mapped\n */\nexport const leadCommercialAutoCreateMap = (leadCommercialAuto) => {\n return {\n businessName: leadCommercialAuto.businessName,\n name: leadCommercialAuto.name,\n yearsInBusiness: parseInt(leadCommercialAuto.yearsInBusiness),\n numberOfEmployees: parseInt(leadCommercialAuto.numberOfEmployees),\n businessType: leadCommercialAuto.businessType,\n coverageAmount: parseFloat(leadCommercialAuto.coverageAmount),\n payroll: parseFloat(leadCommercialAuto.payroll),\n sales: parseFloat(leadCommercialAuto.sales),\n numberOfVehicles: parseInt(leadCommercialAuto.numberOfVehicles),\n numberOfDrivers: parseInt(leadCommercialAuto.numberOfDrivers),\n };\n};\n","import { checkEmptyColumnValues } from '../lead-details-utils';\nimport { createValidations } from '../../../shared/utils';\n\n/**\n * function to format data.\n *\n * @param {object} leadAuto data\n * @returns {Array} the formatted data\n */\nexport const formatData = (leadAuto) => {\n const {\n alternate,\n otherInfo,\n currentBodilyInjuryCoverages,\n currentPropertyDamageCoverages,\n } = leadAutoMap(leadAuto);\n const data = [\n [{ label: 'Alternate', value: alternate }],\n [{ label: 'Other Info', value: otherInfo }],\n [{ label: 'Current Bodily Injury Coverages', value: currentBodilyInjuryCoverages }],\n [{ label: 'Current Property Damage Coverages', value: currentPropertyDamageCoverages }],\n ];\n\n return checkEmptyColumnValues(data);\n};\n\n/**\n * Map for table info and form\n *\n * @param {object} leadAuto data\n * @returns {object} lead auto mapped\n */\nexport const leadAutoMap = (leadAuto) => {\n return {\n ...leadAuto,\n };\n};\n\n/**\n * Lead type auto validations\n *\n * @param {object} leadAuto - The lead auto object\n *\n * @returns {void}\n */\nexport const leadAutoValidations = (leadAuto) => {\n const validations = [\n { value: leadAuto.alternate, field: 'alternate', type: 'string' },\n { value: leadAuto.otherInfo, field: 'other info', type: 'string' },\n {\n value: leadAuto.currentBodilyInjuryCoverages,\n field: 'current bodily injury coverages',\n type: 'string',\n },\n {\n value: leadAuto.currentPropertyDamageCoverages,\n field: 'current property damage coverages',\n type: 'string',\n },\n ];\n\n createValidations(validations, 'lead type auto');\n};\n\n/**\n * Map for creates a lead type auto.\n *\n * @param {object} leadAuto - The lead auto\n *\n * @returns {object} data mapped\n */\nexport const leadAutoCreateMap = (leadAuto) => {\n return {\n alternate: leadAuto.alternate,\n otherInfo: leadAuto.otherInfo,\n currentBodilyInjuryCoverages: leadAuto.currentBodilyInjuryCoverages,\n currentPropertyDamageCoverages: leadAuto.currentPropertyDamageCoverages,\n };\n};\n","import { checkEmptyColumnValues } from '../lead-details-utils';\nimport { createValidations } from '../../../shared/utils';\nimport moment from 'moment';\n\n/**\n * function to format data.\n *\n * @param {object} leadLife - data\n * @returns {Array} the formatted data\n */\nexport const formatData = (leadLife) => {\n const {\n birthDay,\n birthMonth,\n birthYear,\n faceAmount,\n heightFeet,\n heightInches,\n policyType,\n lifeInsuranceInformation,\n knownMedicalCondition,\n smoke,\n term,\n weight,\n age,\n telemarketerName,\n callbackTime,\n beneficiary,\n spouse,\n spouseAge,\n bankAccount,\n code,\n driveRecording,\n dateGenerated,\n } = leadLifeMap(leadLife);\n\n const data = [\n [\n { label: 'Life Insurance Information', value: lifeInsuranceInformation },\n { label: 'Known Medical Condition', value: knownMedicalCondition ? 'Yes' : 'No' },\n { label: 'Policy Type', value: policyType },\n { label: 'Face Amount', value: faceAmount },\n { label: 'Spouse', value: spouse ? 'Yes' : 'No' },\n { label: 'Code', value: code },\n ],\n [\n { label: 'Birth Month', value: birthMonth },\n { label: 'Birth Day', value: birthDay },\n { label: 'Birth Year', value: birthYear },\n { label: 'Telemarketer Name', value: telemarketerName },\n { label: 'Spouse Age', value: spouseAge },\n { label: 'Driver Recording', value: driveRecording },\n ],\n [\n { label: 'Smoke', value: smoke ? 'Yes' : 'No' },\n { label: 'Height Feet', value: heightFeet },\n { label: 'Height Inches', value: heightInches },\n { label: 'Callback Time', value: callbackTime },\n { label: 'Bank Account', value: bankAccount ? 'Yes' : 'No' },\n { label: 'Date Lead Generated', value: dateGenerated },\n ],\n [\n { label: 'Term', value: term },\n { label: 'Age', value: age },\n { label: 'Weight', value: weight },\n { label: 'Beneficiary', value: beneficiary },\n ],\n ];\n\n return checkEmptyColumnValues(data);\n};\n\n/**\n * Map for table info and form\n *\n * @param {object} leadLife data\n * @returns {object} lead life mapped\n */\nexport const leadLifeMap = (leadLife) => {\n return {\n ...leadLife,\n birthDay: leadLife.birthDay ? leadLife.birthDay.toString() : '',\n birthYear: leadLife.birthYear ? leadLife.birthYear.toString() : '',\n dateGenerated: leadLife.dateGenerated\n ? `${moment(leadLife.dateGenerated).format('MM-DD-YYYY')} ${moment(\n leadLife.dateGenerated,\n ).format('LT')}`\n : '',\n };\n};\n\n/**\n * Lead type life validations\n *\n * @param {object} leadLife - The lead life\n *\n * @returns {void}\n */\nexport const leadLifeValidations = (leadLife) => {\n const validations = [\n {\n value: leadLife.lifeInsuranceInformation,\n field: 'life insurance information',\n type: 'string',\n },\n { value: leadLife.policyType, field: 'policy type', type: 'string' },\n { value: leadLife.birthMonth, field: 'birth month', type: 'string' },\n { value: leadLife.birthYear, field: 'birth Year', type: 'number' },\n { value: leadLife.birthDay, field: 'birth day', type: 'number' },\n { value: leadLife.faceAmount, field: 'face amount', type: 'number' },\n { value: leadLife.knownMedicalCondition, field: 'known medical condition', type: 'boolean' },\n { value: leadLife.smoke, field: 'smoke', type: 'boolean' },\n { value: leadLife.term, field: 'term', type: 'number' },\n { value: leadLife.heightFeet, field: 'height feet', type: 'number' },\n { value: leadLife.heightInches, field: 'height inches', type: 'number' },\n { value: leadLife.age, field: 'age', type: 'number' },\n { value: leadLife.weight, field: 'weight', type: 'number' },\n ];\n\n createValidations(validations, 'lead type life');\n};\n\n/**\n * Map for creates a lead life\n *\n * @param {object} leadLife data\n * @returns {object} data mapped\n */\nexport const leadLifeCreateMap = (leadLife) => {\n const isUpdate = leadLife.id !== undefined;\n\n let date = leadLife.dateLeadGenerated ? moment(leadLife.dateLeadGenerated) : null;\n\n if (date) {\n if (date.isValid()) {\n date = date.toISOString();\n } else {\n date = 'invalid';\n }\n }\n\n const { knownMedicalCondition, smoke, spouse, bankAccount } = leadLife;\n\n return {\n lifeInsuranceInformation: leadLife.lifeInsuranceInformation,\n policyType: leadLife.policyType,\n birthMonth: leadLife.birthMonth,\n birthYear: parseInt(leadLife.birthYear),\n birthDay: parseInt(leadLife.birthDay),\n faceAmount: parseInt(leadLife.faceAmount),\n knownMedicalCondition: isUpdate\n ? knownMedicalCondition\n : knownMedicalCondition && knownMedicalCondition.toLowerCase() === 'yes',\n smoke: isUpdate ? smoke : smoke && smoke.toLowerCase() === 'yes',\n term: parseInt(leadLife.term),\n heightFeet: parseInt(leadLife.heightFeet),\n heightInches: parseInt(leadLife.heightInches),\n age: parseInt(leadLife.age),\n weight: parseInt(leadLife.weight),\n telemarketerName: leadLife.telemarketerName,\n callbackTime: leadLife.callbackTime,\n beneficiary: leadLife.beneficiary,\n spouse: spouse && spouse.toLowerCase() === 'yes',\n spouseAge: leadLife.spouseAge ? parseInt(leadLife.spouseAge) : 0,\n bankAccount: bankAccount && bankAccount.toLowerCase() === 'Yes',\n code: leadLife.code,\n driveRecording: leadLife.driveRecording,\n dateGenerated: date,\n };\n};\n","import { checkEmptyColumnValues } from '../lead-details-utils';\nimport { createValidations } from '../../../shared/utils';\n\n/**\n * function to format data.\n *\n * @param {object} leadHome data\n * @returns {Array} the formatted data\n */\nexport const formatData = (leadHome) => {\n const {\n ageOfRoof,\n bathrooms,\n bedrooms,\n bestTimeToContact,\n brushHazardWithin500Feet,\n burglarAlarm,\n businessConductedOnPremises,\n cathedralVaultedCeilings,\n centralHeatingAir,\n comments,\n constructionType,\n continuouslyInsured,\n copperWaterPipes,\n coverageNeededOnContents,\n coverageNeededOnHouse,\n credit,\n currentInsuranceCompany,\n currentlyInsured,\n deadBolts,\n dob,\n dogType,\n dwellingType,\n enclosedPorchPatio,\n fencedInPool,\n fireAlarm,\n fireExtinguishers,\n fireHydrantProximity,\n fireStationProximity,\n fireplaces,\n floodPain,\n foundationType,\n frequencyOfPayment,\n garageType,\n hardwoodFloors,\n heatType,\n homeUpgradesDescribed,\n homeValue,\n homeUpgrades,\n hotTub,\n indoorSprinklers,\n insuredSince,\n mannedSecurityStation,\n monitoredBurglarAlarm,\n newPurchase,\n numberOfClaims,\n occupancyStatus,\n otherInfo,\n policyExpiration,\n porches,\n premium,\n requestedDeductible,\n requestedLiability,\n sauna,\n servicePanelType,\n smokeDetectors,\n smokerInHousehold,\n squareFootage,\n stories,\n sumpPump,\n swimmingPool,\n tennisCourts,\n timeAtCurrentResidence,\n timeAtPreviousResidence,\n timeWithCurrentCompany,\n wiringType,\n woodBurningStove,\n yearBuilt,\n addressToBeInsured,\n } = leadHomeMap(leadHome);\n const data = [\n [\n { label: 'Age of Roof', value: ageOfRoof },\n { label: 'Bathrooms', value: bathrooms },\n { label: 'Bedrooms', value: bedrooms },\n { label: 'Best Time to Contact', value: bestTimeToContact },\n { label: 'Brush Hazard Within 500 Feet', value: brushHazardWithin500Feet },\n { label: 'Burglar Alarm', value: burglarAlarm },\n { label: 'Business Conducted On Premises', value: businessConductedOnPremises },\n { label: 'Cathedral Vaulted Ceilings', value: cathedralVaultedCeilings },\n { label: 'Central Heating Air', value: centralHeatingAir },\n { label: 'Construction Type', value: constructionType },\n { label: 'Copper Water Pipes', value: copperWaterPipes },\n { label: 'Coverage Needed On Contents', value: coverageNeededOnContents },\n { label: 'Coverage Needed On House', value: coverageNeededOnHouse },\n { label: 'Credit', value: credit },\n {\n label: 'Address To Be Insured',\n value: addressToBeInsured ? addressToBeInsured.street1 : null,\n },\n { label: 'City To Be Insured', value: addressToBeInsured ? addressToBeInsured.city : null },\n { label: 'State To Be Insured', value: addressToBeInsured ? addressToBeInsured.state : null },\n { label: 'Zip To Be Insured', value: addressToBeInsured ? addressToBeInsured.zip : null },\n ],\n [\n { label: 'Current Insurance Company', value: currentInsuranceCompany },\n { label: 'Currently Insured', value: currentlyInsured },\n { label: 'Dead Bolts', value: deadBolts },\n { label: 'Dob', value: dob },\n { label: 'Dog Type', value: dogType },\n { label: 'Dwelling Type', value: dwellingType },\n { label: 'Enclosed Porch Patio', value: enclosedPorchPatio },\n { label: 'Fenced In Pool', value: fencedInPool },\n { label: 'Fire Alarm', value: fireAlarm },\n { label: 'Fire Extinguishers', value: fireExtinguishers },\n { label: 'Fire Hydrant Proximity', value: fireHydrantProximity },\n { label: 'Fire Station Proximity', value: fireStationProximity },\n { label: 'Fireplaces', value: fireplaces },\n { label: 'Flood Pain', value: floodPain },\n { label: 'Foundation Type', value: foundationType },\n { label: 'Frequency Of Payment', value: frequencyOfPayment },\n { label: 'Garage Type', value: garageType },\n { label: 'Year Built', value: yearBuilt },\n ],\n [\n { label: 'Continuously Insured', value: continuouslyInsured },\n { label: 'Hardwood Floors', value: hardwoodFloors },\n { label: 'Heat Type', value: heatType },\n { label: 'Home Upgrades Described', value: homeUpgradesDescribed },\n { label: 'Home Value', value: homeValue },\n { label: 'Home Upgrades', value: homeUpgrades },\n { label: 'Hot Tub', value: hotTub },\n { label: 'Indoor Sprinklers', value: indoorSprinklers },\n { label: 'Insured Since', value: insuredSince },\n { label: 'Manned Security Station', value: mannedSecurityStation },\n { label: 'Monitored Burglar Alarm', value: monitoredBurglarAlarm },\n { label: 'New Purchase', value: newPurchase ? 'Yes' : 'No' },\n { label: 'Number Of Claims', value: numberOfClaims },\n { label: 'Occupancy Status', value: occupancyStatus },\n { label: 'Other Info', value: otherInfo },\n { label: 'Policy Expiration', value: policyExpiration },\n { label: 'Porches', value: porches },\n { label: 'Wood Burning Stove', value: woodBurningStove },\n ],\n [\n { label: 'Copper Water Pipes', value: copperWaterPipes },\n { label: 'Premium', value: premium },\n { label: 'Requested Deductible', value: requestedDeductible },\n { label: 'Requested Liability', value: requestedLiability },\n { label: 'Sauna', value: sauna },\n { label: 'Service Panel Type', value: servicePanelType },\n { label: 'Smoke Detectors', value: smokeDetectors },\n { label: 'Smoker In Household', value: smokerInHousehold },\n { label: 'Square Footage', value: squareFootage },\n { label: 'Stories', value: stories },\n { label: 'Sump Pump', value: sumpPump },\n { label: 'Swimming Pool', value: swimmingPool },\n { label: 'Tennis Courts', value: tennisCourts },\n { label: 'Time At Current Residence', value: timeAtCurrentResidence },\n { label: 'Time At Previous Residence', value: timeAtPreviousResidence },\n { label: 'Time With Current Company', value: timeWithCurrentCompany },\n { label: 'Wiring Type', value: wiringType },\n { label: 'Comments', value: comments },\n ],\n ];\n\n return checkEmptyColumnValues(data);\n};\n\n/**\n * Map for table info and form\n *\n * @param {object} leadHome data\n * @returns {object} lead home mapped\n */\nexport const leadHomeMap = (leadHome) => {\n if (!leadHome.claims) leadHome.claims = [];\n const map = {\n ...leadHome,\n addressLineToBeInsured: null,\n cityToBeInsured: null,\n stateToBeInsured: null,\n zipToBeInsured: null,\n };\n\n if (leadHome.addressToBeInsured)\n return {\n ...map,\n ...{\n addressLineToBeInsured: leadHome.addressToBeInsured.street1,\n cityToBeInsured: leadHome.addressToBeInsured.city,\n stateToBeInsured: leadHome.addressToBeInsured.state,\n zipToBeInsured: leadHome.addressToBeInsured.zip,\n },\n };\n return map;\n};\n\n/**\n * Lead type home validations\n *\n * @param {*} leadHome - Lead home\n */\nexport const leadHomeValidations = (leadHome) => {\n const validations = [];\n\n createValidations(validations, 'lead type home');\n};\n\n/**\n * Map for creates a lead type home\n *\n * @param {object} leadHome data\n * @returns {object} data mapped\n */\nexport const leadHomeCreateMap = (leadHome) => {\n const isUpdate = leadHome.id !== undefined;\n\n const { continuouslyInsured, currentlyInsured, homeUpgrades, newPurchase } = leadHome;\n\n return {\n ageOfRoof: leadHome.ageOfRoof,\n bathrooms: parseInt(leadHome.bathrooms),\n bedrooms: parseInt(leadHome.bedrooms),\n bestTimeToContact: isUpdate\n ? leadHome.bestTimeToContact\n : leadHome.bestTimeToContact\n ? new Date(leadHome.bestTimeToContact)\n : null,\n brushHazardWithin500Feet: leadHome.brushHazardWithin500Feet,\n burglarAlarm: leadHome.burglarAlarm,\n businessConductedOnPremises: leadHome.businessConductedOnPremises,\n cathedralVaultedCeilings: leadHome.cathedralVaultedCeilings,\n centralHeatingAir: leadHome.centralHeatingAir,\n comments: leadHome.comments,\n constructionType: leadHome.constructionType,\n continuouslyInsured: isUpdate\n ? continuouslyInsured\n : continuouslyInsured && continuouslyInsured.toLowerCase() === 'yes',\n copperWaterPipes: leadHome.copperWaterPipes,\n coverageNeededOnContents: parseInt(leadHome.coverageNeededOnContents),\n coverageNeededOnHouse: parseInt(leadHome.coverageNeededOnHouse),\n credit: leadHome.credit,\n currentInsuranceCompany: leadHome.currentInsuranceCompany,\n currentlyInsured: isUpdate\n ? currentlyInsured\n : currentlyInsured && currentlyInsured.toLowerCase() === 'yes',\n deadBolts: leadHome.deadBolts,\n dob: leadHome.dob ? new Date(leadHome.dob).toISOString().split('T')[0] : null,\n dogType: leadHome.dogType,\n dwellingType: leadHome.dwellingType,\n enclosedPorchPatio: leadHome.enclosedPorchPatio,\n fencedInPool: leadHome.fencedInPool,\n fireAlarm: leadHome.fireAlarm,\n fireExtinguishers: leadHome.fireExtinguishers,\n fireHydrantProximity: leadHome.fireHydrantProximity,\n fireStationProximity: leadHome.fireStationProximity,\n fireplaces: parseInt(leadHome.fireplaces),\n floodPain: leadHome.floodPain,\n foundationType: leadHome.foundationType,\n frequencyOfPayment: leadHome.frequencyOfPayment,\n garageType: leadHome.garageType,\n hardwoodFloors: leadHome.hardwoodFloors,\n heatType: leadHome.heatType,\n homeUpgradesDescribed: leadHome.homeUpgradesDescribed,\n homeValue: parseInt(leadHome.homeValue),\n homeUpgrades: isUpdate ? homeUpgrades : homeUpgrades && homeUpgrades.toLowerCase() === 'yes',\n hotTub: leadHome.hotTub,\n indoorSprinklers: leadHome.indoorSprinklers,\n insuredSince: leadHome.insuredSince\n ? new Date(leadHome.insuredSince).toISOString().split('T')[0]\n : null,\n mannedSecurityStation: leadHome.mannedSecurityStation,\n monitoredBurglarAlarm: leadHome.monitoredBurglarAlarm,\n newPurchase: isUpdate ? newPurchase : newPurchase && newPurchase.toLowerCase() === 'yes',\n numberOfClaims: parseInt(leadHome.numberOfClaims),\n occupancyStatus: leadHome.occupancyStatus,\n otherInfo: leadHome.otherInfo,\n policyExpiration: leadHome.policyExpiration\n ? new Date(leadHome.policyExpiration).toISOString().split('T')[0]\n : null,\n porches: leadHome.porches,\n premium: leadHome.premium,\n requestedDeductible: leadHome.requestedDeductible,\n requestedLiability: leadHome.requestedLiability,\n sauna: leadHome.sauna,\n servicePanelType: leadHome.servicePanelType,\n smokeDetectors: leadHome.smokeDetectors,\n smokerInHousehold: leadHome.smokerInHousehold,\n squareFootage: parseInt(leadHome.squareFootage),\n stories: parseInt(leadHome.stories),\n sumpPump: leadHome.sumpPump,\n swimmingPool: leadHome.swimmingPool,\n tennisCourts: leadHome.tennisCourts,\n timeAtCurrentResidence: leadHome.timeAtCurrentResidence,\n timeAtPreviousResidence: leadHome.timeAtPreviousResidence,\n timeWithCurrentCompany: leadHome.timeWithCurrentCompany,\n wiringType: leadHome.wiringType,\n woodBurningStove: leadHome.woodBurningStove,\n yearBuilt: parseInt(leadHome.yearBuilt),\n addressToBeInsured: {\n street1: leadHome.addressLineToBeInsured,\n city: leadHome.cityToBeInsured,\n state: leadHome.stateToBeInsured,\n zip: leadHome.zipToBeInsured,\n },\n claims: leadHome.claims,\n };\n};\n","import { checkEmptyColumnValues } from '../lead-details-utils';\nimport { createValidations } from '../../../shared/utils';\n\n/**\n * function to format data.\n *\n * @param {object} leadEmployeeBenefits data\n * @returns {Array} the formatted data\n */\nexport const formatData = (leadEmployeeBenefits) => {\n const {\n annualPayroll,\n companyName,\n natureOfBusiness,\n numberOfEmployees,\n } = leadEmployeeBenefitsMap(leadEmployeeBenefits);\n const data = [\n [{ label: 'Annual Payroll', value: annualPayroll }],\n [{ label: 'Company Name', value: companyName }],\n [{ label: 'Nature of Business', value: natureOfBusiness }],\n [{ label: 'Number Of Employees', value: numberOfEmployees }],\n ];\n\n return checkEmptyColumnValues(data);\n};\n\n/**\n * Map for table info and form\n *\n * @param {object} leadEmployeeBenefits data\n * @returns {object} lead employee benefits mapped\n */\nexport const leadEmployeeBenefitsMap = (leadEmployeeBenefits) => {\n return {\n ...leadEmployeeBenefits,\n };\n};\n\n/**\n * Lead type employee benefits validations\n *\n * @param {object} leadEmployeeBenefits - The lead employee benefits\n *\n * @returns {void}\n */\nexport const leadEmployeeBenefitsValidations = (leadEmployeeBenefits) => {\n const validations = [\n {\n value: leadEmployeeBenefits.annualPayroll,\n field: 'annual payroll',\n type: 'number',\n },\n {\n value: leadEmployeeBenefits.companyName,\n field: 'company name',\n type: 'string',\n },\n {\n value: leadEmployeeBenefits.natureOfBusiness,\n field: 'nature of business',\n type: 'string',\n },\n {\n value: leadEmployeeBenefits.numberOfEmployees,\n field: 'number of employees',\n type: 'number',\n },\n ];\n\n createValidations(validations, 'lead type employee benefits');\n};\n\n/**\n * Map for creates a lead type employee benefits\n *\n * @param {object} leadEmployeeBenefits data\n * @returns {object} data mapped\n */\nexport const leadEmployeeBenefitsCreateMap = (leadEmployeeBenefits) => {\n return {\n annualPayroll: parseFloat(leadEmployeeBenefits.annualPayroll),\n companyName: leadEmployeeBenefits.companyName,\n natureOfBusiness: leadEmployeeBenefits.natureOfBusiness,\n numberOfEmployees: parseInt(leadEmployeeBenefits.numberOfEmployees),\n };\n};\n","import { checkEmptyColumnValues } from '../lead-details-utils';\nimport moment from 'moment';\n\n/**\n * function to format data.\n *\n * @param {object} leadGeneralLiability data\n * @returns {Array} the formatted data\n */\nexport const formatData = (leadGeneralLiability) => {\n const {\n natureOfBusiness,\n companyName,\n grossSales,\n numberOfEmployees,\n payroll,\n policyExpirationDate,\n } = leadGeneralLiabilityMap(leadGeneralLiability);\n const data = [\n [\n { label: 'Nature of Business', value: natureOfBusiness },\n { label: 'Payroll', value: payroll },\n ],\n [\n {\n label: 'Gross Sales',\n value: grossSales,\n },\n {\n label: 'Policy Expiration Date',\n value: policyExpirationDate ? moment(policyExpirationDate).format('MM/DD/YYYY') : null,\n },\n ],\n [{ label: 'Number Of Employees', value: numberOfEmployees }],\n [{ label: 'Company Name', value: companyName }],\n ];\n\n return checkEmptyColumnValues(data);\n};\n\n/**\n * Map for table info and form\n *\n * @param {object} leadGeneralLiability data\n * @returns {object} lead home mapped\n */\nexport const leadGeneralLiabilityMap = (leadGeneralLiability) => {\n return {\n ...leadGeneralLiability,\n };\n};\n\n/**\n * Map for creates a lead type general liability\n *\n * @param {object} leadGeneralLiability data\n * @returns {object} data mapped\n */\nexport const leadGeneralLiabilityCreateMap = (leadGeneralLiability) => {\n return {\n natureOfBusiness: leadGeneralLiability.natureOfBusiness,\n companyName: leadGeneralLiability.companyName,\n grossSales: parseInt(leadGeneralLiability.grossSales),\n numberOfEmployees: parseInt(leadGeneralLiability.numberOfEmployees),\n payroll: parseFloat(leadGeneralLiability.payroll),\n policyExpirationDate: leadGeneralLiability.policyExpirationDate || null,\n };\n};\n","import { checkEmptyColumnValues } from '../lead-details-utils';\nimport { createValidations } from '../../../shared/utils';\nimport moment from 'moment';\n\n/**\n * function to format data.\n *\n * @param {object} leadWorkersCompensation data\n * @returns {Array} the formatted data\n */\nexport const formatData = (leadWorkersCompensation) => {\n const {\n annualPayroll,\n companyName,\n natureOfBusiness,\n numberOfEmployees,\n policyExpirationDate,\n } = leadWorkersCompensationMap(leadWorkersCompensation);\n const data = [\n [\n { label: 'Annual Payroll', value: annualPayroll },\n {\n label: 'Policy Expiration Date',\n value: policyExpirationDate ? moment(policyExpirationDate).format('MM/DD/YYYY') : null,\n },\n ],\n [{ label: 'Company Name', value: companyName }],\n [{ label: 'Nature of Business', value: natureOfBusiness }],\n [{ label: 'Number Of Employees', value: numberOfEmployees }],\n ];\n\n return checkEmptyColumnValues(data);\n};\n\n/**\n * Map for table info and form\n *\n * @param {object} leadWorkersCompensation data\n * @returns {object} lead workers compensation mapped\n */\nexport const leadWorkersCompensationMap = (leadWorkersCompensation) => {\n return {\n ...leadWorkersCompensation,\n };\n};\n\n/**\n * Lead type workers compensation validations\n *\n * @param {object} leadWorkersCompensation - The lead compensation worker\n *\n * @returns {void}\n */\nexport const leadWorkersCompensationValidations = (leadWorkersCompensation) => {\n const validations = [\n {\n value: leadWorkersCompensation.annualPayroll,\n field: 'annual payroll',\n type: 'number',\n },\n {\n value: leadWorkersCompensation.companyName,\n field: 'company name',\n type: 'string',\n },\n {\n value: leadWorkersCompensation.natureOfBusiness,\n field: 'nature of business',\n type: 'string',\n },\n {\n value: leadWorkersCompensation.numberOfEmployees,\n field: 'number of employees',\n type: 'number',\n },\n {\n value: leadWorkersCompensation.policyExpirationDate,\n field: 'policy expiration date',\n type: 'string',\n },\n ];\n\n createValidations(validations, 'lead type workers compensation');\n};\n\n/**\n * Map for creates a lead type workers compensation\n *\n * @param {object} leadWorkersCompensation data\n * @returns {object} data mapped\n */\nexport const leadWorkersCompensationCreateMap = (leadWorkersCompensation) => {\n return {\n annualPayroll: parseFloat(leadWorkersCompensation.annualPayroll),\n companyName: leadWorkersCompensation.companyName,\n natureOfBusiness: leadWorkersCompensation.natureOfBusiness,\n numberOfEmployees: parseInt(leadWorkersCompensation.numberOfEmployees),\n policyExpirationDate: leadWorkersCompensation.policyExpirationDate || null,\n };\n};\n","import { PhoneNumberUtil } from 'google-libphonenumber';\nimport moment from 'moment';\nimport { TABLE_COLUMNS } from './leads-model';\nimport { LeadPhoneType } from '@cobuildlab/lead-volt-share';\nimport {\n GENDERS,\n MANAGER,\n PRIORITY_OPTIONS,\n MARITAL_STATUSES,\n MARITAL_STATUSES_OPTIONS,\n TYPE_VALUES,\n DATE_SCHEMA_FORMATS,\n} from '../../shared/constants';\nimport { isValidDate } from '../../shared/validators';\nimport { userHasAnyRoleInAgency } from '../../shared/utils/agency-utils';\nimport { unCapitalize } from '../../shared/utils';\nimport { GENDER_OPTIONS, LEAD_TYPE_OPTIONS } from './leads-model';\nimport { driverCreateMap } from './leads-drivers/leads-drivers-utils';\nimport { leadCommercialAutoCreateMap } from './leads-type-commercial-auto/leads-type-commercial-auto-utils';\nimport { leadAutoCreateMap } from './leads-type-auto/leads-type-auto-utils';\nimport { leadLifeCreateMap } from './leads-type-life/leads-type-life-utils';\nimport { leadHomeCreateMap } from './leads-type-home/leads-type-home-utils';\nimport { leadEmployeeBenefitsCreateMap } from './leads-type-employee-benefits/leads-type-employee-benefits-utils';\nimport { leadGeneralLiabilityCreateMap } from './leads-type-general-liability/leads-type-general-liability-utils';\nimport { leadWorkersCompensationCreateMap } from './leads-type-workers-compensation/leads-type-workers-compensation-utils';\n\nexport const getLeadPropertyName = (columnName) => {\n columnName = columnName.replace(' ', '');\n const propertyName = TABLE_COLUMNS[columnName].property;\n\n return propertyName;\n};\n\nexport const priorityMap = (optionList) => {\n return optionList.map((option) => ({ label: option.label, value: option.label }));\n};\n\nexport const findPriority = (value) => {\n if (value === '') {\n return;\n }\n\n if (+value) {\n return PRIORITY_OPTIONS.find((option) => +option.value === +value).label;\n } else {\n return PRIORITY_OPTIONS.find((option) => option.label === value).value;\n }\n};\n\n/**\n * Find priority number\n *\n * @param {string|number} priority - The lead object\n * @returns {number|undefined} The resulting response\n */\nexport const findPriorityNumber = (priority) => {\n if (isNaN(priority)) {\n const selectedPriority = PRIORITY_OPTIONS.find(\n ({ label: priorityStr }) =>\n priorityStr.replace(/ /g, '').toLowerCase() === priority.replace(/ /g, '').toLowerCase(),\n );\n\n return selectedPriority?.value;\n }\n\n return priority;\n};\n\n/**\n * Map to format the numbers\n *\n * @param {object} lead - The lead object\n * @returns {Array} The resulting array\n */\nexport const msgNumbersMap = (lead) => {\n const phones = getLeadPhoneNumbers(lead);\n let numbers = [];\n\n if (phones && phones.length) {\n numbers = phones\n .filter(({ phone }) => !!phone.code && !!phone.number)\n .map(({ phone }) => ({\n label: `+${phone.code} ${phone.number}`,\n value: phone,\n }));\n }\n\n return numbers;\n};\n\n/**\n * Map to format the type's data\n *\n * @param {Array} types - Array of types\n *\n * @returns {object} The options object\n */\nexport const typesMap = (types) => {\n return types.map((type) => {\n return {\n label: type.name,\n value: type,\n };\n });\n};\n\n/**\n * Returns true if the user has the role Manager in the provided agency\n *\n * @param {object} user - The user object\n * @param {object} agency - The agency object\n *\n * @returns {boolean} The result\n */\nexport const canSeeBatchActions = (user, agency) => {\n return userHasAnyRoleInAgency(user, agency, MANAGER);\n};\n\n/**\n * Returns true if the user has the role Manager in the provided agency\n *\n * @param {object} user - The user object\n * @param {object} agency - The agency object\n *\n * @returns {boolean} The result\n */\nexport const canDeleteLeads = (user, agency) => {\n return userHasAnyRoleInAgency(user, agency, MANAGER);\n};\n\n/**\n * Returns true if the user has the role Manager in the provided agency\n *\n * @param {object} user - The user object\n * @param {object} agency - The agency object\n *\n * @returns {boolean} The result\n */\nexport const canAssignAgents = (user, agency) => {\n return userHasAnyRoleInAgency(user, agency, MANAGER);\n};\n\n/**\n *\n * @param {object} lead Lead object\n * @returns {string} Full name string of the lead\n */\nexport const getLeadFullName = (lead) => `${lead.firstName} ${lead.lastName}`;\n\n/**\n *\n * @param {string} leadType Lead type string.\n * @returns {string} Full relation type string.\n */\nexport function mapLeadTypeRelationName(leadType) {\n const types = Object.values(TYPE_VALUES);\n const type = types\n .find((item) => item.toLowerCase() === leadType.toLowerCase())\n .replace(/ /g, '');\n return `leadLeadType${type}Relation`;\n}\n\n/**\n * @param {Array<{id:string,phone:{code:string,number:string}}>} phones - Phones input\n * @param {boolean} isUpdate - Phones input\n * @returns {{ create:Array, update:Array, disconnect: Array}} - Data to update phones\n */\nexport function getLeadPhoneNumberRelationInput(phones, isUpdate) {\n const result = isUpdate\n ? phones.reduce((acum, curr) => {\n return {\n /**\n * If the phone number doesn't have id\n * the number has to be created\n */\n create: !curr.id\n ? [\n ...(acum.create || []),\n {\n phone: {\n code: curr.phone.code,\n number: parsePhone(curr.phone.number),\n },\n parsedPhone: {\n code: curr.phone.code,\n number: parsePhone(curr.phone.number),\n },\n },\n ]\n : acum.create,\n /**\n * If the phone number has an id but\n * its not going to be deleted, update it\n */\n update:\n curr.id && !curr.delete\n ? [\n ...(acum.update || []),\n {\n data: {\n id: curr.id,\n phone: {\n code: curr.phone.code,\n number: parsePhone(curr.phone.number),\n },\n parsedPhone: {\n code: curr.phone.code,\n number: parsePhone(curr.phone.number),\n },\n // If the number is changed, set the type to mobile and its metada to null\n ...(curr.update\n ? {\n type: LeadPhoneType.MOBILE,\n data: null,\n }\n : {}),\n },\n },\n ]\n : acum.update,\n /**\n * If the phone number has an id and\n * the delete flag, deleted\n */\n disconnect:\n curr.id && curr.delete === true\n ? [\n ...(acum.disconnect || []),\n {\n id: curr.id,\n },\n ]\n : acum.disconnect,\n };\n }, {})\n : {\n create: phones.map(({ phone }) => ({\n phone: {\n code: phone.code,\n number: parsePhone(phone.number),\n },\n parsedPhone: {\n code: phone.code,\n number: parsePhone(phone.number),\n },\n })),\n };\n\n return result;\n}\n/**\n * Get lead from csv row\n *\n * @param {Array} row lead data\n * @param {Array} columns Csv column titles\n * @param {number} index lead row number\n * @param {object} campaign campaign\n * @returns {object} lead\n */\nexport const getLeadFromRowCsv = (row, columns, index, campaign) => {\n const lead = {};\n const leadTypeFields = {};\n const leadDrivers = [];\n const countDrivers = [];\n const types = Object.values(TYPE_VALUES);\n const type = row[columns.indexOf('type')];\n\n if (types.every((t) => t !== type)) {\n throw new Error(\n 'Lead #' +\n index +\n ' must have a valid type. ' +\n 'Allowed types are ' +\n types.map((t) => `\"${t}\"`).join(', '),\n );\n }\n\n let typePrefix = type.replace(/ /g, '');\n typePrefix = typePrefix.charAt(0).toLowerCase() + typePrefix.substr(1);\n\n const leadTypeMaps = {\n auto: leadAutoCreateMap,\n commercialAuto: leadCommercialAutoCreateMap,\n life: leadLifeCreateMap,\n home: leadHomeCreateMap,\n employeeBenefit: leadEmployeeBenefitsCreateMap,\n generalLiability: leadGeneralLiabilityCreateMap,\n workersCompensation: leadWorkersCompensationCreateMap,\n };\n\n columns.forEach((column, index) => {\n if (column.startsWith(typePrefix)) {\n const attribute = unCapitalize(column.replace(typePrefix, ''));\n let value = row[index];\n\n if (typeof row[index] === 'string') {\n value = row[index].trim() || undefined;\n }\n\n leadTypeFields[attribute] = value;\n } else if (column !== 'campaign') {\n lead[column] = row[index];\n }\n\n // Count how many drivers are in the CSV\n if (column.startsWith('driver')) {\n const countDriver = column.split(/\\D/).join('');\n\n if (countDrivers.indexOf(countDriver) === -1) {\n countDrivers.push(countDriver);\n }\n }\n });\n\n // Map dob field to birthDay - birthMonth - birthYear\n if (lead.dob) {\n const dob = moment(lead.dob, DATE_SCHEMA_FORMATS);\n\n if (dob.isValid()) {\n lead.birthDay = dob.format('DD');\n lead.birthMonth = dob.format('MMMM');\n lead.birthYear = dob.format('YYYY');\n }\n }\n\n // Create drivers.\n countDrivers.forEach((countDriver) => {\n const startColumn = `driver${countDriver}`;\n const driver = {};\n\n columns.forEach((column, columnIndex) => {\n if (column.startsWith(startColumn)) {\n const columnName = unCapitalize(column.replace(startColumn, ''));\n\n driver[columnName] = row[columnIndex];\n }\n });\n\n if (Object.keys(driver).length > 0) {\n leadDrivers.push(driver);\n }\n });\n\n // Filter and map lead phones.\n const phones = Object.keys(lead)\n .filter((key) => key.startsWith('phone'))\n .map((keyPhone) => {\n return {\n phone: {\n code: '1',\n number: lead[keyPhone],\n },\n };\n });\n // const leadLeadPhoneNumberRelation = getLeadPhoneNumberRelationInput(phones, false);\n\n return {\n _type: type,\n firstName: lead.firstName,\n middleName: lead.middleName,\n lastName: lead.lastName,\n gender: lead.gender,\n email: lead.email?.trim(),\n dob: lead.dob,\n birthMonth: lead.birthMonth,\n birthDay: lead.birthDay,\n birthYear: lead.birthYear,\n creditScore: lead.creditScore,\n amount: lead.amount !== '' && lead.amount !== undefined ? lead.amount : '0',\n address: {\n street1: lead.street1,\n street2: lead.street2,\n city: lead.city,\n zip: lead.zipCode,\n state: lead.state,\n },\n priority: lead.priority,\n [mapLeadTypeRelationName(type)]: {\n create: {\n ...(leadTypeMaps[typePrefix] ? leadTypeMaps[typePrefix](leadTypeFields) : leadTypeFields),\n },\n },\n campaign,\n leadLeadPhoneNumberRelation: {\n create: phones,\n },\n drivers: {\n create: leadDrivers.map(driverCreateMap),\n },\n };\n};\n\n/**\n * Func for get the props for some fields\n * select and date.\n *\n * @param {string} fieldName field key name\n * @param {Array} campaignOptions campaign list\n * @param {Array} ifsScoresOptions ifs scores\n * @returns {object} field props\n */\nexport const getFieldProps = (fieldName, campaignOptions, ifsScoresOptions) => {\n const fields = {\n gender: {\n type: 'select',\n placeholder: 'Gender',\n options: GENDER_OPTIONS,\n },\n birthMonth: {\n // type: 'select',\n type: 'text',\n placeholder: 'Birth month',\n // options: BIRTHMONTH_OPTIONS,\n },\n birthDay: {\n // type: 'select',\n type: 'text',\n placeholder: 'Birth day',\n // options: BIRTHDAY_OPTIONS,\n },\n birthYear: {\n // type: 'select',\n type: 'text',\n placeholder: 'Birth year',\n // options: BIRTHYEAR_OPTIONS,\n },\n state: {\n // type: 'select',\n type: 'text',\n placeholder: 'State',\n // options: STATES_OPTIONS,\n },\n type: {\n type: 'select',\n placeholder: 'Type',\n options: LEAD_TYPE_OPTIONS,\n },\n priority: {\n type: 'select',\n placeholder: 'Priority',\n options: PRIORITY_OPTIONS,\n },\n campaign: {\n type: 'select',\n placeholder: 'Campaign',\n options: campaignOptions,\n },\n ifsScore: {\n type: 'select',\n placeholder: 'IFS Score',\n options: ifsScoresOptions,\n },\n // lead home fields,\n homeDob: { type: 'date' },\n homeBestTimeToContact: { type: 'date' },\n homeInsuredSince: { type: 'date' },\n homePolicyExpiration: { type: 'date' },\n };\n let fieldProps = fields[fieldName] || {};\n\n if (/^driver\\d+/.test(fieldName)) {\n const driverFields = {\n birthDate: {\n type: 'date',\n },\n gender: {\n type: 'select',\n placeholder: 'Gender',\n options: GENDER_OPTIONS,\n },\n maritalStatus: {\n type: 'select',\n placeholder: 'Marital status',\n options: MARITAL_STATUSES_OPTIONS,\n },\n ageFirstLicensed: {\n type: 'date',\n },\n licensedState: {\n // type: 'select',\n type: 'text',\n placeholder: 'State',\n // options: STATES_OPTIONS,\n },\n preferredContactTime: {\n type: 'date',\n },\n policyExpirationDate: {\n type: 'date',\n },\n dUIDWIInThePast5Years: {\n type: 'date',\n },\n dateOfDUIDWI: {\n type: 'date',\n },\n };\n const driverFieldName = unCapitalize(fieldName.replace(/^driver\\d+/, ''));\n fieldProps = driverFields[driverFieldName] || {};\n }\n\n return fieldProps;\n};\n\n/**\n * Pre-processes data at the initial loading of the CSV\n *\n * @param {Array} columns Csv column titles\n * @param {Array} data leads data of csv\n * @returns {Array} columns and data processed\n */\nexport const preprocessDataFromCsv = (columns, data) => {\n let newCsvColumns = [...columns];\n let newCsvData = [...data];\n\n // Remove campaign\n const campaignIndex = columns.indexOf('campaign');\n if (campaignIndex !== -1) {\n newCsvColumns = newCsvColumns.filter((elem) => elem !== 'campaign');\n }\n\n // Uppercase genders\n const genderIndexes = [\n newCsvColumns.indexOf('gender'),\n newCsvColumns.indexOf('driver1Gender'),\n newCsvColumns.indexOf('driver2Gender'),\n newCsvColumns.indexOf('driver3Gender'),\n newCsvColumns.indexOf('driver4Gender'),\n ];\n const hasGenderColumn = genderIndexes.some((e) => e !== -1);\n\n // Uppercase marital statuses\n const maritalStatusesIndexes = [\n newCsvColumns.indexOf('driver1MaritalStatus'),\n newCsvColumns.indexOf('driver2MaritalStatus'),\n newCsvColumns.indexOf('driver3MaritalStatus'),\n newCsvColumns.indexOf('driver4MaritalStatus'),\n ];\n const hasMaritalStatusColumn = maritalStatusesIndexes.some((e) => e !== -1);\n\n // Process dates\n const datesIndexes = [\n newCsvColumns.indexOf('homeBestTimeToContact'),\n newCsvColumns.indexOf('homeDob'),\n newCsvColumns.indexOf('homeInsuredSince'),\n newCsvColumns.indexOf('homePolicyExpiration'),\n newCsvColumns.indexOf('driver1BirthDate'),\n newCsvColumns.indexOf('driver2BirthDate'),\n newCsvColumns.indexOf('driver3BirthDate'),\n newCsvColumns.indexOf('driver4BirthDate'),\n newCsvColumns.indexOf('driver1AgeFirstLicensed'),\n newCsvColumns.indexOf('driver2AgeFirstLicensed'),\n newCsvColumns.indexOf('driver3AgeFirstLicensed'),\n newCsvColumns.indexOf('driver4AgeFirstLicensed'),\n newCsvColumns.indexOf('driver1PreferredContactTime'),\n newCsvColumns.indexOf('driver2PreferredContactTime'),\n newCsvColumns.indexOf('driver3PreferredContactTime'),\n newCsvColumns.indexOf('driver4PreferredContactTime'),\n newCsvColumns.indexOf('driver1PolicyExpirationDate'),\n newCsvColumns.indexOf('driver2PolicyExpirationDate'),\n newCsvColumns.indexOf('driver3PolicyExpirationDate'),\n newCsvColumns.indexOf('driver4PolicyExpirationDate'),\n newCsvColumns.indexOf('driver1dUIDWIInThePast5Years'),\n newCsvColumns.indexOf('driver2dUIDWIInThePast5Years'),\n newCsvColumns.indexOf('driver3dUIDWIInThePast5Years'),\n newCsvColumns.indexOf('driver4dUIDWIInThePast5Years'),\n newCsvColumns.indexOf('driver1DateOfDUIDWI'),\n newCsvColumns.indexOf('driver2DateOfDUIDWI'),\n newCsvColumns.indexOf('driver3DateOfDUIDWI'),\n newCsvColumns.indexOf('driver4DateOfDUIDWI'),\n ];\n const hasDateColumns = datesIndexes.some((e) => e !== -1);\n\n // Change priority\n const priorityIndex = newCsvColumns.indexOf('priority');\n\n /// Change type\n const typeIndex = newCsvColumns.indexOf('type');\n\n newCsvData = newCsvData.map((row) => {\n let subarr = row;\n if (campaignIndex !== -1) {\n subarr = subarr.filter((_, index) => index !== campaignIndex);\n }\n\n return subarr.map((elem, i) => {\n if (hasGenderColumn && genderIndexes.includes(i)) {\n return Object.values(GENDERS).includes(elem.toUpperCase()) ? elem.toUpperCase() : elem;\n }\n\n if (hasMaritalStatusColumn && maritalStatusesIndexes.includes(i)) {\n return Object.values(MARITAL_STATUSES).includes(elem.toUpperCase())\n ? elem.toUpperCase()\n : elem;\n }\n\n if (priorityIndex !== -1 && i === priorityIndex && !!elem) {\n const priority = findPriorityNumber(elem);\n\n return priority || elem;\n }\n\n if (typeIndex !== -1 && i === typeIndex && !!elem) {\n const types = Object.values(TYPE_VALUES);\n\n /* look for the correct type, not if you made a global\n function so as not to confuse with similar parts */\n const type = types.find((item) => {\n const itemStr = item.replace(/ /g, '').toLowerCase();\n const typeStr = elem.replace(/ /g, '').toLowerCase();\n return itemStr === typeStr;\n });\n\n return type || elem;\n }\n\n if (hasDateColumns && datesIndexes.includes(i)) {\n return isValidDate(elem) ? elem : null;\n }\n\n return elem;\n });\n });\n\n return [newCsvColumns, newCsvData];\n};\n\n/**\n * @param {object} columns - Columns to display in the list\n * @returns {string} - Strings with columns sizes\n */\nexport function getColumnsSizes(columns) {\n const sortedColumns = Object.entries(columns).filter(([, column]) => column.active);\n\n const sortedColumnsSizes = sortedColumns.reduce((columnsStr, [, { size }]) => {\n return `${columnsStr} ${size}`;\n }, '');\n\n const columnSizes = `60px ${sortedColumnsSizes} 110px`;\n\n return columnSizes;\n}\n\n/**\n * @param {number} max - Max number of years\n * @param {number} min - Min number of years\n * @param {boolean} acending - If it should be be in acending order.\n * @returns {Array<{label:number,value:string}>} - Array with the formatted years\n */\nexport function getDateOfBirthYears(max, min, acending = false) {\n const maxNum = Number(max);\n const minNum = Number(min);\n\n if (isNaN(maxNum) || isNaN(minNum)) {\n throw Error('Expected an number');\n }\n\n if (!(maxNum > minNum)) {\n throw Error('Expected max to be greater than min');\n }\n const diference = maxNum - minNum + 1;\n\n const years = [];\n const order = acending ? 'push' : 'unshift';\n\n for (let index = 0; index < diference; index++) {\n const year = { label: minNum + index, value: (minNum + index).toString() };\n\n years[order](year);\n }\n return years;\n}\n\n/**\n * @param {object} lead - lead data\n * @returns {Array} Lead phone numbers\n */\nexport function getLeadPhoneNumbers(lead) {\n if (lead?.leadLeadPhoneNumberRelation?.items) {\n if (lead.leadLeadPhoneNumberRelation.items.length > 0) {\n return lead.leadLeadPhoneNumberRelation.items;\n }\n }\n\n if (lead.phones) {\n return lead.phones.map((phone) => ({ phone }));\n }\n\n return [];\n}\n\n/**\n * @param {string} phone phone number\n * @returns {string} parsed phone number to (xxx) xxx-xxxx\n */\nexport const changePhoneStructure = (phone) => {\n if (!phone) return phone;\n\n let phoneArr = phone.split('');\n\n if (phoneArr.includes('(')) return phone;\n\n let parsePhone = [];\n\n parsePhone = [\n '(',\n ...phoneArr.map((number, index) => {\n let character = '';\n if (index === 2) {\n character = ') ';\n } else if (index === 5) {\n character = '-';\n }\n return number + character;\n }),\n ];\n\n return parsePhone.join('');\n};\n/**\n * @param {string} phone - Phone number.\n * @returns {string} Clean phone number from (xxx) xxx-xxxx to xxxxxxxxxx.\n */\nexport const parsePhone = (phone) => {\n // If phone parameter has only one digit, parseAndKeepRawInput will crash\n if (!phone || phone.length === 1) return phone;\n const phoneUtil = PhoneNumberUtil.getInstance();\n return phoneUtil\n .parseAndKeepRawInput(phone, 'US')\n .getNationalNumber()\n .toString();\n};\n","/**\n * @param {string} str PhoneNumber string\n * @returns {{code:string,number:string}} str PhoneNumber string\n */\nexport function parsePhoneNumber(str) {\n //Filter only numbers from the input\n const cleaned = ('' + str).replace(/\\D/g, '');\n\n //Check if the input is of correct\n const match = cleaned.match(/^(1|)?(\\d{3})(\\d{3})(\\d{4})$/);\n\n if (match) {\n //Remove the matched extension code\n //Change this to format for any country code.\n const code = match[1] ? '1' : '1';\n const number = [match[2], match[3], match[4]].join('');\n return { code, number };\n }\n\n return str;\n}\n\n/**\n * @typedef {object} phoneNumber\n * @property {string} phoneNumber phone number\n * @property {boolean} [error] phone number error\n */\n/**\n * @param {Array.} numbers - Phone numbers from twilio api.\n * @returns {[Array.,Array.]} - Return a array with purchased phones and failed phones.\n */\nexport function parseSavedNumbers(numbers) {\n const purchasedNumbers = numbers.filter((item) => !item.error);\n const failedNumbers = numbers.filter((item) => item.error);\n console.log('numbers with errors', JSON.stringify(numbers)); //numbers with errors [{\"error\":true,\"phoneNumber\":\"+1 (855) 353-4991\"}]\n return [purchasedNumbers, failedNumbers];\n}\n/**\n * Given a array of phone object returns and string with the concatenated phones.\n *\n * @param {Array.} numbers phonenumbers\n * @returns {string} string of the phone number\n */\nexport function getPhoneNumbersString(numbers) {\n const phones = numbers.map((item) => item.phoneNumber);\n return phones.join(', ');\n}\n/**\n * Given and number object returns and string of the phone number.\n *\n * @param {object} phoneNumber phonenumbers\n * @returns {string} string of the phone number\n */\nexport function getPhoneNumberStr(phoneNumber) {\n return `+${phoneNumber.number.code}${phoneNumber.number.number}`;\n}\n","import { getRandomNumber } from '../../shared/helpers';\nimport { getLeadFullName, getLeadPhoneNumbers } from '../leads/leads-utils';\nimport { parsePhoneNumber } from '../my-account/phone-numbers/phone-numbers-utils';\nimport { TWILIO_ERROR_CODES } from './phone-calls-model';\nimport moment from 'moment';\nimport {\n createLeadCallCadence,\n fetchCallInfo,\n fetchLeadCallCadenceAndAgency,\n updateLeadCallCadence,\n} from './phone-calls-actions';\n\n/**\n * WARNING: This function only format phone numbers with the +1 us code\n *\n * @param {string} str Phone number without format or spaces\n * @returns {string} Formated phone number or the give string if doesn't the pattern\n */\nexport function formatPhoneNumber(str) {\n //Filter only numbers from the input\n const cleaned = ('' + str).replace(/\\D/g, '');\n\n //Check if the input is of correct\n const match = cleaned.match(/^(1|)?(\\d{3})(\\d{3})(\\d{4})$/);\n\n if (match) {\n //Remove the matched extension code\n //Change this to format for any country code.\n const intlCode = match[1] ? '+1 ' : '';\n return [intlCode, '(', match[2], ') ', match[3], '-', match[4]].join('');\n }\n\n return str;\n}\n\n/**\n *\n * @param {Array} list List of lead object with phone numbers\n * @returns {Array} List of phone number\n */\nexport function mapPhoneNumberList(list) {\n const newList = list.reduce((prev, current) => {\n const leadName = getLeadFullName(current);\n const phones = getLeadPhoneNumbers(current);\n\n if (phones) {\n const mappedPhones = phones.map((item) => ({\n leadName,\n phone: item.phone.number,\n formatedPhone: formatPhoneNumber(item.phone.number),\n leadId: current.id,\n }));\n return [...prev, ...mappedPhones];\n } else {\n return [...prev];\n }\n }, []);\n return newList;\n}\n\nconst timeFormats = [\n { singular: 'second', plural: 'seconds', d: 1000 },\n { singular: 'minute', plural: 'minutes', d: 60 },\n { singular: 'hour', plural: 'hours', d: 60 },\n { singular: 'day', plural: 'days', d: 24 },\n { singular: 'month', plural: 'months', d: 30 },\n { singular: 'year', plural: 'years', d: 12 },\n];\n\n/**\n * Formats a milisecons representation into a valid duration label\n *\n * @param {number} duration - Time in miliseconds to format\n * @param {object} formats - The formats to transform the time\n * @param {number} depth - The depth at which the algorithm is running\n *\n * @returns {string|null} - The appropiate duration label or null if a invalid format is passed\n */\nexport function formatDuration(duration, formats = timeFormats, depth = 0) {\n const [format] = formats;\n\n if (!format || !format.singular || !format.plural || !format.d) return null;\n\n if (duration === 0) return '0 seconds';\n\n const result = duration / format.d;\n\n if (result < 1) {\n if (depth === 0) return `${Math.floor(result)} ${format.plural}`;\n\n return null;\n }\n\n const next = formatDuration(result, formats.slice(1), depth + 1);\n\n if (!next) return `${Math.floor(result)} ${result >= 2 ? format.plural : format.singular}`;\n\n return next;\n}\n\n/**\n * This function use a list of twilio offline errors and check if the error code exists in the list\n * If it exists return true and handle the error in the offline calbback\n * If not return false so the error is triggered for other reason\n *\n * @param {object} error Twilio error object\n * @param {number} error.code Error code\n * @returns {boolean} Boolean to show or not the error\n *\n */\nexport function twilioConnectionErrors(error) {\n return TWILIO_ERROR_CODES.includes(error.code);\n}\n\n/**\n *\n * @typedef {object} leadStage\n * @property {string} id Id of the stage\n * @property {string} name Name of the stage\n */\n/**\n *\n * @typedef {object} selectOption\n * @property {string} id Id of the stage\n * @property {string} name Name of the stage\n */\n/**\n * @param {Array} list Array of lead stages\n * @returns {Array} Array of select option objects\n */\nexport function parseListToSelectOptions(list) {\n return list.map((item) => {\n if (typeof item === 'string') {\n return { label: item, value: item };\n }\n const { name, id } = item;\n return { label: name, value: id };\n });\n}\n\n/**\n * Transforms an integer second value into a minutes:seconds format\n *\n * @param {number} value - The value in seconds to format\n *\n * @returns {string} The minute:second format string\n */\nexport const formatSeconds = (value) => {\n const rawSeconds = parseInt(value);\n\n let minutes = Math.floor(rawSeconds / 60);\n let seconds = rawSeconds - minutes * 60;\n\n if (minutes < 10) minutes = `0${minutes}`;\n\n if (seconds < 10) seconds = `0${seconds}`;\n\n return `${minutes}:${seconds}`;\n};\n\n/**\n * @param {Array} numbers - numbers\n * @param {string} phoneNumber - Phone number to search.\n * @returns {object} - Phonenumber object.\n */\nexport function getBestPhoneNumber(numbers, phoneNumber, isTollFree = false) {\n //list of toll-free number prefixes, updated every 3-5 years by the FCC\n let tollFreePrefixes = ['800', '833', '844', '855', '866', '877', '888'];\n const { number } = parsePhoneNumber(phoneNumber);\n\n let selectedNumber;\n\n if (isTollFree) {\n selectedNumber = numbers.find((item) => {\n if (tollFreePrefixes.includes(item?.number?.number?.slice(0, 3))) {\n return true;\n }\n return false;\n });\n } else {\n selectedNumber = numbers.find((item) => {\n if (item?.number?.number?.slice(0, 2) === number?.slice(0, 2)) {\n return true;\n }\n return false;\n });\n }\n console.log('selected number', selectedNumber);\n if (selectedNumber) {\n return selectedNumber;\n }\n\n const randomIndex = getRandomNumber(0, numbers.length - 1);\n\n return numbers[randomIndex];\n}\n\n/**\n * Given the date an automatic flow on a lead starts\n * return the interval the lead is in\n *\n * @param {object} config - The lead's call cadence object\n * @returns {string} The interval the lead is in\n */\nexport function getCadenceInterval(config) {\n if (!config) return null;\n\n const createdAt = moment(config.createdAt);\n\n if (createdAt > moment().subtract(1, 'day')) {\n return 'day1';\n } else if (createdAt > moment().subtract(7, 'days') && createdAt < moment().subtract(2, 'days')) {\n return 'day2To7';\n } else if (\n createdAt > moment().subtract(30, 'days') &&\n createdAt < moment().subtract(8, 'days')\n ) {\n return 'day8To30';\n } else if (\n createdAt > moment().subtract(89, 'days') &&\n createdAt < moment().subtract(31, 'days')\n ) {\n return 'day31To89';\n }\n}\n\n/**\n * Updates or creates the call cadence for a given lead.\n *\n * This function fetches the current call cadence for the lead, determines the appropriate interval,\n * and either updates the existing cadence or creates a new one.\n *\n * @param {string} leadId - The ID of the lead for which to handle the call cadence.\n * @param {string} callSid - The ID of the call on twilio platform related to the lead.\n * @returns {Promise} A promise that resolves when the operation is complete.\n */\nexport async function handleLeadCallCadence(leadId, callSid) {\n const lead = await fetchLeadCallCadenceAndAgency(leadId);\n const callInfo = await fetchCallInfo(callSid, lead.campaign.agency.twilioSID);\n const interval = getCadenceInterval(lead.callCadence);\n\n if (interval) {\n updateLeadCallCadence(lead.callCadence.id, {\n [interval]: lead.callCadence[interval] + 1,\n lastCalled: callInfo.startTime,\n });\n } else {\n createLeadCallCadence({\n day1: 1,\n lastCalled: callInfo.startTime,\n lead: { connect: { id: leadId } },\n });\n }\n}\n","import { useEffect } from 'react';\nimport { useQuery } from '@apollo/client/react/hooks';\nimport {\n USER_STATUS_LIST_SUBSCRIPTION,\n USER_STATUS_LIST_QUERY,\n} from '../../modules/user-status/user-status-queries';\nimport { UserStatus } from '@cobuildlab/lead-volt-share';\nimport { useUser } from './useUser';\n\n/**\n * @typedef {'ON A CALL' | 'AWAY' | 'ACTIVE' | 'WITH CLIENT' | 'WRAPPING ON A CALL'} statuses\n */\n/**\n * Hook for manage the current user status and handle the change of it\n *\n * @returns {statuses} User status type string.\n */\nexport function useUserStatus() {\n const [user] = useUser();\n const { data, loading, subscribeToMore } = useQuery(USER_STATUS_LIST_QUERY, {\n variables: {\n user: user?.id,\n },\n fetchPolicy: 'network-only',\n });\n //console.log('user from useuserstatus', user)\n //console.log('data from useuserstatus', data)\n\n useEffect(() => {\n const unsubscribe = subscribeToMore({\n document: USER_STATUS_LIST_SUBSCRIPTION,\n variables: {\n user: user.id,\n },\n updateQuery: (_, { subscriptionData }) => {\n return {\n userStatusesList: {\n items: [subscriptionData.data.UserStatus.node],\n },\n };\n },\n onError: (e) => console.log('useUserStatus error', e, user),\n });\n\n return () => {\n unsubscribe();\n };\n }, [user, subscribeToMore]);\n\n if (!data || loading) {\n return UserStatus.AWAY;\n }\n\n const { userStatusesList } = data;\n const [status] = userStatusesList.items;\n\n if (!status) {\n return UserStatus.ACTIVE;\n }\n\n return status.status;\n}\n","import { useEffect, useState, useRef, useCallback } from 'react';\nimport {\n initializeTwilioClient,\n createPhoneCallRegistry,\n fetchLeadStages,\n fetchPhoneNumbers,\n fetchCallParticipant,\n} from './phone-calls-actions';\nimport { TwilioDevice } from './twilio';\nimport {\n DEVICE_EVENTS,\n callControlsDefaultState,\n AUTOMATIC_CALLS_STATUSES,\n CALL_TYPES,\n} from './phone-calls-model';\nimport { useUser } from '../../shared/hooks/useUser';\nimport { createUserStatus } from '../user-status/user-status-actions';\nimport { USER_STATUSES } from '../user-status/user-status-model';\nimport * as toast from 'shared/components/toast/Toast';\nimport {\n getBestPhoneNumber,\n twilioConnectionErrors,\n handleLeadCallCadence,\n} from './phone-calls-utils';\nimport { useUserStatus } from '../../shared/hooks/useUserStatus';\nimport socketIOClient from 'socket.io-client';\nimport { getUserToken } from '../../shared/helpers';\nimport { useAgency } from '../../shared/hooks/useAgency';\nimport { getLeadFullName } from '../leads/leads-utils';\nimport { useHistory } from 'react-router-dom';\nimport {\n OnCallStartError,\n OnCallStartEvent,\n OnFetchCallParticipant,\n OnLeadStagesListError,\n OnLeadStagesListEvent,\n onOnlineUsersList,\n OnPhoneCallFinishedEvent,\n OnPhoneCallRegistryError,\n OnPhoneCallRegistryEvent,\n onPhoneNumberList,\n} from './phone-calls-events';\nimport { useEvent, useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { OnUserStatusCreateEvent } from 'modules/user-status/user-status-events';\n\nconst dispatcherEndpoint = process.env.REACT_APP_DISPATCHER_ENDPOINT;\n\n/**\n * @param {string} event Twilio devaice event name\n * @param {Function} callback Callback when the ever is fire\n */\nexport function useTwilioDeviceSubscription(event, callback) {\n const subscriptionRef = useRef(callback);\n subscriptionRef.current = callback;\n useEffect(() => {\n const subscriptionCallback = (params) => {\n subscriptionRef.current(params);\n };\n TwilioDevice.on(event, subscriptionCallback);\n return () => {\n console.log('call: removing event listener from TwilioDevice');\n TwilioDevice.removeListener(event, subscriptionCallback);\n };\n }, [event]);\n}\n/**\n * @typedef {object} PhoneCallComponent\n * @property {boolean} ready Enable or desable the component\n * @property {boolean} startingCall Enable or desable the component when a call is starting\n *\n * @property {Function} makeCall Callback to starts the calls\n */\n/**\n * Hook to make a phone call component\n * this allows the component to initialize t\n * he twilio device on render and the phone calls methods and properties\n *\n * @param {boolean} shouldInit Indicates if the hook should init.\n * @returns {PhoneCallComponent} Object with the properties and methods from the phone calls provider to use in others components\n */\nexport function usePhoneCallComponent(shouldInit = true) {\n const [ready, setReady] = useState(TwilioDevice.isInitialized);\n const [startingCall, setStartingCall] = useState(false);\n const [user] = useUser();\n const agency = useAgency();\n const phoneNumbers = useEvent(onPhoneNumberList);\n\n const isReady = phoneNumbers && ready ? true : false;\n\n console.log('TWILIODEVICE', TwilioDevice);\n\n useEventSubscription(OnCallStartEvent, () => {\n setReady(false);\n });\n\n useEventSubscription(OnPhoneCallFinishedEvent, () => {\n setReady(true);\n });\n\n useEventSubscription(OnPhoneCallRegistryEvent, () => {\n setStartingCall(false);\n });\n\n const makeCall = useCallback(\n /**\n * Initiates a phone call by selecting the best available phone number,\n * dispatching relevant events, and updating the user's status.\n *\n * @function makeCall\n * @param {string} phoneNumber - The phone number to call.\n * @param {string} receiverName - The name of the person receiving the call.\n * @param {string} [leadId] - Optional lead id related to the call.\n */\n async (phoneNumber, receiverName, leadId) => {\n const { id: userId } = user;\n\n if (phoneNumbers.length === 0) {\n return OnCallStartError.dispatch('There are no available phone numbers on this agency');\n }\n\n const callerNumber = getBestPhoneNumber(phoneNumbers, phoneNumber);\n\n OnCallStartEvent.dispatch({\n phoneNumber,\n receiverName,\n lead: leadId,\n type: leadId ? 'lead' : 'default',\n });\n\n setStartingCall(true);\n\n createPhoneCallRegistry(\n { to: phoneNumber, from: callerNumber.id, userId, agencyId: agency.id },\n leadId,\n );\n\n createUserStatus({\n status: USER_STATUSES.ON_A_CALL,\n user: userId,\n });\n },\n [user, agency, phoneNumbers],\n );\n\n const onReady = useCallback(() => {\n console.log('TWILIO DEVICE READY');\n setReady(true);\n }, []);\n\n const onError = useCallback((error) => {\n const connectionError = twilioConnectionErrors(error);\n console.log('TWILIO CONN ERROR', connectionError);\n if (connectionError) {\n setReady(false);\n }\n }, []);\n\n const onOffline = useCallback(() => {\n console.log('TWILIO DEVICE OFFLINE');\n setReady(false);\n }, []);\n\n useTwilioDeviceSubscription(DEVICE_EVENTS.ready, onReady);\n useTwilioDeviceSubscription(DEVICE_EVENTS.error, onError);\n useTwilioDeviceSubscription(DEVICE_EVENTS.offline, onOffline);\n\n return { ready: isReady, makeCall, startingCall };\n}\n\n/**\n * Hook to wrap all the logic of the phone call controls\n *\n * @typedef {object} PhoneCallControls\n * @property {boolean} show To show or not the phone call controls\n * @property {boolean} muted Mute state to update the toggle mute btn styling\n * @property {boolean} calling State of current call\n * @property {number} duration Duration of the current connected phone call in milisecons\n * @property {string} phoneNumber Receiver phone number\n * @property {string} receiverName Receiver phone number to display in the controls\n * @property {string} phoneCallType Type of the current phone call\n * @property {string} lead Id of lead related to the call\n * @property {string} phoneCallId Id of phone call\n * @property {Function} muteToggle Toggle mute state of the current phone call\n * @property {Function} handleVoiceMail Hangup and set phone call as rejected\n * @property {Function} handleHangUp Hangup and set phone call as finished\n * @property {Function} handleHangUp Hangup and set phone call as finished\n * @property {Function} close To hide the control and form\n */\n\n/**\n * @returns {PhoneCallControls} Object with the properties and methods\n */\nexport function usePhoneCallControls() {\n const [{ connection, ...state }, setState] = useState(callControlsDefaultState);\n const [muted, setMuted] = useState(false);\n const [user] = useUser();\n const audioStream = useRef(null);\n const microphoneStream = useRef(null);\n const agency = useAgency();\n const [showDialPad, setShowDialPad] = useState(false);\n const [isErrorToastShowing, setIsErrorToastShowing] = useState(false);\n const history = useHistory();\n\n const closeDialPad = () => setShowDialPad(false);\n const toggleDialPad = () => setShowDialPad((prevState) => !prevState);\n\n useEffect(() => {\n initializeTwilioClient(user.id, agency.id);\n }, [agency, user]);\n\n /**\n * Effect that fetches the agency's\n * available phone numbers every 20 minutes\n */\n useEffect(() => {\n const {\n company: { subscriptions },\n } = agency;\n const [subscription] = subscriptions.items;\n\n const fecthNumbers = async () => {\n const list = await fetchPhoneNumbers(agency.id, subscription.status);\n onPhoneNumberList.dispatch(list);\n };\n\n const minutes = 20;\n const ms = minutes * 60 * 1000; // Minutes to milisecons\n\n fecthNumbers(); // Call on mount\n const interval = setInterval(fecthNumbers, ms); // Call every setted minutes\n\n return () => clearInterval(interval);\n }, [agency]);\n\n /**\n * Effect that handles subscriptions\n * once the app is connected to a call\n */\n useEffect(() => {\n if (connection) {\n const onAccept = () => {\n createUserStatus({\n status: USER_STATUSES.ON_A_CALL,\n user: user.id,\n });\n };\n\n const onCancel = () => {\n console.log('call: cancel event triggered, disconnecting call');\n TwilioDevice.disconnectAll();\n };\n\n connection.on(DEVICE_EVENTS.accept, onAccept);\n connection.on(DEVICE_EVENTS.cancel, onCancel);\n connection.on(DEVICE_EVENTS.reject, onCancel);\n\n return () => {\n connection.removeListener(DEVICE_EVENTS.accept, onAccept);\n connection.removeListener(DEVICE_EVENTS.cancel, onCancel);\n connection.removeListener(DEVICE_EVENTS.reject, onCancel);\n };\n }\n }, [connection, user]);\n\n const close = useCallback(async () => {\n setState(callControlsDefaultState);\n\n await createUserStatus({\n status: USER_STATUSES.ACTIVE,\n user: user?.id,\n });\n console.log('CALL CLOSED');\n OnPhoneCallFinishedEvent.dispatch();\n }, [user]);\n\n const acceptCall = useCallback(\n (lead) => {\n connection.accept();\n if (lead) {\n history.push(`/leads/${lead.id}`);\n }\n setState((prevState) => ({\n ...prevState,\n ringing: false,\n calling: true,\n }));\n },\n [connection, history],\n );\n\n const ignoreCall = useCallback(() => {\n connection.ignore();\n console.log('call ignored');\n close();\n }, [connection, close]);\n\n const rejectCall = useCallback(() => {\n connection.reject();\n console.log('call rejected');\n close();\n }, [connection, close]);\n\n const sendDialDigit = useCallback(\n (digit) => {\n connection.sendDigits(digit);\n },\n [connection],\n );\n\n const muteToggle = useCallback(() => {\n if (connection) {\n setMuted((muted) => {\n const mute = !muted;\n connection.mute(mute);\n return mute;\n });\n }\n }, [connection]);\n\n const handleHangUp = useCallback(() => {\n TwilioDevice.disconnectAll();\n console.log('disconnected all devices');\n }, []);\n\n const handleVoiceMail = useCallback(\n (audio) => {\n console.log('call: Handling voicemail');\n if (connection) {\n const AudioContext = window.AudioContext || window.webkitAudioContext;\n\n if (AudioContext) {\n if (audioStream.current) {\n connection.mediaStream.setInputTracksFromStream(audioStream.current.stream);\n audio.play();\n } else {\n const context = new AudioContext();\n const track = context.createMediaElementSource(audio);\n const output = context.createMediaStreamDestination();\n\n track.connect(output);\n connection.mediaStream.setInputTracksFromStream(output.stream);\n audio.play();\n }\n } else {\n toast.attention('Your browser does not support this feature');\n }\n } else {\n toast.attention('The phone call it is not connected');\n }\n },\n [connection],\n );\n\n const handleVoiceMailEnded = useCallback(() => {\n console.log('call: Voicemail ended');\n if (connection) {\n const AudioContext = window.AudioContext || window.webkitAudioContext;\n\n if (AudioContext) {\n const context = new AudioContext();\n\n if (microphoneStream.current) {\n microphoneStream.current.getTracks().forEach((track) => track.stop());\n }\n\n navigator.mediaDevices.getUserMedia({ audio: true }).then((stream) => {\n const track = context.createMediaStreamSource(stream);\n const output = context.createMediaStreamDestination();\n\n track.connect(output);\n\n connection.mediaStream.setInputTracksFromStream(output.stream);\n\n context.resume();\n\n microphoneStream.current = stream;\n handleHangUp();\n });\n }\n } else {\n toast.attention('The phone call is not connected');\n }\n }, [connection, handleHangUp]);\n\n useEventSubscription(OnCallStartError, (message) => toast.error(message));\n\n /**\n * After a phone call record is created in 8base,\n * this subscription triggers to start the phone call\n */\n useEventSubscription(OnPhoneCallRegistryEvent, ({ phoneCallCreate: call }) => {\n const customParameters = call?.lead?.id\n ? { id: call.id, leadId: call.lead.id }\n : { id: call.id };\n\n const conn = TwilioDevice.connect(customParameters);\n\n setState((prevState) => ({\n ...prevState,\n show: true,\n calling: true,\n type: CALL_TYPES.OUTBOUND,\n _type: CALL_TYPES.OUTBOUND,\n callId: call.id,\n from: `+${call.from.number.code}${call.from.number.number}`,\n to: `+1${call.to}`,\n lead: call.lead ? call.lead : null,\n duration: 0,\n connection: conn,\n }));\n console.log('CALL STATE: ', state);\n });\n\n useEventSubscription(OnPhoneCallRegistryError, (e) => {\n toast.error(e.message);\n });\n\n /**\n * After an inbound connection gets to this client,\n * a request is made to get the data of the call,\n * in this subscription the info of the call is set\n * on the hook's state\n */\n useEventSubscription(\n OnFetchCallParticipant,\n (data) => {\n console.log('data from fetchcallparticipant', data);\n if (data) {\n const { inboundCall, outboundCall } = data.phoneCallParticipant;\n const id = inboundCall?.id || outboundCall?.id;\n const _type = inboundCall ? CALL_TYPES.INBOUND : CALL_TYPES.OUTBOUND;\n const lead = inboundCall?.lead || outboundCall?.lead;\n const from =\n inboundCall?.from ||\n `+${outboundCall.from.number.code}${outboundCall.from.number.number}`;\n const to =\n outboundCall?.to || `+${inboundCall.to.number.code}${inboundCall.to.number.number}`;\n\n setState((prevState) => {\n const isCalling = prevState.connection && prevState.connection.status() !== 'closed';\n console.log('prevState isCalling', { prevState, isCalling });\n return {\n ...prevState,\n show: true,\n callId: id,\n to,\n from,\n calling: isCalling,\n type: CALL_TYPES.INBOUND,\n _type: _type,\n ringing: true,\n lead: lead ? lead : null,\n };\n });\n console.log('LEAD', lead);\n }\n },\n [],\n );\n\n /**\n * Twilio subscription that is triggered when an outbound call\n * is connected or when an inbound call connection is accepted\n */\n useTwilioDeviceSubscription(DEVICE_EVENTS.connect, (conn) => {\n /**@type {string | undefined}*/\n const leadId = conn.customParameters.get('leadId');\n\n /**@type {string | undefined}*/\n const callSid = conn.parameters.CallSid;\n\n if (leadId) handleLeadCallCadence(leadId, callSid);\n\n const start = Date.now();\n\n /**\n * Calculate call duration every 500ms\n */\n const interval = setInterval(() => {\n setState((prevState) => ({\n ...prevState,\n duration: Date.now() - start,\n }));\n }, 500);\n\n setState((prevState) => ({\n ...prevState,\n interval,\n }));\n });\n\n /**\n * Twilio subscription that triggers when an incoming\n * phone call gets to the client, with the connection object\n * the call can be accepter, ignored, rejected, etc\n */\n useTwilioDeviceSubscription(DEVICE_EVENTS.incoming, (conn) => {\n const id = conn.customParameters.get('id');\n console.log('CALL INCOMING', conn);\n setState((prevState) => ({\n ...prevState,\n connection: conn,\n }));\n\n fetchCallParticipant(id);\n });\n\n /**\n * Twilio subscription that is triggered\n * every time a connection is closed\n */\n useTwilioDeviceSubscription(DEVICE_EVENTS.disconnect, () => {\n clearInterval(state.interval);\n console.log('CONNECTION ENDED');\n\n if (audioStream.current) {\n audioStream.current.stream.getTracks().forEach((track) => track.stop());\n }\n\n if (microphoneStream.current) {\n microphoneStream.current.getTracks().forEach((track) => track.stop());\n }\n\n setState((prevState) => ({\n ...prevState,\n interval: null,\n calling: false,\n }));\n\n if (!state.lead) {\n close();\n }\n });\n\n /**\n * Twilio subscription that is triggered when a call is canceled\n * either by the user or by the cloud function when\n * other user answers the call\n */\n useTwilioDeviceSubscription(DEVICE_EVENTS.cancel, () => {\n setState((prevState) => ({\n ...prevState,\n interval: null,\n calling: false,\n }));\n console.log('DEVICE CALL CANCELED');\n if (!state.lead) {\n close();\n }\n });\n\n /**\n * Twilio subscription to handle\n * connection errors\n */\n useTwilioDeviceSubscription(DEVICE_EVENTS.error, (error) => {\n const isError = twilioConnectionErrors(error);\n\n if (!isError) {\n const message = `Phone call error: ${error.message}`;\n\n toast.error(message);\n } else {\n const { code } = error;\n\n if (code === 31002) {\n toast.attention('Call declined');\n handleHangUp();\n }\n\n // This code reference an error related to the phone number to call\n if (code === 31001) {\n toast.error(\"Can't call this number\");\n }\n\n // This errors means that the token has expired so we fetch a new one\n if (code === 31205 || code === 31204) {\n initializeTwilioClient(user.id, agency.id, true);\n }\n }\n });\n\n /**\n * Twilio subscription that is triggered when\n * the connection drops or the device's token\n * expires\n */\n useTwilioDeviceSubscription(DEVICE_EVENTS.offline, () => {\n if (!isErrorToastShowing) {\n setIsErrorToastShowing(true);\n toast.error(\n \"Connection lost: can't make phone call until the connection returns.\",\n setIsErrorToastShowing,\n );\n }\n });\n\n return {\n // Values\n show: state.show,\n duration: state.duration,\n from: state.from,\n to: state.to,\n lead: state.lead,\n calling: state.calling,\n type: state.type,\n _type: state._type,\n callId: state.callId,\n campaign: state.campaign,\n ringing: state.ringing,\n muted,\n showDialPad,\n // Methods\n muteToggle,\n handleVoiceMail,\n handleVoiceMailEnded,\n handleHangUp,\n close,\n acceptCall,\n ignoreCall,\n rejectCall,\n toggleDialPad,\n closeDialPad,\n sendDialDigit,\n };\n}\n\n/**\n *\n * @typedef {object} leadStage\n * @property {string} id Id of the stage\n * @property {string} name Name of the stage\n */\n/**\n * @returns {Array} Array of select option objects\n */\nexport function useLeadStages() {\n const [{ list, loading }, setList] = useState({ list: [], loading: true });\n\n useEffect(() => {\n fetchLeadStages();\n }, []);\n useEventSubscription(OnLeadStagesListEvent, ({ leadStagesList: { items } }) => {\n setList({ list: items, loading: false });\n });\n useEventSubscription(OnLeadStagesListError, (e) => {\n setList({ list: [], loading: false });\n toast.error(JSON.stringify(e));\n });\n return [list, loading];\n}\n\n/**\n * Hook tha handle the automatic calls logic\n *\n * @param {object} auth - Auth object.\n *\n * @returns {object} Array\n */\nexport function useAutomaticCalls(auth) {\n const agency = useAgency();\n const socketRef = useRef(null);\n const status = useUserStatus();\n const { ready, makeCall } = usePhoneCallComponent(status === USER_STATUSES.ACTIVE);\n const [user] = useUser();\n const history = useHistory();\n const [active, setActive] = useState(false);\n const [statusType, setStatusType] = useState(AUTOMATIC_CALLS_STATUSES.ON);\n const [socket, setSocket] = useState();\n const userId = user.id;\n const agencyId = agency.id;\n // TODO: remove the optional operator when we are sure that all agencies has their config relation\n const agencySetting = agency?.phoneCallSettings?.automaticCalls;\n\n const requestLead = useCallback(() => {\n socket.emit('lead:request');\n setStatusType(AUTOMATIC_CALLS_STATUSES.ON_AND_REQUESTING);\n }, [socket]);\n\n const makeCallToLead = useCallback(\n (phone, lead) => {\n const tel = `${phone.number}`;\n const name = getLeadFullName(lead);\n\n makeCall(tel, name, lead.id);\n history.push(`/leads/${lead.id}`);\n },\n [history, makeCall],\n );\n\n useEffect(() => {\n if (active && status !== USER_STATUSES.ACTIVE) {\n setStatusType(AUTOMATIC_CALLS_STATUSES.ON);\n }\n }, [active, status]);\n\n const startRequesting = useCallback(() => {\n if (status !== USER_STATUSES.ACTIVE || !active || !agencySetting || !ready) {\n return;\n }\n requestLead();\n }, [ready, active, agencySetting, requestLead, status]);\n\n /**\n * Effect which handles socket connection to call dispatcher.\n */\n useEffect(() => {\n if (!userId || !agencyId) {\n return;\n }\n\n const token = getUserToken();\n\n const socketClient = socketIOClient(dispatcherEndpoint, {\n query: {\n token,\n agency: agencyId,\n user: userId,\n lastConnection: localStorage.getItem('lastConnection'),\n },\n });\n console.log('call: useAutomaticCalls socketClient', socketClient);\n setSocket(socketClient);\n\n return () => {\n socketClient.removeAllListeners();\n socketClient.close();\n };\n }, [agencyId, userId]);\n\n /**\n * Effect which handles lead requests to socket server.\n */\n useEffect(() => {\n if (!socket) {\n return;\n }\n\n startRequesting();\n\n socket.on('reconnect', startRequesting);\n\n return () => {\n socket.removeListener('reconnect', startRequesting);\n };\n }, [socket, startRequesting]);\n\n useEventSubscription(OnUserStatusCreateEvent, () => {\n if (!socket) {\n return;\n }\n\n socket.emit('users:status-change');\n });\n\n useEffect(() => {\n if (!socket) {\n return;\n }\n const onlineUsersCallback = (data) => {\n const lastConnection = localStorage.getItem('lastConnection');\n const isOldConnection = data.some(\n (d) => d.id === userId && d.lastConnection > lastConnection,\n );\n\n if (isOldConnection) {\n localStorage.clear();\n auth.authClient.logout();\n } else {\n onOnlineUsersList.dispatch(data);\n }\n };\n socket.on('users:list', onlineUsersCallback);\n return () => {\n socket.removeListener('users:list', onlineUsersCallback);\n };\n }, [auth.authClient, socket, userId]);\n\n useEffect(() => {\n /**\n * If the socket is set and automatic calls\n * are active, subscribe to error events\n */\n if (socket && active) {\n let timeout = 0;\n\n const onError = ({ code }) => {\n if (code === 2) {\n toast.attention('No more leads to call today...');\n /**\n * This code means that there is no more leads\n * so we wait 1 minute to request more leads\n */\n timeout = setTimeout(() => requestLead(socket), 60000);\n }\n };\n\n socket.on('lead:failed-request', onError);\n\n return () => {\n socket.removeListener('lead:failed-request', onError);\n clearTimeout(timeout);\n };\n }\n }, [socket, active, requestLead]);\n\n useEffect(() => {\n if (socket && active) {\n const onResponse = (lead) => {\n const { phones } = lead;\n const phone = phones && phones[0];\n\n // TODO: make that the dispatcher query exclude the leads without phone numbers\n if (!phone && phones.length === 0) {\n requestLead(socket);\n return;\n }\n\n makeCallToLead(phone, lead);\n };\n\n socket.on('lead:response', onResponse);\n\n return () => {\n socket.removeListener('lead:response', onResponse);\n };\n }\n }, [socket, active, makeCallToLead, requestLead]);\n\n useEventSubscription(OnPhoneCallFinishedEvent, () => {\n const socket = socketRef.current;\n if (socket) {\n requestLead(socket);\n }\n });\n\n useEventSubscription(OnPhoneCallRegistryEvent, () => {\n setStatusType(AUTOMATIC_CALLS_STATUSES.ON_AND_IN_A_CALL);\n });\n\n return { active, setActive, statusType, agencySetting };\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Menu, Loader, Row } from '@8base/boost';\nimport PropTypes from 'prop-types';\nimport { dialerWidth } from '../phone-calls-model';\nimport { customScrollBar } from 'shared/css/mixins';\n\nconst width = dialerWidth;\nconst DropdownList = styled.div`\n position: absolute;\n left: calc(100% + ${width / 7 / 2}px);\n top: calc(100% + 10px);\n width: ${(width / 7) * 6}px;\n display: ${({ isOpen }) => (isOpen ? 'block' : 'none')};\n`;\n\nconst MenuOption = styled(Menu.Item)`\n min-height: 32px;\n &:hover span {\n color: var(--color-primary);\n }\n`;\n\nconst MenuContainer = styled.div`\n max-height: 120px;\n overflow: auto !important;\n ${customScrollBar}\n`;\n\n/**\n * React portal for render the control outside main react tree\n * It renders in a div with the id=phone-calls-controls at the root of the body\n *\n * @param {object} props Props\n * @param {boolean} props.isOpen Boolean to shows or not the list\n * @param {boolean} props.loading Boolean to shows or not the loading component\n * @param {boolean} props.loadingPaginate Boolean when loading paginate\n * @param {Function} props.setNumber Function to set the number\n * @param {number} props.count amount of data\n * @param {Array} props.data Array with the data for the numbers\n * @param {object} ref Ref to scroll pagination\n * @returns {object} React element\n */\nconst DialerPhones = ({ isOpen, setNumber, data, loading, loadingPaginate, count }, ref) => {\n return (\n \n \n \n {loading ? (\n \n \n \n ) : (\n <>\n {data.map(({ leadName, phone, formatedPhone, leadId }, i) => (\n setNumber(phone, formatedPhone, leadName, leadId)}>\n \n {leadName}: {formatedPhone}\n \n \n ))}\n {loadingPaginate && (\n \n \n \n )}\n \n {count === 0 && (\n \n No registered phone numbers\n \n )}\n >\n )}\n \n \n \n );\n};\n\nexport default React.forwardRef(DialerPhones);\n\nDialerPhones.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n setNumber: PropTypes.func.isRequired,\n data: PropTypes.arrayOf(PropTypes.object).isRequired,\n loading: PropTypes.bool.isRequired,\n loadingPaginate: PropTypes.bool.isRequired,\n count: PropTypes.number.isRequired,\n};\n","import React, { useState, useCallback, useEffect, useRef } from 'react';\nimport styled from 'styled-components';\nimport { InputField, Button } from '@8base/boost';\nimport { usePhoneCallComponent } from '../phone-calls-hooks';\nimport { getActiveAgency } from '../../../shared/utils/agency-utils';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchLeadPhoneList } from '../phone-calls-actions';\nimport { mapPhoneNumberList } from '../phone-calls-utils';\nimport { isValidPhoneNumber } from '../../../shared/validators';\nimport * as toast from 'shared/components/toast/Toast';\nimport { filterList } from '../../../shared/utils';\nimport DialerPhones from './DialerPhones';\nimport { dialerWidth } from '../phone-calls-model';\nimport { useInfinityPagination } from '../../../shared/hooks/useInfinityPagination';\nimport { OnLeadPhonesListEvent } from '../phone-calls-events';\n\nconst Container = styled.div`\n position: absolute;\n left: 100%;\n top: 0;\n height: 100%;\n width: ${dialerWidth}px;\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n background-color: white;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px;\n z-index: 100;\n`;\nconst Icon = styled.img`\n height: 1.5em;\n`;\n\nconst callPhoneIconUrl = require('shared/assets/images/call-phone.svg');\n/**\n * Dialer component to shows in side menu\n * Can makes calls using of phone numbers fetched from the database\n *\n * @returns {object} React Element\n */\nexport const Dialer = () => {\n const [{ showList, number, viewNumber, filter, leadName }, setState] = useState({\n showList: false,\n number: '',\n leadName: '',\n leadId: null,\n viewNumber: '',\n filter: '',\n });\n\n const [{ phoneList, loadingPhoneList, loadingPaginate, count }, setPhoneList] = useState({\n loadingPhoneList: true,\n loadingPaginate: false,\n phoneList: [],\n count: 0,\n });\n\n const { id: agencyId } = getActiveAgency();\n\n const { makeCall, ready, startingCall } = usePhoneCallComponent() || {};\n const dialerRef = useRef();\n const { page } = useInfinityPagination({\n externalRef: loadingPhoneList ? null : dialerRef,\n loading: loadingPhoneList || loadingPaginate,\n numberOfCurrentItems: phoneList.length,\n total: count,\n });\n\n useEffect(() => {\n console.log('TWILIO DIALER READY', ready);\n }, [ready]);\n\n useEffect(() => {\n setPhoneList((state) => ({\n ...state,\n loadingPaginate: page > 1,\n }));\n fetchLeadPhoneList(agencyId, page);\n }, [agencyId, page]);\n\n useEventSubscription(OnLeadPhonesListEvent, ({ leadsList: { items, count } }) => {\n const phones = mapPhoneNumberList(items);\n\n setPhoneList((state) => ({\n ...state,\n count,\n loadingPhoneList: false,\n loadingPaginate: false,\n phoneList: [...phoneList, ...phones],\n }));\n });\n\n const setNumber = useCallback((num, viewNum, name, id) => {\n setState((state) => ({\n ...state,\n number: num,\n showList: false,\n viewNumber: viewNum || '',\n leadName: name,\n leadId: id,\n }));\n }, []);\n\n const showPhoneList = useCallback(() => {\n setState((state) => ({ ...state, showList: true }));\n }, []);\n\n const call = useCallback(() => {\n const invalid = !isValidPhoneNumber(number);\n if (invalid) {\n toast.error('Invalid Phone Number');\n return;\n }\n makeCall(number, leadName);\n }, [number, leadName, makeCall]);\n\n const handleInputChange = useCallback((value) => {\n setState((state) => ({\n ...state,\n viewNumber: value,\n number: value,\n filter: value,\n leadName: 'Unknown',\n leadId: null,\n }));\n }, []);\n\n const filteredPhoneList = filterList(filter, phoneList);\n\n return (\n <>\n \n \n \n \n Call\n \n \n \n >\n );\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport { debounce } from '../utils';\n\nexport const useInfinityPagination = ({\n externalRef,\n loading,\n numberOfCurrentItems,\n total,\n} = {}) => {\n const [page, setPage] = useState(1);\n const [isNearScreen, setIsNearScreen] = useState(false);\n\n useEffect(() => {\n const element = externalRef?.current;\n\n const onChange = (entries) => {\n const el = entries[0];\n\n // if it is intersecting mark as true\n setIsNearScreen(el.isIntersecting);\n };\n\n const observer = new IntersectionObserver(onChange, {\n rootMargin: '30px',\n });\n\n if (element) observer.observe(externalRef.current);\n\n return () => observer.disconnect();\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const handleNextPage = useCallback(\n debounce(() => setPage((prevPage) => prevPage + 1), 1000),\n [],\n );\n\n const resetPagination = useCallback(() => {\n setIsNearScreen(false);\n setPage(0);\n }, []);\n\n useEffect(() => {\n if (numberOfCurrentItems < total) {\n if (isNearScreen && !loading) handleNextPage();\n }\n }, [isNearScreen, handleNextPage, loading, numberOfCurrentItems, total]);\n\n return { page, resetPagination };\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\n\nconst Backdrop = styled.div`\n position: absolute;\n height: 200vh;\n width: calc(100vw - 100%);\n left: 100%;\n top: -100vh;\n background-color: rgba(60, 87, 118, 0.6);\n`;\n\n/**\n * Render a backdrop back of the dialer component\n *\n * @param {object} props Props\n * @param {Function} props.close Callback function to close the dialer component\n * @returns {object} React element\n */\nexport const DialerBackdrop = ({ close }) => {\n return ;\n};\n\nDialerBackdrop.propTypes = {\n close: PropTypes.func.isRequired,\n};\n","import React, { useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { Dialer } from './Dialer';\nimport { DialerBackdrop } from './DialerBackdrop';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { OnPhoneCallRegistryEvent } from '../phone-calls-events';\n\nconst Button = styled.button`\n height: 56px;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n cursor: pointer;\n background-color: inherit;\n &::before {\n content: '';\n position: absolute;\n top: 0.5px;\n left: 0px;\n width: 2.5px;\n height: 55px;\n border-radius: 25%;\n }\n &:hover::before {\n background-color: white;\n }\n\n ${(props) => props.disabled && 'cursor: not-allowed;'}\n`;\n\n/**\n * Compoment to display a button with and action to show the in the sidebar menu\n *\n * @param {object} props Props\n * @param {object} props.children Children (React Element)\n * @param {boolean} props.active Children (React Element)\n * @returns {object} React Element\n */\nexport const DialerButton = ({ children, active, disabled }) => {\n const [show, setShow] = useState(false);\n\n useEventSubscription(OnPhoneCallRegistryEvent, () => {\n setShow(false);\n });\n\n const handleClick = useCallback(() => {\n if (!disabled) {\n setShow((state) => !state);\n }\n }, [disabled]);\n\n return (\n <>\n \n {children}\n \n {show && (\n <>\n setShow(false)} />\n \n >\n )}\n >\n );\n};\nDialerButton.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n active: PropTypes.bool.isRequired,\n disabled: PropTypes.bool,\n};\n\nDialerButton.defaultProps = {\n disabled: false,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Icon, Tooltip } from '@8base/boost';\nimport { Link as RouterLink, withRouter } from 'react-router-dom';\nimport { useAgency } from '../hooks/useAgency';\nimport { isCompanyAvailable } from '../utils/company-utils';\nimport { DialerButton } from '../../modules/phone-calls/Components/DialerButton';\nimport styled from 'styled-components';\n\nexport const routes = [\n {\n name: 'Dashboard',\n path: '/dashboard',\n iconUrl: require('../assets/images/dashboard.svg'),\n },\n {\n name: 'Campaigns',\n path: '/campaigns',\n iconUrl: require('../assets/images/campaigns.svg'),\n },\n {\n name: 'Lead Management',\n path: '/leads',\n iconUrl: require('../assets/images/leads.svg'),\n },\n {\n name: 'Tasks',\n path: '/tasks/list',\n iconUrl: require('../assets/images/tasks.svg'),\n },\n {\n name: 'Call',\n path: '/call',\n iconUrl: require('../assets/images/call.svg'),\n component: ,\n },\n {\n name: 'Emails',\n path: '/email',\n iconUrl: require('../assets/images/inbox.svg'),\n },\n {\n name: 'Reports',\n path: '/reports/phone-call-recordings',\n iconUrl: require('../assets/images/performance.svg'),\n },\n {\n name: 'Workflow Automation',\n path: '/workflow',\n iconUrl: require('../assets/images/marketing.svg'),\n },\n {\n name: 'Settings',\n path: '/settings/general',\n iconUrl: require('../assets/images/settings.svg'),\n },\n];\n\nconst MenuContainer = styled.div`\n height: 100vh;\n width: 56px;\n background-color: var(--color-blue-3);\n display: flex;\n justify-content: center;\n flex-direction: row;\n position: fixed;\n top: 0;\n left: 0;\n z-index: 2;\n`;\n\nconst List = styled.ul`\n width: 100%;\n list-style: none;\n`;\n\nconst Link = styled(RouterLink)`\n height: 56px;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n\n &::before {\n content: '';\n position: absolute;\n top: 0.5px;\n left: 0px;\n width: 2.5px;\n height: 55px;\n border-radius: 25%;\n ${(props) => (props.active ? 'background-color: white;' : '')}\n }\n`;\n\nconst FakeLink = styled.span`\n height: 56px;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n ${(props) => props.disabled && 'cursor: not-allowed;'}\n\n &::before {\n content: '';\n position: absolute;\n top: 0.5px;\n left: 0px;\n width: 2.5px;\n height: 55px;\n border-radius: 25%;\n ${(props) => (props.active ? 'background-color: white;' : '')}\n }\n`;\n\nconst Li = styled.li`\n ${(props) => props.active && 'background-color: var(--color-primary);'}\n ${(props) => props.disabled && 'cursor: not-allowed;'}\n position: relative;\n &:first-child {\n height: 56px;\n background-color: #3d4751;\n border-bottom: 0.1px solid #434e56;\n display: flex;\n align-items: center;\n }\n\n &:first-child:hover {\n border-left: 0px;\n background-color: #3d4751;\n }\n\n &:hover {\n background-color: var(--color-primary);\n > ul {\n opacity: 1;\n transform: translateX(30%);\n }\n }\n\n &:hover ${Link}::before {\n background-color: white;\n }\n`;\n\nconst Image = styled.img`\n width: 100%;\n height: 30px;\n object-fit: contain;\n max-width: 100%;\n`;\n\nconst Logo = styled.img`\n position: absolute;\n bottom: 30px;\n object-fit: contain;\n\n @media screen and (max-height: 720px) {\n display: none;\n }\n`;\n\nconst StyledIcon = styled(Icon)`\n color: white;\n width: 100%;\n height: 30px;\n`;\n\nconst StretchedTooltip = styled(Tooltip)`\n width: 100%;\n`;\n\nconst Menu = ({ history }) => {\n const agency = useAgency();\n const companyAvailable = isCompanyAvailable(agency);\n\n return (\n \n \n \n \n \n {routes.map((route) => {\n const { pathname } = history.location;\n let pathName = pathname\n .replace('/', ' ')\n .trim()\n .split('/');\n\n pathName = `/${pathName[0]}`;\n\n let routePath = route.path\n .replace('/', ' ')\n .trim()\n .split('/');\n\n routePath = `/${routePath[0]}`;\n\n const isActive = pathName.startsWith(routePath);\n\n return (\n <>\n \n {route?.component ? (\n \n {route.iconUrl ? (\n \n \n \n ) : (\n \n \n \n )}\n \n ) : (\n \n {companyAvailable ? (\n \n {route.iconUrl ? (\n \n ) : (\n \n )}\n \n ) : (\n \n {route.iconUrl ? (\n \n ) : (\n \n )}\n \n )}\n \n )}\n \n >\n );\n })}\n \n \n \n );\n};\n\nMenu.propTypes = {\n history: PropTypes.object.isRequired,\n};\n\nexport default withRouter(Menu);\n","import styled from 'styled-components';\n\nexport const TextSpacing = styled.p`\n color: #323c47;\n font-size: 12px;\n letter-spacing: 1px;\n line-height: 27px;\n font-weight: 600;\n margin-right: 15px;\n margin-top: -2px;\n text-transform: uppercase;\n`;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { Dropdown as DropdownBoost } from '@8base/boost';\nimport { TextSpacing } from '../text/TextSpacing';\n\nconst Chevron = styled.img`\n transform: rotate(${(props) => props.rotate});\n margin-left: 10px;\n position: absolute;\n right: ${({ right }) => right};\n top: 12px;\n width: 8px;\n height: 12px;\n`;\n\nconst OptionContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n cursor: pointer;\n border-radius: 4px;\n padding: 11px 0px;\n\n &:hover {\n background-color: rgb(244, 247, 249);\n }\n ${(props) => props.disabled && 'cursor: not-allowed'}\n`;\n\nconst HeadDropdown = styled.div`\n cursor: pointer;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n position: relative;\n height: 36px;\n`;\n\nconst BodyHeader = styled.div`\n padding: 11px 22px;\n width: 205px;\n border-bottom: 1px solid #e9eff4;\n`;\n\nconst Dropdown = ({\n options,\n placeholder,\n currentOption,\n defaultOpen,\n onChange,\n bodyHeader,\n showActiveOption,\n offset,\n minWidth,\n}) => {\n const currentOptionValues = options.find((option) => option.value === currentOption);\n const DefaultHead = () => {placeholder};\n const Head =\n currentOption !== ''\n ? currentOptionValues\n ? currentOptionValues.Component\n : DefaultHead\n : DefaultHead;\n const optionsFiltered = options.filter((option) => option.value !== currentOption);\n\n return (\n \n \n {({ isOpen, toggleDropdown }) => {\n return (\n <>\n 0 ? toggleDropdown : null}>\n \n \n \n >\n );\n }}\n \n \n {({ toggleDropdown }) => {\n const renderOptionsMap = (option) => {\n const active = option.value === currentOption;\n\n const handleClick = () => {\n if (!active && !option.disabled) {\n onChange(option.value);\n toggleDropdown();\n }\n\n if (option.disabled && option.onDisabledClick) {\n option.onDisabledClick();\n }\n };\n\n return (\n \n \n \n );\n };\n\n return (\n \n {bodyHeader !== '' && (\n \n {bodyHeader}\n \n )}\n {showActiveOption\n ? options.map(renderOptionsMap)\n : optionsFiltered.length > 0\n ? optionsFiltered.map(renderOptionsMap)\n : null}\n \n );\n }}\n \n \n );\n};\n\nDropdown.propTypes = {\n currentOption: PropTypes.number,\n options: PropTypes.array.isRequired,\n placeholder: PropTypes.string.isRequired,\n defaultOpen: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n bodyHeader: PropTypes.string,\n offset: PropTypes.string,\n minWidth: PropTypes.string,\n showActiveOption: PropTypes.bool,\n};\n\nDropdown.defaultProps = {\n currentOption: '',\n bodyHeader: '',\n defaultOpen: false,\n offset: 'none',\n minWidth: '',\n showActiveOption: false,\n};\n\nexport default Dropdown;\n","import styled from 'styled-components';\n\nexport const DropdownOption = styled.div`\n color: #384a59;\n font-family: 'Poppins';\n font-size: 13px;\n line-height: 28px;\n padding: 0px 22px;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n\n ${(props) => (props.active ? 'color: var(--color-primary);' : '')}\n`;\n","import styled from 'styled-components';\n\nexport const DropdownWrap = styled.div`\n border: 1px solid #ced7dd;\n border-radius: 4px;\n min-width: 200px;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n`;\n","import { Button } from '@8base/boost';\nimport styled from 'styled-components';\n\nconst PrimaryBtn = styled(Button)`\n width: 180px !important;\n border: 1px solid #3db4aa !important;\n background-color: #3db4aa !important;\n`;\n\nexport { PrimaryBtn };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Dialog, Button, Card, Row, Column, Heading, Text, Avatar } from '@8base/boost';\nimport { PrimaryBtn } from '../../../shared/components/ui/buttons/PrimaryBtn';\nimport { AGENCY_INVITATION_PENDING } from '../../../shared/constants/agency-invitations';\nimport { COMPANY_INVITATION_PENDING } from '../../../shared/constants/company-invitations';\n\nconst DialogInvitations = ({\n isOpen,\n onCloseDialog,\n onClickAcceptAgencyInvitation,\n onClickDeclineAgencyInvitation,\n onClickAcceptCompanyInvitation,\n onClickDeclineCompanyInvitation,\n isLoading,\n size,\n agencyInvitations,\n companyInvitations,\n title,\n}) => {\n return (\n \n \n \n {agencyInvitations.map((invitation, index) => {\n const { type, createdBy, agency, status } = invitation;\n const { firstName, lastName, avatar } = createdBy;\n const avatarUrl = avatar ? avatar.previewUrl : '';\n const username = `${firstName} ${lastName}`;\n const agencyName = agency ? `${agency.name}` : '';\n const header = `${username} invited you to join ${agencyName}`;\n const description = `Agency ${type} Invitation.`;\n const showButtons = status === AGENCY_INVITATION_PENDING;\n\n return (\n \n \n \n \n \n \n {}\n {{description}}\n \n {showButtons ? (\n <>\n onClickAcceptAgencyInvitation(invitation)}>\n {'Accept'}\n \n onClickDeclineAgencyInvitation(invitation)}>\n {'Decline'}\n \n >\n ) : (\n {status}\n )}\n \n \n \n \n );\n })}\n\n {companyInvitations.map((invitation, index) => {\n const { createdBy, company, status } = invitation;\n const { firstName, lastName, avatar } = createdBy;\n const avatarUrl = avatar ? avatar.previewUrl : '';\n const username = `${firstName} ${lastName}`;\n const companyName = company ? `${company.name}` : '';\n const header = `${username} invited you to join ${companyName}`;\n const description = `Company ADMIN Invitation.`;\n const showButtons = status === COMPANY_INVITATION_PENDING;\n\n return (\n \n \n \n \n \n \n {}\n {{description}}\n \n {showButtons ? (\n <>\n onClickAcceptCompanyInvitation(invitation)}>\n {'Accept'}\n \n onClickDeclineCompanyInvitation(invitation)}>\n {'Decline'}\n \n >\n ) : (\n {status}\n )}\n \n \n \n \n );\n })}\n \n \n );\n};\n\nDialogInvitations.defaultProps = {\n size: 'md',\n title: 'Pending Invitations',\n isLoading: false,\n};\n\nDialogInvitations.propTypes = {\n size: PropTypes.string,\n title: PropTypes.string,\n isOpen: PropTypes.bool.isRequired,\n agencyInvitations: PropTypes.array.isRequired,\n companyInvitations: PropTypes.array.isRequired,\n onClickAcceptAgencyInvitation: PropTypes.func.isRequired,\n onClickDeclineAgencyInvitation: PropTypes.func.isRequired,\n onClickAcceptCompanyInvitation: PropTypes.func.isRequired,\n onClickDeclineCompanyInvitation: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n isLoading: PropTypes.bool,\n};\n\nexport { DialogInvitations };\n","// Agency invitation types\nexport const AGENCY_AGENT_INVITATION = 'AGENT';\nexport const AGENCY_MANAGER_INVITATION = 'MANAGER';\nexport const AGENCY_INVITATION_TYPES = [AGENCY_AGENT_INVITATION, AGENCY_MANAGER_INVITATION];\n\n// Agency invitation status\nexport const AGENCY_INVITATION_PENDING = 'PENDING';\nexport const AGENCY_INVITATION_APPROVED = 'APPROVED';\nexport const AGENCY_INVITATION_EXPIRED = 'EXPIRED';\nexport const AGENCY_INVITATION_REJECTED = 'REJECTED';\n","// Company invitation status\nexport const COMPANY_INVITATION_PENDING = 'PENDING';\nexport const COMPANY_INVITATION_APPROVED = 'APPROVED';\nexport const COMPANY_INVITATION_EXPIRED = 'EXPIRED';\nexport const COMPANY_INVITATION_REJECTED = 'REJECTED';\n","import gql from 'graphql-tag';\n\nexport const UPDATE_AGENCY_INVITATION_MUTATION = gql`\n mutation UpdateAgencyInvitation($data: AgencyInvitationUpdateInput!) {\n agencyInvitationUpdate(data: $data) {\n id\n email\n }\n }\n`;\n\nexport const FIND_ROLES_IN_AGENCY = gql`\n query FetchAgencyUsersRole($filter: AgencyUserFilter) {\n agencyUsersList(filter: $filter) {\n count\n items {\n id\n roles\n }\n }\n }\n`;\n\nexport const CREATE_ROLES_IN_AGENCY = gql`\n mutation CreateAgencyUser($data: AgencyUserCreateInput!) {\n agencyUserCreate(data: $data) {\n id\n agency {\n id\n }\n user {\n id\n }\n roles\n }\n }\n`;\n\nexport const UPDATE_ROLES_IN_AGENCY = gql`\n mutation UpdateAgencyUser($data: AgencyUserUpdateInput!) {\n agencyUserUpdate(data: $data) {\n id\n agency {\n id\n }\n user {\n id\n }\n roles\n }\n }\n`;\n","import { AGENCY_INVITATION_PENDING } from '../../shared/constants/agency-invitations';\n\n/**\n * Can accept invitation permision.\n *\n * @param {object} user - The logged user.\n * @param {object} invitation - The invitation to check.\n * @returns {boolean} If the user can accept the invitation.\n */\nexport const canAcceptAgencyInvitation = (user, invitation) => {\n const { email, status } = invitation;\n const { email: userEmail } = user;\n\n if (status !== AGENCY_INVITATION_PENDING) return false;\n\n return email.toLowerCase() === userEmail.toLowerCase();\n};\n\n/**\n * Can decline invitation permision.\n *\n * @param {object} user - The logged user.\n * @param {object} invitation - The invitation to check.\n * @returns {boolean} If the user can decline the invitation.\n */\nexport const canDeclineAgencyInvitation = (user, invitation) => {\n const { email, status } = invitation;\n const { email: userEmail } = user;\n\n if (status !== AGENCY_INVITATION_PENDING) return false;\n\n return email.toLowerCase() === userEmail.toLowerCase();\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnAcceptAgencyInvitationEvent = createEvent();\n\nexport const OnDeclineAgencyInvitationEvent = createEvent();\n\nexport const OnAgencyInvitationError = createEvent();\n","import { OnApolloClient, OnSessionFetch } from '../../shared/session/session-events';\nimport {\n FIND_ROLES_IN_AGENCY,\n CREATE_ROLES_IN_AGENCY,\n UPDATE_ROLES_IN_AGENCY,\n UPDATE_AGENCY_INVITATION_MUTATION,\n} from './agency-invitation-queries';\nimport {\n canAcceptAgencyInvitation,\n canDeclineAgencyInvitation,\n} from './agency-invitation-permissions';\nimport {\n AGENCY_INVITATION_REJECTED,\n AGENCY_INVITATION_APPROVED,\n AGENCY_AGENT_INVITATION,\n} from '../../shared/constants/agency-invitations';\nimport { log, error } from '@cobuildlab/pure-logger';\nimport { AGENCY_ROLES } from '../../shared/constants';\nimport {\n OnAcceptAgencyInvitationEvent,\n OnAgencyInvitationError,\n OnDeclineAgencyInvitationEvent,\n} from './agency-invitation-events';\n\n/**\n * Accept agency invitation.\n *\n * @param {object} invitation - The invitation data.\n * @returns {Promise} The updated invitation.\n */\nexport const acceptAgencyInvitation = async (invitation) => {\n const { user } = OnSessionFetch.get();\n const client = OnApolloClient.get();\n\n if (!canAcceptAgencyInvitation(user, invitation)) {\n return OnAgencyInvitationError.dispatch(\n new Error(`Permission Denied. Can't accept this agency invitation.`),\n );\n }\n\n const {\n id,\n type,\n agency: { id: agencyId },\n } = invitation;\n const data = { id, status: AGENCY_INVITATION_APPROVED };\n let response = null;\n\n /**\n * Change invitation status to approved\n */\n try {\n response = await client.mutate({\n mutation: UPDATE_AGENCY_INVITATION_MUTATION,\n variables: { data },\n });\n } catch (e) {\n error('acceptAgencyInvitation', e);\n return OnAgencyInvitationError.dispatch(e);\n }\n\n /**\n * Find roles in agency if exists\n */\n try {\n response = await client.query({\n query: FIND_ROLES_IN_AGENCY,\n fetchPolicy: 'network-only',\n variables: {\n filter: {\n agency: { id: { equals: agencyId } },\n user: { id: { equals: user.id } },\n },\n },\n });\n } catch (e) {\n error('acceptAgencyInvitation', e);\n return OnAgencyInvitationError.dispatch(e);\n }\n\n const { agencyUsersList } = response.data;\n const agencyUserRoles = agencyUsersList.count > 0 ? agencyUsersList.items[0] : null;\n const role = type === AGENCY_AGENT_INVITATION ? AGENCY_ROLES.AGENT : AGENCY_ROLES.MANAGER;\n\n /**\n * Create or update the user role in agency depending\n * if the user is already part of the agency\n */\n if (!agencyUserRoles) {\n try {\n response = await client.mutate({\n mutation: CREATE_ROLES_IN_AGENCY,\n variables: {\n data: {\n agency: { connect: { id: agencyId } },\n user: { connect: { id: user.id } },\n roles: [role],\n },\n },\n });\n } catch (e) {\n error('acceptAgencyInvitation', e);\n return OnAgencyInvitationError.dispatch(e);\n }\n } else if (!agencyUserRoles.roles.include(role)) {\n try {\n response = await client.mutate({\n mutation: UPDATE_ROLES_IN_AGENCY,\n variables: {\n data: {\n id: agencyUserRoles.id,\n roles: [...agencyUserRoles.roles, role],\n },\n },\n });\n } catch (e) {\n error('acceptAgencyInvitation', e);\n return OnAgencyInvitationError.dispatch(e);\n }\n }\n\n const eventData = !agencyUserRoles\n ? { agencyUser: response.data.agencyUserCreate }\n : agencyUserRoles.roles.includes(role)\n ? { agencyUser: agencyUserRoles }\n : { agencyUser: response.data.agencyUserUpdate };\n log('acceptAgencyInvitation', eventData);\n return OnAcceptAgencyInvitationEvent.dispatch(eventData);\n};\n\n/**\n * Decline agency invitation.\n *\n * @param {object} invitation - The invitation data.\n * @returns {Promise} The updated invitation.\n */\nexport const declineAgencyInvitation = async (invitation) => {\n const { user } = OnSessionFetch.get();\n const client = OnApolloClient.get();\n\n if (!canDeclineAgencyInvitation(user, invitation)) {\n return OnAgencyInvitationError.dispatch(\n new Error(`Permission Denied. Can't decline this agency invitation.`),\n );\n }\n\n const { id } = invitation;\n const data = {\n id,\n status: AGENCY_INVITATION_REJECTED,\n };\n\n let response;\n try {\n response = await client.mutate({\n mutation: UPDATE_AGENCY_INVITATION_MUTATION,\n variables: { data },\n });\n } catch (e) {\n error('declineAgencyInvitation', e);\n return OnAgencyInvitationError.dispatch(e);\n }\n\n log('declineAgencyInvitation', response);\n OnDeclineAgencyInvitationEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Create user manager in one or more agencies\n *\n * @param {Array} agencies - List of agencies ids\n * @param {string} userId - The user id\n *\n * @returns {Promise} The request result\n */\nexport const createManagerAgencies = async (agencies, userId) => {\n const client = OnApolloClient.get();\n let response = null;\n const managed = [];\n\n for (const agency of agencies) {\n response = await client.query({\n query: FIND_ROLES_IN_AGENCY,\n fetchPolicy: 'network-only',\n variables: {\n filter: {\n agency: { id: { equals: agency.id } },\n user: { id: { equals: userId } },\n },\n },\n });\n\n const { agencyUsersList } = response.data;\n const agencyUserRoles = agencyUsersList.count > 0 ? agencyUsersList.items[0] : null;\n\n if (!agencyUserRoles) {\n response = await client.mutate({\n mutation: CREATE_ROLES_IN_AGENCY,\n variables: {\n data: {\n agency: { connect: { id: agency.id } },\n user: { connect: { id: userId } },\n roles: [AGENCY_ROLES.MANAGER],\n },\n },\n });\n } else if (!agencyUserRoles.roles.includes(AGENCY_ROLES.MANAGER)) {\n response = await client.mutate({\n mutation: UPDATE_ROLES_IN_AGENCY,\n variables: {\n data: {\n id: agencyUserRoles.id,\n roles: [...agencyUserRoles.roles, AGENCY_ROLES.MANAGER],\n },\n },\n });\n }\n\n managed.push(\n !agencyUserRoles\n ? response.data.agencyUserCreate\n : agencyUserRoles.roles.includes(AGENCY_ROLES.MANAGER)\n ? agencyUserRoles\n : response.data.agencyUserUpdate,\n );\n }\n\n return {\n data: {\n agencyUsersUpdate: {\n count: managed.length,\n items: managed,\n },\n },\n };\n};\n","import gql from 'graphql-tag';\n\nexport const QUERY_INVITATIONS = gql`\n query FetchAgencyInvitations($agencyId: ID!, $offset: Int!, $limit: Int!) {\n agencyInvitationsList(\n filter: { agency: { id: { equals: $agencyId } } }\n skip: $offset\n first: $limit\n ) {\n count\n items {\n id\n email\n status\n updatedAt\n }\n }\n }\n`;\nexport const CREATE_INVITATION = gql`\n mutation AgencyInvitationCreate($data: AgencyInvitationCreateInput!) {\n __typename\n agencyInvitationCreate(data: $data) {\n id\n }\n }\n`;\n\nexport const DELETE_INVITATION = gql`\n mutation AgencyInvitationDelete($id: ID!) {\n __typename\n agencyInvitationDelete(filter: { id: $id }, force: true) {\n success\n }\n }\n`;\n\nexport const RESEND_INVITATION = gql`\n mutation AgencyInvitationResend($id: ID!) {\n __typename\n resendedAngencyInvitationCreate(data: { invitation: { connect: { id: $id } } }) {\n id\n }\n }\n`;\n\nexport const CREATE_INVITATION_COMPANY = gql`\n mutation CompanyInvitationCreate($data: CompanyInvitationCreateInput!) {\n __typename\n companyInvitationCreate(data: $data) {\n id\n }\n }\n`;\n","import gql from 'graphql-tag';\n\nexport const COMPANY_INVITATION_LIST = gql`\n query FetchCompanyInvitations($userID: ID!, $offset: Int!, $limit: Int!) {\n companyInvitationsList(\n filter: { company: { adminCompanyRelation: { some: { user: { id: { equals: $userID } } } } } }\n skip: $offset\n first: $limit\n ) {\n count\n items {\n id\n email\n status\n company {\n id\n name\n }\n createdBy {\n id\n firstName\n lastName\n }\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const DELETE_COMPANY_INVITATION = gql`\n mutation CompanyInvitationDelete($id: ID!) {\n __typename\n companyInvitationDelete(filter: { id: $id }) {\n success\n }\n }\n`;\n\nexport const UPDATE_COMPANY_INVITATION_MUTATION = gql`\n mutation UpdateCompanyInvitation($data: CompanyInvitationUpdateInput!) {\n companyInvitationUpdate(data: $data) {\n id\n email\n }\n }\n`;\n\nexport const CREATE_ADMIN_MUTATION = gql`\n mutation CreateAdmin($data: AdminCreateInput!) {\n adminCreate(data: $data) {\n id\n }\n }\n`;\n","import { COMPANY_INVITATION_PENDING } from '../../shared/constants/company-invitations';\n\n/**\n * Can accept invitation permision.\n *\n * @param {object} user - The logged user.\n * @param {object} invitation - The invitation to check.\n * @returns {boolean} If the user can accept the invitation.\n */\nexport const canAcceptCompanyInvitation = (user, invitation) => {\n const { email, status } = invitation;\n const { email: userEmail } = user;\n\n if (status !== COMPANY_INVITATION_PENDING) return false;\n\n return email.toLowerCase() === userEmail.toLowerCase();\n};\n\n/**\n * Can decline invitation permision.\n *\n * @param {object} user - The logged user.\n * @param {object} invitation - The invitation to check.\n * @returns {boolean} If the user can decline the invitation.\n */\nexport const canDeclineCompanyInvitation = (user, invitation) => {\n const { email, status } = invitation;\n const { email: userEmail } = user;\n\n if (status !== COMPANY_INVITATION_PENDING) return false;\n\n return email.toLowerCase() === userEmail.toLowerCase();\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnCompanyinvitationListEvent = createEvent();\n\nexport const OnCompanyinvitationError = createEvent();\n\nexport const OnDeclineCompanyinvitationEvent = createEvent();\n\nexport const OnAcceptCompanyinvitationEvent = createEvent();\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnfetchCompanyList = createEvent();\n\nexport const OnCompanyfetched = createEvent();\n\nexport const OnCompanyUpdated = createEvent();\n\nexport const OnCompanyError = createEvent();\n\nexport const OnCreateCompanyInvitationEvent = createEvent();\n\nexport const OnCreateCompanyInvitationError = createEvent();\n\nexport const OnDeleteCompanyInvitationEvent = createEvent();\n\nexport const OnDeleteCompanyInvitationError = createEvent();\n\nexport const OnSubcriptionPlansListEvent = createEvent();\n\nexport const OnSubcriptionPlansListError = createEvent();\n","import { OnApolloClient, OnSessionFetch } from '../../shared/session/session-events';\nimport { CREATE_INVITATION_COMPANY } from '../my-account/invitations/invitations-queries';\nimport {\n COMPANY_INVITATION_LIST,\n DELETE_COMPANY_INVITATION,\n UPDATE_COMPANY_INVITATION_MUTATION,\n CREATE_ADMIN_MUTATION,\n} from './company-invitation-queries';\nimport {\n canAcceptCompanyInvitation,\n canDeclineCompanyInvitation,\n} from './company-invitation-permissions';\nimport {\n COMPANY_INVITATION_REJECTED,\n COMPANY_INVITATION_APPROVED,\n COMPANY_INVITATION_PENDING,\n} from '../../shared/constants/company-invitations';\nimport { log, error } from '@cobuildlab/pure-logger';\nimport { createCompanyInvitationValidator } from '@cobuildlab/lead-volt-share';\nimport { createManagerAgencies } from '../agency-invitation/agency-invitation-actions';\nimport {\n OnAcceptCompanyinvitationEvent,\n OnCompanyinvitationError,\n OnCompanyinvitationListEvent,\n OnDeclineCompanyinvitationEvent,\n} from './company-invitation-events';\nimport {\n OnCreateCompanyInvitationError,\n OnCreateCompanyInvitationEvent,\n OnDeleteCompanyInvitationError,\n OnDeleteCompanyInvitationEvent,\n} from 'modules/company/campany-events';\n\n/**\n * Fetch all the Company Invitations.\n *\n * @param {string} userId - The userId to create the admin.\n * @param {number} pageSize - The page size\n * @param {number} queryOffset - the offset\n * @param {string} fetchPolicy - The policy of the fetch\n *\n * @returns {Promise} The Company invitations list data.\n */\nexport const fetchCompanyInvitationList = async (userId, pageSize, queryOffset, fetchPolicy) => {\n const client = OnApolloClient.get();\n const variables = { userID: userId, limit: pageSize, offset: queryOffset };\n\n let response;\n try {\n response = await client.query({\n query: COMPANY_INVITATION_LIST,\n fetchPolicy,\n variables,\n });\n } catch (e) {\n return OnCompanyinvitationError.dispatch(e);\n }\n OnCompanyinvitationListEvent.dispatch(response.data);\n log('fetchCompanyInvitationList:', response);\n return response.data;\n};\n\n/**\n *\n * @param {object} data - all the data to create the Invitation\n * @returns {Promise} - The Data Created\n */\nexport const createCompanyInvitation = async (data) => {\n const client = OnApolloClient.get();\n const { user } = OnSessionFetch.get();\n let response = null;\n\n try {\n createCompanyInvitationValidator(user, data);\n } catch (e) {\n error('createCompanyInvitation', e);\n\n return OnCreateCompanyInvitationError.dispatch(e);\n }\n\n const { email, company } = data;\n\n try {\n response = await client.mutate({\n mutation: CREATE_INVITATION_COMPANY,\n variables: {\n data: {\n email: email,\n status: COMPANY_INVITATION_PENDING,\n company: {\n connect: {\n id: company,\n },\n },\n },\n },\n });\n } catch (e) {\n return OnCreateCompanyInvitationError.dispatch(e);\n }\n\n OnCreateCompanyInvitationEvent.dispatch(response.data);\n log('createCompanyInvitation:', response);\n return response.data;\n};\n\nexport const deleteCompanyInvitation = async (invitationId) => {\n const client = OnApolloClient.get();\n\n let response;\n try {\n response = await client.mutate({\n mutation: DELETE_COMPANY_INVITATION,\n variables: { id: invitationId },\n });\n } catch (e) {\n return OnDeleteCompanyInvitationError.dispatch(e);\n }\n\n OnDeleteCompanyInvitationEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Creates a Company Admin.\n *\n * @param {string} companyId - The companyId to create the admin.\n * @param {string} userId - The userId to create the admin.\n * @returns {Promise} The created admin data.\n */\nexport const createAdmin = async (companyId, userId) => {\n const client = OnApolloClient.get();\n\n const data = {\n company: { connect: { id: companyId } },\n user: { connect: { id: userId } },\n };\n\n let response;\n try {\n response = await client.mutate({\n mutation: CREATE_ADMIN_MUTATION,\n variables: { data },\n });\n } catch (e) {\n error('createAdmin', e);\n return OnCompanyinvitationError.dispatch(e);\n }\n log('createAdmin', response);\n\n return response;\n};\n\n/**\n * Accept Company invitation.\n *\n * @param {object} invitation - The invitation data.\n * @returns {Promise} The updated invitation.\n */\nexport const acceptCompanyInvitation = async (invitation) => {\n const { user } = OnSessionFetch.get();\n const client = OnApolloClient.get();\n let response = null;\n\n if (!canAcceptCompanyInvitation(user, invitation)) {\n return OnCompanyinvitationError.dispatch(\n new Error(`Permission Denied. Can't accept this company invitation.`),\n );\n }\n\n const {\n id,\n company: { agencyCompanyRelation, id: companyId },\n } = invitation;\n const data = {\n id,\n status: COMPANY_INVITATION_APPROVED,\n };\n\n /**\n * Change invitation status to approved\n */\n try {\n response = await client.mutate({\n mutation: UPDATE_COMPANY_INVITATION_MUTATION,\n variables: { data },\n });\n } catch (e) {\n error('acceptCompanyInvitation', e);\n OnCompanyinvitationError.dispatch(e);\n\n return OnCompanyinvitationError.dispatch(e);\n }\n\n /**\n * Create admin relation\n */\n try {\n response = await createAdmin(companyId, user.id);\n } catch (e) {\n return OnCompanyinvitationError.dispatch(e);\n }\n\n try {\n response = await createManagerAgencies(agencyCompanyRelation.items, user.id);\n } catch (e) {\n return OnCompanyinvitationError.dispatch(e);\n }\n\n log('acceptCompanyInvitation', response.data);\n OnAcceptCompanyinvitationEvent.dispatch(response.data);\n};\n\nexport const declineCompanyInvitation = async (invitation) => {\n const { user } = OnSessionFetch.get();\n const client = OnApolloClient.get();\n\n if (!canDeclineCompanyInvitation(user, invitation)) {\n return OnCompanyinvitationError.dispatch(\n new Error(`Permission Denied. Can't decline this company invitation.`),\n );\n }\n\n const { id } = invitation;\n const data = {\n id,\n status: COMPANY_INVITATION_REJECTED,\n };\n\n let response;\n try {\n response = await client.mutate({\n mutation: UPDATE_COMPANY_INVITATION_MUTATION,\n variables: { data },\n });\n } catch (e) {\n error('declineCompanyInvitation', e);\n return OnCompanyinvitationError.dispatch(e);\n }\n\n log('declineCompanyInvitation', response);\n OnDeclineCompanyinvitationEvent.dispatch(response.data);\n\n return response.data;\n};\n","import Flux from '@cobuildlab/flux-state';\n\n/**\n * Event that triggers a Agency error.\n *\n * @type {string}\n */\nexport const AGENCY_ERROR_EVENT = 'onAgencyError';\n\n/**\n * Event that triggers a Get Active Agency event.\n *\n * @type {string}\n */\nexport const AGENCY_GET_ACTIVE_EVENT = 'onGetActiveAgency';\n\n/**\n * Event that triggers a Set Active Agency event.\n *\n * @type {string}\n */\nexport const AGENCY_SET_ACTIVE_EVENT = 'onSetActiveAgency';\n\n/**\n * Event that triggers when Agencies are fetched\n *\n * @type {string}\n */\nexport const AGENCY_LIST_FETCED = 'onAgencyListFetched';\n\n/**\n * Event that triggers when new Agency is created\n *\n * @type {string}\n */\nexport const AGENCY_CREATED = 'onAgencyCreated';\n\n/**\n * Event that triggers when when an Agency is updated\n *\n * @type {string}\n */\nexport const AGENCY_UPDATED = 'onAgencyUpdated';\n\n/**\n * Event that triggers when a Agency is deleted\n *\n * @type {string}\n */\nexport const AGENCY_DELETED = 'onAgencyDeleted';\n\n/**\n * Event that triggers when something goes wrong while\n * requesting agency data\n *\n * @type {string}\n */\nexport const AGENCY_REQUEST_ERROR = 'onAgencyRequestError';\n\n/**\n * Event that triggers when a phone creation fails when agency is beign created\n *\n * @type {string}\n */\nexport const AGENCY_PHONE_CREATE_ERROR = 'onCreateAgencyPhoneError';\n\nclass AgencyStore extends Flux.DashStore {\n constructor() {\n super();\n this.addEvent(AGENCY_ERROR_EVENT);\n this.addEvent(AGENCY_GET_ACTIVE_EVENT);\n this.addEvent(AGENCY_SET_ACTIVE_EVENT);\n this.addEvent(AGENCY_CREATED);\n this.addEvent(AGENCY_LIST_FETCED);\n this.addEvent(AGENCY_REQUEST_ERROR);\n this.addEvent(AGENCY_UPDATED);\n this.addEvent(AGENCY_DELETED);\n this.addEvent(AGENCY_PHONE_CREATE_ERROR);\n }\n}\n\nexport default new AgencyStore();\n","import { AGENCY_INVITATION_PENDING } from '../constants/agency-invitations';\nimport { COMPANY_INVITATION_PENDING } from '../constants/company-invitations';\n\n/**\n * get agency and company pending invitations\n *\n * @param {object} agencyInvitationsList agency invitations list\n * @param {object} companyInvitationsList company invitations list\n * @returns {Array} pending invitations\n */\nexport const getPendingInvitations = (agencyInvitationsList, companyInvitationsList) => {\n const { items: agencyInvitations } = agencyInvitationsList;\n const { items: companyInvitations } = companyInvitationsList;\n\n const pendingAgencyInvitations = agencyInvitations.filter(\n ({ status }) => status === AGENCY_INVITATION_PENDING,\n );\n\n const pendingCompanyInvitations = companyInvitations.filter(\n ({ status }) => status === COMPANY_INVITATION_PENDING,\n );\n\n return [pendingAgencyInvitations, pendingCompanyInvitations];\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { keyframes } from 'styled-components';\nimport { AUTOMATIC_CALLS_STATUSES } from '../phone-calls-model';\n\nconst pulse = keyframes`\n 0% {\n opacity: 1;\n }\n \n 50% {\n opacity: 0.5;\n }\n 100% {\n opacity: 1;\n }\n`;\n\nconst IconCountWrap = styled.div`\n position: relative;\n margin-left: 5px;\n margin-right: 16px !important;\n animation: ${pulse} 1s ease-in-out infinite;\n`;\nconst Image = styled.img`\n object-fit: contain;\n max-width: 100%;\n`;\n\nconst iconA = require('shared/assets/images/auto-calling-a.svg');\nconst iconB = require('shared/assets/images/auto-calling-b.svg');\nconst iconC = require('shared/assets/images/auto-calling-c.svg');\n/**\n * @param {object} props props\n * @param {string} props.type Icon type\n * @returns {object} React elemet\n */\nfunction AutomaticCallsIcon({ type }) {\n let imgUrl = '';\n if (type === AUTOMATIC_CALLS_STATUSES.ON) {\n imgUrl = iconA;\n } else if (type === AUTOMATIC_CALLS_STATUSES.ON_AND_IN_A_CALL) {\n imgUrl = iconB;\n } else if (type === AUTOMATIC_CALLS_STATUSES.ON_AND_REQUESTING) {\n imgUrl = iconC;\n }\n return (\n \n \n \n );\n}\n\nAutomaticCallsIcon.propTypes = {\n type: PropTypes.string,\n};\nAutomaticCallsIcon.defaultProps = {\n type: AUTOMATIC_CALLS_STATUSES.ON,\n};\nexport default AutomaticCallsIcon;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst colorsAndText = {\n 1: { textColor: '#3DB4AA', bg: 'rgba(61,180,170,0.1)' },\n 2: { textColor: '#F6C01E', bg: 'rgba(246,192,30,0.15)' },\n 3: { textColor: '#eb7734', bg: 'rgba(235, 119, 52, 0.1)' },\n 4: { textColor: '#FF0000', bg: 'rgba(255,0,0,0.08)' },\n 5: { textColor: '#1E4358', bg: 'rgba(30, 67, 88,0.08)' },\n};\nconst Badge = styled.span`\n opacity: 0.9;\n color: ${({ textColor }) => textColor};\n font-family: 'Poppins';\n font-size: 12px;\n font-weight: 600;\n line-height: 18px;\n text-align: center;\n box-sizing: border-box;\n height: 26px;\n min-width: 110px;\n border: 1px solid ${({ textColor }) => textColor};\n border-radius: 16px;\n background-color: ${({ bg }) => bg};\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n`;\n\nconst StyledBadge = ({ priority, children, customPriority, ...rest }) => {\n const colors = customPriority || colorsAndText[priority];\n return (\n \n {children}\n \n );\n};\nStyledBadge.defaultProps = {\n priority: 1,\n customPriority: null,\n};\nStyledBadge.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n priority: PropTypes.number,\n customPriority: PropTypes.object,\n};\n\nexport default StyledBadge;\n","import React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid, Heading, Text, Tooltip, Avatar } from '@8base/boost';\nimport moment from 'moment';\nimport styled from 'styled-components';\nimport { getNotificationInfo } from '../notifications-utils';\nimport { useHistory } from 'react-router-dom';\nimport StyledBadge from '../../../shared/components/ui/StyledBadge';\n\nconst Container = styled(Grid.Layout)`\n border-radius: 5px;\n padding: 10px;\n transition: background-color 0.3s ease-in-out;\n &:not(:hover) {\n .notification-btn__delete {\n display: none;\n }\n }\n ${(props) =>\n props.read\n ? `\n &:hover {\n background-color: #f6f7f9;\n } \n `\n : `\n background-color: rgba(61,180,170,0.1);\n `}\n`;\n/**\n * MyNewType definition\n *\n * @typedef {Function} onChangeCallback\n * @param {string} key\n * @param {any} value\n * @param {string} id\n */\n/**\n * @typedef {object} notification\n * @property {string} id\n * @property {boolean} read seen state\n * @property {string} type type\n * @property {string} createdAt Created date\n * @property {string} title Title\n * @property {string} description Description\n *\n */\n/**\n * @param {object} props props\n * @param {notification} props.data Notification data\n * @param {onChangeCallback} props.onChange Notification data\n * @returns {React.FC} React Component\n */\nexport const NotificationsListItem = ({ data }) => {\n const { createdAt, read } = data;\n const timeFromNow = moment(createdAt).fromNow();\n const formatedDate = moment(createdAt).format('MM/DD/YYYY; hh:mmA');\n const history = useHistory();\n\n const { title, description, url, linkText, avatar } = getNotificationInfo(data);\n\n const onLinkClick = useCallback(() => {\n if (url) {\n history.push(url);\n }\n }, [url, history]);\n\n return (\n \n \n \n \n \n {title}\n \n {description}\n \n \n {timeFromNow}\n \n \n \n {linkText}\n \n \n );\n};\n\nNotificationsListItem.propTypes = {\n data: PropTypes.object.isRequired,\n};\n","import moment from 'moment';\nimport { NOTIFICATIONS_TYPES_GROUPS, NOTIFICATIONS_TYPES } from '@cobuildlab/lead-volt-share';\n\n/**\n * @typedef {object} notification\n * @property {string} id\n * @property {boolean} read seen state\n * @property {string} type type\n * @property {string} createdAt Created date\n * @property {{id:string,firstName:string,lastName:string,avatar:object}} userTrigger Created date\n * @property {{id:string,firstName:string,lastName:string}} lead Created date\n * @property {{id:string,name:string,lastName:string}} campaign Created date\n * @property {{id:string,subject:string,from:string,thread:object}} email Created date\n *\n */\n/**\n * @typedef {object} notificationsList\n * @property {Array} today\n * @property {Array} older\n */\n/**\n * @param {Array} list list of notifications\n * @returns {notificationsList} Maped object with today and older reduced list\n */\nexport function mapNotificationsList(list) {\n const todayDate = moment().startOf('day');\n\n const important = list.filter((item) => {\n switch (item.type) {\n // case NOTIFICATIONS_TYPES.NEW_SMS:\n case 'NEW_SMS':\n return true;\n\n case NOTIFICATIONS_TYPES.LEAD_ASSIGN:\n return true;\n\n // case NOTIFICATIONS_TYPES.MISSED_CALL:\n case 'MISSED_CALL':\n return true;\n\n default:\n return false;\n }\n });\n\n list = list.filter((item) => {\n switch (item.type) {\n // case NOTIFICATIONS_TYPES.NEW_SMS:\n case 'NEW_SMS':\n return false;\n\n case NOTIFICATIONS_TYPES.LEAD_ASSIGN:\n return false;\n\n // case NOTIFICATIONS_TYPES.MISSED_CALL:\n case 'MISSED_CALL':\n return false;\n\n default:\n return true;\n }\n });\n\n const { older, today } = list.reduce(\n (lists, item) => {\n const isToday = moment(item.createdAt).isAfter(todayDate);\n if (isToday) {\n lists.today.push(item);\n } else {\n lists.older.push(item);\n }\n return lists;\n },\n { older: [], today: [] },\n );\n\n return { older, today, important };\n}\n/**\n *\n * @typedef {object} mappedNotification\n * @property {string} url url to redirect\n * @property {string} linkText text to display in the link\n * @property {string} linkText text to display in the link\n * @property {string|undefined} avatar avatar to show in the notification\n * @property {string} title title to show in the notification\n * @property {string} description description to show in the notification\n */\n/**\n * @param {notification} notification notification object\n * @returns {mappedNotification} mappd data to display\n */\nexport function getNotificationInfo(notification) {\n const { type, userTrigger, lead, email, campaign, disposition, createdAt, sms } = notification;\n const userTriggerName = userTrigger && `${userTrigger.firstName} ${userTrigger.lastName}`;\n const userTriggerAvatar = userTrigger && userTrigger?.avatar?.downloadUrl;\n\n if (NOTIFICATIONS_TYPES_GROUPS.LEADS.includes(type)) {\n const url = `/leads/${lead ? lead.id : ''}`;\n const linkText = 'Leads';\n const data = { url, linkText, avatar: userTriggerAvatar };\n\n if (type === NOTIFICATIONS_TYPES.LEAD_ASSIGN) {\n return {\n ...data,\n title: `${userTriggerName} assigned you to a lead`,\n description: `You where assigned to the lead ${lead && lead.firstName} ${lead &&\n lead.lastName}`,\n };\n } else if (type === NOTIFICATIONS_TYPES.LEAD_UNASSIGN) {\n return {\n ...data,\n title: `${userTriggerName} unassigned you from a lead`,\n description: `You where unassigned of the lead ${lead && lead.firstName} ${lead &&\n lead.lastName}`,\n };\n } else if (type === NOTIFICATIONS_TYPES.LEAD_UPDATE) {\n return {\n ...data,\n title: `${userTriggerName} update a lead you're assigned`,\n description: `Update in the lead ${lead && lead.firstName} ${lead && lead.lastName}`,\n };\n } else if (type === NOTIFICATIONS_TYPES.LEAD_EXPIRATION) {\n const expiration = moment(disposition.expirationDate);\n const created = moment(createdAt).format('YYYY-MM-DD');\n const difference = expiration.diff(created, 'days');\n\n if (difference === 0) {\n return {\n ...data,\n title: `${lead && lead.firstName} disposition close to expire`,\n description: `${lead && lead.firstName} disposition expires today!`,\n };\n } else {\n return {\n ...data,\n title: `${lead && lead.firstName} disposition close to expire`,\n description: `${lead && lead.firstName} disposition expires in ${difference} days`,\n };\n }\n }\n }\n if (NOTIFICATIONS_TYPES_GROUPS.MAILS.includes(type)) {\n const { id: emailId, subject, from } = email;\n const url = `/email/${emailId}?folder=inbox`;\n const data = { url, linkText: 'Email' };\n\n if (type === NOTIFICATIONS_TYPES.MAIL_FROM_LEAD) {\n const title = `Mail receved from lead ${lead && lead.firstName} ${lead && lead.lastName}`;\n const description = `A lead sent a replay mail with subject: ${subject}`;\n\n return { ...data, title, description };\n }\n\n if (type === NOTIFICATIONS_TYPES.MAIL_RECEIVED) {\n const title = `You received a mail from ${from}`;\n const description = `You have a new email subject:${subject}`;\n\n return { ...data, title, description };\n }\n }\n if (NOTIFICATIONS_TYPES_GROUPS.CAMPAIGNS.includes(type)) {\n const url = `/campaigns/${campaign.id}`;\n const linkText = 'Campaigns';\n const data = { url, linkText, avatar: userTriggerAvatar };\n\n if (type === NOTIFICATIONS_TYPES.CAMPAIGN_ASSIGN) {\n return {\n ...data,\n title: `${userTriggerName} assigned you to a campaign`,\n description: `You where assigned to the campaign \"${campaign.name}\"`,\n };\n } else if (type === NOTIFICATIONS_TYPES.CAMPAIGN_UNASSIGN) {\n return {\n ...data,\n title: `${userTriggerName} unassigned you from a campaign`,\n description: `You where unassigned of the campaign \"${campaign.name}\"`,\n };\n } else if (type === NOTIFICATIONS_TYPES.CAMPAIGN_UPDATE) {\n return {\n ...data,\n title: `${userTriggerName} update a campaign you're assigned`,\n description: `Update in the campaign \"${campaign.name}\"`,\n };\n }\n }\n if (type === 'NEW_SMS') {\n // if (NOTIFICATIONS_TYPES_GROUPS.MESSAGES.includes(type))\n const url = lead && `/leads/${lead ? lead.id : ''}`;\n let linkText = 'Lead sms';\n let from = `${lead && lead.firstName}`;\n let description = `You have a unread sms from ${lead && lead.firstName} ${lead &&\n lead.lastName}`;\n\n if (!lead) {\n description = sms.text;\n from = `+1${sms.receivedFrom}`;\n linkText = 'Sms received';\n }\n\n const data = { url, linkText, avatar: userTriggerAvatar };\n\n return {\n ...data,\n title: `${from} sent you a new sms`,\n description,\n };\n }\n if (type === 'MISSED_CALL') {\n return {\n ...(lead\n ? {\n title: `${lead.firstName} called you`,\n url: `/leads/${lead.id}`,\n linkText: 'Lead call',\n description: `You missed a call from ${lead.firstName} ${lead.lastName}`,\n }\n : {\n title: 'Someone called you',\n url: '/reports/inbound-calls-logs',\n linkText: 'See more',\n description: 'You missed a call from an unknown number',\n }),\n avatar: userTriggerAvatar,\n };\n }\n throw Error('This notification type is invalid');\n}\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { Row, Heading, Button, Loader, Icon } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { NotificationsListItem } from './NotificationsListItem';\nimport { OnAllNotificationMarkRead, OnAllNotificationMarkReadError } from '../notifications-store';\nimport { markAllNotificationsAsRead, markNotificationsAsRead } from '../notifications-actions';\nimport PropTypes from 'prop-types';\n\nexport const NotificationCard = ({ user, agency, items, count, loading, unread, next }) => {\n const [updating, setUpdating] = useState(false);\n\n useEffect(() => {\n if (unread.length > 0) {\n /**\n * When the notification card opens,\n * after 2 seconds, mark the unread\n * notifications as read\n */\n const timeout = setTimeout(() => {\n markNotificationsAsRead(unread.map((notification) => notification.id));\n }, 2000);\n\n return () => clearTimeout(timeout);\n }\n }, [unread]);\n\n const markAllAsRead = useCallback(() => {\n setUpdating(true);\n\n markAllNotificationsAsRead(user, agency);\n }, [user, agency]);\n\n useSubscription(\n OnAllNotificationMarkRead,\n () => {\n setUpdating(false);\n },\n [],\n );\n\n useSubscription(\n OnAllNotificationMarkReadError,\n (e) => {\n setUpdating(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const notifications = useMemo(\n () => items.map((item) => ),\n [items],\n );\n\n const loader = loading ? (\n \n \n \n ) : null;\n\n const more =\n !loading && items.length < count ? (\n \n \n Load More\n \n \n ) : null;\n\n const content =\n notifications.length > 0 ? (\n notifications\n ) : (\n \n \n \n );\n\n return (\n \n \n \n Notifications\n \n Mark all as read\n \n \n \n \n {content}\n {more}\n {loader}\n \n \n );\n};\n\nNotificationCard.propTypes = {\n user: PropTypes.string.isRequired,\n agency: PropTypes.string.isRequired,\n items: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n }),\n ).isRequired,\n count: PropTypes.number.isRequired,\n loading: PropTypes.bool.isRequired,\n unread: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n }),\n ).isRequired,\n next: PropTypes.func.isRequired,\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchNotifications } from '../notifications-actions';\nimport { OnFetchNotifications, OnFetchNotificationsError } from '../notifications-store';\n\nconst initialState = {\n items: [],\n count: 0,\n error: null,\n loading: true,\n unread: [],\n};\n\n/**\n * Manages states of notification list\n *\n * @param {string} user - The user id\n * @param {string} agency - The agency id\n * @param {number} unread - The number of unread notifications\n *\n * @returns {object} The hook state\n */\nexport function useNotificationsList(user, agency, unread) {\n const [state, setState] = useState(initialState);\n const [page, setPage] = useState(1);\n\n const fetch = useCallback(() => {\n setState((prevState) => ({ ...prevState, loading: true, unread: [] }));\n\n fetchNotifications(user, agency, page);\n }, [user, agency, page]);\n\n const next = useCallback(() => {\n setPage((prevPage) => prevPage + 1);\n }, []);\n\n const refresh = useCallback(() => {\n setState((prevState) => {\n if (prevState.loading) {\n return prevState;\n }\n\n if (page === 1) {\n fetchNotifications(user, agency, 1);\n } else {\n setPage(1);\n }\n\n return {\n ...prevState,\n loading: true,\n error: null,\n unread: [],\n };\n });\n }, [user, agency, page]);\n\n useSubscription(\n OnFetchNotifications,\n ({ notificationsList }) => {\n setState((prevState) => ({\n count: notificationsList?.count ?? 0,\n items:\n page === 1 ? notificationsList.items : [...prevState.items, ...notificationsList.items],\n unread: notificationsList.items.filter((item) => item.read === false),\n error: null,\n loading: false,\n }));\n },\n [page],\n );\n\n useSubscription(\n OnFetchNotificationsError,\n (e) => {\n console.log('error fetching notifications');\n setState((prevState) => ({\n ...prevState,\n error: e,\n }));\n },\n [],\n );\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n useEffect(() => {\n refresh();\n }, [refresh, unread]);\n\n return {\n ...state,\n next,\n refresh,\n };\n}\n","import { useEffect } from 'react';\nimport { useSubscription } from '@apollo/client/react/hooks';\nimport { message } from '../../../shared/components/toast/Toast';\nimport { NEW_SMS_NOTIFICATIONS_SUBSCRIPTION } from '../notifications-querys';\n\nexport function useNewSMSMessageNotifications(userId: string, agencyId: string) {\n const variables = { userId, agencyId };\n\n const { error } = useSubscription(NEW_SMS_NOTIFICATIONS_SUBSCRIPTION, {\n variables,\n onSubscriptionData(options) {\n const { subscriptionData } = options;\n if (!subscriptionData.data.Notification.node.sms) return;\n message(\n subscriptionData.data.Notification.node.id,\n subscriptionData.data.Notification.node.sms,\n );\n },\n });\n\n useEffect(() => {\n console.log('[Error] Error comming from the sms notification subscription: ', error?.message);\n }, [error]);\n}\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport IconCount from '../../shared/components/IconCount';\nimport { Dropdown } from '@8base/boost';\nimport { NotificationCard } from './components/NotificationCard';\nimport { useNotificationsCount } from './hooks/useNotificationsCount';\nimport { useNotificationsList } from './hooks/useNotificationsList';\nimport { useNewSMSMessageNotifications } from './hooks/useNewSMSMessagesNotifications';\n\n// import { useSubscription } from '@cobuildlab/react-simple-state';\n// import { OnNotificationMarkRead, OnAllNotificationMarkRead } from './notifications-store';\n// import * as toast from '../../shared/components/toast/Toast';\n\n/**\n * @param {object} props - Component Props.\n * @param {string} props.user - User id.\n * @param {string} props.agency - Agency id.\n * @returns {React.ReactNode} NotificationsIcon component.\n */\nconst NotificationsIcon = ({ user, agency }) => {\n const count = useNotificationsCount(user, agency);\n const notifications = useNotificationsList(user, agency, count.number);\n useNewSMSMessageNotifications(user, agency);\n\n //TODO: reactive subscriptions when safe\n /*useSubscription(\n OnNotificationMarkRead,\n () => {\n count.refresh();\n },\n [count.refresh],\n );\n\n useSubscription(\n OnAllNotificationMarkRead,\n ({ notificationUpdateByFilter }) => {\n toast.success('Success', `${notificationUpdateByFilter.count} notifications marked as read`);\n\n count.refresh();\n },\n [count.refresh],\n );*/\n\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nNotificationsIcon.propTypes = {\n user: PropTypes.string.isRequired,\n agency: PropTypes.string.isRequired,\n};\n\nexport default NotificationsIcon;\n","// import { useQuery } from '@apollo/react-hooks';\n// import { useQuery } from '@apollo/client/react/hooks';\n// import { useEffect } from 'react';\n// import { FETCH_NOTIFICATIONS_COUNT, SUBSCRIPTION_NOTIFICATION } from '../notifications-querys';\n// import * as toast from '../../../shared/components/toast/Toast';\n\n/**\n * @typedef {object} UseNotificationsCount\n * @property {number} number - number of notifications.\n * @property {boolean} loading - Whether the query is running or not.\n * @property {() => Promise} refetch - refetch information about the count.\n */\n\n/**\n * Hook that returns a live count\n * of not readed notifications\n *\n * @param {string} user - The user id\n * @param {string} agency - The agency id\n * @returns {UseNotificationsCount} The hook result\n */\nexport function useNotificationsCount(user, agency) {\n /*const { data, loading, refetch, subscribeToMore, error } = useQuery(FETCH_NOTIFICATIONS_COUNT, {\n fetchPolicy: 'network-only',\n variables: {\n filter: {\n user: {\n id: {\n equals: user,\n },\n },\n agency: {\n id: {\n equals: agency,\n },\n },\n read: {\n equals: false,\n },\n },\n },\n });\n\n useEffect(() => {\n if (error) {\n console.log('Query error:', error.message);\n }\n }, [error]);\n\n useEffect(() => {\n let timer = null;\n\n const unsubscribe = subscribeToMore({\n document: SUBSCRIPTION_NOTIFICATION,\n variables: {\n user,\n agency,\n },\n updateQuery: (prev, { subscriptionData: { data } }) => {\n **\n * Timeout to avoid doing fetchs\n * if the function is called to many times\n * in a short period of time\n **\n timer = setTimeout(() => {\n refetch();\n }, 1000);\n\n if (data.Notification.node.read === false) {\n if (data.Notification.node.sms) {\n toast.message(data.Notification.node.id, data.Notification.node.sms);\n }\n\n if (data.Notification.node.email) {\n toast.email(data.Notification.node.id, data.Notification.node.email);\n }\n }\n\n return prev;\n },\n onError: (e) => console.log('Subscription error:', e, user, agency),\n });\n\n return () => {\n unsubscribe();\n clearTimeout(timer);\n };\n }, [user, agency, refetch, subscribeToMore]);\n\n let number = data?.notificationsList.count || 0;\n number = number > 99 ? 99 : number;*/\n\n /*return {\n number,\n loading,\n refresh: refetch,\n };*/\n\n //Notifications count intering solution\n //Removing notifications count logic from the useNotificationsList hook\n //TODO: resctructure notification counts logic\n\n return {\n number: 0,\n loading: false,\n refresh: {},\n };\n}\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const onFetchChannelMembers = createEvent();\nexport const onFetchChannelMembersError = createEvent();\n\nexport const onFetchUnreadMessages = createEvent();\nexport const onFetchUnreadMessagesError = createEvent();\n","import gql from 'graphql-tag';\n\nexport const CHAT_CHANNEL_MEMBER_SUBSCRIPTION = gql`\n subscription($id: ID!) {\n ChannelMember(\n filter: { node: { user: { id: { equals: $id } } }, mutation_in: [create, update] }\n ) {\n node {\n id\n lastReadTS\n }\n mutation\n }\n }\n`;\nexport const CHAT_CHANNEL_MEMBER_QUERY = gql`\n query FetchChannelMembersList($id: ID!) {\n channelMembersList(filter: { user: { id: { equals: $id } } }) {\n items {\n id\n channel {\n id\n }\n lastReadTS\n }\n }\n }\n`;\n\nexport const UNREAD_MESSAGES_QUERY = gql`\n query FetchMessagesList($id: ID!, $date: DateTime) {\n messagesList(\n filter: {\n channel: { id: { equals: $id } }\n createdAt: { gt: $date }\n # createdBy: { not_self: true }\n }\n ) {\n items {\n text\n createdBy {\n id\n }\n }\n count\n }\n }\n`;\nexport const NEW_MESSAGE_SUBSCRIPTION = gql`\n subscription($user: ID!) {\n Message(\n filter: {\n node: {\n channel: { members: { some: { user: { id: { equals: $user } } } } }\n # createdBy: { id: { not_equals: $user } }\n }\n mutation_in: create\n }\n ) {\n node {\n id\n createdBy {\n id\n }\n }\n }\n }\n`;\n","import { OnApolloClient } from '../../shared/session/session-events';\nimport {\n onFetchChannelMembers,\n onFetchChannelMembersError,\n onFetchUnreadMessages,\n onFetchUnreadMessagesError,\n} from './chat-events';\nimport { CHAT_CHANNEL_MEMBER_QUERY, UNREAD_MESSAGES_QUERY } from './chat-querys';\n\n/**\n * @param {string } userId - User id.\n */\nexport async function fetchChannelsMembers(userId) {\n const client = OnApolloClient.get();\n let response;\n\n try {\n response = await client.query({\n query: CHAT_CHANNEL_MEMBER_QUERY,\n variables: { id: userId },\n fetchPolicy: 'network-only',\n });\n onFetchChannelMembers.dispatch(response.data);\n } catch (error) {\n onFetchChannelMembersError.dispatch(error);\n throw error;\n }\n return response.data;\n}\n/**\n * @param {string} userId - User id.\n * @param {Array} channels - channels\n */\nexport async function fetchUnreadMessages(userId, channels) {\n const client = OnApolloClient.get();\n\n const responses = channels.map(async ({ channel, lastReadTS }) => {\n const variables = { id: channel.id, date: lastReadTS };\n try {\n const response = await client.query({\n query: UNREAD_MESSAGES_QUERY,\n variables,\n fetchPolicy: 'network-only',\n });\n return response;\n } catch (error) {\n return {\n error,\n };\n }\n });\n\n const results = await Promise.all(responses);\n\n if (results.find((item) => item.error) === -1) {\n onFetchUnreadMessagesError.dispatch(results.filter((item) => item.error));\n return;\n }\n const responsesData = results.map((item) => item.data);\n onFetchUnreadMessages.dispatch(responsesData);\n\n return responsesData;\n}\n","import { ApolloClient, InMemoryCache, HttpLink, split, from } from '@apollo/client';\nimport { WebSocketLink } from '@apollo/client/link/ws';\nimport { getMainDefinition } from '@apollo/client/utilities';\nimport { setContext } from '@apollo/client/link/context';\nimport { onError } from '@apollo/client/link/error';\nimport { OnTokenExpired } from '../session/session-events';\n\nconst EIGHTBASE_WS_ENDPOINT = 'wss://ws.8base.com';\nconst ENVIRONMENT_NAME = process.env.REACT_APP_ENVIRONMENT_NAME;\nconst WORKSPACE_ENDPOINT = process.env.REACT_APP_WORKSPACE_ENDPOINT;\nconst WORKSPACE_ID = process.env.REACT_APP_WORKSPACE_ID;\n\n/**\n * @param {Function} getToken - Function to get the token.\n * @param {object} headers - Extra header to the client.\n *\n * @returns {object} Apollo client.\n */\nexport function createApolloClient(getToken, headers = {}) {\n const httpLink = new HttpLink({\n uri: WORKSPACE_ENDPOINT,\n });\n\n const authLink = setContext((_, { headers: _headers }) => {\n return {\n headers: {\n ...headers,\n ..._headers,\n authorization: `Bearer ${getToken()}`,\n },\n };\n });\n\n const errorLink = onError((error) => {\n if (error.graphQLErrors) {\n // eslint-disable-next-line no-param-reassign\n error.graphQLErrors = error.graphQLErrors.map((options) => {\n if (options.message === 'Token expired') {\n OnTokenExpired.dispatch(options.message);\n\n return { ...options, message: 'Your session has expired' };\n }\n\n return options;\n });\n }\n\n if (error.response) {\n // eslint-disable-next-line no-param-reassign\n error.response.errors = error.response.errors?.map((options) => {\n if (options.message === 'Token expired') {\n OnTokenExpired.dispatch(options.message);\n\n return { ...options, message: 'Your session has expired' };\n }\n\n return options;\n });\n }\n });\n\n const wsLink = new WebSocketLink({\n uri: `${EIGHTBASE_WS_ENDPOINT}`,\n options: {\n reconnect: true,\n connectionParams: () => {\n const params = {\n token: getToken(),\n workspaceId: WORKSPACE_ID,\n };\n if (\n ENVIRONMENT_NAME &&\n typeof ENVIRONMENT_NAME === 'string' &&\n ENVIRONMENT_NAME.length > 0 &&\n ENVIRONMENT_NAME.toLowerCase() !== 'master'\n ) {\n params.environmentName = ENVIRONMENT_NAME;\n }\n return params;\n },\n },\n webSocketImpl: class WebSocketWithoutProtocol extends WebSocket {\n // eslint-disable-next-line no-useless-constructor\n constructor(url) {\n super(url); // ignore protocol\n }\n },\n });\n\n const splitLink = split(\n ({ query }) => {\n const definition = getMainDefinition(query);\n return definition.kind === 'OperationDefinition' && definition.operation === 'subscription';\n },\n wsLink,\n httpLink,\n );\n\n const link = from([authLink, errorLink, splitLink]);\n\n const client = new ApolloClient({\n uri: WORKSPACE_ENDPOINT,\n link: link,\n cache: new InMemoryCache(),\n });\n\n return client;\n}\n","import React, { useState } from 'react';\nimport { createApolloClient } from '.';\nimport PropTypes from 'prop-types';\nimport { getUserToken } from '../helpers';\nimport { ApolloProvider } from '@apollo/client';\n/**\n * @returns {object} Apollo client\n */\nexport function apolloClient() {\n return createApolloClient(() => getUserToken());\n}\n// createApolloClient\n/**\n * @param {object} props - Props\n * @param {React.Component} props.children - Children element\n * @returns {React.FC} - React Component.\n */\nexport function Apollo({ children }) {\n const [apollo] = useState(() => createApolloClient(() => getUserToken()));\n return {children};\n}\n\nApollo.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n};\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport IconCount from 'shared/components/IconCount';\nimport Chat from '@cobuildlab/8base-chat';\nimport { getUserToken } from '../../shared/helpers';\nimport '@cobuildlab/8base-chat/dist/8base-chat.css';\nimport { fetchChannelsMembers, fetchUnreadMessages } from './chat-actions';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { onFetchChannelMembers, onFetchUnreadMessages } from './chat-events';\nimport { apolloClient } from '../../shared/apollo/Apollo';\nimport { NEW_MESSAGE_SUBSCRIPTION } from './chat-querys';\n\nconst WORKSPACE_ENDPOINT = process.env.REACT_APP_WORKSPACE_ENDPOINT;\nconst WORKSPACE_ID = process.env.REACT_APP_WORKSPACE_ID;\n\n/**\n * @param {object} props props\n * @param {string} props.user user id\n * @returns {React.FC} Chat icon component\n */\nfunction ChatIcon({ user }) {\n const [userToken] = useState(() => getUserToken());\n const [channelsMembers, setChannelsMembers] = useState([]);\n const [unreadCount, setUnreadCount] = useState(0);\n const [showChatSidebar, setShowChatSidebar] = useState(false);\n const toggleSidebar = () => {\n setShowChatSidebar((value) => !value);\n };\n useEffect(() => {\n if (showChatSidebar) {\n return;\n }\n fetchChannelsMembers(user.id);\n }, [user, showChatSidebar]);\n\n useSubscription(\n onFetchChannelMembers,\n ({ channelMembersList: { items } }) => {\n console.log('items', items);\n\n setChannelsMembers(items);\n },\n [],\n );\n\n useEffect(() => {\n if (channelsMembers.length > 0) {\n fetchUnreadMessages(user.id, channelsMembers);\n }\n }, [user, channelsMembers]);\n\n useSubscription(\n onFetchUnreadMessages,\n (data) => {\n const count = data.reduce((prevCount, { messagesList }) => {\n const messages = messagesList.items.filter((item) => item.createdBy.id !== user.id);\n return prevCount + Number(messages.length);\n }, 0);\n\n setUnreadCount(count);\n },\n [],\n );\n\n useEffect(() => {\n const client = apolloClient();\n const subcription = client.subscribe({\n query: NEW_MESSAGE_SUBSCRIPTION,\n variables: {\n user: user.id,\n },\n });\n const subcriptionCallback = subcription.subscribe(({ data }) => {\n if (data?.Message?.node?.id) {\n const message = data?.Message?.node;\n\n if (message.createdBy.id === user.id) {\n return;\n }\n\n setUnreadCount((prevCount) => prevCount + 1);\n }\n });\n return () => {\n subcriptionCallback.unsubscribe();\n };\n }, [user]);\n return (\n <>\n \n {showChatSidebar && (\n \n )}\n >\n );\n}\n\nChatIcon.propTypes = {\n user: PropTypes.string.isRequired,\n};\n\nexport default ChatIcon;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { SUBSCRIPTION_STATUS } from '@cobuildlab/lead-volt-share';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport IconCount from './IconCount';\nimport DialogProfile from './dialog/DialogProfile';\nimport AvatarWithStatus from './AvatarWithStatus';\nimport { routes } from './Menu';\nimport { withRouter } from 'react-router-dom';\nimport { withAuth } from '@8base/react-sdk';\nimport { compose } from 'recompose';\nimport { Row, Text, Icon } from '@8base/boost';\nimport Dropdown from './ui/dropdowns/Dropdown';\nimport { getUserAgencies, getActiveAgency } from '../utils/agency-utils';\nimport { isCompanyAvailableFromAgencyId, isAdminInCompany } from '../utils/company-utils';\nimport { DropdownOption } from './ui/dropdowns/DropdownOption';\nimport { DropdownWrap } from './ui/dropdowns/DropdownWrap';\nimport { OnSessionFetch } from '../session/session-events';\nimport { DialogInvitations } from '../../modules/onboarding/components/DialogInvitations';\nimport {\n declineAgencyInvitation,\n acceptAgencyInvitation,\n} from '../../modules/agency-invitation/agency-invitation-actions';\nimport {\n declineCompanyInvitation,\n acceptCompanyInvitation,\n} from '../../modules/company-invitation/company-invitation-actions';\nimport * as R from 'ramda';\nimport { useSubscription } from '@cobuildlab/react-flux-state';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchSession } from '../../modules/auth/auth.actions';\nimport agencyStore, { AGENCY_ERROR_EVENT } from '../../modules/agency/agency-store';\nimport { onErrorMixinFC } from '../mixins';\nimport { getPendingInvitations } from '../utils/invitations-utils';\nimport { useAutomaticCalls } from '../../modules/phone-calls/phone-calls-hooks';\nimport AutomaticCallsIcon from '../../modules/phone-calls/Components/AutomaticCallsIcon';\nimport NotificationsIcon from '../../modules/notifications/NotificationsIcon';\nimport ChatIcon from '../../modules/chat/ChatIcon';\nimport * as Toast from './toast/Toast';\nimport { apolloClient } from '../apollo/Apollo';\nimport {\n AGENCY_INVITATIONS_SUBSCRIPTION,\n COMPANY_INVITATIONS_SUBSCRIPTION,\n} from '../../modules/auth/queries';\nimport { useUserStatus } from '../hooks/useUserStatus';\nimport {\n OnAcceptAgencyInvitationEvent,\n OnAgencyInvitationError,\n OnDeclineAgencyInvitationEvent,\n} from 'modules/agency-invitation/agency-invitation-events';\nimport {\n OnAcceptCompanyinvitationEvent,\n OnCompanyinvitationError,\n OnDeclineCompanyinvitationEvent,\n} from 'modules/company-invitation/company-invitation-events';\n\nconst Container = styled.div`\n width: calc(100% - 56px);\n margin-left: 56px;\n background-color: white;\n border-bottom: 1px solid #e9eff4;\n`;\n\nconst BarRow = styled(Row)`\n padding: 0px 24px;\n`;\n\nconst TitleContainer = styled.div`\n flex: 1 1 100px;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n padding: 10px 0px;\n\n @media screen and (max-width: 615px) {\n justify-content: center;\n }\n`;\n\nconst AgencyContainer = styled.div`\n flex: 1 1 200px;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 10px 0px;\n`;\n\nconst IconsContainer = styled.div`\n flex: 1 1 180px;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n padding: 10px 0px;\n\n @media screen and (max-width: 615px) {\n justify-content: center;\n }\n`;\n\nconst Agency = styled.div`\n height: 36px;\n padding: 11px 22px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst CurrentBadge = styled.span`\n box-sizing: border-box;\n height: 20px;\n width: 57px;\n border: 1px solid #eaeff3;\n border-radius: 5px;\n color: #9b9b9b;\n font-family: 'Poppins';\n font-size: 11px;\n line-height: 20px;\n text-align: center;\n margin-left: 12px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst { TRIALING, ACTIVE } = SUBSCRIPTION_STATUS;\n\nconst TopBar = ({ history, auth, handleOnChangeAgency, agencyId, setAgencyId }) => {\n const getTitle = (pathname) => {\n const route = routes.find((route) => {\n let pathName = pathname\n .replace('/', ' ')\n .trim()\n .split('/');\n let routePath = route.path\n .replace('/', ' ')\n .trim()\n .split('/');\n pathName = `/${pathName[0]}`;\n routePath = `/${routePath[0]}`;\n return pathName.startsWith(routePath);\n });\n return route ? route.name : '';\n };\n const [dialogIsOpen, setDialogIsOpen] = useState(false);\n const [title, setTitle] = useState(getTitle(window.location.pathname));\n const [invitationsCount, setInvitationsCount] = useState(0);\n const [dialogInvitationIsOpen, setDialogInvitationIsOpen] = useState(false);\n const [agencyInvitations, setAgencyInvitations] = useState([]);\n const [companyInvitations, setCompanyInvitations] = useState([]);\n const [isLoadingInvitations, setIsLoadingInvitations] = useState(false);\n const { user } = OnSessionFetch.get() || {};\n\n const setInvitations = () => {\n const session = OnSessionFetch.get();\n\n if (session) {\n const { agencyInvitationsList, companyInvitationsList } = session;\n const [pendingAgencyInvitations, pendingCompanyInvitations] = getPendingInvitations(\n agencyInvitationsList,\n companyInvitationsList,\n );\n\n setInvitationsCount(pendingAgencyInvitations.length + pendingCompanyInvitations.length);\n setAgencyInvitations(pendingAgencyInvitations);\n setCompanyInvitations(pendingCompanyInvitations);\n }\n };\n useEffect(() => {\n setInvitationsCount(agencyInvitations.length + companyInvitations.length);\n }, [agencyInvitations, companyInvitations]);\n\n useEffect(() => {\n const client = apolloClient();\n\n const agencyInvitationSubscription = client.subscribe({\n query: AGENCY_INVITATIONS_SUBSCRIPTION,\n variables: {\n email: user.email,\n },\n });\n const agencyInvitationSubcriptionCallback = agencyInvitationSubscription.subscribe(\n ({ data }) => {\n if (data.AgencyInvitation) {\n const invitation = data.AgencyInvitation?.node;\n setAgencyInvitations((previous) => [...previous, invitation]);\n }\n },\n );\n const companyInvitationSubscription = client.subscribe({\n query: COMPANY_INVITATIONS_SUBSCRIPTION,\n variables: {\n email: user.email,\n },\n });\n const companyInvitationSubcriptionCallback = companyInvitationSubscription.subscribe(\n ({ data }) => {\n if (data.CompanyInvitation) {\n const invitation = data.CompanyInvitation?.node;\n setCompanyInvitations((previous) => [...previous, invitation]);\n }\n },\n );\n return () => {\n agencyInvitationSubcriptionCallback.unsubscribe();\n companyInvitationSubcriptionCallback.unsubscribe();\n };\n }, [user.email]);\n useEffect(() => {\n setInvitations();\n }, []);\n\n useEffect(() => {\n const unlisten = history.listen((location) => {\n setTitle(getTitle(location.pathname));\n\n if (!isCompanyAvailableFromAgencyId(agencyId)) {\n if (!location.pathname.startsWith('/settings/billing')) {\n history.replace('/settings/billing');\n }\n }\n });\n\n return () => unlisten();\n }, [history, agencyId]);\n\n const handleOnSubscription = async () => {\n await fetchSession();\n setIsLoadingInvitations(false);\n setDialogInvitationIsOpen(false);\n setInvitations();\n };\n\n useSimpleSubscription(OnAcceptAgencyInvitationEvent, handleOnSubscription);\n useSimpleSubscription(OnDeclineAgencyInvitationEvent, handleOnSubscription);\n useSimpleSubscription(OnAgencyInvitationError, onErrorMixinFC);\n useSimpleSubscription(OnAcceptCompanyinvitationEvent, handleOnSubscription);\n useSimpleSubscription(OnDeclineCompanyinvitationEvent, handleOnSubscription);\n useSimpleSubscription(OnCompanyinvitationError, onErrorMixinFC);\n useSimpleSubscription(OnCompanyinvitationError, onErrorMixinFC);\n useSubscription(agencyStore, AGENCY_ERROR_EVENT, onErrorMixinFC);\n\n useSimpleSubscription(\n OnSessionFetch,\n () => {\n const agency = getActiveAgency();\n\n if (agency) {\n setAgencyId(agency.id);\n }\n },\n [],\n );\n\n const handleOnAcceptAgencyInvitation = (invitation) => {\n setIsLoadingInvitations(true);\n acceptAgencyInvitation(R.clone(invitation));\n };\n const handleOnDeclineAgencyInvitation = (invitation) => {\n setIsLoadingInvitations(true);\n declineAgencyInvitation(R.clone(invitation));\n };\n const handleOnAcceptCompanyInvitation = (invitation) => {\n setIsLoadingInvitations(true);\n acceptCompanyInvitation(R.clone(invitation));\n };\n const handleOnDeclineCompanyInvitation = (invitation) => {\n setIsLoadingInvitations(true);\n declineCompanyInvitation(R.clone(invitation));\n };\n\n const isAgencyEnabled = useCallback((agency) => {\n const { company } = agency;\n const [subscription] = company.subscriptions.items;\n\n return subscription.status === TRIALING || subscription.status === ACTIVE;\n }, []);\n\n const optionComponent = (agency) => (props) => {\n // eslint-disable-next-line\n const { active } = props;\n const { name } = agency;\n const isEnabled = isAgencyEnabled(agency);\n\n return (\n \n {name}\n {active && Current}\n {!isEnabled && }\n \n );\n };\n const agencies = getUserAgencies();\n const { active, setActive, statusType, agencySetting } = useAutomaticCalls(auth);\n const isCompanyAvailable = isCompanyAvailableFromAgencyId(agencyId);\n const status = useUserStatus();\n\n return (\n \n \n \n \n {title}\n \n \n \n {agencyId !== '' && (\n \n {agencies.length > 1 ? (\n ({\n value: agency.id,\n Component: optionComponent(agency),\n disabled: !isAgencyEnabled(agency) && !isAdminInCompany(agency.company),\n onDisabledClick: () => Toast.error('This agency is not available right now'),\n }))}\n />\n ) : (\n \n {agencyId !== '' && (\n {agencies.find((agency) => agency.id === agencyId).name}\n )}\n \n )}\n \n )}\n \n \n \n {isCompanyAvailable && (\n <>\n {active && }\n {\n if (invitationsCount > 0) {\n setDialogInvitationIsOpen(true);\n }\n }}\n />\n \n \n >\n )}\n {user && (\n setDialogIsOpen(!dialogIsOpen)}\n />\n )}\n \n \n \n setDialogIsOpen(false)}\n activeAgency={agencies.find((agency) => agency.id === agencyId)}\n callsState={active}\n callsAction={setActive}\n showSwitch={agencySetting}\n />\n setDialogInvitationIsOpen(false)}\n isLoading={isLoadingInvitations}\n onClickAcceptAgencyInvitation={handleOnAcceptAgencyInvitation}\n onClickDeclineAgencyInvitation={handleOnDeclineAgencyInvitation}\n onClickAcceptCompanyInvitation={handleOnAcceptCompanyInvitation}\n onClickDeclineCompanyInvitation={handleOnDeclineCompanyInvitation}\n />\n \n );\n};\n\nTopBar.propTypes = {\n history: PropTypes.object.isRequired,\n handleOnChangeAgency: PropTypes.func.isRequired,\n agencyId: PropTypes.string.isRequired,\n setAgencyId: PropTypes.func.isRequired,\n auth: PropTypes.object.isRequired,\n};\n\nexport default compose(withRouter, withAuth)(TopBar);\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Breadcrumbs as BreadcrumbsBoost, Paper } from '@8base/boost';\r\nimport styled from 'styled-components';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { matchPath } from 'react-router';\r\n\r\nconst BreadcrumbsContainer = styled.div`\r\n padding: 5px 24px;\r\n a {\r\n text-decoration: none !important;\r\n }\r\n`;\r\n\r\nconst Breadcrumb = styled.span`\r\n opacity: 0.9;\r\n color: #384a59;\r\n font-size: 14px;\r\n line-height: 20px;\r\n font-family: 'Poppins';\r\n`;\r\n\r\nconst routeComponent = (name) => () => {name};\r\n\r\nconst routes = [\r\n {\r\n path: '/app',\r\n component: routeComponent('Lead Volt'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/campaigns',\r\n component: routeComponent('Campaigns'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/leads',\r\n component: routeComponent('Lead Management'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/leads/upload',\r\n component: routeComponent('Upload'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/tasks/list',\r\n component: routeComponent('Tasks > List'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/tasks/calendar',\r\n component: routeComponent('Tasks > Calendar'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/email',\r\n component: routeComponent('Emails'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/workflow/workflow-automation',\r\n component: routeComponent('Workflow Automations'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/workflow/email-template',\r\n component: routeComponent('Workflow Automations > Email Templates'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/workflow/sms-template',\r\n component: routeComponent('Workflow Automations > SMS Templates'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/settings/general',\r\n component: routeComponent('Settings > Profile'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/settings/email',\r\n component: routeComponent('Settings > Email'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/settings/billing',\r\n component: routeComponent('Settings > Billing'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/settings/company',\r\n component: routeComponent('Settings > Company'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/settings/company-invitations',\r\n component: routeComponent('Settings > Company Invitations'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/settings/invitations',\r\n component: routeComponent('Settings > Invitations'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/settings/voice-mail-messages',\r\n component: routeComponent('Settings > Voice Mail Messages'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/settings/phone-call',\r\n component: routeComponent('Settings > Phone Calls Settings'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/settings/vendors',\r\n component: routeComponent('Settings > Vendors'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/settings/services/email/inbound',\r\n component: routeComponent('Settings > Inbound Service Configuration'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/settings/services/email/outbound',\r\n component: routeComponent('Settings > Outbound Service Configuration'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/settings/agency',\r\n component: routeComponent('Settings > Agency'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/settings/phone-numbers',\r\n component: routeComponent('Settings > Phone Numbers'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/settings/team',\r\n component: routeComponent('Settings > Team'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/reports/phone-call-recordings',\r\n component: routeComponent('Reports > Phone Call Recordings'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/reports/leads-funnel',\r\n component: routeComponent('Reports > Leads Funnel'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/reports/phone-calls-logs',\r\n component: routeComponent('Reports > Phone Calls Logs'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/reports/email-logs',\r\n component: routeComponent('Reports > Email Logs'),\r\n matchOptions: { exact: true },\r\n },\r\n {\r\n path: '/app/reports/sms-logs',\r\n component: routeComponent('Reports > SMS Logs'),\r\n matchOptions: { exact: true },\r\n },\r\n];\r\nconst ignoreRoutes = ['/dashboard'];\r\n\r\nconst Breadcrumbs = ({ location }) => {\r\n return (\r\n <>\r\n {ignoreRoutes.indexOf(location.pathname) === -1 ? (\r\n \r\n \r\n \r\n \r\n \r\n ) : null}\r\n >\r\n );\r\n};\r\n\r\nBreadcrumbs.propTypes = {\r\n location: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default withRouter(Breadcrumbs);\r\n","import gql from 'graphql-tag';\n\nexport const FETCH_PHONE_CALL_RECORDINGS = gql`\n query FetchPhoneCallRecordings(\n $filter: PhoneCallRecordingFilter\n $first: Int\n $skip: Int\n $orderBy: [PhoneCallRecordingOrderBy]\n ) {\n phoneCallRecordingsList(filter: $filter, first: $first, skip: $skip, orderBy: $orderBy) {\n items {\n id\n recordingSid\n recordingUrl\n duration\n inboundCall {\n to {\n number {\n code\n number\n }\n }\n from\n duration\n createdAt\n }\n call {\n to\n from {\n number {\n code\n number\n }\n }\n duration\n lead {\n firstName\n lastName\n }\n user {\n firstName\n lastName\n }\n createdAt\n }\n }\n count\n }\n }\n`;\n\nexport const DELETE_PHONE_CALL_RECORDING = gql`\n mutation DeletePhoneCallRecording($data: PhoneCallRecordingDeleteInput) {\n phoneCallRecordingDelete(data: $data) {\n success\n }\n }\n`;\n\nexport const FETCH_FILE_UPLOAD_INFO = gql`\n query FetchFileUploadInfo {\n fileUploadInfo {\n policy\n signature\n apiKey\n path\n }\n }\n`;\n","import { FETCH_FILE_UPLOAD_INFO } from '../../modules/phone-calls/phone-call-recordings/phone-call-recordings-queries';\nimport { OnApolloClient } from '../session/session-events'; // eslint-disable-line import/no-unresolved\n\n/**\n * Uploads file in Filestack and retrieves data needed to connect with entities in 8base\n *\n * @param {File} file - The files loaded\n *\n * @returns {Promise} Promise with the result of the request\n */\nexport const uploadFile = async (file) => {\n const client = OnApolloClient.get();\n\n const info = await client.query({\n query: FETCH_FILE_UPLOAD_INFO,\n fetchPolicy: 'network-only',\n });\n\n const {\n fileUploadInfo: { apiKey, policy, path, signature },\n } = info.data;\n const form = new FormData();\n\n form.append('fileUpload', file);\n\n const endpoint = `https://www.filestackapi.com/api/store/S3?key=${apiKey}&path=${path}&policy=${policy}&signature=${signature}`;\n\n const response = await fetch(endpoint, {\n method: 'POST',\n body: form,\n });\n\n const body = await response.json();\n const url = body.url.split('/');\n const { [url.length - 1]: handle } = url;\n\n return {\n handle,\n filename: body.filename,\n };\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchVoiceMailMessagesEvent = createEvent();\n\nexport const OnFetchVoiceMailMessagesError = createEvent();\n\nexport const OnCreateVoiceMailMessageEvent = createEvent();\n\nexport const OnCreateVoiceMailMessageError = createEvent();\n\nexport const OnUpdateVoiceMailMessageEvent = createEvent();\n\nexport const OnUpdateVoiceMailMessageError = createEvent();\n\nexport const OnDeleteVoiceMailMessageEvent = createEvent();\n\nexport const OnDeleteVoiceMailMessageError = createEvent();\n","import gql from 'graphql-tag';\n\nexport const VoiceMailMessageFragment = gql`\n fragment VoiceMailMessageFragment on VoiceMailMessage {\n id\n name\n active\n type\n createdAt\n audio {\n id\n fileId\n filename\n downloadUrl\n }\n createdBy {\n id\n firstName\n lastName\n }\n }\n`;\n\nexport const FETCH_VOICE_MAIL_MESSAGES = gql`\n query FetchVoiceMailMessages(\n $filter: VoiceMailMessageFilter\n $orderBy: [VoiceMailMessageOrderBy]\n $first: Int\n $skip: Int\n ) {\n voiceMailMessagesList(filter: $filter, orderBy: $orderBy, first: $first, skip: $skip) {\n items {\n ...VoiceMailMessageFragment\n }\n count\n }\n }\n ${VoiceMailMessageFragment}\n`;\n\nexport const CREATE_VOICE_MAIL_MESSAGE = gql`\n mutation CreateVoiceMailMessage($data: VoiceMailMessageCreateInput!) {\n voiceMailMessageCreate(data: $data) {\n ...VoiceMailMessageFragment\n }\n }\n ${VoiceMailMessageFragment}\n`;\n\nexport const UPDATE_VOICE_MAIL_MESSAGE = gql`\n mutation UpdateVoiceMailMessage($data: VoiceMailMessageUpdateInput!) {\n voiceMailMessageUpdate(data: $data) {\n ...VoiceMailMessageFragment\n }\n }\n ${VoiceMailMessageFragment}\n`;\n\nexport const DELETE_VOICE_MAIL_MESSAGE = gql`\n mutation DeleteVoiceMailMessage($data: VoiceMailMessageDeleteInput) {\n voiceMailMessageDelete(data: $data) {\n success\n }\n }\n`;\n","import Flux from '@cobuildlab/flux-state';\n\n/**\n * Event that triggers when voice mail recordings are fetched\n *\n * @type {string}\n */\nexport const FETCH_VOICE_MAIL_MESSAGES_EVENT = 'onFetchVoiceMailMessagesEvent';\n\n/**\n * Event that triggers when voice mail recordings fetching fail\n *\n * @type {string}\n */\nexport const FETCH_VOICE_MAIL_MESSAGES_EVENT_ERROR = 'onFetchVoiceMailMessagesEventError';\n\n/**\n * Event that triggers when a new voice mail message is created\n *\n * @type {string}\n */\nexport const CREATE_VOICE_MAIL_MESSAGE_EVENT = 'onCreateVoiceMailMessageEvent';\n\n/**\n * Event that triggers when a voice mail message creation fails\n *\n * @type {string}\n */\nexport const CREATE_VOICE_MAIL_MESSAGE_EVENT_ERROR = 'onCreateVoiceMailMessageEventError';\n\n/**\n * Event that triggers when a voice mail message is updated\n *\n * @type {string}\n */\nexport const UPDATE_VOICE_MAIL_MESSAGE_EVENT = 'onUpdateVoiceMailMessageEvent';\n\n/**\n * Event that triggers when a voice mail message update fails\n *\n * @type {string}\n */\nexport const UPDATE_VOICE_MAIL_MESSAGE_EVENT_ERROR = 'onUpdateVoiceMailMessageEventError';\n\n/**\n * Event that triggers when a voice mail message is deleted\n *\n * @type {string}\n */\nexport const DELETE_VOICE_MAIL_MESSAGE_EVENT = 'onDeleteVoiceMailMessageEvent';\n\n/**\n * Event that triggers when a voice mail message delete fails\n *\n * @type {string}\n */\nexport const DELETE_VOICE_MAIL_MESSAGE_EVENT_ERROR = 'onDeleteVoiceMailMessageEventError';\n\nclass VoiceMailMessageStore extends Flux.DashStore {\n constructor() {\n super();\n\n this.addEvent(FETCH_VOICE_MAIL_MESSAGES_EVENT);\n this.addEvent(FETCH_VOICE_MAIL_MESSAGES_EVENT_ERROR);\n this.addEvent(UPDATE_VOICE_MAIL_MESSAGE_EVENT);\n this.addEvent(UPDATE_VOICE_MAIL_MESSAGE_EVENT_ERROR);\n this.addEvent(CREATE_VOICE_MAIL_MESSAGE_EVENT);\n this.addEvent(CREATE_VOICE_MAIL_MESSAGE_EVENT_ERROR);\n this.addEvent(DELETE_VOICE_MAIL_MESSAGE_EVENT);\n this.addEvent(DELETE_VOICE_MAIL_MESSAGE_EVENT_ERROR);\n }\n}\n\nexport default new VoiceMailMessageStore();\n","import Flux from '@cobuildlab/flux-state';\nimport { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport { uploadFile } from '../../../shared/utils/storage-utils';\nimport { onVoiseMailMessageList, onVoiseMailMessageListError } from '../phone-calls-events';\nimport {\n OnCreateVoiceMailMessageError,\n OnCreateVoiceMailMessageEvent,\n OnDeleteVoiceMailMessageError,\n OnDeleteVoiceMailMessageEvent,\n OnFetchVoiceMailMessagesError,\n OnFetchVoiceMailMessagesEvent,\n OnUpdateVoiceMailMessageError,\n OnUpdateVoiceMailMessageEvent,\n} from './voice-mail-message-events';\nimport {\n FETCH_VOICE_MAIL_MESSAGES,\n UPDATE_VOICE_MAIL_MESSAGE,\n CREATE_VOICE_MAIL_MESSAGE,\n DELETE_VOICE_MAIL_MESSAGE,\n} from './voice-mail-message-queries';\nimport {\n CREATE_VOICE_MAIL_MESSAGE_EVENT,\n CREATE_VOICE_MAIL_MESSAGE_EVENT_ERROR,\n UPDATE_VOICE_MAIL_MESSAGE_EVENT,\n UPDATE_VOICE_MAIL_MESSAGE_EVENT_ERROR,\n DELETE_VOICE_MAIL_MESSAGE_EVENT,\n DELETE_VOICE_MAIL_MESSAGE_EVENT_ERROR,\n} from './voice-mail-message-store';\n\n/**\n * Creates a filter for VaiceMailMessages query\n *\n * @param {object} filter - Data provided\n *\n * @returns {object} 8base adapted object to filter voice mail messages\n */\nconst createFilter = (filter) => {\n let byName = {};\n let byUrl = {};\n let byActive = {};\n let byAgency = {};\n let byProperty = {};\n\n if (filter.name && Array.isArray(filter.name)) {\n const [name, namePredicate] = filter.name;\n byName = { name: { [namePredicate]: name } };\n }\n\n if (filter.url && Array.isArray(filter.url)) {\n const [url, urlPredicate] = filter.url;\n byUrl = { url: { [urlPredicate]: url } };\n }\n\n if (filter.active && Array.isArray(filter.active)) {\n const [active, activePredicate] = filter.active;\n byActive = { active: { [activePredicate]: active } };\n }\n\n if (filter.user && Array.isArray(filter.user)) {\n const [user, userPredicate] = filter.user;\n\n byProperty = {\n OR: [{ createdBy: { id: { [userPredicate]: user } } }, { type: { equals: 'PUBLIC' } }],\n };\n }\n\n byAgency = filter.agency ? { agency: { id: { equals: filter.agency } } } : {};\n\n return {\n ...byName,\n ...byUrl,\n ...byActive,\n ...byAgency,\n ...byProperty,\n };\n};\n\n/**\n * Fetches voice mail messages\n *\n * @param {object} data - Data to filter the results\n * @param {number} page - The page to fetch the data from\n * @param {string} orderBy - Ordering way of the fetching\n * @param {boolean} list - Is the event is set in the voice mails list\n * @returns {Promise} The request result\n */\nexport const fetchVoiceMailMessages = async (\n data,\n page = 1,\n orderBy = 'createdAt_DESC',\n list = true,\n) => {\n const client = OnApolloClient.get();\n const filter = createFilter(data);\n const first = 10;\n const skip = (page - 1) * first;\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_VOICE_MAIL_MESSAGES,\n variables: { filter, orderBy, first, skip },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchVoiceMailMessages', e);\n\n OnFetchVoiceMailMessagesError.dispatch(e);\n return;\n }\n\n log('fetchVoiceMailMessages', response.data);\n OnFetchVoiceMailMessagesEvent.dispatch(response.data);\n return response.data;\n};\nexport const fetchVoiceMailMessagesForCalls = async (data) => {\n const client = OnApolloClient.get();\n const filter = createFilter(data);\n const first = 20;\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_VOICE_MAIL_MESSAGES,\n variables: { filter, first },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchVoiceMailMessages', e);\n\n // Flux.dispatchEvent(FETCH_VOICE_MAIL_MESSAGES_EVENT_ERROR, e);\n onVoiseMailMessageListError.dispatch(e);\n\n return;\n }\n\n log('fetchVoiceMailMessages', response.data);\n // Flux.dispatchEvent(FETCH_VOICE_MAIL_MESSAGES_EVENT, response.data);\n onVoiseMailMessageList.dispatch(response.data);\n\n return response.data;\n};\n/**\n * Creates a new voice mail message\n *\n * @param {object} voiceMail - Voice mail object to create\n * @param {string} agencyId - Id of the agency related to the voice mail message\n * @param {Function} onProgress - Callback function to track progress of the file upload\n *\n * @returns {Promise} The request result\n */\nexport const createVoiceMailMessage = async (voiceMail, agencyId, onProgress = () => {}) => {\n const client = OnApolloClient.get();\n let uploadedInfo = null;\n let response = null;\n const data = {\n name: voiceMail.name,\n active: true,\n type: voiceMail.type,\n agency: {\n connect: {\n id: agencyId,\n },\n },\n };\n\n try {\n uploadedInfo = await uploadFile(voiceMail.file, onProgress);\n } catch (e) {\n error('createVoiceMailMessage', e);\n\n Flux.dispatchEvent(CREATE_VOICE_MAIL_MESSAGE_EVENT_ERROR, e);\n OnCreateVoiceMailMessageError.dispatch(e);\n return;\n }\n\n data.audio = {\n create: {\n fileId: uploadedInfo.handle,\n filename: uploadedInfo.filename,\n },\n };\n\n try {\n response = await client.mutate({\n mutation: CREATE_VOICE_MAIL_MESSAGE,\n variables: { data },\n });\n } catch (e) {\n error('createVoiceMailMessage', e);\n\n Flux.dispatchEvent(CREATE_VOICE_MAIL_MESSAGE_EVENT_ERROR, e);\n OnCreateVoiceMailMessageError.dispatch(e);\n\n return;\n }\n\n log('createVoiceMailMessage', response.data);\n\n Flux.dispatchEvent(CREATE_VOICE_MAIL_MESSAGE_EVENT, response.data);\n OnCreateVoiceMailMessageEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Updates a specific voice mail message\n *\n * @param {object} voiceMail - Voicemail message info to update\n * @param {Function} onProgress - Callback function to track progress of the file upload\n * @returns {Promise} The request result\n */\nexport const updateVoiceMailMessage = async (voiceMail, onProgress = () => {}) => {\n const client = OnApolloClient.get();\n let response = null;\n let uploadedInfo = null;\n\n try {\n if (voiceMail.file instanceof File) {\n uploadedInfo = await uploadFile(voiceMail.file, onProgress);\n } else {\n uploadedInfo = voiceMail.file;\n }\n } catch (e) {\n error('updateVoiceMailMessage', e);\n\n Flux.dispatchEvent(UPDATE_VOICE_MAIL_MESSAGE_EVENT_ERROR, e);\n\n return;\n }\n\n const data = {\n id: voiceMail.id,\n name: voiceMail.name,\n active: voiceMail.active,\n type: voiceMail.type,\n audio: uploadedInfo.handle\n ? {\n create: {\n fileId: uploadedInfo.handle,\n filename: uploadedInfo.filename,\n },\n }\n : {\n connect: {\n id: uploadedInfo.id,\n fileId: uploadedInfo.fileId,\n },\n },\n };\n\n try {\n response = await client.mutate({\n mutation: UPDATE_VOICE_MAIL_MESSAGE,\n variables: { data },\n });\n } catch (e) {\n error('updateVoiceMailMessage', e);\n\n Flux.dispatchEvent(UPDATE_VOICE_MAIL_MESSAGE_EVENT_ERROR, e);\n OnUpdateVoiceMailMessageError.dispatch(e);\n\n return;\n }\n\n log('updateVoiceMailMessage', response.data);\n\n Flux.dispatchEvent(UPDATE_VOICE_MAIL_MESSAGE_EVENT, response.data);\n OnUpdateVoiceMailMessageEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Deletes the specified voice mail message\n *\n * @param {string} id - Voice mail message Id to delete\n *\n * @returns {Promise} The request result\n */\nexport const deleteVoiceMailMessage = async (id) => {\n const client = OnApolloClient.get();\n let response = null;\n\n try {\n response = await client.mutate({\n mutation: DELETE_VOICE_MAIL_MESSAGE,\n variables: { data: { id } },\n });\n } catch (e) {\n error('deleteVoiceMailMessage', e);\n\n Flux.dispatchEvent(DELETE_VOICE_MAIL_MESSAGE_EVENT_ERROR, e);\n OnDeleteVoiceMailMessageError.dispatch(e);\n return;\n }\n\n log('deleteVoiceMailMessage', response.data);\n OnDeleteVoiceMailMessageEvent.dispatch(response.data);\n Flux.dispatchEvent(DELETE_VOICE_MAIL_MESSAGE_EVENT, response.data);\n};\n","import React from 'react';\nimport { Card, Text, Icon, Row, Dialog, Button } from '@8base/boost';\nimport { PrimaryBtn as ActionButton } from '../../../shared/components/ui/buttons/PrimaryBtn';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst Name = styled(Text)`\n font-size: 1.2rem !important;\n`;\n\nconst Body = styled(Dialog.Body)`\n max-height: 300px !important;\n`;\n\nconst Item = styled(Card.Section)`\n padding: 12px !important;\n cursor: pointer;\n &:hover {\n background: #eee;\n }\n`;\n\nclass VoiceMailMessagesDialog extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isOpen: false,\n selected: null,\n };\n }\n\n open = () => this.setState({ isOpen: true });\n\n close = () => this.setState({ isOpen: false });\n\n handleSubmit = () => {\n const { onSubmit } = this.props;\n const { selected } = this.state;\n\n this.setState({ isOpen: false }, () => onSubmit(selected));\n };\n\n render() {\n const { messages } = this.props;\n const { isOpen, selected } = this.state;\n\n const items = messages.map((message) => (\n this.setState({ selected: message })}>\n \n {message.name}\n {selected && selected.id === message.id && (\n \n )}\n \n \n ));\n\n return (\n \n \n \n {items}\n \n \n \n \n Cancel\n \n \n Send Message\n \n \n \n \n );\n }\n}\n\nVoiceMailMessagesDialog.propTypes = {\n messages: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n }).isRequired,\n ).isRequired,\n selected: PropTypes.shape({\n id: PropTypes.string.isRequired,\n }),\n onSubmit: PropTypes.func.isRequired,\n};\n\nVoiceMailMessagesDialog.defaultProps = {\n selected: null,\n};\n\nexport default VoiceMailMessagesDialog;\n","import { Button, styled } from '@8base/boost';\n\nexport const ControlButton = styled(Button)`\n background-color: ${({ disabled }) =>\n disabled ? 'rgba(255,255,255,.3) !important' : ' transparent !important'};\n color: inherit !important;\n`;\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchVoiceMailMessagesForCalls } from '../voice-mail-message/voice-mail-message-actions';\nimport { getActiveAgency } from '../../../shared/utils/agency-utils';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport VoiceMailMessagesDialog from './VoiceMailMessagesDialog';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { ControlButton } from './ControlButton';\nimport { onVoiseMailMessageList } from '../phone-calls-events';\n\nconst Icon = styled.img`\n height: 1.5em;\n`;\n\nconst voicemailIconUrl = require('shared/assets/images/voicemail.svg');\n\nconst initialState = {\n loading: true,\n sending: false,\n selected: null,\n items: [],\n};\n\n/**\n * Voice Mail Button component\n *\n * @param {object} props - The component's prop object\n * @param {Function} props.onSubmitVoiceMail - Function to be executed after send button is clicked\n * @param {Function} props.onVoiceMailEnded - Fuction to be called after voice mail message is sent\n *\n * @returns {React.FC} The component to render\n */\nfunction VoiceMailButton({ onSubmitVoiceMail, onVoiceMailEnded }) {\n const [state, setState] = useState(initialState);\n const [user] = useUser();\n const agency = getActiveAgency();\n const modalRef = useRef(null);\n const audioRef = useRef(null);\n\n const open = useCallback(() => modalRef.current.open(), []);\n\n const handleSubmit = useCallback(\n (message) =>\n setState((state) => ({\n ...state,\n loading: true,\n selected: message,\n })),\n [],\n );\n\n const handleVoiceMailSubmit = useCallback(() => {\n if (state.selected) {\n setState((state) => ({ ...state, loading: false, sending: true }));\n\n onSubmitVoiceMail(audioRef.current);\n }\n }, [state.selected, setState, onSubmitVoiceMail]);\n\n const handleVoiceMailEnded = useCallback(() => {\n setState((state) => ({ ...state, sending: false }));\n\n onVoiceMailEnded();\n }, [onVoiceMailEnded]);\n\n useEffect(() => {\n fetchVoiceMailMessagesForCalls({\n agency: agency.id,\n user: [user.id, 'equals'],\n active: [true, 'equals'],\n });\n }, [user, agency.id]);\n\n /**\n * Effect that attaches the \"canplaythrouhg\" event to wait that the file is ready so\n * the callback can use the audio element properly\n */\n useEffect(() => {\n const audio = audioRef.current;\n\n audio.addEventListener('canplaythrough', handleVoiceMailSubmit);\n\n return () => audio.removeEventListener('canplaythrough', handleVoiceMailSubmit);\n }, [handleVoiceMailSubmit]);\n\n /**\n * Effect that attaches the \"ended\" event to the audio element to\n * connect back the microphone on voice mail message ended\n */\n useEffect(() => {\n const audio = audioRef.current;\n\n audio.addEventListener('ended', handleVoiceMailEnded);\n\n return () => audio.removeEventListener('ended', handleVoiceMailEnded);\n }, [handleVoiceMailEnded]);\n\n useSubscription(onVoiseMailMessageList, ({ voiceMailMessagesList }) => {\n setState({\n ...state,\n loading: false,\n items: voiceMailMessagesList.items,\n });\n });\n\n return (\n <>\n \n \n \n {state.sending ? 'Sending...' : 'Recordings'}\n \n \n >\n );\n}\n\nVoiceMailButton.propTypes = {\n onSubmitVoiceMail: PropTypes.func.isRequired,\n onVoiceMailEnded: PropTypes.func.isRequired,\n};\n\nexport default VoiceMailButton;\n","import { createPortal } from 'react-dom';\nimport PropTypes from 'prop-types';\n\n/**\n * React portal for render the control outside main react tree\n * It renders in a div with the id=phone-calls-controls at the root of the body\n *\n * @param {object} props Props\n * @param {object} props.children React element\n * @returns {object} React element\n */\nconst ControlsPortal = ({ children }) => {\n const controlsRoot = document.getElementById('phone-calls-controls');\n return createPortal(children, controlsRoot);\n};\n\nControlsPortal.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n};\nexport default ControlsPortal;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { keyframes } from 'styled-components';\nimport { formatPhoneNumber } from '../phone-calls-utils';\nimport { CALL_TYPES } from '../phone-calls-model';\nimport moment from 'moment';\nimport { Text } from '@8base/boost';\nconst callPhoneIconUrl = require('shared/assets/images/call-phone.svg');\nconst pulse = keyframes`\n 0% {\n box-shadow: 0 0 0 0 rgba(255,255,255, 0.4);\n }\n 70% {\n box-shadow: 0 0 0 10px rgba(255,255,255, 0);\n }\n 100% {\n box-shadow: 0 0 0 0 rgba(255,255,255, 0);\n }\n`;\nconst Icon = styled.img`\n height: 1.5em;\n`;\nconst IconPulse = styled.div`\n box-shadow: 0 0 0 rgba(255, 255, 255, 0.4);\n animation: ${({ calling }) => calling && pulse} 2s infinite;\n\n width: 1.5em;\n height: 1.5em;\n border-radius: 50%;\n`;\nconst Container = styled.div`\n width: 260px;\n h2 {\n font-size: 1.2em;\n font-weight: bolder;\n display: flex;\n div {\n margin-left: 10px;\n }\n }\n`;\n\n/**\n * @param {object} props - The component's props\n * @param {number} props.duration - duration of the call in milisecons\n * @param {string} props.phoneNumber - The number beign called\n * @param {string} props.callerNumber - The number that started the call\n * @param {string} props.receiverName - The name to display\n * @param {boolean} props.calling - If the call is acitive\n * @param {boolean} props.type - The type of call, either inbound or outbound\n *\n * @returns {object} React component\n */\nfunction CallInfo({ duration, phoneNumber, receiverName, calling, callerNumber, campaign, type }) {\n const label = type === CALL_TYPES.INBOUND ? 'Inbound' : 'Outbound';\n const from = formatPhoneNumber(callerNumber);\n const to = formatPhoneNumber(phoneNumber);\n\n const displayName = type === CALL_TYPES.INBOUND ? receiverName || from : receiverName || to;\n\n return (\n \n {(type === CALL_TYPES.OUTBOUND || (type === CALL_TYPES.INBOUND && receiverName !== null)) && (\n From: {from}\n )}\n \n {displayName}{' '}\n \n \n \n \n {campaign}\n \n \n {(type === CALL_TYPES.INBOUND || (type === CALL_TYPES.OUTBOUND && receiverName !== null)) && (\n To: {to}\n )}\n \n {label} call ᛫ {moment(duration).format('mm:ss')}\n \n \n );\n}\n\nCallInfo.propTypes = {\n phoneNumber: PropTypes.string.isRequired,\n receiverName: PropTypes.string.isRequired,\n duration: PropTypes.number.isRequired,\n calling: PropTypes.bool.isRequired,\n callerNumber: PropTypes.string.isRequired,\n campaign: PropTypes.string.isRequired,\n type: PropTypes.oneOf([CALL_TYPES.INBOUND, CALL_TYPES.OUTBOUND]).isRequired,\n};\n\nexport default CallInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { Button, Icon, Grid } from '@8base/boost';\n// const callPhoneIconUrl = require('shared/assets/images/call-phone.svg');\n\nconst DialPadContainer = styled.section`\n width: 100%;\n position: fixed;\n background-color: var(--color-blue-3);\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n padding: 20px;\n color: white;\n z-index: 1;\n position: fixed;\n width: 250px;\n height: 300px;\n margin: 0 auto;\n left: 0;\n right: 0;\n top: calc(50% - 150px);\n transition: all ease-in-out 0.3s;\n transform: translate(100vw, 100vh) scale(0.01);\n opacity: 0;\n ${({ active }) =>\n active &&\n `\n opacity: 0.9;\n transform: scale(1) translate(0,0)\n `};\n`;\nconst DialCloseBtn = styled(Button)`\n position: absolute;\n top: 1em;\n right: 1em;\n /* background-color: transparent !important; */\n height: auto !important;\n padding: 0.1em !important;\n`;\nconst DialBtn = styled(Button)`\n font-size: 1.5em !important;\n background-color: transparent !important;\n height: 2.2em !important;\n width: 2.2em !important;\n padding: 0 !important;\n color: inherit !important;\n margin: 7px 0;\n`;\n/**\n * @param {object} props props.\n * @param {boolean} props.show If the pad is acitive.\n * @param {Function} props.close Close callback.\n * @param {Function} props.send Close callback.\n * @returns {object} React component\n */\nfunction DialPad({ show, close, send }) {\n return (\n \n \n \n \n \n \n send('1')}>\n 1\n \n \n \n send('2')}>\n 2\n \n \n \n send('3')}>\n 3\n \n \n \n send('4')}>\n 4\n \n \n \n send('5')}>\n 5\n \n \n \n send('6')}>\n 6\n \n \n \n send('7')}>\n 7\n \n \n \n send('8')}>\n 8\n \n \n \n send('9')}>\n 9\n \n \n \n send('*')}>\n *\n \n \n \n send('0')}>\n 0\n \n \n \n send('#')}>\n #\n \n \n \n \n );\n}\n\nDialPad.propTypes = {\n show: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n send: PropTypes.func.isRequired,\n};\n\nexport default DialPad;\n","import gql from 'graphql-tag';\n\nexport const LEAD_NOTE_FRAGMENT = gql`\n fragment LEAD_NOTE_FRAGMENT on LeadNote {\n id\n createdAt\n text\n title\n notesLeadRelation {\n id\n }\n }\n`;\n\n// export const FETCH_LEAD_NOTES = gql`\n// query FetchLeadNotes($filter: LeadNoteFilter) {\n// leadNotesList(filter: $filter) {\n// count\n// items {\n// id\n// title\n// text\n// createdAt\n// }\n// }\n// }\n// `;\nexport const FETCH_LEAD_NOTES = gql`\n query FetchLeadNotes(\n $filterLeadNotes: LeadNoteFilter\n $filterDispositionNotes: LeadDispositionFilter\n ) {\n leadNotesList(filter: $filterLeadNotes) {\n count\n items {\n id\n title\n text\n createdAt\n createdBy {\n firstName\n lastName\n }\n }\n }\n leadDispositionsList(filter: $filterDispositionNotes) {\n items {\n id\n notes\n createdAt\n createdBy {\n firstName\n lastName\n }\n }\n }\n }\n`;\n\nexport const NOTE_CREATE_MUTATION = gql`\n mutation CreateLeadNote($data: LeadNoteCreateInput!) {\n leadNoteCreate(data: $data) {\n ...LEAD_NOTE_FRAGMENT\n }\n }\n ${LEAD_NOTE_FRAGMENT}\n`;\n\nexport const NOTE_UPDATE_MUTATION = gql`\n mutation UpdateLeadNote($data: LeadNoteUpdateInput!) {\n leadNoteUpdate(data: $data) {\n ...LEAD_NOTE_FRAGMENT\n }\n }\n ${LEAD_NOTE_FRAGMENT}\n`;\n\nexport const NOTE_DELETE_MUTATION = gql`\n mutation DeleteLeadNote($id: ID!) {\n leadNoteDelete(data: { id: $id }) {\n success\n }\n }\n`;\n","import gql from 'graphql-tag';\n\nexport const LEAD_AUTO_FRAGMENT = gql`\n fragment LEAD_AUTO_FRAGMENT on LeadTypeAuto {\n id\n alternate\n otherInfo\n currentBodilyInjuryCoverages\n currentPropertyDamageCoverages\n }\n`;\n\nexport const LEAD_TYPE_AUTO_UPDATE_MUTATION = gql`\n mutation LeadTypeAutoUpdateMutation($data: LeadTypeAutoUpdateInput!) {\n leadTypeAutoUpdate(data: $data) {\n ...LEAD_AUTO_FRAGMENT\n }\n }\n ${LEAD_AUTO_FRAGMENT}\n`;\n","import gql from 'graphql-tag';\n\nexport const LEAD_COMMERCIAL_AUTO_FRAGMENT = gql`\n fragment LEAD_COMMERCIAL_AUTO_FRAGMENT on LeadTypeCommercialAuto {\n id\n name\n businessName\n businessType\n coverageAmount\n numberOfDrivers\n numberOfVehicles\n numberOfEmployees\n payroll\n sales\n updatedAt\n yearsInBusiness\n createdAt\n }\n`;\n\nexport const LEADS_TYPE_COMMERCIAL_AUTO_UPDATE_MUTATION = gql`\n mutation LeadTypeCommercialAutoUpdateMutation($data: LeadTypeCommercialAutoUpdateInput!) {\n leadTypeCommercialAutoUpdate(data: $data) {\n ...LEAD_COMMERCIAL_AUTO_FRAGMENT\n }\n }\n ${LEAD_COMMERCIAL_AUTO_FRAGMENT}\n`;\n","import gql from 'graphql-tag';\n\nexport const LEAD_DRIVER_FRAGMENT = gql`\n fragment LEAD_DRIVER_FRAGMENT on LeadDriver {\n additionalDrivers\n additionalVehicles\n ageFirstLicensed\n annualMileage\n antiLockBreaks\n averageDaysPerWeekUsed\n averageOneWayMileage\n birthDate\n bankruptcyInPast5Years\n cellPhone\n completedBehindTheWheel\n continuouslyInsuredMonths\n continuouslyInsuredYears\n coverageLevel\n createdAt\n creditRating\n currentBodilyInjuryCoverages\n currentCollisionDeductible\n currentComprehensiveDeductible\n currentCoverageLevel\n currentInsuranceCompanyMonths\n currentInsuranceCompanyYears\n currentPropertyDamageCoverages\n dUIDWIInThePast5Years\n dateOfDUIDWI\n daytimePhone\n desiredCollisionCoverage\n desiredComprehensiveCoverage\n eNewsletter\n education\n email\n eveningPhone\n fillingRequired\n firstName\n fullTimeStudent\n gender\n howManyIncidentsInThePast5Years\n id\n incidentsPast5Years\n insuranceCompany\n insuredPast30Days\n lastName\n licensedState\n licenseStatus\n makeOfVehicle\n maritalStatus\n modelOfVehicle\n monthsInCurrentResidence\n multiplePolicyDiscount\n occupation\n ownership\n policyExpirationDate\n preferredContactNumber\n preferredContactTime\n primaryDriver\n primaryUse\n relationshipToApplicant\n salvagedVehicle\n securitySystem\n style\n suspendedOrRevokedInThePast5Years\n ticketsAccidentsClaimsPast3Years\n trim\n updatedAt\n vehicleParking\n vin\n violationsPast5Years\n yearOfVehicle\n yearsAtCurrentResidence\n yearsInField\n activityPast5Years\n address {\n city\n country\n state\n street1\n street2\n zip\n }\n currentResidence {\n city\n country\n street1\n street2\n zip\n state\n }\n }\n`;\n\nexport const FETCH_LEAD_DRIVERS = gql`\n query FetchLeadDrivers($id: ID!) {\n lead(id: $id) {\n drivers {\n items {\n ...LEAD_DRIVER_FRAGMENT\n }\n }\n }\n }\n ${LEAD_DRIVER_FRAGMENT}\n`;\n\nexport const LEAD_DRIVER_CREATE_MUTATION = gql`\n mutation LeadDriverCreateMutation($data: LeadDriverCreateInput!) {\n leadDriverCreate(data: $data) {\n ...LEAD_DRIVER_FRAGMENT\n }\n }\n ${LEAD_DRIVER_FRAGMENT}\n`;\n\nexport const LEAD_DRIVER_UPDATE_MUTATION = gql`\n mutation LeadDriverUpdateMutation($data: LeadDriverUpdateInput!) {\n leadDriverUpdate(data: $data) {\n ...LEAD_DRIVER_FRAGMENT\n }\n }\n ${LEAD_DRIVER_FRAGMENT}\n`;\n\nexport const LEAD_DRIVER_DELETE_MUTATION = gql`\n mutation LeadDriverDeleteMutation($data: LeadDriverDeleteInput!) {\n leadDriverDelete(data: $data) {\n success\n }\n }\n`;\n","import gql from 'graphql-tag';\n\nexport const LEAD_GENERAL_LIABILITY_FRAGMENT = gql`\n fragment LEAD_GENERAL_LIABILITY_FRAGMENT on LeadTypeGeneralLiability {\n id\n natureOfBusiness\n companyName\n grossSales\n numberOfEmployees\n payroll\n policyExpirationDate\n }\n`;\n\nexport const LEAD_TYPE_GENERAL_LIABILITY_UPDATE_MUTATION = gql`\n mutation LeadTypeGeneralLiabilityUpdateMutation($data: LeadTypeGeneralLiabilityUpdateInput!) {\n leadTypeGeneralLiabilityUpdate(data: $data) {\n ...LEAD_GENERAL_LIABILITY_FRAGMENT\n }\n }\n ${LEAD_GENERAL_LIABILITY_FRAGMENT}\n`;\n","import gql from 'graphql-tag';\n\nexport const LEAD_LIFE_FRAGMENT = gql`\n fragment LEAD_LIFE_FRAGMENT on LeadTypeLife {\n id\n birthDay\n birthMonth\n birthYear\n faceAmount\n heightFeet\n heightInches\n policyType\n lifeInsuranceInformation\n knownMedicalCondition\n smoke\n term\n weight\n age\n telemarketerName\n callbackTime\n beneficiary\n spouse\n spouseAge\n bankAccount\n code\n driveRecording\n dateGenerated\n }\n`;\n\nexport const LEAD_TYPE_LIFE_UPDATE_MUTATION = gql`\n mutation LeadTypeLifeUpdateMutation($data: LeadTypeLifeUpdateInput!) {\n leadTypeLifeUpdate(data: $data) {\n ...LEAD_LIFE_FRAGMENT\n }\n }\n ${LEAD_LIFE_FRAGMENT}\n`;\n","import gql from 'graphql-tag';\n\nexport const LEAD_HOME_FRAGMENT = gql`\n fragment LEAD_HOME_FRAGMENT on LeadTypeHome {\n id\n addressToBeInsured {\n city\n country\n state\n street1\n street2\n zip\n }\n ageOfRoof\n bathrooms\n bedrooms\n bestTimeToContact\n brushHazardWithin500Feet\n burglarAlarm\n businessConductedOnPremises\n cathedralVaultedCeilings\n centralHeatingAir\n claims\n comments\n constructionType\n continuouslyInsured\n copperWaterPipes\n coverageNeededOnContents\n coverageNeededOnHouse\n credit\n currentInsuranceCompany\n currentlyInsured\n deadBolts\n dob\n dogType\n dwellingType\n enclosedPorchPatio\n fencedInPool\n fireAlarm\n fireExtinguishers\n fireHydrantProximity\n fireStationProximity\n fireplaces\n floodPain\n foundationType\n frequencyOfPayment\n garageType\n hardwoodFloors\n heatType\n homeUpgradesDescribed\n homeValue\n homeUpgrades\n hotTub\n indoorSprinklers\n insuredSince\n mannedSecurityStation\n monitoredBurglarAlarm\n newPurchase\n numberOfClaims\n occupancyStatus\n otherInfo\n policyExpiration\n porches\n premium\n requestedDeductible\n requestedLiability\n sauna\n servicePanelType\n smokeDetectors\n smokerInHousehold\n squareFootage\n stories\n sumpPump\n swimmingPool\n tennisCourts\n timeAtCurrentResidence\n timeAtPreviousResidence\n timeWithCurrentCompany\n wiringType\n woodBurningStove\n yearBuilt\n }\n`;\n\nexport const LEAD_TYPE_HOME_UPDATE_MUTATION = gql`\n mutation LeadTypeHomeUpdateMutation($data: LeadTypeHomeUpdateInput!) {\n leadTypeHomeUpdate(data: $data) {\n ...LEAD_HOME_FRAGMENT\n }\n }\n ${LEAD_HOME_FRAGMENT}\n`;\n","import gql from 'graphql-tag';\n\nexport const LEAD_WORKERS_COMPENSATION_FRAGMENT = gql`\n fragment LEAD_WORKERS_COMPENSATION_FRAGMENT on LeadTypeWorkersCompensation {\n id\n annualPayroll\n companyName\n natureOfBusiness\n numberOfEmployees\n policyExpirationDate\n }\n`;\n\nexport const LEAD_TYPE_WORKERS_COMPENSATION_UPDATE_MUTATION = gql`\n mutation LeadTypeWorkersCompensationUpdateMutation(\n $data: LeadTypeWorkersCompensationUpdateInput!\n ) {\n leadTypeWorkersCompensationUpdate(data: $data) {\n ...LEAD_WORKERS_COMPENSATION_FRAGMENT\n }\n }\n ${LEAD_WORKERS_COMPENSATION_FRAGMENT}\n`;\n","import gql from 'graphql-tag';\n\nexport const LEAD_EMPLOYEE_BENEFITS_FRAGMENT = gql`\n fragment LEAD_EMPLOYEE_BENEFITS_FRAGMENT on LeadTypeEmployeeBenefit {\n id\n annualPayroll\n companyName\n natureOfBusiness\n numberOfEmployees\n }\n`;\n\nexport const LEAD_TYPE_EMPLOYEE_BENEFITS_UPDATE_MUTATION = gql`\n mutation LeadTypeEmployeeBenefitUpdateMutation($data: LeadTypeEmployeeBenefitUpdateInput!) {\n leadTypeEmployeeBenefitUpdate(data: $data) {\n ...LEAD_EMPLOYEE_BENEFITS_FRAGMENT\n }\n }\n ${LEAD_EMPLOYEE_BENEFITS_FRAGMENT}\n`;\n","import gql from 'graphql-tag';\n\nexport const LeadHistoryFragment = gql`\n fragment LeadHistoryFragment on LeadHistory {\n id\n entity\n operation\n difference\n createdAt\n createdBy {\n id\n firstName\n lastName\n }\n lead {\n id\n firstName\n lastName\n email\n }\n note {\n id\n title\n text\n }\n task {\n id\n title\n date\n priority\n status\n type {\n id\n name\n }\n description\n }\n email {\n id\n from\n to\n subject\n body\n thread {\n id\n identifier\n lead {\n id\n firstName\n middleName\n lastName\n email\n }\n }\n }\n stage {\n id\n name\n }\n sms {\n id\n text\n phoneNumber\n lead {\n id\n firstName\n lastName\n }\n createdBy {\n id\n firstName\n lastName\n }\n }\n call {\n id\n duration\n status\n phoneCallDispositionRelation {\n carrier\n currentPremium\n quotedPremium\n status {\n name\n }\n expirationDate\n insurance\n notes\n ifsScore\n createdBy {\n id\n firstName\n lastName\n email\n }\n createdAt\n }\n }\n }\n`;\n\nexport const FETCH_LEAD_HISTORY_QUERY = gql`\n query FetchLeadHistories(\n $filter: LeadHistoryFilter\n $first: Int\n $skip: Int\n $orderBy: [LeadHistoryOrderBy]\n ) {\n leadHistoriesList(filter: $filter, first: $first, skip: $skip, orderBy: $orderBy) {\n items {\n ...LeadHistoryFragment\n }\n count\n }\n }\n ${LeadHistoryFragment}\n`;\n\nexport const FETCH_LEAD_HISTORY_BY_ID = gql`\n query FetchLeadHistory($id: ID!) {\n leadHistory(id: $id) {\n ...LeadHistoryFragment\n }\n }\n ${LeadHistoryFragment}\n`;\n\nexport const FETCH_LEAD_HISTORY_QUERY_RESOLVER = gql`\n query FetchLeadHistoriesResolver(\n $filter: LeadHistoryFilter\n $first: Int\n $skip: Int\n $orderBy: [LeadHistoryOrderBy]\n $user: ID!\n $agency: ID!\n ) {\n leadHistoriesResolver(\n filter: $filter\n first: $first\n skip: $skip\n orderBy: $orderBy\n agency: $agency\n user: $user\n ) {\n count\n items {\n id\n createdAt\n updatedAt\n deletedAt\n entity\n operation\n difference\n lead {\n firstName\n lastName\n id\n }\n createdBy {\n id\n firstName\n lastName\n }\n note {\n text\n title\n id\n }\n task {\n date\n priority\n status\n type {\n name\n }\n title\n description\n }\n email {\n thread {\n email\n lead {\n email\n }\n }\n subject\n from\n to\n body\n }\n call {\n duration\n status\n }\n sms {\n text\n phoneNumber\n type\n createdBy {\n firstName\n lastName\n }\n }\n stage {\n name\n }\n }\n }\n }\n`;\n","import gql from 'graphql-tag';\nimport { LEAD_NOTE_FRAGMENT } from './leads-notes/leads-notes-queries';\nimport { LEAD_AUTO_FRAGMENT } from './leads-type-auto/leads-type-auto-queries';\nimport { LEAD_COMMERCIAL_AUTO_FRAGMENT } from './leads-type-commercial-auto/leads-type-commercial-auto-queries';\nimport { LEAD_DRIVER_FRAGMENT } from './leads-drivers/leads-drivers-queries';\nimport { LEAD_GENERAL_LIABILITY_FRAGMENT } from './leads-type-general-liability/leads-type-general-liability-queries';\nimport { LEAD_LIFE_FRAGMENT } from './leads-type-life/leads-type-life-queries';\nimport { LEAD_HOME_FRAGMENT } from './leads-type-home/leads-type-home-queries';\nimport { LEAD_WORKERS_COMPENSATION_FRAGMENT } from './leads-type-workers-compensation/leads-type-workers-compensation-queries';\nimport { LEAD_EMPLOYEE_BENEFITS_FRAGMENT } from './leads-type-employee-benefits/leads-type-employee-benefits-queries';\nimport { LeadHistoryFragment as LEAD_HISTORY_FRAGMENT } from './leads-history/leads-history-queries';\n\nexport const AGENT_FRAGMENT = gql`\n fragment AGENT_FRAGMENT on Agent {\n id\n user {\n id\n firstName\n lastName\n }\n }\n`;\n\nexport const USER_FRAGMENT = gql`\n fragment USER_FRAGMENT on User {\n id\n firstName\n lastName\n avatar {\n id\n downloadUrl\n }\n }\n`;\n\nexport const LEAD_TASK_FRAGMENT = gql`\n fragment LEAD_TASK_FRAGMENT on LeadTask {\n id\n title\n date\n priority\n status\n description\n createdAt\n type {\n id\n name\n }\n agents {\n items {\n ...AGENT_FRAGMENT\n }\n }\n users {\n items {\n ...USER_FRAGMENT\n }\n }\n lead {\n id\n firstName\n lastName\n }\n }\n ${USER_FRAGMENT}\n ${AGENT_FRAGMENT}\n`;\n\nexport const LEAD_FRAGMENT = gql`\n fragment LEAD_FRAGMENT on Lead {\n gender\n updatedAt\n phone {\n code\n number\n }\n callCadence {\n lastCalled\n }\n phones {\n code\n number\n }\n leadLeadPhoneNumberRelation {\n items {\n id\n type\n phone {\n code\n number\n }\n }\n }\n id\n ifsScore\n firstName\n lastName\n middleName\n createdAt\n birthDay\n birthMonth\n birthYear\n campaign {\n id\n name\n agency {\n id\n }\n }\n contacts {\n items {\n id\n firstName\n lastName\n phoneNumber\n }\n }\n assignees {\n items {\n ...USER_FRAGMENT\n }\n }\n address {\n country\n street1\n street2\n zip\n city\n state\n }\n notesLeadRelation {\n items {\n ...LEAD_NOTE_FRAGMENT\n }\n }\n tasksLeadRelation {\n items {\n ...LEAD_TASK_FRAGMENT\n }\n }\n leadLeadStageHistoryRelation(first: 1, orderBy: createdAt_DESC) {\n items {\n stage {\n id\n name\n }\n }\n }\n stage {\n id\n name\n }\n priority\n email\n creditScore\n leadLeadTypeAutoRelation {\n ...LEAD_AUTO_FRAGMENT\n }\n leadLeadTypeCommercialAutoRelation {\n ...LEAD_COMMERCIAL_AUTO_FRAGMENT\n }\n leadLeadTypeGeneralLiabilityRelation {\n ...LEAD_GENERAL_LIABILITY_FRAGMENT\n }\n leadLeadTypeHomeRelation {\n ...LEAD_HOME_FRAGMENT\n }\n leadLeadTypeLifeRelation {\n ...LEAD_LIFE_FRAGMENT\n }\n leadLeadTypeWorkersCompensationRelation {\n ...LEAD_WORKERS_COMPENSATION_FRAGMENT\n }\n leadLeadTypeEmployeeBenefitRelation {\n ...LEAD_EMPLOYEE_BENEFITS_FRAGMENT\n }\n drivers {\n items {\n ...LEAD_DRIVER_FRAGMENT\n }\n }\n amount\n }\n ${USER_FRAGMENT}\n ${AGENT_FRAGMENT}\n ${LEAD_TASK_FRAGMENT}\n ${LEAD_NOTE_FRAGMENT}\n ${LEAD_COMMERCIAL_AUTO_FRAGMENT}\n ${LEAD_AUTO_FRAGMENT}\n ${LEAD_DRIVER_FRAGMENT}\n ${LEAD_GENERAL_LIABILITY_FRAGMENT}\n ${LEAD_LIFE_FRAGMENT}\n ${LEAD_HOME_FRAGMENT}\n ${LEAD_WORKERS_COMPENSATION_FRAGMENT}\n ${LEAD_EMPLOYEE_BENEFITS_FRAGMENT}\n`;\n\nexport const LEAD_FRAGMENT_V2 = gql`\n fragment LEAD_FRAGMENT on Lead {\n gender\n updatedAt\n phones {\n code\n number\n }\n leadLeadPhoneNumberRelation {\n items {\n id\n phone {\n code\n number\n }\n }\n }\n id\n firstName\n lastName\n middleName\n createdAt\n campaign {\n id\n name\n agency {\n id\n }\n }\n assignees {\n items {\n ...USER_FRAGMENT\n }\n }\n leadLeadStageHistoryRelation(first: 1, orderBy: createdAt_DESC) {\n items {\n stage {\n id\n name\n }\n }\n }\n stage {\n id\n name\n }\n amount\n priority\n history(first: 1, orderBy: createdAt_DESC) {\n items {\n ...LeadHistoryFragment\n }\n }\n }\n ${USER_FRAGMENT}\n ${LEAD_HISTORY_FRAGMENT}\n`;\n\nexport const LEADS_FOR_TASK_LIST_QUERY_V2 = gql`\n query FetchLeadsV2($skip: Int, $first: Int, $filter: LeadFilter, $sort: [LeadSort!]) {\n leadsList(skip: $skip, first: $first, filter: $filter, sort: $sort) {\n count\n items {\n id\n firstname\n lastname\n }\n }\n }\n`;\n\nexport const LEADS_LIST_QUERY_V2 = gql`\n query FetchLeadsV2($skip: Int, $first: Int, $filter: LeadFilter, $sort: [LeadSort!]) {\n leadsList(skip: $skip, first: $first, filter: $filter, sort: $sort) {\n count\n items {\n ...LEAD_FRAGMENT\n }\n }\n }\n ${LEAD_FRAGMENT_V2}\n`;\n\nexport const LEADS_COUNT = gql`\n query FetchLeadsCount($skip: Int, $first: Int, $filter: LeadFilter, $sort: [LeadSort!]) {\n leadsList(skip: $skip, first: $first, filter: $filter, sort: $sort) {\n count\n }\n }\n`;\n\nexport const LEADS_LIST_LIGHT_QUERY = gql`\n query FetchLeadsLight($skip: Int, $first: Int, $filter: LeadFilter, $sort: [LeadSort!]) {\n leadsList(skip: $skip, first: $first, filter: $filter, sort: $sort) {\n items {\n phones {\n code\n number\n }\n leadLeadPhoneNumberRelation {\n items {\n id\n type\n phone {\n code\n number\n }\n }\n }\n id\n firstName\n lastName\n createdAt\n campaign {\n id\n name\n }\n assignees {\n items {\n id\n firstName\n lastName\n }\n }\n stage {\n id\n name\n }\n lastHistoryActionData\n lastHistoryActionType\n }\n }\n }\n`;\n\nexport const LEADS_LIST_LIGHT_SUBSCRIPTION = gql`\n subscription($filter: LeadFilter) {\n Lead(filter: { mutation_in: [create, delete, update], node: $filter }) {\n mutation\n updatedFields\n node {\n phones {\n code\n number\n }\n leadLeadPhoneNumberRelation {\n items {\n id\n phone {\n code\n number\n }\n }\n }\n id\n firstName\n lastName\n createdAt\n campaign {\n id\n name\n }\n assignees {\n items {\n id\n firstName\n lastName\n }\n }\n stage {\n id\n name\n }\n amount\n priority\n lastHistoryActionData\n lastHistoryActionType\n }\n }\n }\n`;\n\nexport const LEADS_LIST_QUERY = gql`\n query FetchLeads($skip: Int, $first: Int, $filter: LeadFilter, $sort: [LeadSort!]) {\n leadsList(skip: $skip, first: $first, filter: $filter, sort: $sort) {\n count\n items {\n ...LEAD_FRAGMENT\n history(first: 1, orderBy: createdAt_DESC) {\n items {\n ...LeadHistoryFragment\n }\n }\n }\n }\n }\n ${LEAD_FRAGMENT}\n ${LEAD_HISTORY_FRAGMENT}\n`;\n\nexport const LEADS_LIST_SUBSCRIPTION = gql`\n subscription($filter: LeadFilter) {\n Lead(filter: { mutation_in: [create, delete, update], node: $filter }) {\n mutation\n updatedFields\n node {\n ...LEAD_FRAGMENT\n }\n }\n }\n ${LEAD_FRAGMENT_V2}\n`;\n\nexport const FILTER_OPTIONS_QUERY = gql`\n query FetchFilterOptions($agencyId: ID) {\n agencyUsersList(filter: { agency: { id: { equals: $agencyId } } }) {\n items {\n id\n user {\n firstName\n lastName\n id\n }\n }\n }\n campaignsList(filter: { agency: { id: { equals: $agencyId } } }) {\n items {\n id\n name\n }\n }\n }\n`;\n\nexport const LEAD_USERS_UPDATE_MUTATION = gql`\n mutation UpdateLeadAssignees($data: LeadUpdateInput!) {\n leadUpdate(data: $data) {\n id\n assignees {\n items {\n id\n firstName\n lastName\n }\n }\n }\n }\n`;\n\nexport const LEAD_CREATE_MUTATION = gql`\n mutation CreateLead($data: LeadCreateInput!) {\n leadCreate(data: $data) {\n id\n }\n }\n`;\n\nexport const LEAD_UPDATE_MUTATION = gql`\n mutation UpdateLead($filter: LeadKeyFilter, $data: LeadUpdateInput!) {\n leadUpdate(filter: $filter, data: $data, force: true) {\n id\n }\n }\n`;\n\nexport const LEAD_DELETE_MUTATION = gql`\n mutation DeleteLead($data: LeadDeleteInput!) {\n leadDelete(data: $data, force: true) {\n success\n }\n }\n`;\n\nexport const TASK_CREATE_MUTATION = gql`\n mutation CreateLeadTask($data: LeadTaskCreateInput!) {\n leadTaskCreate(data: $data) {\n ...LEAD_TASK_FRAGMENT\n }\n }\n ${LEAD_TASK_FRAGMENT}\n`;\n\nexport const TASK_UPDATE_MUTATION = gql`\n mutation UpdateLeadTask($data: LeadTaskUpdateInput!) {\n leadTaskUpdate(data: $data) {\n ...LEAD_TASK_FRAGMENT\n }\n }\n ${LEAD_TASK_FRAGMENT}\n`;\n\nexport const LEAD_TASK_TYPE_LIST_QUERY = gql`\n query LeadTasksTypeList {\n leadTaskTypesList {\n items {\n id\n name\n }\n }\n }\n`;\n\nexport const LEAD_DETAIL_QUERY = gql`\n query FetchLeadDetails($id: ID) {\n lead(id: $id) {\n ...LEAD_FRAGMENT\n }\n }\n ${LEAD_FRAGMENT}\n`;\n\nexport const CREATE_SMS_MUTATION = gql`\n mutation CreateSmsMessage($data: SMSMessageCreateInput!) {\n sMSMessageCreate(data: $data) {\n id\n }\n }\n`;\n\nexport const FETCH_SMS_LIST = gql`\n query FetchSms($first: Int, $skip: Int, $filter: SMSMessageFilter!, $sort: [SMSMessageSort!]) {\n sMSMessagesList(\n orderBy: createdAt_DESC\n first: $first\n skip: $skip\n filter: $filter\n sort: $sort\n ) {\n count\n items {\n id\n text\n type\n receivedFrom\n to\n from {\n id\n number {\n code\n number\n }\n }\n user {\n id\n firstName\n lastName\n }\n lead {\n id\n firstName\n lastName\n campaign {\n id\n agency {\n id\n }\n }\n }\n createdBy {\n id\n firstName\n lastName\n }\n createdAt\n }\n }\n }\n`;\n\nexport const FETCH_LEADS_COUNT_IN_CAMPAIGN = gql`\n query FetchCampaignLeadsCount($campaignId: ID) {\n leadsList(\n filter: { campaign: { id: { equals: $campaignId } } }\n groupBy: { query: { id: { as: \"count\", fn: { aggregate: COUNT } } } }\n ) {\n groups {\n count: Int\n }\n }\n }\n`;\n\nexport const FETCH_MESSAGES_BY_LEAD = gql`\n query FetchLeadSms($filter: SMSMessageFilter!, $orderBy: [SMSMessageOrderBy]) {\n sMSMessagesList(filter: $filter, orderBy: $orderBy) {\n items {\n text\n type\n createdAt\n user {\n firstName\n }\n }\n }\n }\n`;\n\nexport const FETCH_LEAD_RECORDINGS = gql`\n query LeadRecordingsById($leadId: ID, $first: Int, $skip: Int) {\n phoneCallRecordingsList(\n filter: {\n id: { is_not_empty: true }\n OR: [\n { call: { lead: { id: { equals: $leadId } } } }\n { inboundCall: { lead: { id: { equals: $leadId } } } }\n ]\n }\n sort: { createdAt: DESC }\n first: $first\n skip: $skip\n ) {\n count\n items {\n id\n recordingSid\n recordingUrl\n duration\n inboundCall {\n to {\n number {\n number\n code\n }\n }\n from\n duration\n createdAt\n }\n call {\n to\n from {\n number {\n code\n number\n }\n }\n duration\n lead {\n firstName\n lastName\n }\n user {\n firstName\n lastName\n }\n createdAt\n }\n }\n }\n }\n`;\n\nexport const ASSIGN_USERS_TO_LEAD = gql`\n mutation AssignUsersToLead($leadId: ID, $users: [UserKeyFilter!]) {\n leadUpdate(data: { id: $leadId, assignees: { connect: $users } }) {\n id\n assignees {\n items {\n id\n }\n }\n }\n }\n`;\n\n// REFACTOR\nexport const FETCH_LEAD = gql`\n query FetchLead($id: ID) {\n lead(id: $id) {\n id\n firstName\n middleName\n lastName\n email\n priority\n birthDay\n birthMonth\n birthYear\n gender\n ifsScore\n creditScore\n amount\n createdAt\n updatedAt\n campaign {\n id\n }\n address {\n country\n state\n city\n zip\n street1\n street2\n }\n stage {\n id\n name\n }\n assignees {\n items {\n id\n firstName\n lastName\n avatar {\n downloadUrl\n }\n }\n }\n leadLeadPhoneNumberRelation {\n items {\n id\n type\n phone {\n code\n number\n }\n }\n }\n leadLeadTypeAutoRelation {\n ...LEAD_AUTO_FRAGMENT\n }\n leadLeadTypeCommercialAutoRelation {\n ...LEAD_COMMERCIAL_AUTO_FRAGMENT\n }\n leadLeadTypeGeneralLiabilityRelation {\n ...LEAD_GENERAL_LIABILITY_FRAGMENT\n }\n leadLeadTypeLifeRelation {\n ...LEAD_LIFE_FRAGMENT\n }\n leadLeadTypeHomeRelation {\n ...LEAD_HOME_FRAGMENT\n }\n leadLeadTypeWorkersCompensationRelation {\n ...LEAD_WORKERS_COMPENSATION_FRAGMENT\n }\n leadLeadTypeEmployeeBenefitRelation {\n ...LEAD_EMPLOYEE_BENEFITS_FRAGMENT\n }\n }\n }\n ${LEAD_AUTO_FRAGMENT}\n ${LEAD_COMMERCIAL_AUTO_FRAGMENT}\n ${LEAD_GENERAL_LIABILITY_FRAGMENT}\n ${LEAD_LIFE_FRAGMENT}\n ${LEAD_HOME_FRAGMENT}\n ${LEAD_WORKERS_COMPENSATION_FRAGMENT}\n ${LEAD_EMPLOYEE_BENEFITS_FRAGMENT}\n`;\n\nexport const UPDATE_LEAD = gql`\n mutation UpdateLead($filter: LeadKeyFilter, $data: LeadUpdateInput!) {\n leadUpdate(filter: $filter, data: $data) {\n id\n }\n }\n`;\n\nexport const FETCH_CAMPAIGNS = gql`\n query FetchCampaigns($filter: CampaignFilter) {\n campaignsList(filter: $filter) {\n items {\n id\n name\n }\n }\n }\n`;\n\nexport const FETCH_LEAD_TASKS = gql`\n query FetchLeadTasks($filter: LeadTaskFilter, $sort: [LeadTaskSort!]) {\n leadTasksList(filter: $filter, sort: $sort) {\n count\n items {\n id\n title\n date\n priority\n status\n description\n type {\n id\n name\n }\n users {\n items {\n id\n firstName\n lastName\n avatar {\n downloadUrl\n }\n }\n }\n agents {\n items {\n id\n user {\n id\n firstName\n lastName\n }\n }\n }\n lead {\n id\n }\n createdAt\n }\n }\n }\n`;\n\nexport const DELETE_LEAD_PHONE_NUMBERS = gql`\n mutation DeleteLeadPhoneNumbers($filter: LeadPhoneNumberFilter!, $force: Boolean) {\n leadPhoneNumberDeleteByFilter(filter: $filter, force: $force) {\n success\n }\n }\n`;\n","import Flux from '@cobuildlab/flux-state';\nimport { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchLeadEvent = createEvent();\n\nexport const OnFetchLeadEventError = createEvent();\n\nexport const OnUpdateLeadAmount = createEvent();\n\nexport const OnUpdateLeadAmountError = createEvent();\n\nexport const OnFetchCampaigns = createEvent();\n\nexport const OnFetchCampaignsError = createEvent();\n\nexport const OnUpdateLeadCampaign = createEvent();\n\nexport const OnUpdateLeadCampaignError = createEvent();\n\nexport const OnUpdateLeadAssignees = createEvent();\n\nexport const OnUpdateLeadAssigneesError = createEvent();\n\nexport const OnFetchLeadTasks = createEvent();\n\nexport const OnFetchLeadTasksError = createEvent();\n\nexport const OnFetchLeadMessages = createEvent();\n\nexport const OnFetchLeadMessagesError = createEvent();\n\nexport const OnLeadMessageCreate = createEvent();\n\nexport const OnLeadMessageCreateError = createEvent();\n\nexport const OnFetchLeadRecordings = createEvent();\n\nexport const OnFetchLeadRecordingsError = createEvent();\n\n/**\n * Event that triggers an error.\n *\n * @type {string}\n */\nexport const LEADS_ERROR_EVENT = 'onLeadError';\n\n/**\n * Event that triggers a Lead List event.\n *\n * @type {string}\n */\nexport const LEADS_LIST_EVENT = 'onLeadList';\n\n/**\n * Event that triggers a Lead List event.\n *\n * @type {string}\n */\nexport const LEADS_CREATE_EVENT = 'onLeadCreated';\n\nexport const LEADS_BULK_CREATE_EVENT = 'onLeadBulkCreated';\n\nexport const LEADS_CHUNK_BULK_CREATE_EVENT = 'onLeadChunkBulkCreated';\n\nexport const VALIDATED_LEAD_DATA_FOR_UPLOAD = 'onValidatedLeadDataForUpload';\n\nexport const FILTER_OPTIONS_EVENT = 'onFilterOptions';\n\nexport const FILTER_OPTIONS_ERROR_EVENT = 'onFilterOptionsError';\n\nexport const USERS_UPDATE_EVENT = 'onUsersUpdateEvent';\n\nexport const USERS_UPDATE_EVENT_ERROR = 'onUsersUpdateEventError';\n\nexport const TASK_CREATE_EVENT = 'onTaskCreate';\n\nexport const TASK_UPDATE_EVENT = 'onTaskUpdate';\n\nexport const TASK_ERROR_EVENT = 'onTaskError';\n\nexport const TASK_TYPE_LIST_EVENT = 'onTaskList';\n\nexport const TASK_TYPE_LIST_ERROR = 'onTaskListError';\n\nexport const LEAD_DETAIL_EVENT = 'onLeadDetail';\n\nexport const LEAD_DETAIL_ERROR_EVENT = 'onLeadDetailError';\n\nexport const LEADS_UPDATE_EVENT = 'onLeadUpdate';\n\nexport const LEAD_DELETE_ERROR_EVENT = 'onLeadDeleteError';\n\nexport const LEAD_DELETE_EVENT = 'onLeadDelete';\n\nexport const FETCH_USERS_IN_AGENCY = 'onUserInAgencyFetch';\n\nexport const FETCH_USERS_IN_AGENCY_ERROR = 'onFetchingUserInAgencyError';\n\nexport const FETCH_SMS_LIST_EVENT = 'onSMSMessagesList';\n\nexport const DELETE_LEADS_RESULT = 'OnDeleteLeadsDone';\n\nexport const ASSIGN_USERS_TO_LEAD_EVENT = 'onAssignUsersToLead';\n\nexport const ASSIGN_USERS_TO_LEAD_ERROR = 'onAssignUsersToLeadError';\n\nclass LeadStore extends Flux.DashStore {\n constructor() {\n super();\n this.addEvent(LEADS_CHUNK_BULK_CREATE_EVENT);\n this.addEvent(VALIDATED_LEAD_DATA_FOR_UPLOAD);\n this.addEvent(LEADS_ERROR_EVENT);\n this.addEvent(LEADS_LIST_EVENT);\n this.addEvent(LEADS_CREATE_EVENT);\n this.addEvent(FILTER_OPTIONS_ERROR_EVENT);\n this.addEvent(FILTER_OPTIONS_EVENT);\n this.addEvent(TASK_CREATE_EVENT);\n this.addEvent(TASK_UPDATE_EVENT);\n this.addEvent(TASK_ERROR_EVENT);\n this.addEvent(TASK_TYPE_LIST_EVENT);\n this.addEvent(TASK_TYPE_LIST_ERROR);\n this.addEvent(LEAD_DETAIL_EVENT);\n this.addEvent(LEAD_DETAIL_ERROR_EVENT);\n this.addEvent(LEADS_UPDATE_EVENT);\n this.addEvent(LEAD_DELETE_EVENT);\n this.addEvent(LEAD_DELETE_ERROR_EVENT);\n this.addEvent(FETCH_USERS_IN_AGENCY);\n this.addEvent(FETCH_USERS_IN_AGENCY_ERROR);\n this.addEvent(USERS_UPDATE_EVENT);\n this.addEvent(USERS_UPDATE_EVENT_ERROR);\n this.addEvent(LEADS_BULK_CREATE_EVENT);\n this.addEvent(FETCH_SMS_LIST_EVENT);\n this.addEvent(DELETE_LEADS_RESULT);\n this.addEvent(ASSIGN_USERS_TO_LEAD_EVENT);\n this.addEvent(ASSIGN_USERS_TO_LEAD_ERROR);\n }\n}\n\nexport default new LeadStore();\n","import { ValidationError } from '../../shared/errors';\nimport { isValidNumber, isValidPhoneNumber, isIncludesInOptions, isValidFloat } from '../../shared/validators';\nimport { isValidEmail, isValidString, isValidDate } from '@cobuildlab/validation-utils';\nimport {\n GENDERS,\n MARITAL_STATUSES,\n PRIORITIES,\n TYPE_VALUES,\n DATE_SCHEMA_FORMATS,\n} from '../../shared/constants';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\nimport * as moment from 'moment';\n\nconst leadMessage = 'The lead must have a ';\nconst leadMessageValid = `${leadMessage} valid`;\nconst driverMessage = 'The driver must have a ';\nconst driverMessageValid = `${driverMessage} valid`;\n\nconst leadTypeFields = [\n 'leadLeadTypeAutoRelation',\n 'leadLeadTypeCommercialAutoRelation',\n 'leadLeadTypeHomeRelation',\n 'leadLeadTypeLifeRelation',\n 'leadLeadTypeGeneralLiabilityRelation',\n 'leadLeadTypeWorkersCompensationRelation',\n 'leadLeadTypeEmployeeBenefitRelation',\n];\n\nconst messages = {\n lead: {\n type: leadMessageValid + ' type',\n firstName: leadMessageValid + ' first name',\n middleName: leadMessageValid + ' middle name',\n lastName: leadMessageValid + ' last name',\n gender: leadMessageValid + ' gender',\n genderOptions:\n leadMessageValid + ' value for gender. For example' + Object.values(GENDERS).join(', '),\n dob: leadMessageValid + ' dob with the following format: ' + DATE_SCHEMA_FORMATS,\n birthMonth: leadMessageValid + ' birth month',\n birthDay: leadMessageValid + ' birth day',\n birthYear: leadMessageValid + ' birth year',\n email: leadMessageValid + ' email address',\n users: 'The lead must have at least 1 User',\n phones: 'Some phone number invalid',\n addressLine1: leadMessageValid + ' address line 1',\n addressLine2: leadMessageValid + ' address line 2',\n city: leadMessageValid + ' city',\n zip: leadMessageValid + ' zip',\n state: leadMessageValid + ' state',\n priority: leadMessageValid + ' priority',\n creditScore: leadMessageValid + ' credit score',\n campaign: leadMessage + ' campaign',\n amount: leadMessageValid + ' amount',\n },\n driver: {\n firstName: driverMessageValid + ' first name',\n lastName: driverMessageValid + ' last name',\n gender: driverMessageValid + ' gender',\n birthDate: driverMessageValid + ' birth date',\n genderOptions:\n driverMessageValid + ' value for gender. For example' + Object.values(GENDERS).join(', '),\n maritalStatus: driverMessageValid + ' marital status',\n maritalStatusOptions:\n driverMessageValid +\n ' value for marital status. For example' +\n Object.values(MARITAL_STATUSES).join(', '),\n email: driverMessageValid + ' email address',\n },\n};\n\n/**\n * Validate lead\n *\n * @param {object} lead data\n * @param {string} type - The type of operation\n */\nexport const createAndUpdateLeadValidator = (lead, type = 'CREATE') => {\n let errorMessages = [];\n\n if (\n '_type' in lead &&\n !(\n Object.values(TYPE_VALUES).includes(lead._type) ||\n Object.values(TYPE_VALUES)\n .map((type) => type.toUpperCase())\n .includes(lead._type.toUpperCase())\n )\n )\n errorMessages.push(messages.lead.type);\n\n if (!isValidString(lead.firstName)) errorMessages.push(messages.lead.firstName);\n\n if (!isValidString(lead.lastName)) errorMessages.push(messages.lead.lastName);\n\n if (!!lead.gender && !isValidString(lead.gender)) errorMessages.push(messages.lead.gender);\n else if (!!lead.gender && !isIncludesInOptions(lead.gender, Object.values(GENDERS)))\n errorMessages.push(messages.lead.genderOptions + 'Current value is: ' + lead.gender);\n\n if (lead.birthDay || lead.birthMonth || lead.birthYear) {\n if (\n !lead.birthMonth ||\n (lead.birthMonth !== '' &&\n !(isValidNumber(lead.birthMonth) || isValidString(lead.birthMonth)))\n ) {\n errorMessages.push(messages.lead.birthMonth);\n }\n\n if (!lead.birthDay || (lead.birthDay !== '' && !isValidNumber(lead.birthDay))) {\n errorMessages.push(messages.lead.birthDay);\n }\n\n if (!lead.birthYear || (lead.birthYear !== '' && !isValidNumber(lead.birthYear))) {\n errorMessages.push(messages.lead.birthYear);\n }\n }\n if (!isValidString(lead.campaign)) errorMessages.push(messages.lead.campaign);\n\n if (!!lead.email && !isValidEmail(lead.email)) errorMessages.push(messages.lead.email);\n\n if (lead.phones && lead.phones !== []) {\n for (let index = 0; index < lead.phones.length; index++) {\n if (!lead.phones[index].number || !isValidPhoneNumber(lead.phones[index].number))\n errorMessages.push(`The phone number ${index + 1} is invalid`);\n }\n }\n\n if (lead.address.street1 !== '' && !isValidString(lead.address.street1))\n errorMessages.push(messages.lead.addressLine1);\n\n if (lead.address.street2 !== '' && !isValidString(lead.address.street2))\n errorMessages.push(messages.lead.addressLine2);\n\n if (lead.address.city !== '' && !isValidString(lead.address.city))\n errorMessages.push(messages.lead.city);\n\n if (lead.address.zip !== '' && !isValidNumber(lead.address.zip))\n errorMessages.push(messages.lead.zip);\n\n if (type === 'CREATE') {\n if (Object.keys(lead).every((key) => leadTypeFields.indexOf(key) === -1)) {\n errorMessages.push('The lead must have a valid type');\n }\n }\n\n if (type === 'UPDATE') {\n try {\n parseFloat(lead.amount);\n } catch (e) {\n errorMessages.push('The lead must have a valid amount');\n }\n }\n\n if (!!lead.priority && !isValidNumber(lead.priority)) errorMessages.push(messages.lead.priority);\n\n if (type === 'CREATE' && !!lead.amount && !isValidFloat(lead.amount, 2, true))\n errorMessages.push(messages.lead.amount);\n\n // if (!!lead.creditScore && !isValidNumber(lead.creditScore))\n if (!!lead.creditScore && !isValidString(lead.creditScore))\n errorMessages.push(messages.lead.creditScore);\n\n //TODO: AGREGAR VALIDACIONES A TIPOS DE LEAD (Home, commercial, etc) Y A DRIVERS\n\n // Validate drivers\n if ('drivers' in lead) {\n for (const [, driver] of lead.drivers.create.entries()) {\n if (!isValidString(driver.firstName)) errorMessages.push(messages.driver.firstName);\n if (!isValidString(driver.lastName)) errorMessages.push(messages.driver.lastName);\n if (!!driver.email && !isValidEmail(driver.email)) errorMessages.push(messages.driver.email);\n if (!!driver.birthDate && !isValidDate(lead.birthDate))\n errorMessages.push(messages.driver.birthDate);\n if (!!driver.gender && !isValidString(driver.gender))\n errorMessages.push(messages.driver.gender);\n else if (!!driver.gender && !isIncludesInOptions(driver.gender, Object.values(GENDERS)))\n errorMessages.push(messages.driver.genderOptions);\n if (!!driver.maritalStatus && !isValidString(driver.maritalStatus))\n errorMessages.push(messages.driver.maritalStatus);\n else if (\n !!driver.maritalStatus &&\n !isIncludesInOptions(driver.maritalStatus, Object.values(MARITAL_STATUSES))\n )\n errorMessages.push(messages.driver.maritalStatusOptions);\n }\n }\n\n if (errorMessages.length !== 0) throw new ValidationError(errorMessages);\n};\n\n/**\n * Validate lead update\n *\n * @param {object} data - The data to update the lead\n *\n * @returns {void}\n */\nexport function updateLeadValidator(data) {\n const errors = [];\n\n if (!isValidString(data.firstName)) {\n errors.push(messages.lead.firstName);\n }\n\n if (!isValidString(data.lastName)) {\n errors.push(messages.lead.lastName);\n }\n\n if (!isValidString(data.campaign)) {\n errors.push(messages.lead.campaign);\n }\n\n if (data.birthDay || data.birthMonth || data.birthYear) {\n if (\n !data.birthMonth ||\n (data.birthMonth !== '' &&\n !(isValidNumber(data.birthMonth) || isValidString(data.birthMonth)))\n ) {\n errors.push(messages.lead.birthMonth);\n }\n\n if (!data.birthDay || (data.birthDay !== '' && !isValidNumber(data.birthDay))) {\n errors.push(messages.lead.birthDay);\n }\n\n if (!data.birthYear || (data.birthYear !== '' && !isValidNumber(data.birthYear))) {\n errors.push(messages.lead.birthYear);\n }\n }\n\n if (!isValidString(data.email) || !isValidEmail(data.email)) {\n errors.push(messages.lead.email);\n }\n\n const phoneUtil = PhoneNumberUtil.getInstance();\n\n if (data.phones) {\n for (let i = 0; i < data.phones.length; i++) {\n const { [i]: phone } = data.phones;\n let p = null;\n\n if (phone.id && phone.delete) continue;\n\n if (phone.phone.number.length <= 1) {\n errors.push(`The phone #${i + 1} is invalid`);\n } else {\n try {\n p = phoneUtil.parse(phone.phone.number, 'US');\n } catch (e) {\n errors.push(`The phone #${i + 1} is invalid`);\n\n continue;\n }\n\n if (phoneUtil.isPossibleNumber(p) === false || phoneUtil.isValidNumber(p) === false) {\n errors.push(`The phone #${i + 1} is invalid`);\n }\n }\n }\n }\n\n if (data.firstAddress && !isValidString(data.firstAddress)) {\n errors.push(messages.lead.addressLine1);\n }\n\n if (data.secondAddress && !isValidString(data.secondAddress)) {\n errors.push(messages.lead.addressLine2);\n }\n\n if (data.city && !isValidString(data.city)) {\n errors.push(messages.lead.city);\n }\n\n if (data.zip && !isValidNumber(data.zipCode)) {\n errors.push(messages.lead.zipCode);\n }\n\n if (data.amount) {\n try {\n parseFloat(data.amount);\n } catch (e) {\n errors.push('Lead amount must be a valid integer.');\n }\n }\n\n if (data.priority && !isValidNumber(data.priority)) {\n errors.push(messages.lead.priority);\n }\n\n if (data.creditScore && !isValidString(data.creditScore)) {\n errors.push(messages.lead.creditScore);\n }\n\n if (errors.length !== 0) throw new ValidationError(errors);\n\n // if (!softValidation) {\n // if (\n // '_type' in lead &&\n // !!(\n // Object.values(TYPE_VALUES).includes(lead._type) ||\n // Object.values(TYPE_VALUES)\n // .map((type) => type.toUpperCase())\n // .includes(lead._type.toUpperCase())\n // )\n // )\n // errorMessages.push(messages.lead.type);\n\n // if (!isValidString(lead.firstName)) errorMessages.push(messages.lead.firstName);\n\n // if (!isValidString(lead.lastName)) errorMessages.push(messages.lead.lastName);\n // if (!isValidString(lead.campaign)) errorMessages.push(messages.lead.campaign);\n // }\n\n // if (\n // lead?.address?.street1 &&\n // lead?.address?.street1 !== '' &&\n // !isValidString(lead.address.street1)\n // )\n // errorMessages.push(messages.lead.addressLine1);\n\n // if (\n // lead?.address?.street2 &&\n // lead?.address?.street2 !== '' &&\n // !isValidString(lead.address.street2)\n // )\n // errorMessages.push(messages.lead.addressLine2);\n\n // if (lead?.address?.city && lead?.address?.city !== '' && !isValidString(lead.address.city))\n // errorMessages.push(messages.lead.city);\n\n // if (lead?.address?.zip && lead?.address?.zip !== '' && !isValidNumber(lead.address.zip))\n // errorMessages.push(messages.lead.zip);\n\n // try {\n // bigInt(lead.amount);\n // } catch (e) {\n // errorMessages.push('Lead amount must be a valid integer.');\n // }\n\n // if (lead.priority && !isValidNumber(lead.priority)) errorMessages.push(messages.lead.priority);\n\n // if (lead.creditScore && !isValidString(lead.creditScore)) {\n // errorMessages.push(messages.lead.creditScore);\n // }\n\n // //TODO: AGREGAR VALIDACIONES A TIPOS DE LEAD (Home, commercial, etc) Y A DRIVERS\n\n // // Validate drivers\n // if ('drivers' in lead) {\n // for (const [, driver] of lead.drivers.create.entries()) {\n // if (!isValidString(driver.firstName)) errorMessages.push(messages.driver.firstName);\n // if (!isValidString(driver.lastName)) errorMessages.push(messages.driver.lastName);\n // if (!!driver.email && !isValidEmail(driver.email)) errorMessages.push(messages.driver.email);\n // if (!!driver.birthDate && !isValidDate(lead.birthDate))\n // errorMessages.push(messages.driver.birthDate);\n // if (!!driver.gender && !isValidString(driver.gender))\n // errorMessages.push(messages.driver.gender);\n // else if (!!driver.gender && !isIncludesInOptions(driver.gender, Object.values(GENDERS)))\n // errorMessages.push(messages.driver.genderOptions);\n // if (!!driver.maritalStatus && !isValidString(driver.maritalStatus))\n // errorMessages.push(messages.driver.maritalStatus);\n // else if (\n // !!driver.maritalStatus &&\n // !isIncludesInOptions(driver.maritalStatus, Object.values(MARITAL_STATUSES))\n // )\n // errorMessages.push(messages.driver.maritalStatusOptions);\n // }\n // }\n}\n\n/**\n * Validate that the Task has all the fields necessaries with the right format.\n *\n * @param {object} task - the task to be validated.\n * @param {boolean} isUpdate - If the validator is for update or not.\n */\nexport const createAndUpdateTaskValidator = (task, isUpdate = false) => {\n let errorMessages = [];\n\n if (!isValidString(task.lead) && !isUpdate)\n errorMessages.push('The Task must have a selected lead');\n\n if (!isValidString(task.title)) errorMessages.push('The Task must have a valid title.');\n\n if (!isValidNumber(task.priority) && PRIORITIES.indexOf(task.priority) === -1)\n errorMessages.push('The task must have a valid priority');\n\n if (task.users.length === 0) errorMessages.push('The task must have at least 1 User');\n\n if (!isValidString(task.description) || task.description.length > 245)\n errorMessages.push('The Task must have a valid description, between 1 and 245 characters.');\n\n if (!isValidDate) errorMessages.push('The task must have a valid Date');\n\n if (!isValidString(task.type)) errorMessages.push('The task must have a valid type');\n\n if (errorMessages.length !== 0) throw new ValidationError(errorMessages);\n};\n\n/**\n * Validator of the columns on the csv file\n *\n * @param {Array} columns - The columns on the csv\n *\n * @returns {void}\n */\nexport const createLeadsFromRicochetColumnValidator = (columns) => {\n const errors = [];\n\n if (columns.indexOf('first name') === -1) {\n errors.push('First Name column on csv is required');\n }\n\n if (columns.indexOf('last name') === -1) {\n errors.push('Last Name column on csv is required');\n }\n\n if (columns.indexOf('email') === -1) {\n errors.push('Email column on csv is required');\n }\n\n if (columns.indexOf('zip code') === -1) {\n errors.push('Zip Code column on csv is required');\n }\n\n if (columns.indexOf('phone - main') === -1) {\n errors.push('Phone - Main column on csv is required');\n }\n\n if (columns.indexOf('phone - cell') === -1) {\n errors.push('Phone - Cell column on csv is required');\n }\n\n if (columns.indexOf('phone - work') === -1) {\n errors.push('Phone - Work column on csv is required');\n }\n\n if (columns.indexOf('state') === -1) {\n errors.push('State column on csv is required');\n }\n\n if (columns.indexOf('city') === -1) {\n errors.push('City column on csv is required');\n }\n\n if (columns.indexOf('address') === -1) {\n errors.push('Address column on csv is required');\n }\n\n if (columns.indexOf('created at') === -1) {\n errors.push('Created At column on csv is required');\n }\n\n if (columns.indexOf('lead id') === -1) {\n errors.push('Lead ID column on csv is required');\n }\n\n if (errors.length > 0) {\n throw new ValidationError(errors);\n }\n};\n\n/**\n * Lead input validator from standard csv\n *\n * @param {object} lead - The lead object\n * @param {number} index - The row beign validated\n *\n * @returns {void}\n */\nexport const createLeadFromStandardValidator = (lead, index) => {\n let errorMessages = [];\n\n if ('_type' in lead && !Object.values(TYPE_VALUES).includes(lead._type))\n errorMessages.push(messages.lead.type);\n\n if (!isValidString(lead.firstName)) errorMessages.push(messages.lead.firstName);\n\n if (!isValidString(lead.lastName)) errorMessages.push(messages.lead.lastName);\n\n if (!!lead.gender && !isValidString(lead.gender)) errorMessages.push(messages.lead.gender);\n else if (!!lead.gender && !isIncludesInOptions(lead.gender, Object.values(GENDERS)))\n errorMessages.push(messages.lead.genderOptions);\n\n // dob related validations.\n if (lead.dob && !isValidDate(lead.dob)) {\n errorMessages.push(messages.lead.dob);\n } else if (!lead.dob && (lead.birthYear || lead.birthMonth || lead.birthDay)) {\n if (\n !lead.birthMonth ||\n (lead.birthMonth !== '' &&\n !(isValidNumber(lead.birthMonth) || isValidString(lead.birthMonth)))\n ) {\n errorMessages.push(messages.lead.birthMonth);\n }\n\n if (!lead.birthDay || (lead.birthDay !== '' && !isValidNumber(lead.birthDay))) {\n errorMessages.push(messages.lead.birthDay);\n }\n\n if (!lead.birthYear || (lead.birthYear !== '' && !isValidNumber(lead.birthYear))) {\n errorMessages.push(messages.lead.birthYear);\n }\n }\n\n if (!isValidString(lead.campaign)) errorMessages.push(messages.lead.campaign);\n\n if (!!lead.email && !isValidEmail(lead.email)) errorMessages.push(messages.lead.email);\n\n if (lead.phones && lead.phones !== []) {\n for (let index = 0; index < lead.phones.length; index++) {\n if (!!lead.phones[index].number && !isValidPhoneNumber(lead.phones[index].number))\n errorMessages.push(`The phone number ${index + 1} is invalid`);\n }\n }\n\n if (lead.address.street1 !== '' && !isValidString(lead.address.street1))\n errorMessages.push(messages.lead.addressLine1);\n\n if (lead.address.street2 !== '' && !isValidString(lead.address.street2))\n errorMessages.push(messages.lead.addressLine2);\n\n if (lead.address.city !== '' && !isValidString(lead.address.city))\n errorMessages.push(messages.lead.city);\n\n if (lead.address.zip !== '' && !isValidNumber(lead.address.zip))\n errorMessages.push(messages.lead.zip);\n\n if (!!lead.priority && !isValidNumber(lead.priority)) errorMessages.push(messages.lead.priority);\n\n if (!!lead.amount && !isValidFloat(lead.amount, 2, true)) errorMessages.push(messages.lead.amount);\n\n // if (!!lead.creditScore && !isValidNumber(lead.creditScore))\n if (!!lead.creditScore && !isValidString(lead.creditScore))\n errorMessages.push(messages.lead.creditScore);\n\n //TODO: AGREGAR VALIDACIONES A TIPOS DE LEAD (Home, commercial, etc) Y A DRIVERS\n if (lead.leadLeadTypeWorkersCompensationRelation) {\n const { create: data } = lead.leadLeadTypeWorkersCompensationRelation;\n\n if (data.policyExpirationDate) {\n if (/\\d{4}.\\d{2}.\\d{2}/.test(data.policyExpirationDate) === false) {\n errorMessages.push('Policy expiration date should have format YYYY-MM-DD');\n }\n }\n }\n\n if (lead.leadLeadTypeGeneralLiabilityRelation) {\n const { create: data } = lead.leadLeadTypeGeneralLiabilityRelation;\n\n if (data.policyExpirationDate) {\n if (/\\d{4}.\\d{2}.\\d{2}/.test(data.policyExpirationDate) === false) {\n errorMessages.push('Policy expiration date should have format YYYY-MM-DD');\n }\n }\n }\n\n if (lead.leadLeadTypeLifeRelation) {\n const { create: data } = lead.leadLeadTypeLifeRelation;\n\n if (data.dateGenerated === 'invalid') {\n errorMessages.push('Lead generated date should have the format YYYY-MM-DD hh:mm:ss');\n }\n }\n\n // Validate drivers\n if ('drivers' in lead) {\n for (const [, driver] of lead.drivers.create.entries()) {\n if (!isValidString(driver.firstName)) errorMessages.push(messages.driver.firstName);\n if (!isValidString(driver.lastName)) errorMessages.push(messages.driver.lastName);\n if (!!driver.email && !isValidEmail(driver.email)) errorMessages.push(messages.driver.email);\n if (!!driver.birthDate && !isValidDate(lead.birthDate))\n errorMessages.push(messages.driver.birthDate);\n if (!!driver.gender && !isValidString(driver.gender))\n errorMessages.push(messages.driver.gender);\n else if (!!driver.gender && !isIncludesInOptions(driver.gender, Object.values(GENDERS)))\n errorMessages.push(messages.driver.genderOptions);\n if (!!driver.maritalStatus && !isValidString(driver.maritalStatus))\n errorMessages.push(messages.driver.maritalStatus);\n else if (\n !!driver.maritalStatus &&\n !isIncludesInOptions(driver.maritalStatus, Object.values(MARITAL_STATUSES))\n )\n errorMessages.push(messages.driver.maritalStatusOptions);\n }\n }\n\n if (errorMessages.length !== 0)\n throw new ValidationError([`Error in row ${index}`, ...errorMessages]);\n};\n\n/**\n * Lead input validator from ricochet csv\n *\n * @param {object} lead - The lead object\n * @param {number} index - The line on the csv\n *\n * @returns {void}\n */\nexport const createLeadFromRicochetValidator = (lead, index) => {\n const errors = [];\n\n if (!isValidString(lead.firstName))\n errors.push(`On line ${index}, a valid first name is required:`, lead.firstName);\n\n if (!isValidString(lead.lastName, true))\n errors.push(`On line ${index}, a valid last name is required:`, lead.lastName);\n\n if (!isValidString(lead.email, true))\n errors.push(`On line ${index}, a valid email is required:`, lead.email);\n\n if (!moment(lead.creationDate).isValid())\n errors.push(`On line ${index}, creation date is not valid:`, lead.creationDate);\n\n for (let i = 0; i < lead.drivers.create.length; i++) {\n const driver = lead.drivers.create[i];\n\n if (driver.yearOfVehicle !== null && Number.isNaN(driver.yearOfVehicle)) {\n errors.push(`On line ${index}, vehicle ${i + 1} has an invalid year:`, driver.yearOfVehicle);\n }\n }\n\n if (errors.length) {\n throw new ValidationError(errors);\n }\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const onTaskCreate = createEvent();\n\nexport const onTaskCreateError = createEvent();\n\nexport const onTaskUpdateEvent = createEvent();\n\nexport const OnMassiveValidationError = createEvent();\n\nexport const OnMassiveValidationSuccess = createEvent();\n\nexport const OnCsvUploadFinised = createEvent();\n\nexport const OnLeadsListEvent = createEvent();\n\nexport const OnLeadsError = createEvent();\n\nexport const OnFetchSmsListEvent = createEvent();\n\nexport const OnTaskUpdateEvent = createEvent();\n\nexport const OnLeadCreateEvent = createEvent();\n\nexport const OnDeleteLeadsResult = createEvent();\n\nexport const OnAssignUserstoLeadEvent = createEvent();\n\nexport const OnAssignUserstoLeadError = createEvent();\n\nexport const OnLeadsUpdateEvent = createEvent();\n\nexport const OnDeleteLeadEvent = createEvent();\n\nexport const OnLeadsChunkBulkCreateEvent = createEvent();\n\nexport const OnValidatedLeadDataForUploadEvent = createEvent();\n\nexport const OnTaskError = createEvent();\n\nexport const OnTaskTypeListEvent = createEvent();\n\nexport const OnTaskTypeListError = createEvent();\n","import { createAction } from '@cobuildlab/react-simple-state';\nimport { error, log } from '@cobuildlab/pure-logger';\nimport {\n LEADS_LIST_QUERY_V2,\n LEADS_LIST_LIGHT_QUERY,\n FILTER_OPTIONS_QUERY,\n LEAD_CREATE_MUTATION,\n LEAD_UPDATE_MUTATION,\n LEAD_DELETE_MUTATION,\n TASK_CREATE_MUTATION,\n TASK_UPDATE_MUTATION,\n LEAD_TASK_TYPE_LIST_QUERY,\n LEAD_USERS_UPDATE_MUTATION,\n LEAD_DETAIL_QUERY,\n // FETCH_LEAD,\n CREATE_SMS_MUTATION,\n FETCH_SMS_LIST,\n FETCH_MESSAGES_BY_LEAD,\n ASSIGN_USERS_TO_LEAD,\n UPDATE_LEAD,\n FETCH_CAMPAIGNS,\n FETCH_LEAD_TASKS,\n DELETE_LEAD_PHONE_NUMBERS,\n LEADS_FOR_TASK_LIST_QUERY_V2,\n LEADS_COUNT,\n FETCH_LEAD_RECORDINGS,\n} from './leads-queries';\nimport { OnApolloClient, OnSessionFetch } from '../../shared/session/session-events';\nimport {\n OnFetchLeadEvent,\n OnFetchLeadEventError,\n OnUpdateLeadAmount,\n OnUpdateLeadAmountError,\n OnFetchCampaigns,\n OnFetchCampaignsError,\n OnUpdateLeadCampaign,\n OnUpdateLeadCampaignError,\n OnUpdateLeadAssignees,\n OnUpdateLeadAssigneesError,\n OnFetchLeadTasks,\n OnFetchLeadTasksError,\n OnFetchLeadMessages,\n OnFetchLeadMessagesError,\n OnLeadMessageCreate,\n OnLeadMessageCreateError,\n OnFetchLeadRecordings,\n OnFetchLeadRecordingsError,\n} from './leads-store';\nimport { getLeadFromRowCsv, parsePhone, getLeadPhoneNumberRelationInput } from './leads-utils';\nimport {\n sanitize8BaseReferences,\n sanitize8BaseReference,\n sanitize8BaseEmptyFields,\n sanitize8BaseReconnects,\n sanitize8BaseReconnect,\n} from '../../shared/utils';\nimport { chunkArray } from '../../shared/utils';\nimport { getActiveAgency, getUserAgencyRoles } from '../../shared/utils/agency-utils';\nimport {\n MANAGER,\n AGENT,\n LEAD_TYPE_AUTO,\n LEAD_TYPE_COMMERCIAL_AUTO,\n LEAD_TYPE_HOME,\n LEAD_TYPE_LIFE,\n LEAD_TYPE_GENERAL_LIABILITY,\n LEAD_TYPE_WORKERS_COMPENSATION,\n LEAD_TYPE_EMPLOYEE_BENEFITS,\n} from '../../shared/constants';\nimport {\n createAndUpdateTaskValidator,\n createAndUpdateLeadValidator,\n createLeadFromStandardValidator,\n createLeadsFromRicochetColumnValidator,\n createLeadFromRicochetValidator,\n updateLeadValidator,\n} from './leads-validators';\nimport * as moment from 'moment';\nimport { LEAD_TYPE_OPTIONS, FILTER_CATEGORIES_TEXT_TYPES } from './leads-model';\nimport {\n OnCsvUploadFinised,\n OnLeadsListEvent,\n OnLeadsError,\n OnLeadCreateEvent,\n OnDeleteLeadsResult,\n OnAssignUserstoLeadEvent,\n OnAssignUserstoLeadError,\n OnLeadsUpdateEvent,\n OnDeleteLeadEvent,\n OnLeadsChunkBulkCreateEvent,\n OnValidatedLeadDataForUploadEvent,\n onTaskCreate,\n onTaskUpdateEvent,\n OnTaskError,\n OnTaskTypeListEvent,\n OnTaskTypeListError,\n OnFetchSmsListEvent,\n} from './leads-events';\n\n/**\n * Creates a filter object\n *\n * @param {object} filterData - the data of the filter\n * @param {string} search - string to find specifics leads\n * @returns {object} the filter object\n */\nexport const createFilter = (filterData, search) => {\n const roles = getUserAgencyRoles();\n const { user } = OnSessionFetch.get();\n\n const rolesFilter =\n !roles.includes(MANAGER) && roles.includes(AGENT)\n ? {\n OR: [\n {\n createdBy: {\n id: {\n equals: user.id,\n },\n },\n },\n {\n assignees: {\n some: {\n id: {\n equals: user.id,\n },\n },\n },\n },\n ],\n }\n : null;\n\n const agencyFilter = filterData.agency\n ? {\n campaign: { agency: { id: { equals: filterData.agency } } },\n }\n : {};\n\n const stageNameFilter = filterData.stage?.name\n ? { stage: { name: { contains: filterData.stage.name } } }\n : {};\n\n const typeSelectedFilter = LEAD_TYPE_OPTIONS.find((item) => item.value === filterData.leadType);\n\n const typeFilter = typeSelectedFilter\n ? {\n [typeSelectedFilter.relation]: {\n id: {\n is_not_empty: true,\n },\n },\n }\n : null;\n\n const searhArray =\n search && typeof search === 'string' && search.length > 0 && Number.isNaN(parseInt(search))\n ? search\n .split(' ')\n .map((word) => [\n { firstName: { contains: word } },\n { lastName: { contains: word } },\n { middleName: { contains: word } },\n { email: { contains: word } },\n {\n notesLeadRelation: {\n some: {\n OR: [{ title: { contains: word } }, { text: { contains: word } }],\n },\n },\n },\n ])\n .flat()\n : [];\n\n const phoneNumber = !Number.isNaN(parseInt(search))\n ? {\n leadLeadPhoneNumberRelation: {\n some: {\n OR: [\n {\n phone: {\n number: {\n contains: parsePhone(search),\n },\n },\n },\n {\n parsedPhone: {\n number: {\n contains: parsePhone(search),\n },\n },\n },\n ],\n },\n },\n }\n : null;\n\n const phoneNumberFromFilter =\n search === '' && !Number.isNaN(parseInt(filterData.phoneNumber))\n ? {\n leadLeadPhoneNumberRelation: {\n some: {\n OR: [\n {\n phone: {\n number: {\n contains: parsePhone(filterData.phoneNumber),\n },\n },\n },\n {\n parsedPhone: {\n number: {\n contains: parsePhone(filterData.phoneNumber),\n },\n },\n },\n ],\n },\n },\n }\n : null;\n\n // Here we map the posibles filter field wich type is text\n // we check all the key in 'filterData' and comprare with FILTER_CATEGORIES_TEXT_TYPES\n // If the key match with the types in the array we map them as filter type text object from 8base api.\n const textFields = Object.keys(filterData)\n .filter((key) => FILTER_CATEGORIES_TEXT_TYPES.includes(key))\n .map((key) => ({\n [key]: { contains: filterData[key] },\n }));\n\n return {\n AND: [\n ...(phoneNumber ? [phoneNumber] : []),\n ...(phoneNumberFromFilter ? [phoneNumberFromFilter] : []),\n ...textFields,\n ...[agencyFilter],\n ...[stageNameFilter],\n ...(rolesFilter ? [rolesFilter] : []),\n ...(typeFilter ? [typeFilter] : []),\n ...(filterData.leadVendor\n ? [\n {\n leadSource: { id: { equals: filterData.leadVendor } },\n },\n ]\n : []),\n ...(filterData.createdAfter\n ? [\n {\n createdAt: { gte: filterData.createdAfter },\n },\n ]\n : []),\n ...(filterData.createdBefore\n ? [\n {\n createdAt: { lte: filterData.createdBefore },\n },\n ]\n : []),\n ...(filterData.assignedTo\n ? [\n {\n assignees: {\n ...(filterData.assignedTo === 'none'\n ? {\n every: { id: { is_empty: true } },\n }\n : {\n some: { id: { equals: filterData.assignedTo } },\n }),\n },\n },\n ]\n : []),\n ...(filterData.hasNotes && filterData.hasNotes === 'Yes'\n ? [\n {\n notesLeadRelation: { some: { id: { not_equals: null } } },\n },\n ]\n : []),\n ...(filterData.hasNotes && filterData.hasNotes === 'No'\n ? [\n {\n notesLeadRelation: { none: {} },\n },\n ]\n : []),\n ...(filterData.campaign\n ? [\n {\n campaign: {\n id: {\n equals: filterData.campaign,\n },\n },\n },\n ]\n : []),\n ],\n\n ...(search && {\n OR: searhArray,\n }),\n };\n};\n\n/**\n * Creates a filter object for SMS\n *\n * @param {object} filterData - the data of the filter\n * @returns {object} the filter object\n */\nconst createSMSFilter = (filterData) => {\n const agencyFilter = filterData.agency\n ? {\n agency: { id: { equals: filterData.agency } },\n }\n : {};\n return {\n AND: [\n ...[agencyFilter],\n ...(filterData.dateStart !== '' && filterData.dateStart\n ? [\n {\n createdAt: {\n gte: moment(filterData.dateStart)\n .startOf('day')\n .toISOString(),\n },\n },\n ]\n : []),\n ...(filterData.dateEnd !== '' && filterData.dateEnd\n ? [\n {\n createdAt: {\n lte: moment(filterData.dateEnd)\n .endOf('day')\n .toISOString(),\n },\n },\n ]\n : []),\n ...(filterData.assignedTo !== ''\n ? [\n {\n createdBy: { id: { equals: filterData.assignedTo } },\n },\n ]\n : []),\n ...(filterData.type !== ''\n ? [\n {\n type: { equals: filterData.type },\n },\n ]\n : []),\n ],\n };\n};\n\n/**\n * Returns a Sort Object\n *\n * @param {string} sortData - the category to be sorted\n * @returns {object} the sort object\n *\n */\nconst createSort = (sortData) => {\n return {\n ...(sortData === 'top' && { sort: [{ priority: 'DESC' }] }),\n ...(sortData === 'low' && { sort: [{ priority: 'ASC' }] }),\n ...(sortData === 'newest' && { sort: [{ createdAt: `DESC` }] }),\n ...(sortData === 'oldest' && { sort: [{ createdAt: `ASC` }] }),\n };\n};\n\n/**\n * function to fetch leads.\n *\n * @param {number} page - the current page of the leads\n * @param {object} data - an object which contains the filterData\n * @param {string} search - string to find specifics leads\n */\nexport const fetchLeads = async (page, data, search) => {\n const client = OnApolloClient.get();\n const skip = (page - 1) * 10;\n const filter = createFilter(data, search);\n console.log('fetchLeads filterdata:', data);\n console.log('fetchLeads filter:', filter);\n const sort = data.sort !== '' ? createSort(data.sort) : undefined;\n\n let response;\n\n const variables = { first: 10, skip, ...(filter && { filter }), ...(sort && sort) };\n\n try {\n response = await client.query({\n query: LEADS_FOR_TASK_LIST_QUERY_V2,\n fetchPolicy: 'network-only',\n variables,\n });\n } catch (e) {\n error('fetchLeads', e);\n return OnLeadsError.dispatch(e);\n }\n log('fetchLeads', response);\n OnLeadsListEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * function to fetch leads with less data.\n *\n * @param {number} page - the current page of the leads\n * @param {object} data - an object which contains the filterData\n * @param {string} search - string to find specifics leads\n */\nexport const fetchLeadsLight = async (page, data, search) => {\n const client = OnApolloClient.get();\n const skip = (page - 1) * 10;\n const filter = createFilter(data, search);\n const sort = data.sort !== '' ? createSort(data.sort) : undefined;\n let response;\n\n const variables = { first: 10, skip, ...(filter && { filter }), ...(sort && sort) };\n\n try {\n const responseCount = await client.query({\n query: LEADS_COUNT,\n fetchPolicy: 'network-only',\n variables,\n });\n\n const responseLeads = await client.query({\n query: LEADS_LIST_LIGHT_QUERY,\n fetchPolicy: 'network-only',\n variables,\n });\n\n response = {\n ...responseLeads,\n data: {\n leadsList: { ...responseLeads.data.leadsList, count: responseCount.data?.leadsList.count },\n },\n };\n } catch (e) {\n error('fetchLeadsLight', e);\n return OnLeadsError.dispatch(e);\n }\n log('fetchLeadsLight', response);\n OnLeadsListEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * function to fetch leads.\n *\n * @param {string} user - User id of the assignees lead\n * @param {string} agency - Agency relatied to the leads\n * @param {string} search - Search.\n */\nexport const fetchUserLeads = async (user, agency, search = '') => {\n const client = OnApolloClient.get();\n const variables = {\n first: 50,\n filter: {\n AND: {\n campaign: {\n agency: {\n id: {\n equals: agency,\n },\n },\n },\n assignees: {\n some: {\n id: {\n equals: user,\n },\n },\n },\n },\n ...(search &&\n search !== '' && {\n OR: [\n { firstName: { contains: search } },\n { lastName: { contains: search } },\n {\n notesLeadRelation: {\n some: { OR: [{ title: { contains: search } }, { text: { contains: search } }] },\n },\n },\n ],\n }),\n },\n };\n\n let response;\n try {\n response = await client.query({\n query: LEADS_LIST_QUERY_V2,\n fetchPolicy: 'network-only',\n variables,\n });\n } catch (e) {\n error('fetchUserLeads', e);\n }\n log('fetchUserLeads', response);\n\n return response.data;\n};\n\nexport const fetchFilterOptions = async (agencyId) => {\n const client = OnApolloClient.get();\n let response;\n try {\n response = await client.query({\n query: FILTER_OPTIONS_QUERY,\n fetchPolicy: 'network-only',\n variables: { agencyId },\n });\n } catch (e) {\n error('filterOptions', e);\n return;\n }\n\n log('fetchFilterOptions', response.data);\n\n return response.data;\n};\n\n/**\n * Function that will update the lead/agents relation\n *\n * @param {number} leadId - The id of the lead about to update\n * @param {Array} userIds - The users that will connect with the lead\n *\n * @returns {void}\n */\nexport const updateLeadUsers = async (leadId, userIds) => {\n const users = userIds.map((uid) => ({ id: uid }));\n const client = OnApolloClient.get();\n\n const data = {\n id: leadId,\n assignees: {\n reconnect: users,\n },\n };\n\n try {\n const response = await client.mutate({\n mutation: LEAD_USERS_UPDATE_MUTATION,\n variables: { data },\n });\n\n log('updateLeadUsers', response.data);\n\n return response.data;\n } catch (e) {\n error('updateLeadUsers', e);\n\n return;\n }\n};\n\n/**\n * Updates the lead's fields provided\n *\n * @param {string} id - The lead id\n * @param {object} data - The data to update the lead\n *\n * @returns {object} - response data\n */\nexport const updateLead = async (id, data) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n updateLeadValidator(data);\n } catch (e) {\n error('updateLead', e);\n return OnLeadsError.dispatch(e);\n }\n\n const { create, update, disconnect } = getLeadPhoneNumberRelationInput(data.phones, true);\n\n if (disconnect && disconnect.length > 0) {\n try {\n response = await client.mutate({\n mutation: DELETE_LEAD_PHONE_NUMBERS,\n variables: {\n filter: {\n id: {\n in: disconnect.map((phone) => phone.id),\n },\n },\n force: true,\n },\n });\n } catch (e) {\n error('updateLead', e);\n return OnLeadsError.dispatch(e);\n }\n }\n\n try {\n response = await client.mutate({\n mutation: LEAD_UPDATE_MUTATION,\n variables: {\n filter: { id },\n data: {\n firstName: data.firstName,\n middleName: data.middleName,\n lastName: data.lastName,\n gender: data.gender,\n birthMonth: data.birthMonth,\n birthDay: data.birthDay,\n birthYear: data.birthYear,\n campaign: { connect: { id: data.campaign } },\n email: data.email,\n assignees: {\n reconnect: data.assignees.map((user) => ({\n id: user.value || user.id,\n })),\n },\n leadLeadPhoneNumberRelation: {\n create,\n update,\n },\n address: {\n street1: data.firstAddress,\n street2: data.secondAddress,\n zip: data.zipCode,\n city: data.city,\n state: data.state,\n },\n creditScore: data.creditScore,\n priority: data.priority,\n ifsScore: data.ifsScore,\n amount: data.amount || '0',\n },\n },\n });\n } catch (e) {\n error('updateLead', e);\n return OnLeadsError.dispatch(e);\n }\n\n log('updateLead', response);\n OnLeadsUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Updates the priority of the specified lead\n *\n * @param {string} id - The lead id\n * @param {string} priority - The value to set as priority\n *\n * @returns {Promise} The request result\n */\nexport const updateLeadPriority = async (id, priority) => {\n const client = OnApolloClient.get();\n let response = null;\n\n try {\n response = client.mutate({\n mutation: LEAD_UPDATE_MUTATION,\n variables: {\n data: {\n id,\n priority,\n },\n },\n });\n } catch (e) {\n error('updateLeadPriority', e);\n return OnLeadsError.dispatch(e);\n }\n\n log('updateLeadPriority', response.data);\n OnLeadsUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * @param {Array} leadList - the ids of the leads to be deleted\n */\nexport const deleteLeads = async (leadList) => {\n const client = OnApolloClient.get();\n let success = 0;\n let errors = 0;\n\n for (const lead of leadList) {\n try {\n await client.mutate({\n mutation: LEAD_DELETE_MUTATION,\n variables: { data: { id: lead, force: true } },\n });\n } catch (e) {\n error(lead + ' deleteLead', e.message);\n\n errors += 1;\n\n continue;\n }\n\n success += 1;\n }\n\n log('deleteLeads', success, errors);\n OnDeleteLeadsResult.dispatch({\n success,\n errors,\n });\n};\n\n/**\n * Deletes a Lead by id\n *\n * @param {string} id identifier of the lead\n * @returns {object} the response data\n */\nexport const deleteLead = async (id) => {\n const client = OnApolloClient.get();\n let response;\n\n if (client) {\n try {\n response = await client.mutate({\n mutation: LEAD_DELETE_MUTATION,\n variables: { data: { id, force: true } },\n });\n } catch (e) {\n error('leadDelete', e);\n return OnLeadsError.dispatch(e);\n }\n\n log('leadDelete', response);\n OnDeleteLeadEvent.dispatch(response.data);\n return response.data;\n }\n};\n\n/**\n * Creates a Lead\n *\n * @param {object} lead - The lead object to create\n */\nexport const createLead = async (lead) => {\n const client = OnApolloClient.get();\n let response;\n try {\n createAndUpdateLeadValidator(lead);\n } catch (e) {\n error('createLead', e);\n return OnLeadsError.dispatch(e);\n }\n\n sanitize8BaseReferences(lead, 'assignees');\n sanitize8BaseReference(lead, 'campaign');\n\n try {\n response = await client.mutate({\n mutation: LEAD_CREATE_MUTATION,\n variables: { data: lead },\n });\n } catch (e) {\n error('createLead', e);\n return OnLeadsError.dispatch(e);\n }\n\n log('createLead', response);\n OnLeadCreateEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Creates a task\n *\n * @param {object} task - The task object\n *\n * @returns {Promise} The promises contains result from server\n */\nexport const createTask = async (task) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n createAndUpdateTaskValidator(task);\n } catch (e) {\n error('createTask', e);\n\n return OnTaskError.dispatch(e);\n }\n\n sanitize8BaseEmptyFields(task);\n sanitize8BaseReferences(task, 'users');\n sanitize8BaseReferences(task, 'agents');\n sanitize8BaseReference(task, 'lead');\n sanitize8BaseReference(task, 'type');\n\n task.agency = {\n connect: {\n id: getActiveAgency().id,\n },\n };\n\n try {\n response = await client.mutate({\n mutation: TASK_CREATE_MUTATION,\n variables: { data: task },\n });\n } catch (e) {\n error('createTask', e);\n\n return OnTaskError.dispatch(e);\n }\n\n log('createTask', response);\n\n onTaskCreate.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Updates a task\n *\n * @param {object} task - The task object to update\n *\n * @returns {object} Response object or null in case it fails\n */\nexport const updateTask = async (task) => {\n const client = OnApolloClient.get();\n\n try {\n createAndUpdateTaskValidator(task, true);\n } catch (e) {\n error('updateTask', e);\n\n return OnTaskError.dispatch(e);\n }\n\n sanitize8BaseEmptyFields(task);\n sanitize8BaseReconnects(task, 'users');\n sanitize8BaseReconnects(task, 'agents');\n sanitize8BaseReconnect(task, 'type');\n\n let response = null;\n\n try {\n response = await client.mutate({\n mutation: TASK_UPDATE_MUTATION,\n variables: { data: task },\n });\n } catch (e) {\n error('updateTask', e);\n\n return OnTaskError.dispatch(e);\n }\n\n onTaskUpdateEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Fetch the task's types\n */\nexport const fetchLeadTaskTypes = async () => {\n const client = OnApolloClient.get();\n let response;\n try {\n response = await client.query({\n query: LEAD_TASK_TYPE_LIST_QUERY,\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchLeadTaskTypes', e);\n return OnTaskTypeListError.dispatch(e);\n }\n\n log('fetchLeadTaskTypes', response.data);\n OnTaskTypeListEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Fetch lead details\n *\n * @param {string} id - Lead id to fetch\n *\n * @returns {object} The Lead object fetched from db\n */\nexport const fetchLeadDetails = createAction(\n OnFetchLeadEvent,\n OnFetchLeadEventError,\n async (id) => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: LEAD_DETAIL_QUERY,\n variables: { id },\n fetchPolicy: 'network-only',\n });\n\n return response.data;\n },\n);\n\n/**\n * Updates the specified lead's amount\n *\n * @param {string} id- The lead id\n * @param {string} value - The amount value\n *\n * @returns {Promise} The request result\n */\nexport const updateLeadAmount = createAction(\n OnUpdateLeadAmount,\n OnUpdateLeadAmountError,\n async (id, value) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: UPDATE_LEAD,\n variables: {\n filter: {\n id,\n },\n data: {\n amount: value,\n },\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Updates the campaign of the specified lead\n * to the one provided\n *\n * @param {string} lead - The lead id\n * @param {string} campaigns - The campaign id\n *\n * @returns {Promise} The request result\n */\nexport const updateLeadCampaign = createAction(\n OnUpdateLeadCampaign,\n OnUpdateLeadCampaignError,\n async (lead, campaign) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: UPDATE_LEAD,\n variables: {\n filter: {\n id: lead,\n },\n data: {\n campaign: {\n connect: {\n id: campaign,\n },\n },\n },\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Updates the users that are assigned to the\n * specified lead\n *\n * @param {string} lead - The lead id\n * @param {Array} users - The users is\n *\n * @returns {Promise} The request result\n */\nexport const updateLeadAssignees = createAction(\n OnUpdateLeadAssignees,\n OnUpdateLeadAssigneesError,\n async (lead, users) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: UPDATE_LEAD,\n variables: {\n filter: {\n id: lead,\n },\n data: {\n assignees: {\n reconnect: users.map((user) => ({ id: user })),\n },\n },\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Fetches all the campaigns from the specified agency\n *\n * @param {string} agency - The agency id\n *\n * @returns {Promise} The request result\n */\nexport const fetchAgencyCampaigns = createAction(\n OnFetchCampaigns,\n OnFetchCampaignsError,\n async (agency) => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_CAMPAIGNS,\n fetchPolicy: 'network-only',\n variables: {\n filter: {\n agency: {\n id: {\n equals: agency,\n },\n },\n },\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Fetches the tasks assined to the\n * specified lead\n *\n * @param {string} lead - The lead id\n *\n * @returns {Promise} The request result\n */\nexport const fetchLeadTasks = createAction(\n OnFetchLeadTasks,\n OnFetchLeadTasksError,\n async (lead) => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_LEAD_TASKS,\n fetchPolicy: 'network-only',\n variables: {\n filter: {\n lead: {\n id: {\n equals: lead,\n },\n },\n },\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Creates and sends an sms to the specified lead\n *\n * @param {object} message - The message object to create\n *\n * @returns {Promise} The created message object\n */\nexport const createSms = createAction(\n OnLeadMessageCreate,\n OnLeadMessageCreateError,\n async (data) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: CREATE_SMS_MUTATION,\n variables: {\n data: {\n text: data.text,\n phoneNumber: `+${data.number.code}${data.number.number}`,\n lead: { connect: { id: data.lead } },\n user: { connect: { id: data.user } },\n from: { connect: { id: data.from } },\n agency: { connect: { id: data.agency } },\n files: {\n create: data.files.map((file) => ({\n filename: file.filename,\n fileId: file.fileId,\n meta: {\n url: file.downloadUrl,\n },\n })),\n }, //make leadPhoneNumber's inclusion into the mutation dependent on the existence of data.leadPhoneNumber\n ...(data.leadPhoneNumber && {\n leadPhoneNumber: { connect: { id: data.leadPhoneNumber } },\n }),\n },\n },\n });\n\n return response.data;\n\n // const { leadId, msg, number, files, from, agency } = message;\n\n // let filesToSend = [];\n // files.forEach((file) => {\n // filesToSend.push({\n // filename: file.filename,\n // fileId: file.fileId,\n // meta: {\n // url: file.downloadUrl,\n // },\n // });\n // });\n\n // const phoneNumber = `+${number.code}${number.number}`;\n\n // const data = {\n // text: msg,\n // phoneNumber,\n // lead: { connect: { id: leadId } },\n // user: { connect: { id: user.id } },\n // files: { create: filesToSend },\n // from: { connect: { id: from } },\n // agency: { connect: { id: agency } },\n // };\n\n // try {\n // response = await client.mutate({\n // mutation: CREATE_SMS_MUTATION,\n // variables: { data },\n // });\n // } catch (e) {\n // error('createMessage', e);\n // return Flux.dispatchEvent(LEADS_ERROR_EVENT, e);\n // }\n // onCreateMessage.dispatch(response.data);\n // Flux.dispatchEvent(LEAD_SMS_MESSAGE_CREATE_EVENT, response.data);\n // return response;\n },\n);\n\n/**\n * Creates a Leads\n *\n * @param {Array} csvColumns CSV column titles\n * @param {Array} csvData Data arrays corresponding to leads\n * @param {string} campaign Campaign\n * @param {Array} formattedLeads - Lead objects ready for creation\n *\n * @returns {Promise} The request result\n */\nexport const createLeads = async (csvColumns, csvData, campaign, formattedLeads = []) => {\n const client = OnApolloClient.get();\n let leadIndex;\n let leads = formattedLeads.length > 0 ? formattedLeads : [];\n\n if (leads.length === 0) {\n try {\n csvData.forEach((row, index) => {\n leadIndex = index + 1;\n let lead = getLeadFromRowCsv(row, csvColumns, leadIndex, campaign);\n\n createLeadFromStandardValidator(lead, leadIndex);\n\n sanitize8BaseReferences(lead, 'users');\n sanitize8BaseReference(lead, 'campaign');\n delete lead._type;\n delete lead.dob;\n leads.push(lead);\n });\n } catch (e) {\n error('createLeads', e);\n if ('arr' in e) e.arr.push('Lead #' + leadIndex);\n return OnLeadsError.dispatch(e);\n }\n }\n\n OnValidatedLeadDataForUploadEvent.dispatch(true);\n const getListPromises = (chunkLeads) => {\n let r = [];\n chunkLeads.forEach((lead) => {\n const importedLead = {\n ...lead,\n imported: true,\n };\n\n r.push(\n client.mutate({\n mutation: LEAD_CREATE_MUTATION,\n variables: { data: importedLead },\n }),\n );\n });\n return r;\n };\n\n const requestPromise = (chunkLeads, isLast) =>\n Promise.all(getListPromises(chunkLeads))\n .then((response) => {\n log('createLeads', response);\n OnLeadsChunkBulkCreateEvent.dispatch({ totalChunk: chunkLeads.length });\n if (isLast) {\n OnCsvUploadFinised.dispatch();\n }\n })\n .catch((e) => {\n error('createLeads error', e);\n OnLeadsError.dispatch(e);\n });\n\n const sizeChunck = leads.length < 100 ? 20 : Math.min(Math.ceil(leads.length / 5), 50);\n\n const chunksLeads = chunkArray(leads, sizeChunck);\n\n chunksLeads.reduce(\n (promise, nextChunk, i) =>\n promise.then(() => requestPromise(nextChunk, i === chunksLeads.length - 1)),\n Promise.resolve(),\n );\n\n return null;\n};\n\n/**\n * Creates leads from the Ricochet format\n *\n * @param {Array} csvColumns - The columns in the csv\n * @param {Array>} csvData - The array of data\n * @param {string} campaign - The campaign id\n * @param {string} leadsType - The type all of the leads in the csv are going to be\n * @param {Array} formattedLeads - Lead objects ready for creation\n * @returns {Promise} The request result\n */\nexport const createLeadsFromRicochet = async (\n csvColumns,\n csvData,\n campaign,\n leadsType,\n formattedLeads = [],\n) => {\n const client = OnApolloClient.get();\n const columns = csvColumns.map((col) => col.toLowerCase().trim());\n const chunkSize = 20;\n\n try {\n createLeadsFromRicochetColumnValidator(columns);\n } catch (e) {\n error('createLeadsFromRicochet', e);\n return OnLeadsError.dispatch(e);\n }\n\n const firstName = columns.indexOf('first name');\n const lastName = columns.indexOf('last name');\n const email = columns.indexOf('email');\n const zipCode = columns.indexOf('zip code');\n const state = columns.indexOf('state');\n const city = columns.indexOf('city');\n const address = columns.indexOf('address');\n const importedLeadId = columns.indexOf('lead id');\n const creationDate = columns.indexOf('created at');\n const phones = [];\n const vehicles = {};\n\n for (let i = 0; i < columns.length; i++) {\n let result = null;\n\n if (columns[i].includes('phone')) {\n phones.push(i);\n continue;\n }\n\n result = columns[i].match(/^(\\w+) vehicle (\\w+)$/);\n\n if (result !== null) {\n const { 1: order, 2: attr } = result;\n\n if (!vehicles[order]) {\n vehicles[order] = {};\n }\n\n vehicles[order][attr] = i;\n continue;\n }\n }\n\n let leads = formattedLeads.length > 0 ? formattedLeads : [];\n\n if (leads.length === 0) {\n try {\n leads = csvData.map((row, i) => {\n const creation = row[creationDate]\n ? row[creationDate].replace(/(a|p)\\.\\s?(m)\\./, (_, first, second) =>\n `${first}${second}`.toUpperCase(),\n )\n : null;\n\n const lead = {\n firstName: row[firstName],\n middleName: ' ',\n lastName: row[lastName],\n email: row[email],\n address: [\n {\n country: 'US',\n state: row[state],\n city: row[city],\n street1: row[address],\n zip: row[zipCode],\n },\n ],\n phones: phones.map((phone) => ({ code: row[phone][0], number: row[phone].slice(1) })),\n drivers: {\n create: Object.keys(vehicles).map((order) => ({\n yearOfVehicle: vehicles[order]?.year\n ? row[vehicles[order].year]\n ? parseInt(row[vehicles[order].year])\n : null\n : null,\n makeOfVehicle: vehicles[order]?.make ? row[vehicles[order].make] : null,\n modelOfVehicle: vehicles[order]?.model ? row[vehicles[order].model] : null,\n })),\n },\n campaign: { connect: { id: campaign } },\n importedLeadId: row[importedLeadId],\n creationDate: creation\n ? moment(creation, ['MM/DD/YYYY hh:mm:ss A', 'M/D/YYYY h:mm:ss A']).toDate()\n : null,\n };\n\n if (leadsType === LEAD_TYPE_AUTO) {\n lead.leadLeadTypeAutoRelation = { create: {} };\n }\n\n if (leadsType === LEAD_TYPE_COMMERCIAL_AUTO) {\n lead.leadLeadTypeCommercialAutoRelation = { create: {} };\n }\n\n if (leadsType === LEAD_TYPE_HOME) {\n lead.leadLeadTypeHomeRelation = { create: {} };\n }\n\n if (leadsType === LEAD_TYPE_LIFE) {\n lead.leadLeadTypeLifeRelation = { create: {} };\n }\n\n if (leadsType === LEAD_TYPE_GENERAL_LIABILITY) {\n lead.leadLeadTypeGeneralLiabilityRelation = { create: {} };\n }\n\n if (leadsType === LEAD_TYPE_WORKERS_COMPENSATION) {\n lead.leadLeadTypeWorkersCompensationRelation = { create: {} };\n }\n\n if (leadsType === LEAD_TYPE_EMPLOYEE_BENEFITS) {\n lead.leadLeadTypeEmployeeBenefitRelation = { create: {} };\n }\n\n createLeadFromRicochetValidator(lead, i + 2);\n\n return lead;\n });\n } catch (e) {\n error('createLeadsFromRicochet', e);\n return OnLeadsError.dispatch(e);\n }\n }\n\n OnValidatedLeadDataForUploadEvent.dispatch(true);\n for (let i = 0; i < Math.ceil(leads.length / chunkSize); i++) {\n const create = leads.slice(i * chunkSize, i * chunkSize + chunkSize);\n let response = null;\n\n const promises = create.map((lead) =>\n client.mutate({\n mutation: LEAD_CREATE_MUTATION,\n variables: { data: lead },\n }),\n );\n\n try {\n response = await Promise.all(promises);\n } catch (e) {\n error('createLeadsFromRicochet', e);\n return OnLeadsError.dispatch(e);\n }\n OnLeadsChunkBulkCreateEvent.dispatch({ totalChunk: create.length });\n\n log('createLeadsFromRicochet', response);\n }\n};\n\n/**\n * function to fetch SMS.\n *\n * @param {number} page - the current page of the leads\n * @param {object} data - an object which contains the filterData\n *\n * @returns {Promise} The request result\n */\nexport const fetchSMSMessages = async (page, data) => {\n let filter;\n let sort, type;\n if (data) {\n filter = createSMSFilter(data);\n if (data.sort !== '') {\n sort = createSort(data.sort).sort;\n console.log('SORT SORT', sort);\n }\n if (data.type !== '') {\n type = createSort(data.type).sort;\n console.log('TYPE SORT', type);\n }\n }\n const first = 10;\n const client = OnApolloClient.get();\n const skip = (page - 1) * first;\n\n let response;\n\n const variables = { first, skip, ...(filter && { filter }), ...(sort && { sort }) };\n\n try {\n response = await client.query({\n query: FETCH_SMS_LIST,\n fetchPolicy: 'network-only',\n variables,\n });\n } catch (e) {\n error('fetchSMSMessages', e);\n return OnLeadsError.dispatch(e);\n }\n\n log('fetchSMSMessages', response);\n\n OnFetchSmsListEvent.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Fetches the messages of the specified lead\n *\n * @param {string} id - The lead id\n * @param {string} orderBy - Order of the results.\n *\n * @returns {Promise} The request result\n */\nexport const fetchLeadMessages = createAction(\n OnFetchLeadMessages,\n OnFetchLeadMessagesError,\n async (id, orderBy = 'createdAt_DESC') => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_MESSAGES_BY_LEAD,\n fetchPolicy: 'network-only',\n variables: {\n filter: {\n lead: {\n id: {\n equals: id,\n },\n },\n },\n orderBy,\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * @param {Array} leadList - the list of leads\n * @param {Array} userIds - the ids of users\n */\nexport const assignUsersToLeads = async (leadList, userIds) => {\n const client = OnApolloClient.get();\n let errors = 0;\n let success = 0;\n\n await Promise.all(\n leadList.map(async (lead) => {\n let users = userIds.filter(\n (userId) => !lead.assignees.items.some((assigned) => assigned.id === userId),\n );\n\n users = users.map((userId) => ({ id: userId }));\n\n try {\n if (users.length) {\n await client.mutate({\n mutation: ASSIGN_USERS_TO_LEAD,\n variables: {\n leadId: lead.id,\n users,\n },\n });\n }\n success += 1;\n } catch (e) {\n error(`${lead.id} assign users`, e.message);\n errors += 1;\n }\n }),\n );\n\n if (errors === 0) {\n OnAssignUserstoLeadEvent.dispatch({ success });\n } else {\n OnAssignUserstoLeadError.dispatch({\n success,\n errors,\n });\n }\n};\n\n/**\n * Fetches the lead phone call recordings.\n *\n * @param {string} leadId - The lead id.\n * @param {number} page - The page number to paginate results.\n * @returns {Promise} The request result.\n */\nexport async function fetchLeadRecordings(leadId, page) {\n const client = OnApolloClient.get();\n const pageSize = 10;\n const skip = (page - 1) * pageSize;\n\n try {\n const response = await client.query({\n query: FETCH_LEAD_RECORDINGS,\n fetchPolicy: 'network-only',\n variables: { leadId, first: pageSize, skip },\n });\n\n OnFetchLeadRecordings.dispatch(response.data);\n return response.data;\n } catch (err) {\n OnFetchLeadRecordingsError.dispatch(err);\n }\n}\n","/**\n * Returns a label from an array of users\n *\n * @param {object} users - The users array to extract the label from\n *\n * @returns {string} The label string\n */\nexport function getAssignedUsersLabel(users) {\n if (!users || users.length === 0) {\n return '';\n }\n\n const [firstUser] = users;\n let firstUserFullName;\n\n if (firstUser.label !== undefined) {\n firstUserFullName = firstUser.label;\n } else {\n firstUserFullName = `${firstUser.firstName} ${firstUser.lastName}`;\n }\n\n const othersUsers = users.length > 1 ? `& ${users.length - 1} others` : '';\n\n return `${firstUserFullName} ${othersUsers}`;\n}\n\n/**\n * Map users to dropdown with check format\n *\n * @param {Array} users - All users available in dropdown\n * @param {Array} assigned - Users selected in the dropdown\n *\n * @returns {Array} Users mapped\n */\nexport function mapUserToDropdownWithCheck(users, assigned) {\n const assignedIds = assigned.map((a) => a.id);\n\n return users.map((user) => ({\n id: user.id,\n label: `${user.firstName} ${user.lastName}`,\n checked: assignedIds.includes(user.id),\n }));\n}\n\n/**\n * Map users to dropdown with check format\n *\n * @param {Array} users - All users available in dropdown\n *\n * @returns {Array} Users mapped\n */\nexport function mapUsersToDropdown(users) {\n return users.map((user) => ({\n value: user.id,\n label: `${user.firstName} ${user.lastName}`,\n }));\n}\n\n/**\n * Maps users to select input component\n *\n * @param {Array} users - Users to map\n *\n * @returns {Array} Users mapped\n */\nexport function mapUserToMultipleSelect(users) {\n return users.map((user) => ({\n id: user.id,\n label: `${user.firstName} ${user.lastName}`,\n value: user.id,\n imgUrl: user.avatar\n ? user.avatar.downloadUrl\n : 'https://randomuser.me/api/portraits/women/17.jpg',\n }));\n}\n","import gql from 'graphql-tag';\n\nexport const FETCH_MAILS = gql`\n query FetchEmails($filter: MailFilter, $first: Int, $skip: Int, $sort: [MailSort!]) {\n mailList(filter: $filter, first: $first, skip: $skip, sort: $sort) {\n count\n items {\n id\n subject\n from\n to\n ccopy\n type\n lead {\n id\n firstName\n lastName\n }\n user {\n id\n firstName\n lastName\n }\n createdAt\n }\n }\n }\n`;\n\nexport const FETCH_MAIL = gql`\n query FetchMail($id: ID) {\n mail(id: $id) {\n id\n type\n subject\n from\n to\n ccopy\n body\n lead {\n id\n firstName\n lastName\n }\n }\n }\n`;\n\nexport const CREATE_EMAIL_MESSAGE = gql`\n mutation CreateMail($data: MailCreateInput!) {\n mailCreate(data: $data) {\n id\n }\n }\n`;\n\nexport const UPDATE_EMAIL_STATE = gql`\n mutation UpdateMail($data: MailUpdateInput!) {\n mailUpdate(data: $data) {\n id\n subject\n from\n to\n archived\n deleted\n createdAt\n }\n }\n`;\n\nexport const FETCH_EMAIL_CONFIGURATION = gql`\n query FetchEmailConfigurations($user: ID!, $agency: ID!) {\n emailInboundServicesList(\n first: 1\n filter: { agency: { id: { equals: $agency } }, user: { id: { equals: $user } } }\n ) {\n items {\n id\n active\n }\n }\n emailOutboundServicesList(\n first: 1\n filter: { agency: { id: { equals: $agency } }, user: { id: { equals: $user } } }\n ) {\n items {\n id\n active\n username\n }\n }\n gmailServicesList(\n first: 1\n filter: { agency: { id: { equals: $agency } }, user: { id: { equals: $user } } }\n ) {\n items {\n id\n active\n profile {\n id\n email\n }\n }\n }\n outlookServicesList(\n first: 1\n filter: { agency: { id: { equals: $agency } }, user: { id: { equals: $user } } }\n ) {\n items {\n id\n active\n profile {\n id\n email\n }\n }\n }\n }\n`;\n\nexport const FETCH_GMAIL_EMAILS = gql`\n query FetchGmailEmails($first: Int, $after: String, $filter: GoogleEmailsFilter!) {\n googleEmailsList(first: $first, after: $after, filter: $filter) {\n next\n count\n items {\n id\n threadId\n labelIds\n payload {\n partId\n headers {\n name\n value\n }\n }\n internalDate\n }\n }\n }\n`;\n\nexport const FETCH_GMAIL_EMAIL = gql`\n query FetchGmailEmail($id: String!, $agency: ID!) {\n googleEmail(id: $id, agency: $agency) {\n id\n threadId\n labelIds\n payload {\n partId\n headers {\n name\n value\n }\n body\n }\n internalDate\n }\n }\n`;\n\nexport const CREATE_GOOGLE_EMAIL = gql`\n mutation CreateGoogleEmail($data: GoogleEmailCreateInput!) {\n googleEmailCreate(data: $data) {\n id\n }\n }\n`;\n\nexport const FETCH_OUTLOOK_EMAILS = gql`\n query FetchOutlookEmails($agency: ID!, $folder: OutlookFolder!, $search: String, $next: String) {\n outlookEmailsList(agency: $agency, folder: $folder, search: $search, next: $next) {\n count\n next\n items {\n id\n from {\n name\n address\n }\n to {\n name\n address\n }\n subject\n preview\n createdAt\n }\n }\n }\n`;\n\nexport const FETCH_OUTLOOK_EMAIL = gql`\n query FetchOutlookEmail($outlookId: String!, $agency: ID!) {\n outlookEmail(outlookId: $outlookId, agency: $agency) {\n id\n from {\n name\n address\n }\n to {\n name\n address\n }\n subject\n body\n createdAt\n }\n }\n`;\n\nexport const CREATE_OUTLOOK_EMAIL = gql`\n mutation CreateOutlookEmail($data: OutlookEmailCreateInput!) {\n outlookEmailCreate(data: $data) {\n id\n from {\n name\n address\n }\n to {\n name\n address\n }\n subject\n body\n createdAt\n }\n }\n`;\n\nexport const AgencyEmailServiceFragment = gql`\n fragment AgencyEmailServiceFragment on AgencyEmailService {\n id\n agency {\n id\n }\n outbound {\n id\n description\n server\n username\n }\n gmail {\n id\n profile {\n id\n name\n email\n }\n }\n outlook {\n id\n profile {\n id\n name\n email\n }\n }\n }\n`;\n\nexport const FETCH_AGENCY_EMAIL_SERVICES = gql`\n query FetchAgencyEmailService(\n $filter: AgencyEmailServiceFilter\n $first: Int\n $skip: Int\n $sort: [AgencyEmailServiceSort!]\n ) {\n agencyEmailServicesList(filter: $filter, first: $first, skip: $skip, sort: $sort) {\n count\n items {\n ...AgencyEmailServiceFragment\n }\n }\n }\n ${AgencyEmailServiceFragment}\n`;\n\nexport const CREATE_AGENCY_EMAIL_SERVICE = gql`\n mutation CreateAgencyEmailService($data: AgencyEmailServiceCreateInput!) {\n agencyEmailServiceCreate(data: $data) {\n ...AgencyEmailServiceFragment\n }\n }\n ${AgencyEmailServiceFragment}\n`;\n\nexport const FETCH_AVAILABLE_EMAIL_SERVICES = gql`\n query FetchAvailableEmailServices($agency: ID!) {\n emailOutboundServicesList(\n filter: { agency: { id: { equals: $agency } }, active: { equals: true } }\n ) {\n items {\n id\n description\n server\n username\n createdAt\n }\n }\n gmailServicesList(filter: { agency: { id: { equals: $agency } }, active: { equals: true } }) {\n items {\n id\n profile {\n id\n name\n email\n }\n createdAt\n }\n }\n outlookServicesList(filter: { agency: { id: { equals: $agency } }, active: { equals: true } }) {\n items {\n id\n profile {\n id\n name\n email\n }\n createdAt\n }\n }\n }\n`;\n\nexport const UPDATE_AGENCY_EMAIL_SERVICE = gql`\n mutation UpdateAgencyEmailService(\n $filter: AgencyEmailServiceKeyFilter\n $data: AgencyEmailServiceUpdateInput!\n ) {\n agencyEmailServiceUpdate(filter: $filter, data: $data) {\n ...AgencyEmailServiceFragment\n }\n }\n ${AgencyEmailServiceFragment}\n`;\n","import Flux from '@cobuildlab/flux-state';\nimport { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchEmails = createEvent();\n\nexport const OnFetchEmailsError = createEvent();\n\nexport const OnFetchEmail = createEvent();\n\nexport const OnFetchEmailError = createEvent();\n\nexport const OnCreateEmail = createEvent();\n\nexport const OnCreateEmailError = createEvent();\n\nexport const OnFetchEmailConfig = createEvent();\n\nexport const OnFetchEmailConfigError = createEvent();\n\nexport const OnFetchGmailList = createEvent();\n\nexport const OnFetchGmailListError = createEvent();\n\nexport const OnFetchGmailItem = createEvent();\n\nexport const OnFetchGmailItemError = createEvent();\n\nexport const OnReplyGoogleEmail = createEvent();\n\nexport const OnReplyGoogleEmailError = createEvent();\n\nexport const OnFetchOutlookEmails = createEvent();\n\nexport const OnFetchOutlookEmailsError = createEvent();\n\nexport const OnFetchOutlookEmail = createEvent();\n\nexport const OnFetchOutlookEmailError = createEvent();\n\nexport const OnCreateOutlookEmail = createEvent();\n\nexport const OnCreateOutlookEmailError = createEvent();\n\nexport const OnReplyOutlookEmail = createEvent();\n\nexport const OnReplyOutlookEmailError = createEvent();\n\nexport const OnFetchAgencyEmailService = createEvent();\n\nexport const OnFetchAgencyEmailServiceError = createEvent();\n\nexport const OnFetchAvailableEmailServices = createEvent();\n\nexport const OnFetchAvailableEmailServicesError = createEvent();\n\nexport const OnSetAgencyEmailService = createEvent();\n\nexport const OnSetAgencyEmailServiceError = createEvent();\n\n/**\n * Event that triggers when an email is updated\n *\n * @type {string}\n */\nexport const UPDATE_EMAIL_EVENT = 'onEmailUpdateEvent';\n\n/**\n * Event that triggers when email update fails\n *\n * @type {string}\n */\nexport const UPDATE_EMAIL_EVENT_ERROR = 'onEmailUpdateEventError';\n\n/**\n * Event that triggers a Update to user signature.\n *\n * @type {string}\n */\nexport const USER_SIGNATURE_UPDATE_EVENT = 'onUserSignatureUpdate';\n\nexport const USER_SIGNATURE_UPDATE_ERROR_EVENT = 'onUserSignatureUpdateError';\n\n/**\n * Event that triggers a User Signature event.\n *\n * @type {string}\n */\nexport const USER_SIGNATURE_EVENT = 'onUserSignatureEvent';\n\nexport const USER_SIGNATURE_ERROR_EVENT = 'onUserSignatureError';\n\n/**\n * Event that triggers when an email is created through google api\n */\nexport const CREATE_GOOGLE_EMAIL = 'onCreateGoogleEmail';\n\nexport const CREATE_GOOGLE_EMAIL_ERROR = 'onCreateGoogleEmailError';\n\nclass EmailStore extends Flux.DashStore {\n constructor() {\n super();\n\n this.addEvent(UPDATE_EMAIL_EVENT);\n this.addEvent(UPDATE_EMAIL_EVENT_ERROR);\n this.addEvent(USER_SIGNATURE_UPDATE_EVENT);\n this.addEvent(USER_SIGNATURE_UPDATE_ERROR_EVENT);\n this.addEvent(USER_SIGNATURE_EVENT);\n this.addEvent(USER_SIGNATURE_ERROR_EVENT);\n this.addEvent(CREATE_GOOGLE_EMAIL);\n this.addEvent(CREATE_GOOGLE_EMAIL_ERROR);\n }\n}\n\nexport default new EmailStore();\n","import gql from 'graphql-tag';\n\nexport const USER_SIGNATURE_QUERY = gql`\n query UserSigntare($id: ID) {\n user(id: $id) {\n id\n signature\n isEnableSignature\n }\n }\n`;\n","import { ValidationError } from '../../shared/errors';\nimport { isValidString, isValidEmail } from '../../shared/validators';\n\nexport const createEmailValidator = (email) => {\n let errors = [];\n\n if (!isValidString(email.subject)) errors.push('The mail must have a valid subject');\n\n if (!isValidString(email.body)) errors.push('The mail must have valid content');\n\n if (isValidString(email.to)) {\n const to = email.to.split(',');\n\n if (to.length > 0) {\n for (const address of to) {\n if (!isValidEmail(address.trim())) {\n errors.push(`${address} is not valid email address`);\n }\n }\n } else {\n errors.push('A valid email address must be set in the \"to\" field');\n }\n } else {\n errors.push('A valid email address must be set in the \"to\" field');\n }\n\n if (isValidString(email.cc)) {\n const cc = email.cc.split(',');\n\n if (cc.length > 0) {\n for (const address of cc) {\n if (!isValidEmail(address.trim())) {\n errors.push(`${address} is not valid email address`);\n }\n }\n }\n }\n\n if (errors.length > 0) throw new ValidationError(errors);\n};\n","export const LIST_FILTER_OPTIONS = {\n INBOX: 'inbox',\n SEND: 'send',\n ARCHIVE: 'archive',\n TRASH: 'trash',\n LEADS: 'leads',\n};\n\nexport const SORT_OPTIONS = [\n { label: 'Date: Newest First', value: 'newest' },\n { label: 'Date: Oldest First', value: 'oldest' },\n];\n\nexport const PRE_SIGNATURE = '--';\n\nexport const FILTER_CATEGORIES = {\n dateStart: {\n title: 'Date Start',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'dateStart',\n },\n dateEnd: {\n title: 'Date End',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'dateEnd',\n },\n assignedTo: {\n title: 'Assigned to',\n placeholher: 'Select',\n identifier: 'assignedTo',\n options: [],\n },\n};\n\nexport const FILTER_DATA = {\n dateStart: '',\n dateEnd: '',\n assignedTo: '',\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnUserSignatureEvent = createEvent();\n\nexport const OnUserSignatureError = createEvent();\n\nexport const OnCreateGoogleEmailEvent = createEvent();\n\nexport const OnCreateGoogleEmailError = createEvent();\n\nexport const OnUpdateEmailEvent = createEvent();\n\nexport const OnUpdateEmailError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { createAction } from '@cobuildlab/react-simple-state';\nimport {\n FETCH_MAILS,\n FETCH_MAIL,\n CREATE_EMAIL_MESSAGE,\n UPDATE_EMAIL_STATE,\n FETCH_EMAIL_CONFIGURATION,\n FETCH_GMAIL_EMAILS,\n FETCH_GMAIL_EMAIL,\n CREATE_GOOGLE_EMAIL,\n FETCH_OUTLOOK_EMAILS,\n FETCH_OUTLOOK_EMAIL,\n CREATE_OUTLOOK_EMAIL,\n FETCH_AGENCY_EMAIL_SERVICES,\n CREATE_AGENCY_EMAIL_SERVICE,\n FETCH_AVAILABLE_EMAIL_SERVICES,\n UPDATE_AGENCY_EMAIL_SERVICE,\n} from './email-queries';\nimport {\n OnFetchEmailConfig,\n OnFetchEmailConfigError,\n OnFetchGmailItem,\n OnFetchGmailItemError,\n OnFetchGmailList,\n OnFetchGmailListError,\n OnReplyGoogleEmail,\n OnReplyGoogleEmailError,\n OnFetchOutlookEmails,\n OnFetchOutlookEmailsError,\n OnFetchOutlookEmail,\n OnFetchOutlookEmailError,\n OnCreateOutlookEmail,\n OnCreateOutlookEmailError,\n OnReplyOutlookEmail,\n OnReplyOutlookEmailError,\n OnFetchAgencyEmailService,\n OnFetchAgencyEmailServiceError,\n OnFetchAvailableEmailServices,\n OnFetchAvailableEmailServicesError,\n OnSetAgencyEmailService,\n OnSetAgencyEmailServiceError,\n OnFetchEmails,\n OnFetchEmailsError,\n OnFetchEmail,\n OnFetchEmailError,\n OnCreateEmail,\n OnCreateEmailError,\n} from './email-store';\nimport { USER_SIGNATURE_QUERY } from '../my-account/email/email-queries';\nimport { createEmailValidator } from './email-validators';\nimport { OnApolloClient, OnSessionFetch } from '../../shared/session/session-events';\nimport { LIST_FILTER_OPTIONS } from './email-model';\nimport { EMAIL_TYPES } from '@cobuildlab/lead-volt-share';\nimport moment from 'moment';\nimport {\n OnCreateGoogleEmailError,\n OnCreateGoogleEmailEvent,\n OnUpdateEmailError,\n OnUpdateEmailEvent,\n OnUserSignatureError,\n OnUserSignatureEvent,\n} from './email-events';\n\nconst { INBOX, SEND, ARCHIVE, TRASH } = LIST_FILTER_OPTIONS;\n\nconst createFilterForList = (filters) => {\n return {\n ...(filters.folder === INBOX\n ? {\n type: {\n equals: 'INBOX',\n },\n }\n : {}),\n ...(filters.folder === SEND\n ? {\n type: {\n equals: 'SENT',\n },\n }\n : {}),\n ...(filters.folder === ARCHIVE\n ? {\n archived: {\n equals: true,\n },\n }\n : {}),\n ...(filters.folder === TRASH\n ? {\n deleted: {\n equals: true,\n },\n }\n : {}),\n ...(filters.search\n ? {\n _fullText: filters.search,\n }\n : {}),\n };\n};\n\n/**\n * Creates filter for email fetching\n *\n * @param {object} data - The data to create the filters from\n *\n * @returns {object} The filter object\n */\nconst createFilter = (data) => {\n return {\n ...(data.assignedTo\n ? {\n user: {\n id: {\n equals: data.assignedTo,\n },\n },\n }\n : {}),\n ...(data.dateStart || data.dateEnd\n ? {\n AND: [\n ...(data.dateStart\n ? [\n {\n createdAt: {\n gte: moment(data.dateStart)\n .startOf('day')\n .toISOString(),\n },\n },\n ]\n : []),\n ...(data.dateEnd\n ? [\n {\n createdAt: {\n lte: moment(data.dateEnd)\n .endOf('day')\n .toISOString(),\n },\n },\n ]\n : []),\n ],\n }\n : {}),\n };\n};\n\n/**\n * Fetches a list of emails for the specified user\n *\n * @param {string} user - The user id\n * @param {string} agency - The agency id\n * @param {object} filters - The object with data to filters the results\n * @param {number} page - The page to fetch\n *\n * @returns {Promise} The request result\n */\nexport const fetchEmails = createAction(\n OnFetchEmails,\n OnFetchEmailsError,\n async (user, agency, filters, page) => {\n const client = OnApolloClient.get();\n const first = 20;\n const skip = first * (page - 1);\n const sort = [{ createdAt: 'DESC' }];\n\n const response = await client.query({\n query: FETCH_MAILS,\n fetchPolicy: 'network-only',\n variables: {\n first,\n skip,\n sort,\n filter: {\n ...createFilterForList(filters),\n user: {\n id: {\n equals: user,\n },\n },\n agency: {\n id: {\n equals: agency,\n },\n },\n },\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Fetches the specified email\n *\n * @param {string} id - The email id to fetch\n *\n * @returns {Promise} The request result\n */\nexport const fetchEmail = createAction(OnFetchEmail, OnFetchEmailError, async (id) => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_MAIL,\n fetchPolicy: 'network-only',\n variables: {\n id,\n },\n });\n\n return response.data;\n});\n\nexport const fetchAgencyEmails = createAction(\n OnFetchEmails,\n OnFetchEmailsError,\n async (agency, page, sort = '', filters = {}) => {\n const client = OnApolloClient.get();\n const first = 10;\n const skip = first * (page - 1);\n\n console.log('filters', filters);\n\n const response = await client.query({\n query: FETCH_MAILS,\n fetchPolicy: 'network-only',\n variables: {\n first,\n skip,\n sort: sort === '' || sort === 'newest' ? [{ createdAt: 'DESC' }] : [{ createdAt: 'ASC' }],\n filter: {\n ...createFilter(filters),\n agency: {\n id: {\n equals: agency,\n },\n },\n lead: {\n id: {\n is_not_empty: true,\n },\n },\n },\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Creates a Email record in the database\n *\n * @param {object} email - The email object to store in db\n *\n * @returns {Promise} Result of the operation\n */\nexport const createNewEmail = createAction(OnCreateEmail, OnCreateEmailError, async (email) => {\n const client = OnApolloClient.get();\n\n createEmailValidator(email);\n\n const response = await client.mutate({\n mutation: CREATE_EMAIL_MESSAGE,\n variables: {\n data: {\n subject: email.subject,\n from: email.from,\n to: email.to\n .split(',')\n .map((to) => to.trim())\n .join(','),\n ccopy: email.cc\n .split(',')\n .map((cc) => cc.trim())\n .join(','),\n body: email.body,\n type: EMAIL_TYPES.SENT,\n attachments: {\n create: email.attachments.map((file) => ({\n filename: file.filename,\n fileId: file.fileId,\n meta: {\n url: file.downloadUrl,\n },\n })),\n },\n user: { connect: { id: email.user.id } },\n agency: { connect: { id: email.agency.id } },\n ...(email.lead\n ? {\n lead: { connect: { id: email.lead.id } },\n }\n : {}),\n ...(email.event \n ? {\n event: email.event\n } \n : {})\n },\n },\n });\n\n return response.data;\n});\n\nexport const updateEmail = async (id, archived, deleted) => {\n const client = OnApolloClient.get();\n const data = {\n id,\n archived,\n deleted,\n };\n\n try {\n const response = await client.mutate({\n mutation: UPDATE_EMAIL_STATE,\n variables: { data },\n });\n\n log('updateEmail', response.data);\n\n OnUpdateEmailEvent.dispatch(response.data);\n return response.data;\n } catch (e) {\n error('updateEmail', e);\n\n OnUpdateEmailError.dispatch(e);\n return Promise.reject(e);\n }\n};\n\n/**\n * Fetch user signature\n *\n * @returns {object} the response data\n */\nexport const fetchUserSignature = async () => {\n const client = OnApolloClient.get();\n const { user } = OnSessionFetch.get();\n let response;\n\n try {\n response = await client.query({\n query: USER_SIGNATURE_QUERY,\n fetchPolicy: 'network-only',\n variables: { id: user.id },\n });\n } catch (e) {\n error('fetchUserSignature', e);\n\n return OnUserSignatureError.dispatch(e);\n }\n\n log('fetchUserSignature', response);\n\n OnUserSignatureEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Fetches the user email configuration\n *\n * @param {string} user - The user id\n * @param {string} agency - The agency id\n *\n * @returns {Promise} The configuration object\n */\nexport const fetchEmailConfiguration = createAction(\n OnFetchEmailConfig,\n OnFetchEmailConfigError,\n async (user, agency) => {\n const client = OnApolloClient.get();\n\n const { data } = await client.query({\n query: FETCH_EMAIL_CONFIGURATION,\n fetchPolicy: 'network-only',\n variables: {\n user,\n agency,\n },\n });\n\n const {\n emailInboundServicesList,\n emailOutboundServicesList,\n gmailServicesList,\n outlookServicesList,\n } = data;\n\n const [inbound] = emailInboundServicesList.items;\n const [outbound] = emailOutboundServicesList.items;\n const [gmail] = gmailServicesList.items;\n const [outlook] = outlookServicesList.items;\n\n return {\n inbound,\n outbound,\n gmail,\n outlook,\n };\n },\n);\n\n/**\n * Creates a filter for fetching emails from gmail API\n *\n * @param {object} data - The data to create the filter from\n *\n * @returns {object} The filter object\n */\nfunction createGmailsFilter(data) {\n return {\n agency: data.agency,\n ...(data.q\n ? {\n search: data.q,\n }\n : {}),\n ...(data.type\n ? {\n labels: [data.type],\n }\n : {}),\n };\n}\n\n/**\n * Fetch emails from google\n *\n * @param {string} agency - The agency id\n * @param {number} first - The quantity of items to fetch\n * @param {string} after - The token to user to fetch items from the next page\n * @param {string} search - The text to filter results\n *\n * @returns {Promise} The list of emails\n */\nexport const fetchGoogleEmails = createAction(\n OnFetchGmailList,\n OnFetchGmailListError,\n async (agency, first, after, filters) => {\n const client = OnApolloClient.get();\n const filter = createGmailsFilter({\n ...filters,\n agency,\n });\n\n const response = await client.query({\n query: FETCH_GMAIL_EMAILS,\n fetchPolicy: 'network-only',\n variables: {\n first,\n after,\n filter,\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Fetches an email details\n *\n * @param {string} id - The google message id\n * @param {string} agency - The agency id\n *\n * @returns {Promise} The email object\n */\nexport const fetchGoogleEmail = createAction(\n OnFetchGmailItem,\n OnFetchGmailItemError,\n async (id, agency) => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_GMAIL_EMAIL,\n fetchPolicy: 'network-only',\n variables: {\n id,\n agency,\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Creates an email through the google api\n *\n * @param {object} data - The data needed to create the message\n *\n * @returns {Promise} The google email object\n */\nexport async function createGoogleEmail(data) {\n const client = OnApolloClient.get();\n\n try {\n createEmailValidator({\n to: data.to,\n cc: data.cc,\n subject: data.subject,\n body: data.content,\n });\n } catch (e) {\n return OnCreateGoogleEmailError.dispatch(e);\n }\n\n let response = null;\n\n try {\n response = await client.mutate({\n mutation: CREATE_GOOGLE_EMAIL,\n variables: {\n data: {\n to: data.to,\n cc: data.cc,\n subject: data.subject,\n content: data.content,\n agency: data.agency,\n },\n },\n });\n } catch (e) {\n return OnCreateGoogleEmailError.dispatch(e);\n }\n\n OnCreateGoogleEmailEvent.dispatch(response.data);\n return response.data;\n}\n\n/**\n * Creates an email through the google api\n *\n * @param {object} data - The data needed to create the message\n *\n * @returns {Promise} The google email object\n */\nexport const replyGoogleEmail = createAction(\n OnReplyGoogleEmail,\n OnReplyGoogleEmailError,\n async (data) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: CREATE_GOOGLE_EMAIL,\n variables: {\n data: {\n to: data.to,\n subject: data.subject,\n content: data.content,\n agency: data.agency,\n threadId: data.threadId,\n },\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Fetches list of emails from the outlook api\n *\n * @param {string} agency - The agency id\n * @param {string} folder - The outlook folder to fetch the emails from\n * @param {string} search - Text to search on messages and filter the results\n * @param {string} next - The link to fetch the next set of results\n *\n * @returns {Promise} The request results\n */\nexport const fetchOutlookEmails = createAction(\n OnFetchOutlookEmails,\n OnFetchOutlookEmailsError,\n async (agency, next, filters) => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_OUTLOOK_EMAILS,\n fetchPolicy: 'network-only',\n variables: {\n agency,\n ...(next ? { next } : {}),\n ...filters,\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Fetches the specified outlook email id\n *\n * @param {string} outlookId - The email id on the outlook api\n * @param {string} agency - The agency id\n *\n * @returns {Promise} The request result\n */\nexport const fetchOutlookEmail = createAction(\n OnFetchOutlookEmail,\n OnFetchOutlookEmailError,\n async (outlookId, agency) => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_OUTLOOK_EMAIL,\n fetchPolicy: 'network-only',\n variables: {\n outlookId,\n agency,\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Creates an outlook email\n *\n * @param {object} data - The data to send an email in outlook\n *\n * @returns {Promise} The request result\n */\nexport const createOutlookEmail = createAction(\n OnCreateOutlookEmail,\n OnCreateOutlookEmailError,\n async (data) => {\n const client = OnApolloClient.get();\n\n createEmailValidator({\n to: data.to,\n cc: data.cc,\n subject: data.subject,\n body: data.body,\n });\n\n const response = await client.mutate({\n mutation: CREATE_OUTLOOK_EMAIL,\n variables: {\n data: {\n agency: data.agency,\n to: data.to,\n body: data.body,\n subject: data.subject,\n ...(data.replyId\n ? {\n replyId: data.replyId,\n }\n : {}),\n },\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Replies an outlook email\n *\n * @param {object} data - The data to reply an email in outlook\n *\n * @returns {Promise} The request result\n */\nexport const replyOutlookEmail = createAction(\n OnReplyOutlookEmail,\n OnReplyOutlookEmailError,\n async (data) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: CREATE_OUTLOOK_EMAIL,\n variables: {\n data: {\n agency: data.agency,\n body: data.body,\n replyId: data.replyId,\n },\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Fetches the agency email service that is\n * using by default\n *\n * @param {string} agency - The agency id\n *\n * @returns {Promise} The email service\n */\nexport const fetchAgencyEmailService = createAction(\n OnFetchAgencyEmailService,\n OnFetchAgencyEmailServiceError,\n async (agency) => {\n const client = OnApolloClient.get();\n\n const first = 1;\n const filter = {\n agency: {\n id: {\n equals: agency,\n },\n },\n };\n\n const response = await client.query({\n query: FETCH_AGENCY_EMAIL_SERVICES,\n fetchPolicy: 'network-only',\n variables: {\n first,\n filter,\n },\n });\n\n let [item] = response.data.agencyEmailServicesList.items;\n\n if (!item) {\n const {\n data: { agencyEmailServiceCreate },\n } = await client.mutate({\n mutation: CREATE_AGENCY_EMAIL_SERVICE,\n variables: {\n data: {\n agency: {\n connect: {\n id: agency,\n },\n },\n },\n },\n });\n\n item = agencyEmailServiceCreate;\n }\n\n return { agencyEmailService: item };\n },\n);\n\n/**\n * Fetches available email services in the specified agency\n *\n * @param {string} agency - The agency id\n *\n * @returns {Promise} The list of active email services in the agency\n */\nexport const fetchAvailableEmailServices = createAction(\n OnFetchAvailableEmailServices,\n OnFetchAvailableEmailServicesError,\n async (agency) => {\n const client = OnApolloClient.get();\n\n const {\n data: { emailOutboundServicesList, gmailServicesList, outlookServicesList },\n } = await client.query({\n query: FETCH_AVAILABLE_EMAIL_SERVICES,\n fetchPolicy: 'network-only',\n variables: {\n agency,\n },\n });\n\n const results = [\n ...emailOutboundServicesList.items,\n ...gmailServicesList.items,\n ...outlookServicesList.items,\n ];\n\n results.sort((a, b) => {\n if (new Date(a.createdAt) < new Date(b.createdAt)) {\n return -1;\n }\n\n if (new Date(a.createdAt) > new Date(b.createdAt)) {\n return 1;\n }\n\n return 0;\n });\n\n return {\n agencyAvailableEmailServices: {\n items: results,\n },\n };\n },\n);\n\n/**\n * Sets the default email service to use in the agency\n *\n * @param {string} id - The agency email service id\n * @param {string} emailService - The email service id to set on the agency\n * @param {string} type - The type of service beign set, either \"outbound\", \"gmail\", \"outlook\"\n *\n * @returns {Promise} The update agency email service\n */\nexport const setAgencyEmailService = createAction(\n OnSetAgencyEmailService,\n OnSetAgencyEmailServiceError,\n async (id, emailService, type) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: UPDATE_AGENCY_EMAIL_SERVICE,\n variables: {\n filter: {\n id: id,\n },\n data: {\n outbound: { reconnect: {} },\n gmail: { reconnect: {} },\n outlook: { reconnect: {} },\n [type]: {\n reconnect: { id: emailService },\n },\n },\n },\n });\n\n return response.data;\n },\n);\n","import gql from 'graphql-tag';\n\nexport const AGENTS_LIST_QUERY = gql`\n query FetchAgencyUsersList($filter: AgencyUserFilter) {\n agencyUsersList(filter: $filter) {\n items {\n id\n user {\n id\n firstName\n lastName\n avatar {\n id\n downloadUrl\n }\n }\n agency {\n id\n name\n }\n }\n }\n }\n`;\n\nexport const CREATE_AGENCY_MUTATION = gql`\n mutation CreateAgency($data: AgencyCreateInput!) {\n agencyCreate(data: $data) {\n id\n name\n }\n }\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnAgentsListEvent = createEvent();\n\nexport const OnAgentsError = createEvent();\n","import { log, error } from '@cobuildlab/pure-logger';\nimport { AGENTS_LIST_QUERY } from './agents-queries';\nimport { OnApolloClient } from '../../shared/session/session-events';\nimport { OnAgentsError, OnAgentsListEvent } from './agents-events';\n\n/**\n * Filter for agents list query.\n *\n * @param {object} filterData filter data agency ID\n * @returns {object} filters\n */\nconst createFilter = (filterData) => {\n return {\n ...(filterData.agency && filterData.agency !== ''\n ? {\n agency: { id: { equals: filterData.agency } },\n }\n : {}),\n };\n};\n\n/**\n * Fetch agents\n *\n * @param {object} filterData agency filter\n * @returns {Array} response data\n */\nexport const fetchAgents = async (filterData = {}) => {\n const client = OnApolloClient.get();\n const filter = createFilter(filterData);\n let response;\n\n const variables = {\n ...(filter && { filter }),\n };\n\n try {\n response = await client.query({\n query: AGENTS_LIST_QUERY,\n fetchPolicy: 'network-only',\n variables,\n });\n } catch (e) {\n error('fetchAgents', e);\n\n return OnAgentsError.dispatch(e);\n }\n\n log('fetchAgents', response);\n\n const data = { agentsList: response.data.agencyUsersList };\n OnAgentsListEvent.dispatch(data);\n\n return data;\n};\n","export const SUBSCRIPTIONS_OPERATIONS = {\n CREATE: 'create',\n DELETE: 'delete',\n UPDATE: 'update',\n};\nexport const _8baseDateFormat = 'YYYY-MM-DDThh:mm:ssZ';\n","import React, { useState, useEffect, useRef } from 'react';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport moment from 'moment';\nimport {\n SelectField,\n TextAreaField,\n InputField,\n DateInputField,\n Label,\n Loader,\n} from '@8base/boost';\nimport { DialogForm, SelectMultipleAgents, Margin } from '../../../../shared/components';\nimport { fetchLeadTaskTypes, fetchUserLeads } from '../../leads-actions';\nimport { mapUserToMultipleSelect } from '../../../users/user-utils';\nimport { findPriority, priorityMap } from '../../leads-utils';\nimport { PRIORITY_OPTIONS } from '../../../../shared/constants';\nimport { createTask, updateTask } from '../../leads-actions';\nimport { createNewEmail } from 'modules/email/email-actions';\nimport { useUser } from '../../../../shared/hooks/useUser';\nimport { useAgency } from '../../../../shared/hooks/useAgency';\nimport { fetchAgents } from '../../../agents/agents-actions';\nimport { usePromise } from '@cobuildlab/hooks-utils';\nimport { _8baseDateFormat } from '../../../../shared/constants/8base';\nimport * as toast from 'shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { onTaskCreate, OnTaskError, onTaskUpdateEvent } from 'modules/leads/leads-events';\nimport { OnFetchEmailConfig } from 'modules/email/email-store';\n\nconst formType = {\n LEADS: 'LEADS',\n CALENDAR: 'CALENDAR',\n};\nconst TaskContainer = styled.div`\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n row-gap: 12px;\n column-gap: 15px;\n align-items: flex-end;\n grid-template-areas:\n ${(props) => props.type === formType.CALENDAR && `'leads leads leads leads'`}\n 'title title title title'\n 'type date date date'\n 'assignedTo assignedTo assignedTo assignedTo'\n 'taskPriority taskPriority taskPriority taskPriority'\n 'description description description description';\n`;\n\nconst Title = styled(InputField)`\n grid-area: title;\n`;\nconst LeadsBox = styled.div`\n grid-area: leads;\n`;\nconst DateBox = styled.div`\n grid-area: date;\n`;\n\nconst AssignedTo = styled.div`\n grid-area: assignedTo;\n`;\nconst TaskPriority = styled.div`\n grid-area: taskPriority;\n`;\nconst Description = styled.div`\n grid-area: description;\n & textarea {\n height: 85px;\n }\n`;\n\nconst UserBoxLoader = styled.div`\n position: relative;\n box-sizing: border-box;\n border-radius: 5px;\n border: 1px dashed #d0d7dd;\n display: flex;\n justify-content: center;\n padding: 15px;\n margin-top: 15px;\n`;\n\nconst initialState = {\n users: [],\n leads: [],\n types: [],\n loading: false,\n};\n\nconst initialForm = {\n id: null,\n title: '',\n agents: [],\n users: [],\n date: undefined,\n priority: '',\n description: '',\n type: {},\n lead: {},\n};\n\nconst taskTypesReducer = ({ leadTaskTypesList }) => leadTaskTypesList.items;\nconst taskLeadsReducer = ({ leadsList }) => leadsList.items;\n\nconst TaskForm = ({\n onClose,\n isOpen,\n leadId,\n task,\n setLeadForTask,\n agents,\n type,\n onSuccess,\n date,\n leads,\n}) => {\n const hasAgents = Array.isArray(agents) && agents.length > 0;\n const hasLeads = Array.isArray(leads) && leads.length > 0;\n const initialFormState = task\n ? {\n ...task,\n users: task.users.items,\n agents: task.agents.items,\n type: task.type,\n }\n : initialForm;\n const [state, setState] = useState(() => {\n if (hasAgents) initialState.users = agents;\n return initialState;\n });\n\n const [form, setForm] = useState(() => {\n const taskDate = task?.date\n ? task.date\n : date\n ? moment(date.dateStr).format(_8baseDateFormat)\n : null;\n\n const form = {\n ...initialFormState,\n date: taskDate,\n search: '',\n };\n return form;\n });\n\n const [search, setSearch] = useState(form.search);\n\n const [user] = useUser();\n const agency = useAgency();\n const [config, setConfig] = useState(null);\n const [service, setService] = useState(null);\n\n const [taskTypes, loadingTaskTypes] = usePromise(() => fetchLeadTaskTypes(), {\n initialState: initialState.types,\n reducer: taskTypesReducer,\n });\n\n const [fetchedleads, loadingLeads] = usePromise(\n () => fetchUserLeads(user.id, agency.id, search),\n {\n skip: type !== formType.CALENDAR || hasLeads,\n initialState: initialState.leads,\n reducer: taskLeadsReducer,\n },\n [user.id, agency.id, type, search],\n );\n\n const [, loadingAgents] = usePromise(\n () => fetchAgents({ agency: agency.id }),\n {\n skip: hasAgents,\n onCompleted: ({ agentsList }) => {\n setState((currentState) => ({\n ...currentState,\n users: agentsList.items.map((item) => item.user),\n }));\n },\n },\n [agency.id],\n );\n const searchTimeout = useRef(undefined);\n\n useEffect(() => {\n if (searchTimeout.current) clearTimeout(searchTimeout.current);\n\n searchTimeout.current = setTimeout(() => {\n setSearch(form.search);\n }, 1500);\n }, [form.search]);\n\n const handleFormChange = (name, value) => setForm({ ...form, [name]: value });\n\n useEffect(() => {\n const newData = {};\n if (!form.type.id && taskTypes.length > 0) {\n newData.type = taskTypes[0];\n }\n if (!form.priority || form.priority === '') {\n newData.priority = PRIORITY_OPTIONS[0].value;\n }\n if ((!form.users.length || form.users.length <= 0) && state.users.length > 0) {\n newData.users = state.users.filter((item) => item.id === user.id);\n }\n if (Object.keys(newData).length > 0) {\n setForm((currentForm) => ({ ...currentForm, ...newData }));\n }\n }, [form.type, form.priority, form.users, taskTypes, state.users, user]);\n\n useEffect(() => {\n // If the agents props array gets updated set the users again\n if (hasAgents && state.users !== agents) {\n setState((current) => ({ ...current, users: agents }));\n }\n }, [agents, state.users, hasAgents]);\n\n const usedLeads = hasLeads ? leads : fetchedleads;\n\n const taskCreateHandler = async () => {\n setState((current) => ({ ...current, loading: true }));\n const leadID = form.lead.id || leadId;\n\n const selectedUsers = form.users.map((user) => user.id);\n\n const data = {\n id: task ? task.id : undefined,\n date: form.date\n ? moment(form.date).format(_8baseDateFormat)\n : moment().format(_8baseDateFormat),\n description: form.description,\n title: form.title,\n priority: form.priority,\n users: selectedUsers,\n type: form.type.id,\n };\n\n let result = null;\n\n if (task) {\n updateTask(data);\n } else {\n data.lead = leadID;\n\n createTask(data);\n }\n\n createNewEmail({\n to: user.email,\n cc: '',\n from: 'leadvolt-no-reply@8base.com',\n subject: form.title,\n body: form.description,\n attachments: [],\n agency: { id: agency.id },\n lead: {\n id: leadID || undefined,\n },\n user: { id: user.id },\n event: {\n start: form.date ? moment(form.date) : moment(),\n end: form.date ? moment(form.date).add(10, 'minutes') : moment().add(10, 'minutes'),\n summary: form.title,\n description: form.description,\n location: form.type.name,\n url: 'https://app.leadvolt.com/',\n organizer: {\n name: `${user.firstName} ${user.lastName}`,\n email: user.email,\n },\n },\n });\n\n return result;\n };\n\n const onFormSuccess = (result) => {\n setForm(initialForm);\n setLeadForTask();\n onSuccess(result);\n onClose();\n };\n\n useEventSubscription(onTaskCreate, () => {\n toast.success('Success', 'Task successfully created');\n setState((current) => ({ ...current, loading: false }));\n onFormSuccess();\n });\n\n useEventSubscription(\n OnFetchEmailConfig,\n ({ gmail, outlook, outbound }) => {\n if (gmail && gmail.active) {\n setService(gmail);\n setConfig('GMAIL');\n } else if (outlook && outlook.active) {\n setService(outlook);\n setConfig('OUTLOOK');\n } else {\n setService(outbound);\n setConfig('MANUAL');\n }\n },\n [],\n );\n\n useEventSubscription(onTaskUpdateEvent, () => {\n toast.success('Success', 'Task successfully updated');\n setState((current) => ({ ...current, loading: false }));\n onFormSuccess();\n });\n\n useEventSubscription(OnTaskError, (err) => {\n onErrorMixinFC(err);\n setState((current) => ({ ...current, loading: false }));\n });\n\n return (\n \n \n {type === formType.CALENDAR && (\n \n handleFormChange('search', value),\n }}\n />\n {loadingLeads ? (\n \n \n \n ) : (\n <>\n {\n handleFormChange(\n 'lead',\n usedLeads.find((lead) => lead.id === selectedLead),\n );\n },\n }}\n options={usedLeads.map((lead) => ({\n value: lead.id,\n label: `${lead.firstName} ${lead.lastName}`,\n }))}\n placeholder={''}\n disabled={loadingLeads || task}\n />\n >\n )}\n \n )}\n\n handleFormChange('title', value),\n }}\n />\n {\n handleFormChange(\n 'type',\n taskTypes.find((type) => type.id === selectedType),\n );\n },\n }}\n options={taskTypes.map((type) => ({ value: type.id, label: type.name }))}\n placeholder={''}\n disabled={loadingTaskTypes}\n />\n \n handleFormChange('date', value),\n }}\n />\n \n \n \n \n \n {loadingAgents || form.users.length === 0 ? (\n \n \n \n ) : (\n {\n if (!users) {\n toast.error(`Can't remove this user, select other user first.`);\n }\n handleFormChange('users', users ? users : []);\n }}\n defaultValue={mapUserToMultipleSelect(form.users)}\n options={mapUserToMultipleSelect(state.users)}\n />\n )}\n \n \n \n handleFormChange('priority', findPriority(value, PRIORITY_OPTIONS)),\n }}\n options={priorityMap(PRIORITY_OPTIONS)}\n placeholder={''}\n />\n \n \n handleFormChange('description', value),\n }}\n />\n \n \n \n );\n};\n\nTaskForm.propTypes = {\n date: PropTypes.object,\n agents: PropTypes.array,\n leads: PropTypes.array,\n task: PropTypes.shape({\n id: PropTypes.number.isRequired,\n type: PropTypes.object.isRequired,\n users: PropTypes.arrayOf(\n PropTypes.shape({\n items: PropTypes.array.isRequired,\n }).isRequired,\n ).isRequired,\n agents: PropTypes.arrayOf(\n PropTypes.shape({\n items: PropTypes.array.isRequired,\n }).isRequired,\n ).isRequired,\n date: PropTypes.string.isRequired,\n }),\n onClose: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n leadId: PropTypes.string,\n setLeadForTask: PropTypes.func,\n type: PropTypes.string,\n onSuccess: PropTypes.func,\n};\n\nTaskForm.defaultProps = {\n task: null,\n leadId: '',\n leadField: false,\n type: 'CALENDAR',\n agents: [],\n setLeadForTask: () => {},\n onSuccess: () => {},\n date: null,\n leads: null,\n};\n\nexport default TaskForm;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Card as BaseCard,\n Button,\n Row,\n Heading,\n Icon,\n InputField,\n SelectField,\n DateInputField,\n TextAreaField,\n} from '@8base/boost';\nimport styled from 'styled-components';\nimport TaskForm from '../../leads/components/forms/TaskForm';\nimport { useLeadStages } from '../phone-calls-hooks';\nimport { parseListToSelectOptions } from '../phone-calls-utils';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as toast from 'shared/components/toast/Toast';\nimport { createLeadDisposition, fetchLeadDataService } from '../phone-calls-actions';\nimport { removeEmptyKeys } from '../../../shared/utils';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { usePromise } from '@cobuildlab/hooks-utils';\nimport { CALL_TYPES } from '../phone-calls-model';\nimport { onLeadDispositionCreate, onLeadDispositionCreateError } from '../phone-calls-events';\n\nconst Card = styled(BaseCard)`\n box-shadow: none !important;\n border-left: none !important;\n`;\n\n/**\n * @param {object} props props\n * @param {Function} props.close close callback\n * @param {string} props.lead Lead id\n * @returns {object} React Component\n */\nfunction LeadCallForm({ close, lead, callId, calling, callType }) {\n const [addTaskModal, setAddTaskModal] = useState(false);\n const [loading, setLoading] = useState(false);\n const { ifsScore } = useAgency();\n const [form, setForm] = useState({\n carrier: '',\n quotedPremium: '',\n currentPremium: '',\n status: '',\n expirationDate: '',\n ifsScore: '',\n insurance: '',\n notes: '',\n amount: parseFloat(0),\n });\n\n const handleChange = useCallback((type, value) => {\n setForm((state) => ({ ...state, [type]: value }));\n }, []);\n\n const [leadStagesList] = useLeadStages();\n\n const statusOptions = parseListToSelectOptions(leadStagesList);\n const scoresOptions = parseListToSelectOptions(ifsScore);\n const defaultStatus = statusOptions[0]?.value;\n const defaultScore = scoresOptions[0]?.value;\n\n usePromise(\n () => fetchLeadDataService(lead),\n {\n onError: (e) => {\n toast.error(JSON.stringify(e));\n },\n onCompleted: (lead) => {\n setForm((state) => ({ ...state, amount: parseFloat(lead.amount) }));\n },\n },\n [lead],\n );\n\n useEffect(() => {\n setForm((state) => ({ ...state, status: defaultStatus, ifsScore: defaultScore }));\n }, [defaultScore, defaultStatus]);\n\n const submitForm = useCallback(() => {\n setLoading(true);\n const newForm = removeEmptyKeys(form);\n\n createLeadDisposition({ ...newForm, lead, callId, callType, amount: String(newForm?.amount || 0) });\n }, [form, lead, callId, callType]);\n\n useEventSubscription(onLeadDispositionCreate, () => {\n setLoading(false);\n\n toast.success('Success', 'Lead disposition stored successfuly');\n\n close();\n });\n\n useEventSubscription(onLeadDispositionCreateError, (e) => {\n setLoading(false);\n toast.error(JSON.stringify(e));\n });\n\n return (\n <>\n \n \n \n Update Lead Information\n \n \n \n \n \n \n \n handleChange('carrier', value) }}\n />\n \n \n handleChange('currentPremium', value),\n }}\n />\n \n \n handleChange('quotedPremium', value),\n }}\n />\n \n \n handleChange('status', value),\n }}\n />\n \n \n handleChange('amount', parseFloat(value)),\n }}\n />\n \n \n setAddTaskModal(true)}>\n +Add task\n \n \n \n handleChange('expirationDate', value),\n }}\n />\n \n \n handleChange('ifsScore', value),\n }}\n />\n \n \n handleChange('insurance', value),\n }}\n />\n \n \n handleChange('notes', value),\n }}\n stretch\n />\n \n \n \n \n \n Update info\n \n \n \n \n setAddTaskModal(false)}\n leadId={lead}\n type={'LEADS'}\n />\n >\n );\n}\n\nLeadCallForm.propTypes = {\n close: PropTypes.func.isRequired,\n lead: PropTypes.string.isRequired,\n callId: PropTypes.string.isRequired,\n calling: PropTypes.bool.isRequired,\n callType: PropTypes.oneOf([CALL_TYPES.OUTBOUND, CALL_TYPES.INBOUND]).isRequired,\n};\n\nexport default LeadCallForm;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnUsersInAgencyFetch = createEvent();\n\nexport const OnUsersInAgencyFetchError = createEvent();\n\nexport const OnFetchAgents = createEvent();\n\nexport const OnFetchAgentsError = createEvent();\n\nexport const OnFetchManagerAndAgentUsersEvent = createEvent();\n\nexport const OnFetchManagerAndAgentUsersError = createEvent();\n\nexport const OnAdminDeletedEvent = createEvent();\n\nexport const OnAdminDeletedError = createEvent();\n","import gql from 'graphql-tag';\n\nexport const FETCH_USERS = gql`\n query FetchUsers(\n $filter: UserFilter\n $first: Int\n $skip: Int\n $orderBy: [UserOrderBy]\n $sort: [UserSort!]\n ) {\n usersList(filter: $filter, first: $first, skip: $skip, orderBy: $orderBy, sort: $sort) {\n count\n items {\n id\n firstName\n lastName\n email\n avatar {\n id\n downloadUrl\n }\n }\n }\n }\n`;\n\nexport const MUTATION_DELETE_ADMIN = gql`\n mutation DeleteAdmin($data: AdminDeleteInput, $filter: AdminKeyFilter, $force: Boolean) {\n adminDelete(data: $data, filter: $filter, force: $force) {\n success\n }\n }\n`;\n\nexport const FETCH_USER_INFORMATION = gql`\n query FetchUsersInformation($userId: ID, $agencyId: ID, $from: DateTime, $to: DateTime) {\n leadsList(\n filter: {\n assignees: { some: { id: { equals: $userId } } }\n campaign: { agency: { id: { equals: $agencyId } } }\n history: {\n some: {\n AND: [\n { createdAt: { gte: $from } }\n { createdAt: { lte: $to } }\n { stage: { name: { equals: \"Sold\" } } }\n ]\n }\n }\n }\n groupBy: { query: { amount: { as: \"amount\", fn: { aggregate: SUM } } } }\n ) {\n groups {\n amount: String\n }\n }\n phoneCallsList(\n filter: {\n AND: [\n { status: { equals: \"completed\" } }\n { user: { id: { equals: $userId } } }\n { agency: { id: { equals: $agencyId } } }\n { createdAt: { gte: $from } }\n { createdAt: { lte: $to } }\n ]\n }\n groupBy: { query: { duration: { as: \"duration\", fn: { aggregate: SUM } } } }\n ) {\n groups {\n duration: Int\n }\n }\n sMSMessagesList(\n filter: {\n AND: [\n { user: { id: { equals: $userId } } }\n { lead: { campaign: { agency: { id: { equals: $agencyId } } } } }\n { createdAt: { gte: $from } }\n { createdAt: { lte: $to } }\n ]\n }\n ) {\n count\n }\n leadTasksList(\n filter: {\n AND: [\n { lead: { campaign: { agency: { id: { equals: $agencyId } } } } }\n { lead: { assignees: { some: { id: { equals: $userId } } } } }\n { createdAt: { gte: $from } }\n { createdAt: { lte: $to } }\n ]\n }\n ) {\n count\n }\n leadHistoriesList(\n filter: {\n AND: [\n { entity: { equals: \"TASK\" } }\n { operation: { equals: \"UPDATE\" } }\n { task: { status: { equals: \"Closed\" } } }\n { lead: { assignees: { some: { id: { equals: $userId } } } } }\n { lead: { campaign: { agency: { id: { equals: $agencyId } } } } }\n { createdAt: { gte: $from } }\n { createdAt: { lte: $to } }\n ]\n }\n groupBy: { query: { task: { id: { as: \"count\", fn: { aggregate: COUNT } } } } }\n ) {\n groups {\n count: Int\n }\n }\n }\n`;\n\nexport const CREATE_STRIPE_CUSTOMER = gql`\n mutation CreateStripeCustomer($data: CreateStripeCustomerInput) {\n createStripeCustomer(data: $data) {\n id\n email\n name\n phone\n metadata\n }\n }\n`;\n","import {\n OnAdminDeletedError,\n OnAdminDeletedEvent,\n OnFetchAgents,\n OnFetchAgentsError,\n OnFetchManagerAndAgentUsersError,\n OnFetchManagerAndAgentUsersEvent,\n OnUsersInAgencyFetch,\n OnUsersInAgencyFetchError,\n} from './user-events';\nimport { MUTATION_DELETE_ADMIN, FETCH_USERS, FETCH_USER_INFORMATION } from './user-queries';\nimport { log, error } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../shared/session/session-events';\nimport { createAction } from '@cobuildlab/react-simple-state';\n\n/**\n * @deprecated - use \"fetchAgencyAgents\" instead\n *\n * Fetches users with the rol manager or agents in the given agency\n *\n * @param {number} agencyId - Id of the agency to bring the users from\n *\n * @returns {object} - The response object or null if it fails\n */\nexport const fetchManagerAndAgents = async (agencyId) => {\n const client = OnApolloClient.get();\n let response = null;\n\n const filter = {\n userAgencyUserRelation: {\n some: {\n agency: { id: { equals: agencyId } },\n },\n },\n };\n\n try {\n response = await client.query({\n query: FETCH_USERS,\n fetchPolicy: 'network-only',\n variables: { filter },\n });\n } catch (e) {\n error('fetchManagerAndAgents', e);\n\n return OnFetchManagerAndAgentUsersError.dispatch(e);\n }\n\n log('fetchManagerAndAgents', response.data);\n OnFetchManagerAndAgentUsersEvent.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Fetches all users in an agency\n *\n * @param {string} agency - The agency id\n *\n * @returns {Promise} The request result\n */\nexport const fetchAgencyAgents = createAction(OnFetchAgents, OnFetchAgentsError, async (agency) => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_USERS,\n variables: {\n filter: {\n userAgencyUserRelation: {\n some: {\n agency: {\n id: {\n equals: agency,\n },\n },\n },\n },\n },\n },\n });\n\n return response.data;\n});\n\n/**\n * Fetches users that belongs to an agency\n *\n * @param {string} agencyId - The agency id\n * @param {number} page - The page to fetch the users\n * @param {string} search - The search value\n *\n * @returns {Promise} The request result\n */\nexport const fetchUsersInAgency = async (agencyId, page = 1, search = '') => {\n const client = OnApolloClient.get();\n let response = null;\n\n const filter = {\n userAgencyUserRelation: {\n some: {\n agency: { id: { equals: agencyId } },\n },\n },\n };\n\n if (search !== '') {\n filter.OR = [{ firstName: { contains: search } }, { lastName: { contains: search } }];\n }\n\n const first = 10;\n const skip = page === 0 ? 0 : first * (page - 1);\n const orderBy = 'createdAt_DESC';\n\n try {\n response = await client.query({\n query: FETCH_USERS,\n fetchPolicy: 'network-only',\n variables: page === 0 ? { filter, orderBy } : { filter, first, skip, orderBy },\n });\n } catch (e) {\n error('fetchUsersInAgency', e);\n\n return OnUsersInAgencyFetchError.dispatch(e);\n }\n\n log('fetchUsersInAgency', response.data);\n\n return OnUsersInAgencyFetch.dispatch(response.data);\n};\n\n/**\n * Deletes the given admin from the db\n *\n * @param {object} admin - The admin to remove\n *\n * @returns {void}\n */\nexport const removeAdminFromCompany = async (admin) => {\n const client = OnApolloClient.get();\n const variables = { filter: { id: admin.id }, force: true };\n\n let response;\n try {\n response = await client.mutate({\n mutation: MUTATION_DELETE_ADMIN,\n variables,\n });\n } catch (e) {\n error('deleteAdminError', e);\n return OnAdminDeletedError.dispatch(e);\n }\n\n log('deleteAdmin', response.data);\n OnAdminDeletedEvent.dispatch(response.data);\n return response.data;\n};\n\nexport const fetchUserInfoInAgency = async (id, agencyId, from, to) => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_USER_INFORMATION,\n fetchPolicy: 'network-only',\n variables: {\n userId: id,\n agencyId,\n from,\n to,\n },\n });\n\n log('fetchUserInfoInAgency', response.data);\n\n return response.data;\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport { useEvent, useSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchUsersInAgency } from './user-actions';\nimport { OnUsersInAgencyFetch, OnUsersInAgencyFetchError } from './user-events';\nimport { onErrorMixinFC } from '../../shared/mixins';\nimport { LIST_INITIAL_STATE } from '../../shared/constants';\nimport { onOnlineUsersList } from '../phone-calls/phone-calls-events';\nimport { useUser } from '../../shared/hooks/useUser';\n\n/**\n * Hook to fetch the users in the specified agency\n *\n * @param agency - The agency id\n * @param page - The page to fetch the users from\n * @param search - The search value\n *\n * @returns The hook state\n */\nexport function useUsersInAgency(\n agency: string,\n page = 1,\n search = '',\n): State & { refetch: () => void } {\n const [state, setState] = useState(LIST_INITIAL_STATE);\n\n const fetch = useCallback(() => {\n setState((state) => ({\n ...state,\n loading: true,\n }));\n\n fetchUsersInAgency(agency, page, search);\n }, [agency, page, search]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n useSubscription(\n OnUsersInAgencyFetch,\n ({ usersList }) => {\n setState((state) => ({\n ...state,\n loading: false,\n items: usersList.items,\n count: usersList.count,\n }));\n },\n [],\n );\n\n useSubscription(\n OnUsersInAgencyFetchError,\n (e) => {\n onErrorMixinFC(e);\n setState((state) => ({\n ...state,\n error: e,\n loading: false,\n items: [],\n count: 0,\n }));\n },\n [],\n );\n\n return {\n ...state,\n refetch: fetch,\n };\n}\n\n/**\n * Hook to fetch the users in the specified agency\n * whenever the user wants\n *\n * @param agency - The agency id\n * @param page - The page to fetch the users from\n *\n * @returns The hook state\n */\nexport function useUsersInAgencyLater(agency: string, page = 1): State & { fetch: () => void } {\n const [state, setState] = useState(LIST_INITIAL_STATE);\n\n const fetch = useCallback(() => {\n setState((state) => ({\n ...state,\n loading: true,\n }));\n\n fetchUsersInAgency(agency, page);\n }, [agency, page]);\n\n useSubscription(\n OnUsersInAgencyFetch,\n ({ usersList }) => {\n setState((state) => ({\n ...state,\n loading: false,\n items: usersList.items,\n count: usersList.count,\n }));\n },\n [],\n );\n\n useSubscription(\n OnUsersInAgencyFetchError,\n (e) => {\n onErrorMixinFC(e);\n setState((state) => ({\n ...state,\n error: e,\n loading: false,\n items: [],\n count: 0,\n }));\n },\n [],\n );\n\n return {\n ...state,\n fetch,\n };\n}\n\n/**\n * Hook that returns the list of online users\n *\n * @returns Online users list\n */\nexport function useOnlineUsers(): Array {\n const [user] = useUser();\n const userList = useEvent(onOnlineUsersList, {\n initialValue: [],\n });\n\n return userList.filter((onlineUser: { id: string }) => onlineUser.id !== user?.id);\n}\n\ntype State = {\n items: Array>;\n count: number;\n loading: boolean;\n};\n\ntype User = {\n id: string;\n firstName: string;\n lastName: string;\n};\n","import React, { useCallback, useMemo } from 'react';\nimport AvatarWithStatus from '../../../shared/components/AvatarWithStatus';\nimport PropTypes from 'prop-types';\nimport { Row, Card, Checkbox, Text } from '@8base/boost';\n\n/**\n * User card with status and avatar icon\n *\n * @param {object} props - Props.\n * @param {object} props.user - User data.\n * @returns {React.FC} - React component.\n */\nexport default function UserCard({ user, selected, setSelected }) {\n const onChange = useCallback(\n (value) => {\n if (value) {\n setSelected((prevState) => [...prevState, user.id]);\n } else {\n setSelected((prevState) => prevState.filter((id) => id !== user.id));\n }\n },\n [user, setSelected],\n );\n\n const isSelected = useMemo(() => selected?.some((id) => id === user.id) || false, [\n user,\n selected,\n ]);\n\n return (\n \n \n \n \n \n {`${user.firstName} ${user.lastName}`}\n \n \n \n );\n}\n\nUserCard.propTypes = {\n user: PropTypes.shape({\n id: PropTypes.string.isRequired,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n status: PropTypes.string.isRequired,\n avatar: PropTypes.shape({\n downloadUrl: PropTypes.string,\n }),\n }).isRequired,\n selected: PropTypes.arrayOf(PropTypes.string).isRequired,\n setSelected: PropTypes.func.isRequired,\n};\n","import React from 'react';\nimport { Card, Row, Text, Icon, Checkbox } from '@8base/boost';\nimport PropTypes from 'prop-types';\n\nexport const PhoneCard = ({ code, number, onRemove }) => {\n return (\n \n \n \n \n \n \n +{code} {number}\n \n \n onRemove({ code, number })}\n />\n \n \n \n );\n};\n\nPhoneCard.propTypes = {\n code: PropTypes.string.isRequired,\n number: PropTypes.string.isRequired,\n onRemove: PropTypes.func.isRequired,\n};\n","import React, { useCallback, useMemo, useState } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport {\n Modal,\n Text,\n Row,\n useModal,\n Column,\n Icon as BoostIcon,\n Select,\n Input,\n styled,\n} from '@8base/boost';\nimport { onTransferCall, onTransferCallError } from '../phone-calls-events';\nimport { Box } from '../../../shared/components/Box';\nimport { ControlButton } from './ControlButton';\nimport transferIcon from 'shared/assets/images/trasnfer.svg';\nimport { useOnlineUsers } from '../../users/users-hooks';\nimport { transferCall } from '../phone-calls-actions';\nimport UserCard from '../../users/components/UserCard';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { PhoneCard } from './PhoneCard';\nimport * as toast from '../../../shared/components/toast/Toast';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\n\nexport const modalId = 'transfer-call-dialog';\n\nconst Card = styled.div`\n background-color: var(--color-blue-3);\n border-radius: 10px;\n width: 380px;\n color: white;\n`;\n\nconst Close = styled.span`\n height: 24px;\n background-color: #ff2a25;\n border-radius: 50%;\n`;\n\nconst Icon = styled.img`\n height: 1.5em;\n`;\n\nconst phoneUtil = PhoneNumberUtil.getInstance();\n\nexport const TransferCallDialog = () => {\n const { isOpen, closeModal, args } = useModal(modalId);\n const [selected, setSelected] = useState([]);\n const [loading, setLoading] = useState(false);\n const [region, setRegion] = useState('US');\n const [number, setNumber] = useState('');\n const online = useOnlineUsers();\n const [phones, setPhones] = useState([]);\n\n const close = useCallback(() => closeModal(modalId), [closeModal]);\n\n const onChange = useCallback(\n (args) => {\n if (!loading) {\n setSelected(args);\n }\n },\n [loading, setSelected],\n );\n\n const onAddPhoneNumber = useCallback(() => {\n if (region && number.length > 1) {\n let phone = null;\n\n try {\n phone = phoneUtil.parse(number, region);\n } catch (e) {\n toast.error('The phone number you entered is not valid');\n\n return;\n }\n\n // If the phone number is already added\n if (phones.some((p) => p.number === phone.getNationalNumber())) {\n toast.error('You already entered this phone number');\n\n return;\n }\n\n // If the phone number is valid\n if (phoneUtil.isPossibleNumber(phone) && phoneUtil.isValidNumber(phone)) {\n setPhones((prevState) => [\n ...prevState,\n {\n code: phone.getCountryCode().toString(),\n number: phone.getNationalNumber().toString(),\n },\n ]);\n\n setNumber('');\n } else {\n toast.error('The phone number you entered is not valid');\n }\n }\n }, [phones, region, number]);\n\n const onRemovePhoneNumber = useCallback((phone) => {\n setPhones((prevState) => prevState.filter((p) => p.number !== phone.number));\n }, []);\n\n const onSubmit = useCallback(() => {\n setLoading(true);\n\n transferCall(selected, phones, args.callId, args.callType);\n }, [selected, phones, args]);\n\n useSubscription(\n onTransferCall,\n () => {\n setLoading(false);\n\n toast.success('Success', 'Transferring call to the selected users');\n\n closeModal(modalId);\n },\n [],\n );\n\n useSubscription(\n onTransferCallError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const users = useMemo(\n () =>\n online.map((user) => (\n \n )),\n [selected, online, onChange],\n );\n\n const numbers = useMemo(\n () =>\n phones.map((phone) => (\n \n )),\n [phones, onRemovePhoneNumber],\n );\n\n return (\n \n \n \n \n \n \n Select users to join the call\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {numbers}\n {users}\n \n \n \n \n \n Transfer\n \n \n \n \n \n );\n};\n","import React, { useCallback } from 'react';\nimport { styled, useModal } from '@8base/boost';\nimport { ControlButton } from './ControlButton';\nimport PropTypes from 'prop-types';\n\nimport transferIcon from 'shared/assets/images/trasnfer.svg';\n\nimport { TransferCallDialog, modalId } from './TransferCallDialog';\n\nconst Icon = styled.img`\n height: 1.5em;\n`;\n\nexport const TransferCallButton = ({ callId, callType }) => {\n const { openModal } = useModal(modalId);\n\n const onClick = useCallback(() => {\n openModal(modalId, { callId, callType });\n }, [callId, callType, openModal]);\n\n return (\n <>\n \n Transfer\n \n \n >\n );\n};\n\nTransferCallButton.propTypes = {\n callId: PropTypes.string,\n callType: PropTypes.string,\n};\n\nTransferCallButton.defaultProps = {\n callId: '',\n callType: '',\n};\n","import React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { keyframes, css } from 'styled-components';\nimport { Transition } from 'react-transition-group';\nimport { Button, Column } from '@8base/boost';\nimport VoiceMailButton from './VoiceMailButton';\nimport { usePhoneCallControls } from '../phone-calls-hooks';\nimport ControlsPortal from './ControlsPortal';\nimport CallInfo from './CallInfo';\nimport DialPad from './DialPad';\nimport LeadCallForm from './LeadCallForm';\nimport * as toast from 'shared/components/toast/Toast';\nimport { TransferCallButton } from './TransferCallButton';\nimport { Box } from '../../../shared/components/Box';\nimport { ControlButton } from './ControlButton';\nimport { OnApolloClient, OnSessionFetch } from 'shared/session/session-events';\nimport { PHONE_CALL_PARTICIPANT_SUBSCRIPTION } from '../phone-calls-querys';\nimport { useEffect, useState } from 'react';\n\nconst slideIn = keyframes`\n0% {\n transform: translateX(100%);\n}\n100% {\n transform: translateX(0);\n}\n`;\nconst slideOut = keyframes`\n0% {\n transform: translateX(0);\n}\n100% {\n transform: translateX(100%);\n}\n`;\n\nconst animateSlideInOut = css`\n animation: 0.6s\n ${({ state }) => {\n switch (state) {\n case 'entering':\n return slideIn;\n case 'exiting':\n return slideOut;\n default:\n return '';\n }\n }}\n ease-in-out;\n`;\n\nconst Container = styled.div`\n bottom: 0;\n right: 0;\n height: 100vh;\n position: fixed;\n max-width: 320px;\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: 1fr auto;\n grid-template-areas: '.' 'controls';\n box-shadow: ${({ isLead }) => (isLead ? '-5px 0 15px rgba(0,0,0,0.1)' : `initial`)};\n z-index: 100;\n ${animateSlideInOut}\n`;\nconst Controls = styled(Column)`\n border-top-left-radius: ${({ isLead }) => (isLead ? '0px' : '10px')};\n background-color: var(--color-blue-3);\n grid-area: controls;\n padding: 20px;\n color: white;\n /* width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n z-index: 1;\n & > * {\n margin: 5px;\n } */\n`;\n\nconst Icon = styled.img`\n height: 1.5em;\n`;\n\nconst muteIconUrl = require('shared/assets/images/mute.svg');\nconst padIconUrl = require('shared/assets/images/fax.svg');\nconst hangupIconUrl = require('shared/assets/images/hangup.svg');\nconst callPhoneIconUrl = require('shared/assets/images/call-phone.svg');\n\n/**\n * Render the controls in fixed position (right-side) on the viewport\n * this component use the value ot the phone call provider to handle the actions of call (hangup, transfer, mute etc.)\n *\n * @param {object} props props\n * @param {Function} props.animateBack Callback set the layout anamation to the initial state\n * @returns {object} React element\n */\nfunction CallControls({ animateBack }) {\n const {\n // Values\n show,\n duration,\n from,\n to,\n lead,\n calling,\n type,\n _type,\n callId,\n campaign,\n ringing,\n muted,\n showDialPad,\n // Methods\n muteToggle,\n handleVoiceMail,\n handleVoiceMailEnded,\n handleHangUp,\n close,\n acceptCall,\n ignoreCall,\n rejectCall,\n toggleDialPad,\n closeDialPad,\n sendDialDigit,\n } = usePhoneCallControls();\n\n const [displayToast, setDisplayToast] = useState(false);\n\n const { user } = OnSessionFetch.get() || {};\n\n const closeCallback = useCallback(() => {\n if (calling && lead) {\n toast.error('Please hang up the call before closing this panel');\n return;\n }\n console.log('Call dialog closed');\n\n animateBack();\n close();\n }, [animateBack, close, calling, lead]);\n\n useEffect(() => {\n //handle the toast display here, rather than inside the subscription, b/c that causes multiple toasts to appear\n if (displayToast) {\n toast.info('You were removed from the conference because another agent was already in it');\n }\n }, [displayToast]);\n\n useEffect(() => {\n let timeoutId;\n if (displayToast) {\n timeoutId = setTimeout(() => {\n setDisplayToast(false);\n }, 5000); // Reset flag after 5 seconds\n }\n\n return () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n }, [displayToast]);\n\n useEffect(() => {\n try {\n const client = OnApolloClient.get();\n const phoneCallParticipantSubscription = client.subscribe({\n query: PHONE_CALL_PARTICIPANT_SUBSCRIPTION,\n variables: {\n userId: user.id,\n },\n });\n\n const phoneCallParticipantSubscriptionCallback = phoneCallParticipantSubscription.subscribe(\n ({ data }) => {\n if (data.PhoneCallParticipant.node.wasRemovedFromCall) {\n setDisplayToast(true);\n }\n },\n );\n\n return () => {\n phoneCallParticipantSubscriptionCallback.unsubscribe();\n setDisplayToast(false);\n };\n } catch (error) {\n console.error('Error in phoneCallParticipantSubscription useEffect:', error);\n }\n }, []);\n\n return (\n \n \n {(state) => (\n <>\n \n \n {lead && (\n \n )}\n \n \n \n \n \n \n \n {muted ? 'Unmute' : 'Mute'}\n \n \n \n \n \n \n \n \n \n \n Pad\n \n \n \n \n \n \n {ringing && (\n <>\n \n Ignore\n \n acceptCall(lead)}\n disabled={!calling}>\n accept\n \n \n Reject\n \n >\n )}\n\n {!ringing && (\n \n Hangup\n \n )}\n \n {' '}\n >\n )}\n \n \n );\n}\n\nCallControls.propTypes = {\n animateBack: PropTypes.func.isRequired,\n};\nexport default CallControls;\n","import { useEffect, useState } from 'react';\nimport { useUser } from 'shared/hooks/useUser';\nimport { createUserPushSubscription } from '../notifications-actions';\n\nexport function usePushNotifications() {\n const [status, setStatus] = useState('');\n const [user] = useUser();\n const WEB_PUSH_PUBLIC_KEY: string = process.env.REACT_APP_WEB_PUSH_PUBLIC_KEY as string;\n\n useEffect(() => {\n //console.log('executing usePushNotifications');\n if ('serviceWorker' in navigator && 'PushManager' in window && 'Notification' in window) {\n //console.log('stuff is there');\n const promise = new Promise((resolve, reject) => {\n const permission = Notification.requestPermission((result) => {\n resolve(result);\n });\n\n if (permission) {\n permission.then(resolve, reject);\n }\n });\n\n promise.then((result) => setStatus(result));\n }\n }, []);\n\n useEffect(() => {\n if (status === 'granted') {\n console.log('status', status);\n (async () => {\n const registration = await navigator.serviceWorker.ready;\n let pushSubscription;\n //console.log('react app server key', process.env.WEB_PUSH_PUBLIC_KEY);\n const actualSub = await registration.pushManager.getSubscription();\n console.log('ACTUAL SUB ', actualSub);\n if (!actualSub) {\n console.log('there is no subscription, creating a new one');\n pushSubscription = await registration.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(\n WEB_PUSH_PUBLIC_KEY, //create a WEB_PUSH_PUBLIC_KEY env variable\n ),\n });\n const metadata = JSON.parse(JSON.stringify(pushSubscription));\n createUserPushSubscription({\n endpoint: pushSubscription.endpoint,\n user: user.id,\n metadata: {\n keys: metadata.keys,\n },\n });\n }\n })();\n }\n }, [status, user]);\n\n return status;\n}\n\n/**\n * urlBase64ToUint8Array\n *\n * @param base64String - A public vavid key\n */\nfunction urlBase64ToUint8Array(base64String: string): Uint8Array {\n var padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n // eslint-disable-next-line no-useless-escape\n var base64 = (base64String + padding).replace(/\\-/g, '+').replace(/_/g, '/');\n\n var rawData = window.atob(base64);\n var outputArray = new Uint8Array(rawData.length);\n\n for (var i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n","import React, { useState, useCallback, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport TopBar from './TopBar';\nimport Menu from './Menu';\nimport styled, { keyframes, css } from 'styled-components';\nimport Breadcrumbs from './Breadcrumbs';\nimport CallControls from '../../modules/phone-calls/Components/CallControls';\nimport { Transition } from 'react-transition-group';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport { Loader } from 'shared/components';\nimport { getActiveAgency, setActiveAgency } from '../utils/agency-utils';\nimport { useAgency } from '../hooks/useAgency';\nimport { OnSessionFetch } from '../session/session-events';\nimport { usePushNotifications } from 'modules/notifications/hooks/usePushNotifications';\nimport { OnPhoneCallRegistryEvent } from 'modules/phone-calls/phone-calls-events';\n\nconst moveLeft = keyframes`\n 0% {\n width: calc(100%)\n }\n 100% {\n width: calc(100% - 320px)\n }\n`;\nconst moveRight = keyframes`\n 0% {\n width: calc(100% - 320px)\n }\n 100% {\n width: calc(100%)\n }\n`;\nconst left = css`\n width: calc(100% - 320px);\n`;\nconst animateToLeft = css`\n animation: 0.6s\n ${({ state }) => {\n switch (state) {\n case 'entering':\n return moveLeft;\n case 'exiting':\n return moveRight;\n case 'entered':\n return left;\n default:\n return '';\n }\n }}\n ease-in-out;\n`;\nconst LayoutContainer = styled.div`\n position: relative;\n ${animateToLeft}\n`;\n\nconst LayoutContent = styled.div`\n width: calc(100% - 56px);\n margin-left: 56px;\n`;\n\nconst Layout = ({ children }) => {\n const agency = useAgency();\n const [show, setShow] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [agencyId, setAgencyId] = useState(agency?.id);\n\n usePushNotifications();\n\n useSimpleSubscription(OnPhoneCallRegistryEvent, ({ phoneCallCreate: { lead } }) => {\n if (lead) {\n setTimeout(() => {\n setShow(true);\n }, 0);\n }\n });\n\n useSimpleSubscription(\n OnSessionFetch,\n () => {\n if (isLoading) {\n setIsLoading(false);\n }\n },\n [isLoading],\n );\n\n const handleOnChangeAgency = async (agencyId) => {\n setIsLoading(true);\n await setActiveAgency(agencyId);\n window.location.reload();\n };\n\n useEffect(() => {\n if (agencyId === '') {\n const agency = getActiveAgency();\n if (agency) setAgencyId(agency.id);\n }\n }, [agencyId, isLoading]);\n\n const animateBack = useCallback(() => setShow(false), []);\n\n let childrenLayout;\n if (isLoading) {\n childrenLayout = ;\n } else {\n childrenLayout = children;\n }\n\n return (\n <>\n \n {(state) => (\n \n {agency && (\n \n )}\n \n \n \n {childrenLayout}\n \n \n )}\n \n\n \n >\n );\n};\n\nLayout.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nexport default Layout;\n","import React from 'react';\nimport { withAuth } from '@8base/app-provider';\nimport { Route, Redirect } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\n\n/**\n * Depending on the props available, the rendered component\n * must be handled appropriately and then returned.\n *\n * @param {object} props - The router match props object\n *\n * @returns {React.Component} The component to render\n */\nconst renderComponent = (props) => {\n const { render, children, component, ...restProps } = props;\n\n let rendered = null;\n\n if (component) {\n rendered = React.createElement(component, { ...restProps }, children);\n }\n\n if (render) {\n rendered = render({ ...restProps, children });\n }\n\n if (typeof children === 'function') {\n rendered = children(restProps);\n } else if (children) {\n rendered = children;\n } else if (!rendered) {\n throw new Error(\n 'Error: must specify either a render prop, a render function as children, or a component prop.',\n );\n }\n\n return rendered;\n};\n\nclass ProtectedRoute extends React.Component {\n renderRoute = () => {\n const {\n auth: { isAuthorized },\n ...restProps\n } = this.props;\n\n if (isAuthorized) {\n return renderComponent(restProps);\n }\n /**\n * If the user should be redirected to a different path when not authorized, add\n * that route as the redirect's pathname.\n */\n return ;\n };\n\n render() {\n const { children, component, render, ...rProps } = this.props;\n\n return ;\n }\n}\n\nProtectedRoute.propTypes = {\n auth: PropTypes.shape({\n isAuthorized: PropTypes.bool.isRequired,\n }).isRequired,\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n component: PropTypes.elementType,\n render: PropTypes.func,\n};\n\nProtectedRoute.defaultProps = {\n children: undefined,\n component: undefined,\n render: undefined,\n};\n\nexport default withAuth(ProtectedRoute);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from '@8base/boost';\nimport styled from 'styled-components';\n\nconst StyledBtn = styled(Button)`\n height: 40px;\n width: 159px;\n border-radius: 4px;\n box-sizing: border-box;\n ${({ type }) => {\n switch (type) {\n case 'danger':\n return `\n border: 1px solid #ff0000 !important;\n background-color: #ff0000 !important; \n `;\n case 'success':\n return `\n border: 1px solid #3db4aa !important;\n background-color: #3db4aa !important; \n `;\n default:\n return `\n border: 1px solid #ff0000 !important;\n background-color: #ff0000 !important; \n `;\n }\n }}\n`;\n\nconst DeleteBtn = ({ text, onClick, ...rest }) => {\n return (\n \n {text}\n \n );\n};\n\nDeleteBtn.propTypes = {\n type: PropTypes.string,\n text: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n};\n\nDeleteBtn.defaultProps = {\n type: 'danger',\n};\n\nexport default DeleteBtn;\n","import React from 'react';\nimport { Dialog, Grid, Button, Text } from '@8base/boost';\nimport PropTypes from 'prop-types';\nimport DeleteBtn from './ui/buttons/DeleteBtn';\n\nconst YesNoDialog = ({\n type,\n onYes,\n onNo,\n text,\n isOpen,\n title,\n yesText = 'Yes',\n noText = 'No',\n onClose,\n isLoading = false,\n}) => {\n return (\n \n \n \n \n \n {text}\n \n \n \n \n \n {noText}\n \n \n \n \n );\n};\n\nYesNoDialog.propTypes = {\n type: PropTypes.string,\n onYes: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n onNo: PropTypes.func.isRequired,\n title: PropTypes.string.isRequired,\n text: PropTypes.any.isRequired,\n isOpen: PropTypes.bool.isRequired,\n isLoading: PropTypes.bool,\n yesText: PropTypes.string,\n noText: PropTypes.string,\n};\n\nYesNoDialog.defaultProps = {\n type: 'danger',\n yesText: 'Yes',\n noText: 'No',\n isLoading: false,\n};\n\nexport default YesNoDialog;\n","import React, { useCallback, useEffect } from 'react';\nimport {\n Paper,\n Row as BoostRow,\n Column,\n Radio,\n Text as BoostText,\n Icon,\n Paragraph,\n} from '@8base/boost';\nimport { PropTypes } from 'prop-types';\nimport styled from '@emotion/styled';\n\nconst Container = styled(Paper)`\n width: 100%;\n cursor: pointer;\n box-shadow: none !important;\n border: ${({ selected }) => (selected ? ' 2px solid #3db4aa' : '1px solid #d0d7dd')};\n`;\n\nconst UserPrice = styled(Paragraph)`\n width: 100%;\n`;\n\nconst OthersPrice = styled(Paragraph)`\n width: 100%;\n font-size: 11px !important;\n`;\n\nconst Row = styled(BoostRow)`\n &:first-child > span {\n font-size: inherit !important;\n }\n padding: 16px;\n`;\n\nconst Total = styled(BoostRow)`\n border-top: 1px solid #cfd7de;\n padding: 8px 16px;\n`;\n\nconst Text = styled(BoostText)`\n font-size: 1.3rem !important;\n`;\n\nconst PlanCard = ({\n type,\n plan,\n selected,\n numberOfSeats,\n onSelect,\n onQuantityChange,\n min,\n readOnly,\n}) => {\n const { id, name, monthlyPrice } = plan;\n const capitalizeName = name.toUpperCase();\n\n const handleSelect = useCallback(() => {\n onSelect(plan);\n }, [plan, onSelect]);\n\n const handlePlus = useCallback(() => {\n onQuantityChange((quantity) => quantity + 1);\n }, [onQuantityChange]);\n\n const handleMinus = useCallback(() => {\n onQuantityChange((quantity) => {\n if (quantity - 1 < min) return quantity;\n\n return quantity - 1;\n });\n }, [min, onQuantityChange]);\n\n const quantity = id === selected ? numberOfSeats : 1;\n\n return (\n \n \n {type === 'form' && (\n \n \n \n )}\n \n \n {capitalizeName}\n \n {plan.description}\n \n \n \n {' '}\n {' / mo. / user'}\n \n \n $1 / mo. / phone\n \n \n \n \n \n \n \n {!readOnly && !plan.isFreeTrial && type !== 'item' && id === selected && (\n \n )}\n \n {!readOnly && !plan.isFreeTrial && type !== 'item' && id === selected && (\n \n )}\n \n \n \n \n \n );\n};\n\nPlanCard.propTypes = {\n type: PropTypes.oneOf(['form', 'item']),\n readOnly: PropTypes.bool,\n plan: PropTypes.object.isRequired,\n selected: PropTypes.string,\n numberOfSeats: PropTypes.number,\n min: PropTypes.number,\n onSelect: PropTypes.func,\n onQuantityChange: PropTypes.func,\n};\n\nPlanCard.defaultProps = {\n type: 'form',\n readOnly: false,\n selected: '',\n numberOfSeats: 1,\n min: 1,\n onSelect: () => {},\n onQuantityChange: () => {},\n};\n\nexport { PlanCard };\n","import React from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport { Icon as IconBoost, Tooltip } from '@8base/boost';\nimport COMPANY_INFORMATION_SVG from '../../assets/images/create-company.svg';\nimport BILLING_INFORMATION_SVG from '../../assets/images/Billing-information.svg';\nimport AGENCY_INFORMATION_SVG from '../../assets/images/First-Agency-Info.svg';\nimport SUBSCRIPTION_PLAN_SVG from '../../assets/images/Subscription-plan.svg';\nimport CALL_GREEN_SVG from '../../assets/images/call-green.svg';\nimport CHAT_GREEN_SVG from '../../assets/images/chat-green.svg';\nimport COMPOSE_EMAIL_GREEN_SVG from '../../assets/images/compose-email-green.svg';\nimport COMPOSE_EMAIL_WHITE_SVG from '../../assets/images/compose-email-white.svg';\nimport INFO_SVG from '../../assets/images/info.svg';\nimport TASKS_GREEN_SVG from '../../assets/images/tasks-green.svg';\nimport INBOX_GREEN_SVG from '../../assets/images/inbox-green.svg';\nimport UPDATE_GRAY_SVG from '../../assets/images/update-grey.svg';\nimport SEARCH_DARK_SVG from '../../assets/images/Search-dark.svg';\nimport FILTER_GREEN_SVG from '../../assets/images/filter-green.svg';\nimport FILTER_GREY_SVG from '../../assets/images/filter-grey.svg';\nimport RECORDING_GREEN_SVG from '../../assets/images/recording-green.svg';\nimport CALL_PHONE_GREEN_SVG from '../../assets/images/call-phone-green.svg';\nimport { FaTimes } from 'react-icons/fa';\n\nconst sizes = {\n xs: '16px',\n sm: '20px',\n md: '24px',\n lg: '32px',\n};\n\nexport const Icon = styled.img`\n width: ${(props) => sizes[props.size]};\n height: ${(props) => sizes[props.size]};\n cursor: ${({ cursor }) => cursor || 'pointer'};\n`;\n\nconst StyledIconBoost = styled(IconBoost)`\n cursor: pointer;\n`;\n\nexport const IconAskInfo = (props) => {\n return (\n \n \n \n );\n};\n\nIconAskInfo.propTypes = {\n tooltipPlacement: PropTypes.string,\n tooltipText: PropTypes.string,\n};\n\nIconAskInfo.defaultProps = {\n tooltipPlacement: 'top',\n tooltipText: '',\n};\n\nexport const IconCompanyInformation = (props) => (\n \n);\n\nexport const IconBillingInformation = (props) => (\n \n);\n\nexport const IconAgencyInformation = (props) => (\n \n);\n\nexport const IconSubscriptionPlan = (props) => (\n \n);\n\nexport const IconInfo = (props) => (\n \n);\n\nexport const IconCheck = (props) => (\n \n);\n\nexport const IconPlus = (props) => ;\n\n/**\n *\n * @param {object} props object or attributes to define type of Icon\n * @returns {React.Component} theComponent to render\n */\nexport const IconTrash = (props) => {\n if (props.gray) {\n return (\n \n );\n }\n\n return (\n \n );\n};\n\nIconTrash.propTypes = {\n gray: PropTypes.bool,\n};\n\nIconTrash.defaultProps = {\n gray: false,\n};\n\nexport const IconUpdateAlt = (props) => (\n \n);\n\nexport const IconSort = (props) => (\n \n);\n\nexport const IconLeftArrow = (props) => (\n \n);\n\nexport const IconRightArrow = (props) => (\n \n);\n\nexport const IconCallGreen = (props) => (\n \n);\n\nexport const IconChatGreen = (props) => (\n \n);\n\nexport const IconComposeEmailGreen = (props) => (\n \n);\n\nexport const IconComposeEmailWhite = (props) => (\n \n);\n\nexport const IconTasksGreen = (props) => (\n \n);\n\nexport const IconPerformanceGreen = (props) => (\n \n);\n\nexport const IconInboxGreen = (props) => (\n \n);\n\nexport const IconUpdate = (props) => (\n \n);\n\nexport const IconUpdateGrey = (props) => (\n \n);\n\nexport const IconSearchDark = (props) => (\n \n);\n\nexport const CustomIconBoost = (props) => ;\n\nexport const IconFilterGreen = (props) => (\n \n);\n\nexport const IconFilterGrey = (props) => (\n \n);\n\nexport const IconClose = styled(FaTimes)`\n width: 16px;\n height: 16px;\n`;\n\nexport const IconRecordingGreen = (props) => (\n \n);\n\nexport const CallPhoneGreen = (props) => (\n \n);\n","import React from 'react';\nimport { Label as BoostLabel } from '@8base/boost';\nimport { PropTypes } from 'prop-types';\n\nimport styled from 'styled-components';\n\nconst StyledLabel = styled(BoostLabel)`\n margin-bottom: 4px !important;\n`;\n\nconst Label = ({ kind, text, ...rest }) => {\n return ;\n};\n\nLabel.propTypes = {\n kind: PropTypes.string,\n text: PropTypes.string.isRequired,\n};\n\nLabel.defaultProps = {\n kind: 'secondary',\n};\n\nexport { Label };\n","export const BLACK = '#323C47';\nexport const PRIMARY = '#3db4aa';\nexport const TEXT_LIGHT_GRAY = '#878C93';\nexport const GRAY_30 = '#CFD7DE'; // PLACEHOLDER_COLOR\nexport const ICON_GRAY = '#A5AFB6';\n","import { GRAY_30 } from '../constants/colors';\nimport { CardElement } from '@stripe/react-stripe-js';\nimport { error } from '@cobuildlab/pure-logger';\nimport { OnSessionFetch } from '../session/session-events';\n\n/**\n * Options for stripe input elements.\n *\n * @type {object}\n */\nexport const options = {\n iconStyle: 'solid',\n style: {\n base: {\n '::placeholder': { color: GRAY_30 },\n },\n },\n};\n\n/**\n * Creates a stripe token, use this on submit form handler, and pass the\n * token & error to the action.\n *\n * @param {object} stripe - Stripe object.\n * @param {object} elements - Stripe elements.\n * @param {object} data - the data to get the stripeData\n * @returns {Promise} The stripe response.\n */\nexport const createToken = async (stripe, elements, data) => {\n const { cardHolderName: name } = data;\n\n const cardData = {\n name,\n };\n const cardElement = elements.getElement(CardElement);\n\n let response;\n try {\n response = await stripe.createToken(cardElement, cardData);\n } catch (e) {\n error('stripeError: ', e);\n return { error: e };\n }\n\n return response;\n};\n\n/**\n * Creates a stripe token, use this on submit form handler, and pass the\n * token & error to the action.\n *\n * @param {object} stripe - Stripe object.\n * @param {object} elements - Stripe elements.\n * @param {object} data - The data to get the stripeData.\n * @returns {Promise} The stripe response = { paymentMethod || error }.\n */\nexport const createPaymentMethod = async (stripe, elements, data) => {\n const { email } = OnSessionFetch.get().user;\n const {\n cardHolderName: name,\n addressLine1: line1,\n addressLine2: line2,\n city,\n state,\n country,\n } = data;\n\n const card = elements.getElement(CardElement);\n const billing_details = {\n name,\n email,\n address: {\n city,\n state,\n country,\n line1,\n line2,\n },\n };\n\n let response;\n try {\n response = await stripe.createPaymentMethod({\n type: 'card',\n billing_details,\n card,\n });\n } catch (e) {\n error('stripeError: ', e);\n return { error: e };\n }\n\n return response;\n};\n","import React, { useEffect, useCallback } from 'react';\nimport { PropTypes } from 'prop-types';\nimport { Row, SelectField, Column, Icon, Input, InputField } from '@8base/boost';\nimport { Label } from '../../../../../shared/components/ui/inputs/Label';\nimport { options } from '../../../../../shared/stripe/stripe';\nimport { CardElement } from '@stripe/react-stripe-js';\nimport styled from 'styled-components';\n\nconst CardContainer = styled(Row)`\n border: 1px solid #d0d7dd;\n border-radius: 5px;\n padding-right: 10px;\n`;\n\n/**\n * This component is Form to change the Payment Method\n *\n * @param {object} props - The components prop object\n * @param {object} props.data - refer to the data from the current user/company\n * @param {boolean} props.hasFreeTrial - indicates if the plan has a free trial\n * @param {Function} props.onChange - refer to the function to submit the Form\n *\n * @returns {React.Component} - This Component return a Form\n */\nconst PaymentForm = ({ data, hasFreeTrial, onChange, onReady, hasMembershipCode }) => {\n const { cardHolderName, addressLine1, addressLine2, city, state, membershipCode } = data;\n const { card } = data;\n\n useEffect(() => {\n if (card.paymentMethodId) {\n onChange('card', {\n last4: card.last4,\n expireDate: card.expireDate,\n paymentMethodId: card.paymentMethodId,\n useOldMethod: true,\n });\n }\n }, [card.paymentMethodId, card.last4, card.expireDate, onChange]);\n\n const handleCardEdit = useCallback(() => {\n onChange('card', {\n ...card,\n useOldMethod: false,\n });\n }, [card, onChange]);\n\n const handleCardUndo = useCallback(() => {\n if (card.paymentMethodId) {\n onChange('card', {\n last4: card.last4,\n expireDate: card.expireDate,\n paymentMethodId: card.paymentMethodId,\n useOldMethod: true,\n });\n }\n }, [card.paymentMethodId, card.last4, card.expireDate, onChange]);\n\n const statesOptions = [\n { value: 'AL', label: 'AL' },\n { value: 'AK', label: 'AK' },\n { value: 'AZ', label: 'AZ' },\n { value: 'AR', label: 'AR' },\n { value: 'CA', label: 'CA' },\n { value: 'CO', label: 'CO' },\n { value: 'CT', label: 'CT' },\n { value: 'DE', label: 'DE' },\n { value: 'FL', label: 'FL' },\n { value: 'GA', label: 'GA' },\n { value: 'HI', label: 'HI' },\n { value: 'ID', label: 'ID' },\n { value: 'IL', label: 'IL' },\n { value: 'IN', label: 'IN' },\n { value: 'IA', label: 'IA' },\n { value: 'KS', label: 'KS' },\n { value: 'KY', label: 'KY' },\n { value: 'LA', label: 'LA' },\n { value: 'ME', label: 'ME' },\n { value: 'MD', label: 'MD' },\n { value: 'MA', label: 'MA' },\n { value: 'MI', label: 'MI' },\n { value: 'MN', label: 'MN' },\n { value: 'MS', label: 'MS' },\n { value: 'MO', label: 'MO' },\n { value: 'MT', label: 'MT' },\n { value: 'NE', label: 'NE' },\n { value: 'NV', label: 'NV' },\n { value: 'NH', label: 'NH' },\n { value: 'NJ', label: 'NJ' },\n { value: 'NM', label: 'NM' },\n { value: 'NY', label: 'NY' },\n { value: 'NC', label: 'NC' },\n { value: 'ND', label: 'ND' },\n { value: 'OH', label: 'OH' },\n { value: 'OK', label: 'OK' },\n { value: 'OR', label: 'OR' },\n { value: 'PA', label: 'PA' },\n { value: 'RI', label: 'RI' },\n { value: 'SC', label: 'SC' },\n { value: 'SD', label: 'SD' },\n { value: 'TN', label: 'TN' },\n { value: 'TX', label: 'TX' },\n { value: 'UT', label: 'UT' },\n { value: 'VT', label: 'VT' },\n { value: 'VA', label: 'VA' },\n { value: 'WA', label: 'WA' },\n { value: 'WV', label: 'WV' },\n { value: 'WI', label: 'WI' },\n { value: 'WY', label: 'WY' },\n ];\n\n return (\n \n \n onChange('cardHolderName', value),\n }}\n />\n \n {card.useOldMethod ? (\n }\n readOnly={true}\n />\n ) : (\n \n \n {card.paymentMethodId && }\n \n )}\n \n onChange('addressLine1', value),\n }}\n />\n onChange('addressLine2', value),\n }}\n />\n \n \n onChange('country', value),\n }}\n />\n \n \n onChange('city', value),\n }}\n />\n \n \n onChange('state', value),\n }}\n />\n \n \n \n \n );\n};\n\nPaymentForm.defaultProps = {\n selectedPlan: null,\n hasFreeTrial: false,\n onReady: () => {},\n data: {\n cardHolderName: '',\n addressLine1: '',\n addressLine2: '',\n city: '',\n state: '',\n card: {\n last4: '',\n expireDate: '',\n paymentMethodId: '',\n useOldMethod: false,\n },\n },\n};\n\nPaymentForm.propTypes = {\n onChange: PropTypes.func.isRequired,\n hasFreeTrial: PropTypes.bool,\n data: PropTypes.shape({\n cardHolderName: PropTypes.string,\n addressLine1: PropTypes.string,\n addressLine2: PropTypes.string,\n city: PropTypes.string,\n state: PropTypes.string,\n card: PropTypes.shape({\n last4: PropTypes.string,\n expireDate: PropTypes.string,\n paymentMethodId: PropTypes.string,\n useOldMethod: PropTypes.bool,\n }),\n }),\n onReady: PropTypes.func,\n};\n\nexport { PaymentForm };\n","export const model = {\n id: null, // Company id\n name: '', // Name of the company\n agencyId: null, // Id of the first agency created on the company\n membershipCode: null,\n agencyName: '', // Name of the first agency created on the company\n taxId: '', // Tax id on the company\n website: '',//Website for Twilio Subaccount registration\n numberOfSeats: 1, // Numbers of seats to pay monthly\n subscriptionPlan: null, // The selected subscription plan\n agentEmails: [], // List of emails to invite agents\n managerEmails: [], // List of emails to invite managers\n adminEmails: [], // List of emails to invite admins\n coupon: '', // Coupon id to redeem for a discount\n businessPhone: '',//For sole proprietorship brands\n mobilePhone: '',//For sole proprietorship brands\n brandName: '',//For sole proprietorship brands\n firstName: '', //For sole proprietorship brands\n lastName:'',//For sole proprietorship brands\n cardHolderName: '', // Name on the card for the payment method\n country: 'US', // Country (Is always US)\n addressLine1: '', // Payment method data: address line 1\n addressLine2: '', // Payment method data: address line 2\n postalCode: '',// Postal code for Twilio Subaccount Registration\n city: '', // Payment method data: city\n state: '', // Payment method data: state\n businessType: '', //Type of business that the company is\n callerIdName: '', //Name to display on calls from this agency\n card: {\n // Payment method data: card information\n /**\n * When the customer already has a registered payment method\n * this variable allows him to retry on this same payment method\n * instead of creating another payment method\n */\n useOldMethod: false,\n last4: '', // Last 4 characters on the card\n expireDate: '', // Expire date on the card\n /**\n * Stripe payment method id to retry\n * the payment from\n */\n paymentMethodId: '',\n },\n invoice: null, // The Latest invoice on the company\n companySub: null, // The subscription registered for this company\n};\n","import gql from 'graphql-tag';\n\nexport const CREATE_COMPANY_MUTATION = gql`\n mutation CreateCompany($data: CompanyCreateInput!) {\n companyCreate(data: $data) {\n id\n name\n agencyCompanyRelation {\n items {\n id\n name\n }\n }\n }\n }\n`;\n\nexport const companyFragment = gql`\n fragment companyFragment on Company {\n id\n name\n adminCompanyRelation(filter: $filterAdmins) {\n count\n items {\n id\n user {\n id\n email\n firstName\n lastName\n status\n }\n }\n }\n agencyCompanyRelation {\n items {\n id\n name\n }\n }\n subscriptions(first: 1, orderBy: createdAt_DESC) {\n items {\n id\n stripeSubscriptionId\n subscriptionPlan {\n id\n name\n isFreeTrial\n }\n }\n }\n }\n`;\n\nexport const COMPANIES_QUERY = gql`\n query FetchCompaniesList($filter: CompanyFilter, $filterAdmins: AdminFilter) {\n companiesList(filter: $filter) {\n items {\n ...companyFragment\n }\n }\n }\n ${companyFragment}\n`;\n\nexport const FETCH_COMPANY_FOR_BILLING_STATUS = gql`\n query FetchCompanyForBilling($id: ID) {\n company(id: $id) {\n id\n name\n status\n taxId\n agencyCompanyRelation {\n items {\n id\n name\n }\n }\n subscriptions(first: 1, orderBy: createdAt_DESC) {\n items {\n id\n status\n numberOfSeats\n stripeCustomerId\n stripeSubscriptionId\n expireDate\n pendingUpdate\n subscriptionPlan {\n id\n name\n isFreeTrial\n monthlyPrice\n annualPrice\n annualSavings\n monthlyStripePlanID\n description\n }\n }\n }\n companyInvoices(first: 1, orderBy: createdAt_DESC) {\n items {\n id\n invoiceId\n status\n paymentIntentStatus\n paymentMethodId\n }\n }\n companyPaymentMethods(first: 1, orderBy: createdAt_DESC) {\n items {\n id\n nameOnCard\n expireDate\n last4\n addressLine1\n addressLine2\n city\n state\n paymentMethodId\n }\n }\n }\n usersList(\n filter: { userAgencyUserRelation: { some: { agency: { company: { id: { equals: $id } } } } } }\n ) {\n count\n }\n }\n`;\n\nexport const COMPANY_BILLING_SUBSCRIPTION = gql`\n subscription($id: ID) {\n Company(filter: { mutation_in: [update], node: { id: { equals: $id } } }) {\n node {\n id\n name\n status\n taxId\n agencyCompanyRelation {\n items {\n id\n name\n }\n }\n subscriptions(first: 1, orderBy: createdAt_DESC) {\n items {\n id\n status\n numberOfSeats\n stripeCustomerId\n stripeSubscriptionId\n expireDate\n pendingUpdate\n subscriptionPlan {\n id\n name\n isFreeTrial\n monthlyPrice\n annualPrice\n annualSavings\n monthlyStripePlanID\n description\n }\n }\n }\n companyInvoices(first: 1, orderBy: createdAt_DESC) {\n items {\n id\n invoiceId\n status\n paymentIntentStatus\n paymentMethodId\n }\n }\n companyPaymentMethods(first: 1, orderBy: createdAt_DESC) {\n items {\n id\n nameOnCard\n expireDate\n last4\n addressLine1\n addressLine2\n city\n state\n paymentMethodId\n }\n }\n }\n mutation\n }\n }\n`;\n\nexport const COMPANY_QUERY = gql`\n query FetchCompany($id: ID, $filterAdmins: AdminFilter) {\n company(id: $id) {\n ...companyFragment\n }\n }\n ${companyFragment}\n`;\n\nexport const UPDATE_COMPANY_MUTATION = gql`\n mutation UpdateCompany(\n $data: CompanyUpdateInput!\n $filter: CompanyKeyFilter\n $filterAdmins: AdminFilter\n ) {\n companyUpdate(data: $data, filter: $filter) {\n ...companyFragment\n }\n }\n ${companyFragment}\n`;\n\nexport const SUBSCRIPTION_PLANS_QUERY = gql`\n query FetchSubscriptionPlans($filter: SubscriptionPlanFilter) {\n subscriptionPlansList(filter: $filter, orderBy: order_ASC) {\n count\n items {\n id\n name\n isFreeTrial\n monthlyPrice\n annualPrice\n annualSavings\n monthlyStripePlanID\n description\n }\n }\n }\n`;\n\nexport const GET_MEMBERSHIP_INFO = gql`\n query getCompanyFromMembershipCode($membershipCode: String) {\n company(membershipCode: $membershipCode) {\n id\n name\n companyPaymentMethods {\n items {\n paymentMethodId\n }\n }\n subscriptions {\n items {\n stripeCustomerId\n }\n }\n }\n }\n`;\n","import { ValidationError } from '../../shared/errors';\nimport { isValidString, isValidNumber } from '../../shared/validators';\nimport { isPossiblePhoneNumber } from 'react-phone-number-input';\n\n/**\n * Validates input date to create new companies\n *\n * @param {object} user - The user creating the company\n * @param {object} company - The company data to create\n *\n * @returns {void}\n */\nexport const createCompanyValidator = (user, company, isSoleProprietorship, hasMembershipCode) => {\n console.log('isSOle', isSoleProprietorship);\n const { agentEmails, managerEmails, adminEmails, numberOfSeats, coupon } = company;\n const errorMessages = [];\n const pattern = /[^a-zA-Z0-9\\s\\.\\,]/g;\n if (!isValidString(company.name) && !isSoleProprietorship)\n errorMessages.push('The Company must have a valid name');\n\n if (!isValidString(company.firstName) && isSoleProprietorship)\n errorMessages.push('The Company must have a valid First Name');\n\n if (!isValidString(company.lastName) && isSoleProprietorship)\n errorMessages.push('The Company must have a valid Last Name');\n\n if (!isValidString(company.brandName) && isSoleProprietorship)\n errorMessages.push('The Company must have a valid Brand Name');\n if (!isPossiblePhoneNumber(company.businessPhone) && isSoleProprietorship)\n errorMessages.push('You must input a valid business phone number');\n if (!isPossiblePhoneNumber(company.mobilePhone) && isSoleProprietorship)\n errorMessages.push('You must input a valid mobile phone number');\n\n if (!isValidString(company.taxId) && !isSoleProprietorship)\n errorMessages.push('The company must have a valid Tax ID');\n\n if (!isValidString(company.postalCode))\n errorMessages.push('The company must have a valid ZIP Code');\n\n if (!isValidNumber(numberOfSeats, true))\n errorMessages.push('The number of seats must be a valid number');\n if (!isValidString(company.callerIdName))\n errorMessages.push('The company must have a valid Caller ID Name');\n if (pattern.test(company.callerIdName)) {\n errorMessages.push(\n 'The Caller ID may only contain letters(A-Z), numbers(0-9), periods(.), commas(,), or spaces( )',\n );\n }\n\n if (isValidNumber(numberOfSeats, true)) {\n if (parseInt(numberOfSeats) > 10000) {\n errorMessages.push('The number cannot be greater than 10.000');\n }\n\n const invited = agentEmails.length + managerEmails.length + adminEmails.length;\n\n if (invited > numberOfSeats - 1) {\n errorMessages.push(\n `You cannot invite more than ${numberOfSeats - 1} user${\n numberOfSeats - 1 === 1 ? '' : 's'\n }`,\n );\n }\n\n const invitations = [...agentEmails, ...managerEmails, ...adminEmails];\n\n if (invitations.some((email) => email === user.email)) {\n errorMessages.push('You cannot use your own email in the invitations');\n }\n }\n\n if (!company.subscriptionPlan) errorMessages.push('You must select a Subscription Plan');\n\n if (!isValidString(company.agencyName)) errorMessages.push('You must enter a valid Agency name');\n if (!company.businessType) errorMessages.push('You must select a company type');\n\n if (company.subscriptionPlan && !company.subscriptionPlan.isFreeTrial) {\n if (!isValidString(company.cardHolderName) && !hasMembershipCode)\n errorMessages.push('You must enter the name on the Credit Card');\n if (!company.addressLine1 && !isValidString(company.addressLine1)) {\n errorMessages.push('You must enter at least one billing address');\n }\n }\n\n if (company.subscriptionPlan && company.subscriptionPlan.isFreeTrial) {\n if (\n company.agentEmails.length > 0 ||\n company.managerEmails.length > 0 ||\n company.adminEmails.length > 0\n ) {\n errorMessages.push('You cannot send invitations when you only have your seat available');\n }\n }\n\n if (errorMessages.length) throw new ValidationError(errorMessages);\n};\n\nexport const updateCompanyValidator = (company) => {\n let errors = [];\n\n if (!isValidString(company.name)) errors.push('The Company must have a valid name');\n\n if (errors.length > 0) throw new ValidationError(errors);\n};\n","import { isValidNumber } from '@cobuildlab/validation-utils';\nimport { ValidationError } from '../../shared/errors';\n\n/**\n *\n * @param {object} company - The company input object\n *\n * @returns {void}\n */\nexport const onboardingInvitationsValidator = (company) => {\n const errors = [];\n\n if (!isValidNumber(company.numberOfSeats, true))\n errors.push('The number of seats must be a valid number');\n\n if (isValidNumber(company.numberOfSeats, true)) {\n if (parseInt(company.numberOfSeats) > 10000) {\n errors.push('The number cannot be greater than 10.000');\n }\n\n const { agentEmails, managerEmails, adminEmails, numberOfSeats } = company;\n const invited = agentEmails.length + managerEmails.length + adminEmails.length;\n\n if (invited > numberOfSeats) {\n errors.push(\n `You cannot invite more than ${numberOfSeats} user${numberOfSeats === 1 ? '' : 's'}`,\n );\n }\n }\n\n if (errors.length) throw new ValidationError(errors);\n};\n","import {\n AGENCY_AGENT_INVITATION,\n AGENCY_MANAGER_INVITATION,\n} from '../../shared/constants/agency-invitations';\n\nexport const agentsMapSelectOptions = (agent) => {\n if (agent.value !== undefined && agent.label !== undefined) {\n return agent;\n }\n\n return {\n id: agent.id,\n value: agent.id,\n label: `${agent.user.firstName} ${agent.user.lastName}`,\n imgUrl: agent.user.avatar\n ? agent.user.avatar.previewUrl\n : 'https://randomuser.me/api/portraits/women/17.jpg',\n };\n};\n\nexport const agentsSelectValues = (agents) => {\n return agents !== null ? agents.map(agentsMapSelectOptions) : [];\n};\n\n/**\n * Function for transform the array of agents\n * to an string like \"Jonh Due & 6 others\"\n *\n * @param {Array} agents - The list of agents.\n * @returns {string} - The formated text.\n */\nexport const getAssignedAgents = (agents) => {\n if (!agents || agents.length === 0) {\n return '';\n }\n\n const firstUser = agents[0];\n let firstUserFullName;\n\n if (firstUser.label !== undefined) {\n firstUserFullName = firstUser.label;\n } else {\n firstUserFullName = `${firstUser.user.firstName} ${firstUser.user.lastName}`;\n }\n\n const othersUsers = agents.length > 1 ? `& ${agents.length - 1} others` : '';\n\n return `${firstUserFullName} ${othersUsers}`;\n};\n\n/**\n * Function for transform the array of agentEmails & managerEmails\n * to a list of invitations.\n *\n * @param {Array} agentEmails - The list of agent emails.\n * @param {Array} managerEmails - The list of manager emails.\n * @param {Array} adminEmails - The list of admin emails.\n * @returns {Array} The agencyInvitations.\n */\nexport const generateInvitationsFromEmails = (agentEmails, managerEmails, adminEmails) => {\n const agentInvitations = agentEmails.map((email) => {\n return {\n email,\n type: AGENCY_AGENT_INVITATION,\n };\n });\n const managerInvitations = managerEmails.map((email) => {\n return {\n email,\n type: AGENCY_MANAGER_INVITATION,\n };\n });\n const agencyInvitations = agentInvitations.concat(managerInvitations);\n const companyInvitations = adminEmails.map((email) => {\n return {\n email,\n };\n });\n\n return { agencyInvitations, companyInvitations };\n};\n","import gql from 'graphql-tag';\n\nexport const CompanyInvoiceFragment = gql`\n fragment CompanyInvoiceFragment on CompanyInvoice {\n id\n invoiceId\n total\n status\n paymentIntentStatus\n paymentMethodId\n createdAt\n }\n`;\n\nexport const PAYMENT_UPDATE_MUTATION = gql`\n mutation UpdatePaymentMethod($data: CompanySubUpdateInput!) {\n companySubUpdate(data: $data) {\n id\n }\n }\n`;\n\nexport const FETCH_COMPANY_INVOICES = gql`\n query FetchCompanyInvoices(\n $filter: CompanyInvoiceFilter\n $first: Int\n $skip: Int\n $orderBy: [CompanyInvoiceOrderBy]\n ) {\n companyInvoicesList(filter: $filter, first: $first, skip: $skip, orderBy: $orderBy) {\n count\n items {\n ...CompanyInvoiceFragment\n }\n }\n }\n ${CompanyInvoiceFragment}\n`;\n\nexport const CREATE_COMPANY_SUBSCRIPTION = gql`\n mutation CreateStripeSubscription($data: CreateStripeSubscriptionInput!) {\n createStripeSubscription(data: $data) {\n id\n status\n latest_invoice {\n id\n status\n payment_intent {\n id\n status\n client_secret\n last_payment_error\n }\n }\n }\n }\n`;\n\nexport const CREATE_PAYMENT_METHOD = gql`\n mutation CreatePaymentMethod($data: CreateStripePaymentMethodInput!) {\n createStripePaymentMethod(data: $data) {\n id\n }\n }\n`;\n\nexport const FETCH_PAYMENT_INTENT = gql`\n query FetchPaymentIntent($stripeInvoiceId: String!) {\n stripePaymentIntent(stripeInvoiceId: $stripeInvoiceId) {\n client_secret\n status\n last_payment_error {\n message\n }\n }\n }\n`;\n\nexport const FETCH_COUPONS = gql`\n query FetchCoupons($filter: CompanySubCouponFilter, $first: Int, $skip: Int) {\n companySubCouponsList(filter: $filter, first: $first, skip: $skip) {\n count\n items {\n id\n percentage\n months\n }\n }\n }\n`;\n","import { ValidationError } from '../../../shared/errors';\nimport { isValidString, isValidInteger } from '@cobuildlab/validation-utils';\n\nexport const paymentValidator = (creditCard, paymentMethod, stripeError) => {\n let errorMessages = [];\n\n if (stripeError) errorMessages.push(stripeError.message);\n\n if (!paymentMethod) errorMessages.push('You must enter a valid Credit Card');\n\n if (!isValidString(creditCard.cardHolderName))\n errorMessages.push('You must enter the name on the Credit Card');\n\n if (!isValidString(creditCard.addressLine1))\n errorMessages.push('A Credit Card must have a valid Address Line 1');\n\n if (!isValidString(creditCard.addressLine2))\n errorMessages.push('A Credit Card must have a valid Address Line 2');\n\n if (!isValidString(creditCard.city)) errorMessages.push('A Credit Card must have a valid City');\n\n if (!isValidString(creditCard.state)) errorMessages.push('A Credit Card must have a valid State');\n\n if (!isValidString(creditCard.country))\n errorMessages.push('A Credit Card must have a valid Country');\n\n if (errorMessages.length !== 0) throw new ValidationError(errorMessages);\n};\n\n/**\n * The renew subscription input validator\n *\n * @param {object} data - The data submitted to renew a subscription\n *\n * @returns {void}\n */\nexport const renewSubscriptionValidator = (data) => {\n const { subscription, oldSubscription } = data;\n const errors = [];\n\n if (!isValidString(subscription.paymentMethodId))\n errors.push('You need to create a valid payment method first');\n\n if (!subscription.subscriptionPlan) errors.push('You must select a valid plan');\n\n if (!isValidInteger(subscription.numberOfSeats)) {\n errors.push('Number of seats must be a valid integer');\n } else {\n if (subscription.numberOfSeats < oldSubscription.numberOfSeats) {\n errors.push('The new subscription cannot have less seats than the old one');\n }\n }\n\n if (!isValidString(subscription.stripeCustomerId))\n errors.push('This account does not have a valid stripe customer id');\n\n if (errors.length > 0) throw new ValidationError(errors);\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnSubscriptionCanceled = createEvent();\n\nexport const OnSubscriptionCanceledError = createEvent();\n\nexport const OnSubscriptionRenew = createEvent();\n\nexport const OnSubscriptionRenewError = createEvent();\n\nexport const OnUpcomingInvoiceFetch = createEvent();\n\nexport const OnUpcomingInvoiceFetchError = createEvent();\n\nexport const OnValidCouponFetch = createEvent();\n\nexport const OnValidCouponFetchError = createEvent();\n\nexport const OnFetchCompanyInvoicesEvent = createEvent();\n\nexport const OnFetchCompanyInvoicesError = createEvent();\n","import { OnApolloClient } from '../../../shared/session/session-events';\nimport { CardElement } from '@stripe/react-stripe-js';\nimport {\n FETCH_COMPANY_INVOICES,\n CREATE_COMPANY_SUBSCRIPTION,\n CREATE_PAYMENT_METHOD,\n FETCH_PAYMENT_INTENT,\n FETCH_COUPONS,\n} from './billing-queries';\nimport { error, log } from '@cobuildlab/pure-logger';\nimport { SUBSCRIPTION_STATUS, INVOICE_STATUS } from '@cobuildlab/lead-volt-share';\nimport { renewSubscriptionValidator } from './billing-validators';\nimport {\n OnFetchCompanyInvoicesError,\n OnFetchCompanyInvoicesEvent,\n OnSubscriptionCanceled,\n OnSubscriptionCanceledError,\n OnSubscriptionRenew,\n OnSubscriptionRenewError,\n OnUpcomingInvoiceFetch,\n OnUpcomingInvoiceFetchError,\n OnValidCouponFetch,\n OnValidCouponFetchError,\n} from './billing-events';\n\nconst { INCOMPLETE } = SUBSCRIPTION_STATUS;\nconst { OPEN } = INVOICE_STATUS;\n\n/**\n * Fetches the company invoices\n *\n * @param {string} companyId - The company id\n * @param {number} page - The page to fetch the invoices\n *\n * @returns {Promise} The request result\n */\nexport const fetchCompanyInvoices = async (companyId, page = 1) => {\n const client = OnApolloClient.get();\n const filter = { company: { id: { equals: companyId } } };\n const first = 10;\n const skip = first * (page - 1);\n const orderBy = 'createdAt_DESC';\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_COMPANY_INVOICES,\n variables: { filter, first, skip, orderBy },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchCompanyInvoices', e);\n return OnFetchCompanyInvoicesError.dispatch(e);\n }\n\n log('fetchCompanyInvoices', response.data);\n\n return OnFetchCompanyInvoicesEvent.dispatch(response.data);\n};\n\n/**\n * Cancels the specified subscription\n *\n * @param {string} id - The company subscription id\n *\n * @returns {Promise} The request result\n */\nexport const cancelSubscription = async (id) => {\n let response = null;\n\n try {\n response = await fetch(\n `${process.env.REACT_APP_WORKSPACE_ENDPOINT}/webhook/cancel-subscription`,\n {\n method: 'delete',\n body: JSON.stringify({\n companySubscriptionId: id,\n }),\n },\n );\n } catch (e) {\n error('cancelSubscription', e);\n\n return OnSubscriptionCanceledError.dispatch(e);\n }\n\n const result = await response.json();\n\n if (!response.ok) {\n const message = result.message ? result.message : 'Something happened, please try again';\n\n error('cancelSubscription', message);\n\n return OnSubscriptionCanceledError.dispatch(new Error(message));\n }\n\n log('cancelSubscription', response);\n\n return OnSubscriptionCanceled.dispatch(result);\n};\n\n/**\n * Renew company subscription\n *\n * @param {object} subscription - The subscription to create\n * @param {object} oldSubscription - The old subscription information\n * @param {object} stripe - The stripe object\n * @param {object} elements - The stripe's element object\n *\n * @returns {Promise} The request result\n */\nexport const renewCompanySubscription = async (subscription, oldSubscription, stripe, elements) => {\n try {\n renewSubscriptionValidator({ subscription, oldSubscription });\n } catch (e) {\n error('renewCompanySubscription', e);\n\n return OnSubscriptionRenewError.dispatch(e);\n }\n\n const { stripeCustomerId, subscriptionPlan } = subscription;\n let paymentMethod = { id: subscription.paymentMethodId };\n let companySubscription = null;\n\n if (subscription.status === INCOMPLETE) {\n let paymentIntent = null;\n let result = null;\n\n try {\n paymentIntent = await fetchPaymentIntentFromInvoice(subscription.stripeInvoiceId);\n } catch (e) {\n error('renewCompanySubscription', e);\n\n return OnSubscriptionRenewError.dispatch(e);\n }\n\n try {\n result = await stripe.confirmCardPayment(paymentIntent.client_secret, {\n payment_method: paymentMethod.id,\n });\n } catch (e) {\n error('renewCompanySubscription', e);\n\n return OnSubscriptionRenewError.dispatch(e);\n }\n\n if (result.error) return OnSubscriptionRenewError.dispatch(new Error(result.error.message));\n\n if (result.paymentIntent.status === 'requires_payment_method') {\n error('renewCompanySubscription', new Error(result.paymentIntent.last_payment_error.message));\n\n return OnSubscriptionRenewError.dispatch(\n new Error(result.paymentIntent.last_payment_error.message),\n );\n }\n\n log('renewCompanySubscription', result);\n\n return OnSubscriptionRenew.dispatch(result);\n }\n\n try {\n companySubscription = await createSubscription(\n subscription.companyId,\n stripeCustomerId,\n subscriptionPlan.id,\n subscription.numberOfSeats,\n );\n } catch (e) {\n error('renewCompanySubscription', e);\n\n return OnSubscriptionRenewError.dispatch(e);\n }\n\n let invoice = companySubscription.latest_invoice;\n let paymentIntent = invoice.payment_intent;\n\n if (companySubscription.status === INCOMPLETE) {\n if (invoice.status === OPEN) {\n if (paymentIntent.status === 'requires_action') {\n let result = null;\n\n try {\n result = await stripe.confirmCardPayment(paymentIntent.client_secret, {\n payment_method: paymentMethod.id,\n });\n } catch (e) {\n error('renewCompanySubscription', e);\n\n return OnSubscriptionRenewError.dispatch(e);\n }\n\n if (result.error) return OnSubscriptionRenewError.dispatch(new Error(result.error.message));\n\n return OnSubscriptionRenew.dispatch(result);\n }\n\n if (paymentIntent.status === 'requires_payment_method') {\n return OnSubscriptionRenewError.dispatch(\n new Error(paymentIntent.last_payment_error.message),\n );\n }\n }\n }\n\n return OnSubscriptionRenew.dispatch({ paymentIntent });\n};\n\n/**\n * Voids the specified invoice\n *\n * @param {string} stripeInvoiceId - The stripe invoice id\n *\n * @returns {Promise} The request result\n */\nexport const voidInvoice = async (stripeInvoiceId) => {\n const response = await fetch(`${process.env.REACT_APP_WORKSPACE_ENDPOINT}/webhook/void-invoice`, {\n method: 'post',\n body: JSON.stringify({\n stripeInvoiceId,\n }),\n });\n\n const result = await response.json();\n\n if (!response.ok) {\n const message = result.message ? result.message : 'Something happened, please try again';\n\n error('voidInvoice', result);\n\n throw new Error(message);\n }\n\n log('voidInvoice', result);\n\n return result.invoice;\n};\n\n/**\n * Create payment method\n *\n * @param {object} data - Data to create the payment method with\n * @param {string} customerId - The customer to attach the payment method\n * @param {object} stripe - The stripe object\n * @param {object} elements - The elements object\n *\n * @returns {Promise} The request result\n */\nexport const createPaymentMethod = async (data, customerId, stripe, elements) => {\n const cardElement = elements.getElement(CardElement);\n const client = OnApolloClient.get();\n\n const result = await stripe.createPaymentMethod({\n type: 'card',\n card: cardElement,\n ...data,\n });\n\n if (result.error) {\n error('createPaymentMethod', result.error);\n\n throw new Error(result.error.message);\n }\n\n const response = await client.mutate({\n mutation: CREATE_PAYMENT_METHOD,\n variables: {\n data: {\n paymentMethodId: result.paymentMethod.id,\n customerId: customerId,\n },\n },\n });\n\n return response.data.createStripePaymentMethod;\n};\n\n/**\n * Creates a subscription object\n *\n * @param {string} companyId - The company id\n * @param {string} customerId - The customer id\n * @param {string} planId - The subscription plan id\n * @param {number} quantity - The quantity of seats to buy\n * @param {string} couponId - The coupon id to redeem\n *\n * @returns {Promise} The request result\n */\nexport const createSubscription = async (companyId, customerId, planId, quantity, couponId) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: CREATE_COMPANY_SUBSCRIPTION,\n variables: {\n data: {\n companyId,\n customerId,\n subscriptionPlanId: planId,\n couponId,\n quantity,\n },\n },\n });\n\n log('createSubscription', response.data);\n\n return response.data.createStripeSubscription;\n};\n\n/**\n * Fetches the payment intent from an invoice\n *\n * @param {string} stripeInvoiceId - The stripe invoice id\n *\n * @returns {Promise} The request result\n */\nexport async function fetchPaymentIntentFromInvoice(stripeInvoiceId) {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_PAYMENT_INTENT,\n fetchPolicy: 'network-only',\n variables: {\n stripeInvoiceId,\n },\n });\n\n return response.data.stripePaymentIntent;\n}\n\n/**\n * Updates the specified subscription item\n *\n * @param {string} companyId - The company id\n * @param {string} itemId - The item id\n * @param {number} quantity - The quantity to sum to the item\n *\n * @returns {Promise} The request result\n */\nexport const updateSubscriptionItem = async (companyId, itemId, quantity) => {\n const { token } = JSON.parse(localStorage.getItem('auth'));\n\n const response = await fetch(\n `${process.env.REACT_APP_WORKSPACE_ENDPOINT}/webhook/update-subscription-plan-item`,\n {\n method: 'post',\n body: JSON.stringify({\n companyId,\n itemId,\n quantity,\n }),\n headers: {\n Authorization: `Bearer ${token}`,\n },\n },\n );\n\n const body = await response.json();\n\n if (!response.ok) {\n const message = body.message ? body.message : 'Something happened, prease try again';\n\n error('updateSubscriptionItem', message);\n\n throw new Error(message);\n }\n\n log('updateSubscriptionItem', body);\n\n return { subscription: body.subscription };\n};\n\n/**\n * Retrieve the upcoming subscription invoice\n *\n * @param {string} companyId - The company id\n *\n * @returns {Promise} The request result\n */\nexport const retrieveUpcomingInvoice = async (companyId) => {\n const { token } = JSON.parse(localStorage.getItem('auth'));\n let response = null;\n\n try {\n response = await fetch(\n `${process.env.REACT_APP_WORKSPACE_ENDPOINT}/webhook/retrieve-upcoming-invoice/${companyId}`,\n {\n method: 'get',\n headers: {\n Authorization: `Bearer ${token}`,\n },\n },\n );\n } catch (e) {\n error('retrieveUpcomingInvoice', e);\n\n return OnUpcomingInvoiceFetchError.dispatch(e);\n }\n\n const body = await response.json();\n\n if (!response.ok) {\n const message = body.message ? body.message : 'Something happened, please try again';\n\n error('retrieveUpcomingInvoice', body);\n\n return OnUpcomingInvoiceFetchError.dispatch(new Error(message));\n }\n\n if (body.errors) {\n const [e] = body.errors;\n error('retrieveUpcomingInoice', e.message);\n\n return OnUpcomingInvoiceFetchError.dispatch(new Error(e.message));\n }\n\n log('retrieveUpcomingInvoice', body);\n\n return OnUpcomingInvoiceFetch.dispatch(body);\n};\n\n/**\n * Fetches a valid coupon\n *\n * @param {string} id - The id of the coupon to find\n *\n * @returns {Promise} The coupon object or null\n */\nexport async function fetchValidCoupon(id) {\n const client = OnApolloClient.get();\n const filter = {\n id: { equals: id },\n valid: { equals: true },\n };\n const first = 1;\n\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_COUPONS,\n variables: {\n filter,\n first,\n },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchValidCoupon', e.message);\n\n return OnValidCouponFetchError.dispatch(e);\n }\n\n const [coupon] = response.data.companySubCouponsList.items;\n\n return OnValidCouponFetch.dispatch(coupon || null);\n}\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnBoardingError = createEvent();\n\nexport const OnCreateCompanyEvent = createEvent();\n\nexport const OnOnBoardingInvitationsCreateError = createEvent();\n\nexport const OnOnBoardingProcessFinished = createEvent();\n","import { log, error } from '@cobuildlab/pure-logger';\nimport {\n CREATE_COMPANY_MUTATION,\n UPDATE_COMPANY_MUTATION,\n GET_MEMBERSHIP_INFO,\n} from '../company/company-queries';\nimport { createCompanyValidator } from '../company/company-validators';\nimport {\n IFS_SCORES_DEFAULT,\n SUBSCRIPTION_STATUS,\n INVOICE_STATUS,\n} from '@cobuildlab/lead-volt-share';\nimport { OnSessionFetch, OnApolloClient } from '../../shared/session/session-events';\nimport { onboardingInvitationsValidator } from './onboarding-validators';\nimport { generateInvitationsFromEmails } from '../agents/agents-utils';\nimport { AGENCY_ROLES } from '../../shared/constants';\nimport { UPDATE_USER } from '../auth/queries';\nimport {\n createPaymentMethod,\n createSubscription,\n fetchPaymentIntentFromInvoice,\n} from '../my-account/billing/billing-actions';\nimport {\n CREATE_INVITATION,\n CREATE_INVITATION_COMPANY,\n} from '../my-account/invitations/invitations-queries';\nimport { CREATE_STRIPE_CUSTOMER } from '../users/user-queries';\nimport {\n OnBoardingError,\n OnCreateCompanyEvent,\n OnOnBoardingInvitationsCreateError,\n OnOnBoardingProcessFinished,\n} from './onboarding-events';\n\nconst { INCOMPLETE } = SUBSCRIPTION_STATUS;\nconst { OPEN } = INVOICE_STATUS;\n\n/**\n * Creates a company.\n *\n * @param {object} stripe - The stripe object\n * @param {object} elements - the stripe elements object\n * @param {object} company - The company object with the data to create\n *\n * @returns {Promise} the created company.\n */\nexport const createCompany = async (stripe, elements, company, membershipInfo) => {\n const client = OnApolloClient.get();\n const { user } = OnSessionFetch.get();\n const numberOfSeats = company.subscriptionPlan.isFreeTrial ? 1 : parseInt(company.numberOfSeats);\n let paymentMethod = null;\n let response = null;\n let customer = null;\n\n let { hasMembershipCode, customerId, paymentMethod: parentPaymentMethod } = membershipInfo;\n let isSoleProprietorship = company.businessType === 'Sole Proprietorship' ? true : false;\n try {\n createCompanyValidator(user, company, isSoleProprietorship, hasMembershipCode);\n } catch (e) {\n error('createCompany', e);\n return OnBoardingError.dispatch(e);\n }\n\n if (hasMembershipCode) {\n let create, update;\n //console.log('Got into HAS MEMBERSHIP CODE!!');\n\n /*\n Get customer ID based on input membership code\n */\n customer = { id: customerId };\n\n /**\n * Create different create/update company payloads depending on if the business is a sole proprietorship\n */\n if (company.businessType === 'Sole Proprietorship') {\n create = {\n name: company.firstName + ' ' + company.lastName + ' Sole Proprietorship',\n firstName: company.firstName,\n lastName: company.lastName,\n addressLine1: company.addressLine1,\n addressLine2: company.addressLine2,\n postalCode: company.postalCode,\n city: company.city,\n state: company.state,\n brandName: company.brandName,\n contactPhone: company.businessPhone,\n mobilePhone: company.mobilePhone,\n\n // status: Status has the PENDING status by default\n adminCompanyRelation: {\n create: [{ user: { connect: { id: user.id } } }],\n },\n agencyCompanyRelation: {\n create: [\n {\n name: company.agencyName,\n callerIdName: company.callerIdName,\n ifsScore: IFS_SCORES_DEFAULT,\n twilioBusinessType: company.businessType,\n userSelectedAgencyRelation: { connect: { id: user.id } },\n agencyAgencyUserRelation: {\n create: [\n {\n user: {\n connect: { id: user.id },\n },\n roles: AGENCY_ROLES.MANAGER,\n },\n ],\n },\n },\n ],\n },\n };\n\n update = {\n id: company.id,\n name: company.firstName + ' ' + company.lastName + ' Sole Proprietorship',\n firstName: company.firstName,\n lastName: company.lastName,\n addressLine1: company.addressLine1,\n addressLine2: company.addressLine2,\n postalCode: company.postalCode,\n city: company.city,\n state: company.state,\n brandName: company.brandName,\n contactPhone: company.businessPhone,\n mobilePhone: company.mobilePhone,\n agencyCompanyRelation: {\n update: [\n {\n data: {\n id: company.agencyId,\n name: company.agencyName,\n callerIdName: company.callerIdName,\n twilioBusinessType: company.businessType,\n userSelectedAgencyRelation: { connect: { id: user.id } },\n },\n },\n ],\n },\n };\n } else {\n create = {\n name: company.name,\n taxId: company.taxId,\n addressLine1: company.addressLine1,\n addressLine2: company.addressLine2,\n city: company.city,\n state: company.state,\n postalCode: company.postalCode,\n website: company.website,\n // status: Status has the PENDING status by default\n adminCompanyRelation: {\n create: [{ user: { connect: { id: user.id } } }],\n },\n agencyCompanyRelation: {\n create: [\n {\n name: company.agencyName,\n callerIdName: company.callerIdName,\n ifsScore: IFS_SCORES_DEFAULT,\n twilioBusinessType: company.businessType,\n userSelectedAgencyRelation: { connect: { id: user.id } },\n agencyAgencyUserRelation: {\n create: [\n {\n user: {\n connect: { id: user.id },\n },\n roles: AGENCY_ROLES.MANAGER,\n },\n ],\n },\n },\n ],\n },\n };\n\n update = {\n id: company.id,\n name: company.name,\n taxId: company.taxId,\n addressLine1: company.addressLine1,\n addressLine2: company.addressLine2,\n city: company.city,\n state: company.state,\n postalCode: company.postalCode,\n website: company.website,\n agencyCompanyRelation: {\n update: [\n {\n data: {\n id: company.agencyId,\n callerIdName: company.callerIdName,\n name: company.agencyName,\n twilioBusinessType: company.businessType,\n userSelectedAgencyRelation: { connect: { id: user.id } },\n },\n },\n ],\n },\n };\n }\n\n try {\n /**\n * If the company does not exists create the company registry,\n * in the contrary just update its data\n */\n company.id\n ? console.log('create company', JSON.stringify(create, null, 2))\n : console.log('update company', JSON.stringify(update, null, 2));\n response = await client.mutate({\n mutation: company.id ? UPDATE_COMPANY_MUTATION : CREATE_COMPANY_MUTATION,\n variables: {\n data: company.id ? update : create,\n },\n });\n } catch (e) {\n error('createCompany', e);\n return OnBoardingError.dispatch(e);\n }\n\n const resCompany = company.id ? response.data.companyUpdate : response.data.companyCreate;\n\n OnCreateCompanyEvent.dispatch({ company: resCompany });\n /**\n * Get payment method from the parent company based on the membership code\n */\n\n paymentMethod = { id: parentPaymentMethod };\n\n let companySubscription = null;\n\n /**\n * If this is a new attempt, retry the subscription pay\n */\n if (company.companySub && company.companySub.status === INCOMPLETE) {\n const { invoice } = company;\n let paymentIntent = null;\n let result = null;\n\n try {\n paymentIntent = await fetchPaymentIntentFromInvoice(invoice.invoiceId);\n console.log('paymentIntent RETRY', paymentIntent);\n } catch (e) {\n error('createCompany', e);\n return OnBoardingError.dispatch(e);\n }\n\n try {\n result = await stripe.confirmCardPayment(paymentIntent.client_secret, {\n payment_method: paymentMethod.id,\n });\n } catch (e) {\n error('createCompany', e);\n return OnBoardingError.dispatch(e);\n }\n\n if (result.error) {\n error('createCompany', new Error(result.error.message));\n return OnBoardingError.dispatch(new Error(result.error.message));\n }\n\n if (result.paymentIntent.status === 'requires_payment_method') {\n error('createCompany', new Error(result.paymentIntent.last_payment_error.message));\n\n return OnBoardingError.dispatch(new Error(result.paymentIntent.last_payment_error.message));\n }\n\n log('createCompany', result);\n\n return result;\n }\n\n /**\n * If it is the first attempt, create the new subscription object\n */\n try {\n companySubscription = await createSubscription(\n resCompany.id,\n customer.id,\n company.subscriptionPlan.id,\n numberOfSeats,\n company.coupon,\n );\n } catch (e) {\n error('createCompany', e);\n return OnBoardingError.dispatch(e);\n }\n\n let invoice = companySubscription.latest_invoice;\n let paymentIntent = invoice.payment_intent;\n //console.log('customer.id', customer.id);\n //console.log('from createSubscription, invoice:', invoice, 'paymentIntent', paymentIntent);\n\n if (companySubscription.status === INCOMPLETE) {\n if (invoice.status === OPEN) {\n if (paymentIntent.status === 'requires_action') {\n let result = null;\n\n try {\n result = await stripe.confirmCardPayment(paymentIntent.client_secret, {\n payment_method: paymentMethod.id,\n });\n } catch (e) {\n error('createCompany', e);\n return OnBoardingError.dispatch(e);\n }\n\n if (result.error) {\n error('createCompany', new Error(result.error.message));\n\n return OnBoardingError.dispatch(new Error(result.error.message));\n }\n }\n\n if (paymentIntent.status === 'requires_payment_method') {\n error('createCompany', new Error(paymentIntent.last_payment_error.message));\n\n return OnBoardingError.dispatch(new Error(paymentIntent.last_payment_error.message));\n }\n }\n }\n } else {\n /**\n * Create stripe customer and suscription objects\n * to charge the customer\n */\n try {\n customer = await createCustomer(\n company.subscriptionPlan.isFreeTrial\n ? {}\n : {\n line1: company.addressLine1,\n line2: company.addressLine2,\n city: company.city,\n state: company.state,\n country: 'US',\n },\n );\n } catch (e) {\n error('createCompany', e);\n return OnBoardingError.dispatch(e);\n }\n\n const create = {\n name: company.name,\n taxId: company.taxId,\n addressLine1: company.addressLine1,\n addressLine2: company.addressLine2,\n city: company.city,\n state: company.state,\n postalCode: company.postalCode,\n website: company.website,\n // status: Status has the PENDING status by default\n adminCompanyRelation: {\n create: [{ user: { connect: { id: user.id } } }],\n },\n agencyCompanyRelation: {\n create: [\n {\n name: company.agencyName,\n callerIdName: company.callerIdName,\n ifsScore: IFS_SCORES_DEFAULT,\n twilioBusinessType: company.businessType,\n userSelectedAgencyRelation: { connect: { id: user.id } },\n agencyAgencyUserRelation: {\n create: [\n {\n user: {\n connect: { id: user.id },\n },\n roles: AGENCY_ROLES.MANAGER,\n },\n ],\n },\n },\n ],\n },\n };\n\n const update = {\n id: company.id,\n name: company.name,\n taxId: company.taxId,\n addressLine1: company.addressLine1,\n addressLine2: company.addressLine2,\n city: company.city,\n state: company.state,\n postalCode: company.postalCode,\n website: company.website,\n agencyCompanyRelation: {\n update: [\n {\n data: {\n id: company.agencyId,\n callerIdName: company.callerIdName,\n name: company.agencyName,\n twilioBusinessType: company.businessType,\n userSelectedAgencyRelation: { connect: { id: user.id } },\n },\n },\n ],\n },\n };\n\n try {\n /**\n * If the company does not exists create the company registry,\n * in the contrary just update its name and tax id\n */\n response = await client.mutate({\n mutation: company.id ? UPDATE_COMPANY_MUTATION : CREATE_COMPANY_MUTATION,\n variables: {\n data: company.id ? update : create,\n },\n });\n } catch (e) {\n error('createCompany', e);\n return OnBoardingError.dispatch(e);\n }\n\n const resCompany = company.id ? response.data.companyUpdate : response.data.companyCreate;\n\n OnCreateCompanyEvent.dispatch({ company: resCompany });\n /**\n * If the payment method is already saved and the user wants to use it, just use it.\n * In the contrary, if a new payment method is entered, create the payment method\n */\n if (!company.subscriptionPlan.isFreeTrial) {\n if (company.card.useOldMethod && company.card.paymentMethodId) {\n paymentMethod = { id: company.card.paymentMethodId };\n } else {\n try {\n paymentMethod = await createPaymentMethod(\n {\n billing_details: {\n address: {\n line1: company.addressLine1,\n line2: company.addressLine2,\n city: company.city,\n state: company.state,\n country: 'US',\n },\n email: user.email,\n name: company.cardHolderName,\n },\n metadata: { company_id: resCompany.id },\n },\n customer.id,\n stripe,\n elements,\n );\n } catch (e) {\n error('createCompany', e);\n return OnBoardingError.dispatch(e);\n }\n }\n }\n\n let companySubscription = null;\n\n /**\n * If this is a new attempt, retry the subscription pay\n */\n if (company.companySub && company.companySub.status === INCOMPLETE) {\n const { invoice } = company;\n let paymentIntent = null;\n let result = null;\n\n try {\n paymentIntent = await fetchPaymentIntentFromInvoice(invoice.invoiceId);\n } catch (e) {\n error('createCompany', e);\n return OnBoardingError.dispatch(e);\n }\n\n try {\n result = await stripe.confirmCardPayment(paymentIntent.client_secret, {\n payment_method: paymentMethod.id,\n });\n } catch (e) {\n error('createCompany', e);\n return OnBoardingError.dispatch(e);\n }\n\n if (result.error) {\n error('createCompany', new Error(result.error.message));\n return OnBoardingError.dispatch(new Error(result.error.message));\n }\n\n if (result.paymentIntent.status === 'requires_payment_method') {\n error('createCompany', new Error(result.paymentIntent.last_payment_error.message));\n\n return OnBoardingError.dispatch(new Error(result.paymentIntent.last_payment_error.message));\n }\n\n log('createCompany', result);\n\n return result;\n }\n\n /**\n * If it is the first attempt, create the new subscription object\n */\n try {\n companySubscription = await createSubscription(\n resCompany.id,\n customer.id,\n company.subscriptionPlan.id,\n numberOfSeats,\n company.coupon,\n );\n } catch (e) {\n error('createCompany', e);\n return OnBoardingError.dispatch(e);\n }\n\n let invoice = companySubscription.latest_invoice;\n let paymentIntent = invoice.payment_intent;\n if (companySubscription.status === INCOMPLETE) {\n if (invoice.status === OPEN) {\n if (paymentIntent.status === 'requires_action') {\n let result = null;\n\n try {\n result = await stripe.confirmCardPayment(paymentIntent.client_secret, {\n payment_method: paymentMethod.id,\n });\n } catch (e) {\n error('createCompany', e);\n return OnBoardingError.dispatch(e);\n }\n\n if (result.error) {\n error('createCompany', new Error(result.error.message));\n\n return OnBoardingError.dispatch(new Error(result.error.message));\n }\n }\n\n if (paymentIntent.status === 'requires_payment_method') {\n error('createCompany', new Error(paymentIntent.last_payment_error.message));\n\n return OnBoardingError.dispatch(new Error(paymentIntent.last_payment_error.message));\n }\n }\n }\n }\n};\n\n/**\n * Creates a new customer in stripe\n *\n * @param {object} customer - The customer object to create\n *\n * @returns {Promise} The request result\n */\nexport const createCustomer = async (customer) => {\n const client = OnApolloClient.get();\n const withData = Object.keys(customer).length > 0;\n\n const response = await client.mutate({\n mutation: CREATE_STRIPE_CUSTOMER,\n variables: {\n ...(withData ? customer : {}),\n },\n });\n\n return response.data.createStripeCustomer;\n};\n\n/**\n * Retries an invoice with a new payment method\n *\n * @param {string} customerId - The customer id\n * @param {string} paymentMethodId - The payment method id\n * @param {string} priceId - The price id\n * @param {string} subscriptionId - The subscription id\n * @param {number} quantity - The quantity of products to pay per month\n * @returns {Promise} The request result\n */\nexport const retryInvoiceWithNewPaymentMethod = async (\n customerId,\n paymentMethodId,\n priceId,\n subscriptionId,\n quantity,\n) => {\n const response = await fetch(\n `${process.env.REACT_APP_WORKSPACE_ENDPOINT}/webhook/retry-stripe-invoice-webhook`,\n {\n method: 'post',\n body: JSON.stringify({\n customerId,\n paymentMethodId,\n priceId,\n subscriptionId,\n quantity,\n }),\n },\n );\n\n const result = await response.json();\n\n if (!response.ok) {\n const message = result.message ? result.message : 'Something happened, please try again';\n\n throw new Error(message);\n }\n\n if (result.error) throw result;\n\n return {\n subscription: result.subscription,\n paymentMethodId,\n priceId,\n };\n};\n\n/**\n * Processes the company subscription\n *\n * @param {object} company - The company object\n * @param {string} agencyId - The agency id\n *\n * @returns {Promise} The request result\n */\nexport const finalizeCompanySubscription = async (company, agencyId) => {\n const client = OnApolloClient.get();\n const { user } = OnSessionFetch.get();\n\n try {\n await client.mutate({\n mutation: UPDATE_COMPANY_MUTATION,\n variables: {\n data: { id: company.id, status: 'ACTIVE' },\n },\n });\n } catch (e) {\n error('finalizeCompanySubscription', e);\n return OnBoardingError.dispatch(e);\n }\n\n try {\n await client.mutate({\n mutation: UPDATE_USER,\n variables: {\n data: {\n id: user.id,\n selectedAgency: { connect: { id: agencyId } },\n },\n },\n });\n } catch (e) {\n error('finalizeCompanySubscription', e);\n return OnBoardingError.dispatch(e);\n }\n return OnOnBoardingProcessFinished.dispatch();\n};\n\n/**\n * Creates the invitations present on the onboarding screen\n *\n * @param {object} company - The company data to create the invitations from\n *\n * @returns {Promise} The request result\n */\nexport const createInvitations = async (company) => {\n const client = OnApolloClient.get();\n let response = null;\n let errors = [];\n const { id: companyId, agentEmails, managerEmails, adminEmails, agencyId } = company;\n const {\n agencyInvitations: agencyInvs,\n companyInvitations: companyInvs,\n } = generateInvitationsFromEmails(agentEmails, managerEmails, adminEmails);\n\n if (company.subscriptionPlan.isFreeTrial) return;\n\n try {\n onboardingInvitationsValidator(company);\n } catch (e) {\n error('createInvitations', e);\n\n return OnOnBoardingInvitationsCreateError.dispatch(e);\n }\n\n for (const invitation of agencyInvs) {\n try {\n response = await client.mutate({\n mutation: CREATE_INVITATION,\n variables: {\n data: {\n email: invitation.email,\n type: invitation.type,\n agency: { connect: { id: agencyId } },\n },\n },\n });\n } catch (e) {\n error('createInvitations', e);\n\n errors.push(invitation.email);\n }\n }\n\n for (const invitation of companyInvs) {\n try {\n response = await client.mutate({\n mutation: CREATE_INVITATION_COMPANY,\n variables: {\n data: {\n email: invitation.email,\n type: invitation.type,\n company: { connect: { id: companyId } },\n },\n },\n });\n } catch (e) {\n error('createInvitations', e);\n\n errors.push(invitation.email);\n }\n }\n\n if (errors.length > 0) {\n const message = errors.join(', ');\n OnOnBoardingInvitationsCreateError.dispatch({\n message: \"The following invitations couldn't be sent, please try again manually: \" + message,\n });\n }\n\n log('createInvitations', response);\n\n return response;\n};\n","import { log, error } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../shared/session/session-events';\nimport { updateCompanyValidator } from './company-validators';\nimport {\n COMPANIES_QUERY,\n COMPANY_QUERY,\n SUBSCRIPTION_PLANS_QUERY,\n UPDATE_COMPANY_MUTATION,\n} from './company-queries';\nimport {\n OnCompanyError,\n OnCompanyfetched,\n OnCompanyUpdated,\n OnfetchCompanyList,\n OnSubcriptionPlansListError,\n OnSubcriptionPlansListEvent,\n} from './campany-events';\n\n/**\n * Creates a filter object\n *\n * @param {object} data - the data used to filter the search\n *\n * @returns {object} the filter object\n */\nconst createFilter = (data) => {\n return { id: { in: data.companyIds } };\n};\n\n/**\n * Created a filter object for subscription plans\n *\n * @param {object} data - The data used to filter the results\n *\n * @returns {object} The filter object\n */\nexport const createSubscriptionPlansFilter = (data) => {\n const filter = {};\n\n if (data.isFreeTrial !== undefined) filter.isFreeTrial = { equals: data.isFreeTrial };\n\n return filter;\n};\n\n/**\n * Fetches the company given the filter data\n *\n * @param {number} id - The company's id\n * @param {string} userID - The user id\n *\n * @returns {Promise} The request result\n */\nexport const fetchCompany = async (id, userID) => {\n const client = OnApolloClient.get();\n const filterAdmins = { user: { id: { not_equals: userID } } };\n\n let response;\n try {\n response = await client.query({\n query: COMPANY_QUERY,\n variables: { id, filterAdmins },\n });\n } catch (e) {\n error('fetchCompany', e);\n return OnCompanyError.dispatch(e);\n }\n\n log('fetchCompany', response.data);\n OnCompanyfetched.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Fetches the companies given the filter data\n *\n * @param {object} data - Object that contains filter data\n * @param {string} userID - The user id\n *\n * @returns {Promise} The request result\n */\nexport const fetchCompanies = async (data, userID) => {\n const client = OnApolloClient.get();\n const filter = createFilter(data);\n const filterAdmins = { user: { id: { not_equals: userID } } };\n\n let response;\n try {\n response = await client.query({\n query: COMPANIES_QUERY,\n fetchPolicy: 'no-cache',\n variables: { filter, filterAdmins },\n });\n } catch (e) {\n error('fetchCompanies', e);\n return OnCompanyError.dispatch(e);\n }\n\n log('fetchCompanies', response.data);\n OnfetchCompanyList.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Fetches the subscription plans for the company.\n *\n * @param {object} filters - The filter object\n *\n * @returns {Promise} The data.\n */\nexport const fetchSubscriptionPlans = async (filters = {}) => {\n const client = OnApolloClient.get();\n const filter = createSubscriptionPlansFilter(filters);\n let response = null;\n\n try {\n response = await client.query({\n query: SUBSCRIPTION_PLANS_QUERY,\n variables: { filter },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchSubscriptionPlans: ', e);\n return OnSubcriptionPlansListError.dispatch(e);\n }\n\n log('fetchSubscriptionPlans', response.data);\n return OnSubcriptionPlansListEvent.dispatch(response.data);\n};\n\n/**\n * Updates the company in db\n *\n * @param {object} company - The company object\n * @param {string} userID - The user id\n * @returns {void}\n */\nexport const updateCompany = async (company, userID) => {\n const client = OnApolloClient.get();\n\n const variables = {\n data: {\n name: company.name,\n },\n filter: {\n id: company.id,\n },\n filterAdmins: {\n user: {\n id: { not_equals: userID },\n },\n },\n };\n\n let response;\n try {\n updateCompanyValidator(company);\n\n response = await client.mutate({\n mutation: UPDATE_COMPANY_MUTATION,\n variables,\n });\n\n log('updateCompany', response.data);\n } catch (e) {\n error('updateCompany', e);\n return OnCompanyError.dispatch(e);\n }\n\n OnCompanyUpdated.dispatch(response.data);\n return response.data;\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchSubscriptionPlans } from '../company/company-actions';\nimport { LIST_INITIAL_STATE } from '../../shared/constants';\nimport { onErrorMixinFC } from '../../shared/mixins';\nimport {\n OnSubcriptionPlansListError,\n OnSubcriptionPlansListEvent,\n} from 'modules/company/campany-events';\n\n/**\n * Fetches subscription plans available\n *\n * @param {object} filters -Filters object\n *\n * @returns {object} The list fetching state\n */\nexport function useSubscriptionPlans(filters = {}) {\n const [state, setState] = useState(LIST_INITIAL_STATE);\n const [filter, setFilter] = useState(filters);\n\n const fetch = useCallback(() => {\n setState((state) => ({\n ...state,\n loading: true,\n }));\n\n fetchSubscriptionPlans(filter);\n }, [filter]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n useEventSubscription(OnSubcriptionPlansListEvent, ({ subscriptionPlansList }) => {\n setState((state) => ({\n ...state,\n loading: false,\n count: subscriptionPlansList.count,\n items: subscriptionPlansList.items,\n }));\n });\n\n useEventSubscription(OnSubcriptionPlansListError, onErrorMixinFC);\n\n return {\n ...state,\n setFilter,\n fetch,\n };\n}\n","import { useState, useEffect } from 'react';\nimport { FETCH_COMPANY_FOR_BILLING_STATUS, COMPANY_BILLING_SUBSCRIPTION } from './company-queries';\nimport { useQuery } from '@apollo/client/react/hooks';\n\n/**\n * Hook that uses the company billing status\n *\n * @param {string} id - The company id\n *\n * @returns {object} - The company billing status\n */\nexport function useCompany(id) {\n const [companyId, setCompanyId] = useState(id ? id : 'fake-company-id');\n const { data, loading, error, subscribeToMore, startPolling, stopPolling } = useQuery(\n FETCH_COMPANY_FOR_BILLING_STATUS,\n {\n variables: { id: companyId ? companyId : 'fake-company-id' },\n fetchPolicy: 'network-only',\n },\n );\n\n useEffect(() => {\n if (companyId) {\n const unsubscribe = subscribeToMore({\n document: COMPANY_BILLING_SUBSCRIPTION,\n variables: { id: companyId },\n updateQuery: (prev, { subscriptionData }) => {\n if (!subscriptionData.data) return prev;\n\n return subscriptionData.data.Company.node;\n },\n });\n\n return () => unsubscribe();\n }\n }, [companyId, subscribeToMore]);\n\n return {\n data,\n loading,\n error,\n setCompany: setCompanyId,\n startPolling,\n stopPolling,\n };\n}\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchValidCoupon } from '../billing-actions';\nimport { OnValidCouponFetch } from '../billing-events';\nimport PropTypes from 'prop-types';\nimport {\n Paper,\n Input,\n Button as BoostButton,\n Column as BoostColumn,\n Row as BoostRow,\n Text as BoostText,\n Icon,\n styled,\n} from '@8base/boost';\n\nconst Card = styled(Paper)`\n width: 100%;\n box-shadow: none !important;\n border: 1px solid #d0d7dd;\n margin-top: 15px;\n`;\n\nconst Text = styled(BoostText)`\n font-size: 1.3rem !important;\n`;\n\nconst Button = styled(BoostButton)`\n border: none;\n box-shadow: none !important;\n`;\n\nconst Column = styled(BoostColumn)`\n padding: 16px;\n`;\n\nconst Footer = styled(BoostRow)`\n border-top: 1px solid #cfd7de;\n padding: 8px 16px;\n`;\n\nexport const CouponInput = ({ onChange }) => {\n const [text, setText] = useState('');\n const [coupon, setCoupon] = useState(null);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (text) {\n setLoading(true);\n\n const timeout = window.setTimeout(() => fetchValidCoupon(text), 1000);\n\n return () => window.clearTimeout(timeout);\n } else {\n setLoading(false);\n }\n }, [text]);\n\n useSubscription(\n OnValidCouponFetch,\n (value) => {\n setLoading(false);\n setCoupon(value);\n },\n [],\n );\n\n const handleClear = useCallback(() => {\n setCoupon(null);\n onChange('');\n }, [onChange]);\n\n const handleBlur = useCallback(() => {\n onChange(text);\n }, [text, onChange]);\n\n return (\n \n \n \n GET A DISCOUNT\n \n {((!text && !coupon) || loading) && (\n Redeem your coupon to get a discount\n )}\n {text && !loading && !coupon && (\n The code you entered does not belong to any active coupon\n )}\n {!loading && coupon && (\n \n {coupon.percentage}% off on every seat you buy for the next {coupon.months} months\n \n )}\n \n \n \n );\n};\n\nCouponInput.propTypes = {\n onChange: PropTypes.func.isRequired,\n};\n","import React, { useState, useCallback, useEffect } from 'react';\n//import 'react-phone-number-input/style.css';\nimport PhoneInput from 'react-phone-number-input/input';\nimport { log } from '@cobuildlab/pure-logger';\nimport { SUBSCRIPTION_STATUS, COMPANY_STATUS } from '@cobuildlab/lead-volt-share';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport { Grid, Column, InputField, Label, Loader, Row, styled, SelectField } from '@8base/boost';\nimport { DialogForm, FormTitle, TagsInput, SelectInput } from '../../../shared/components';\nimport { PlanCard } from '../../company/components/PlanCard';\nimport useDebounce from 'shared/utils/useDebounce';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport {\n IconCompanyInformation,\n IconBillingInformation,\n IconAgencyInformation,\n IconSubscriptionPlan,\n} from '../../../shared/components/ui/Icons';\nimport { PaymentForm } from '../../my-account/billing/payment-method/components/PaymentForm';\nimport { useElements, useStripe } from '@stripe/react-stripe-js';\nimport { model } from '../../company/company-model';\nimport {\n createCompany,\n finalizeCompanySubscription,\n createInvitations,\n} from '../onboarding-actions';\nimport { fetchSession } from '../../auth/auth.actions';\nimport { useSubscriptionPlans } from '../onboarding-hooks';\nimport PropTypes from 'prop-types';\nimport * as R from 'ramda';\nimport { OnSessionError, OnSessionFetch } from '../../../shared/session/session-events';\nimport { useCompany } from '../../company/company-hooks';\nimport * as Toast from '../../../shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { isValidInteger } from '../../../shared/validators';\nimport { CouponInput } from '../../my-account/billing/components/CouponInput';\nimport { GET_MEMBERSHIP_INFO } from 'modules/company/company-queries';\nimport {\n OnBoardingError,\n OnCreateCompanyEvent,\n OnOnBoardingInvitationsCreateError,\n OnOnBoardingProcessFinished,\n} from '../onboarding-events';\n\nconst { TRIALING, ACTIVE } = SUBSCRIPTION_STATUS;\nconst { PENDING } = COMPANY_STATUS;\n\nconst Error = styled(Label)`\n color: #fe4b3d !important;\n`;\n\nconst emailRegexp = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@(([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{2,})$/;\n\nconst CompanyForm = ({ id, isOpen, onCloseForm }) => {\n const stripe = useStripe();\n const elements = useElements();\n const { data, loading: loadingCompany, setCompany, startPolling, stopPolling } = useCompany(id);\n const [loading, setLoading] = useState(true);\n const [form, setForm] = useState(R.clone(model));\n const [loadingSubmit, setLoadingSubmit] = useState(false);\n const [hasMembershipCode, setHasMembershipCode] = useState(false);\n const [loadingMembershipLookup, setLoadingMembershipLookup] = useState(false);\n const [customerId, setCustomerId] = useState(null);\n const [paymentMethod, setPaymentMethod] = useState(null);\n const [parentCompanyName, setParentCompanyName] = useState(null);\n const { items: subscriptionPlans, loading: loadingPlans } = useSubscriptionPlans();\n const client = OnApolloClient.get();\n\n useEffect(() => {\n startPolling(5 * 1000);\n return () => stopPolling();\n }, [startPolling, stopPolling]);\n\n useEffect(() => {\n if (stripe && elements && !loadingPlans && !loadingCompany) {\n setLoading(false);\n }\n }, [stripe, elements, loadingPlans, loadingCompany]);\n\n /**\n * When subscription plans list finish loading\n * select the first one in the list\n */\n useEffect(() => {\n if (subscriptionPlans.length > 0) {\n setForm((state) => ({\n ...state,\n subscriptionPlan:\n state.subscriptionPlan === null ? subscriptionPlans[0] : state.subscriptionPlan,\n }));\n }\n }, [subscriptionPlans]);\n\n /**\n * In case the subscription plan is a free trial, erase all information\n * related to the credit card\n */\n useEffect(() => {\n if (form.subscriptionPlan && form.subscriptionPlan.isFreeTrial) {\n setForm((state) => ({\n ...state,\n cardHolderName: '',\n addressLine1: '',\n addressLine2: '',\n country: '',\n city: '',\n state: '',\n }));\n }\n }, [form.subscriptionPlan]);\n\n const debouncedMembershipCode = useDebounce(form.membershipCode, 1000);\n /**\n *\n * Debounce membership code that is input and populate fields with data from parent company\n */\n useEffect(() => {\n async function fetchMembershipCode() {\n setLoadingMembershipLookup(true);\n return await client.query({\n query: GET_MEMBERSHIP_INFO,\n variables: { membershipCode: debouncedMembershipCode },\n });\n }\n if (debouncedMembershipCode) {\n fetchMembershipCode()\n .then((res) => {\n //console.log('membershipCodeFetched', res.data);\n setLoadingMembershipLookup(false);\n if (res?.data?.company?.id) {\n //console.log('entered the if!');\n let paymentMethod = res.data.company?.companyPaymentMethods.items[0].paymentMethodId;\n let custId = res.data.company?.subscriptions.items[0].stripeCustomerId;\n let company_name = res.data.company?.name;\n setHasMembershipCode(true);\n setCustomerId(custId);\n setParentCompanyName(company_name);\n setPaymentMethod(paymentMethod);\n } else {\n if (hasMembershipCode) {\n setHasMembershipCode(false);\n }\n }\n })\n .catch((err) => {\n console.log('error fetching membership code', err);\n });\n }\n }, [debouncedMembershipCode]);\n\n useEffect(() => {\n if (!form.membershipCode) {\n setHasMembershipCode(false);\n }\n }, [form.membershipCode]);\n\n /*useEffect(() => {\n console.log('hasMembershipCode', hasMembershipCode);\n console.log('customerId', customerId);\n console.log('paymentMethod', paymentMethod);\n console.log('parent company name', parentCompanyName);\n }, [hasMembershipCode, paymentMethod, customerId, parentCompanyName]);\n useEffect(() => {\n console.log('membershipCodeLoading?', loadingMembershipLookup);\n }, [loadingMembershipLookup]);*/\n /**\n * In case the number of seats of the plan is just the currently\n * authenticated user, remove all invitations information\n */\n useEffect(() => {\n if (isValidInteger(form.numberOfSeats, true) && parseInt(form.numberOfSeats) === 0) {\n setForm((state) => ({\n ...state,\n agentEmails: [],\n managerEmails: [],\n adminEmails: [],\n }));\n }\n }, [form.numberOfSeats]);\n\n /**\n * Effect that is executed on every company change,\n * works with a GraphQL subscription\n */\n useEffect(() => {\n if (data?.company) {\n log('company', data?.company);\n\n const [paymentMethod] = data.company.companyPaymentMethods.items;\n const [subscription] = data.company.subscriptions.items;\n const [invoice] = data.company.companyInvoices.items;\n\n setForm((state) => ({\n ...state,\n id: data.company.id,\n name: data.company.name,\n taxId: data.company.taxId,\n agencyId: data.company.agencyCompanyRelation.items[0].id,\n agencyName: data.company.agencyCompanyRelation.items[0].name,\n cardHolderName: paymentMethod ? paymentMethod.nameOnCard : state.cardHolderName,\n addressLine1: paymentMethod ? paymentMethod.addressLine1 : state.addressLine1,\n addressLine2: paymentMethod ? paymentMethod.addressLine2 : state.addressLine2,\n city: paymentMethod ? paymentMethod.city : state.city,\n state: paymentMethod ? paymentMethod.state : state.state,\n callerIdName: data.company.agencyCompanyRelation.items[0].callerIdName,\n card: {\n ...state.card,\n last4: paymentMethod?.last4,\n expireDate: paymentMethod?.expireDate,\n paymentMethodId: paymentMethod?.paymentMethodId,\n },\n invoice: invoice ? invoice : null,\n subscriptionPlan: subscription ? subscription.subscriptionPlan : state.subscriptionPlan,\n companySub: subscription,\n numberOfSeats: subscription ? subscription.numberOfSeats : state.numberOfSeats,\n }));\n\n if (data.company.status === PENDING) {\n if (\n invoice &&\n subscription &&\n (subscription.status === TRIALING || subscription.status === ACTIVE)\n ) {\n setLoadingSubmit(true);\n\n finalizeCompanySubscription(data.company, data.company.agencyCompanyRelation.items[0].id);\n }\n }\n }\n }, [data]);\n\n useSimpleSubscription(OnCreateCompanyEvent, ({ company }) => {\n setCompany(company.id);\n });\n\n useSimpleSubscription(OnOnBoardingProcessFinished, async () => {\n Toast.success('Success', 'Loading information...');\n\n await createInvitations(form);\n console.log('FETCH SESSION');\n fetchSession();\n });\n\n useSimpleSubscription(\n OnSessionFetch,\n () => {\n setLoadingSubmit(false);\n },\n [],\n );\n useSimpleSubscription(OnOnBoardingInvitationsCreateError, ({ message }) => {\n Toast.warn(message);\n });\n\n useSimpleSubscription(\n OnSessionError,\n (e) => {\n onErrorMixinFC(e);\n\n setLoadingSubmit(false);\n },\n [],\n );\n\n useSimpleSubscription(OnBoardingError, (e) => {\n onErrorMixinFC(e);\n\n setLoadingSubmit(false);\n });\n\n const onChange = useCallback((name, value) => {\n setForm((state) => ({\n ...state,\n [name]: value,\n }));\n }, []);\n\n const onSeatsChange = useCallback((change) => {\n setForm((state) => ({\n ...state,\n numberOfSeats: typeof change === 'number' ? change : change(state.numberOfSeats),\n }));\n }, []);\n\n const onSubmit = useCallback(async () => {\n if (!stripe || !elements) return;\n let membershipInfo = {\n hasMembershipCode,\n customerId,\n paymentMethod,\n };\n\n setLoadingSubmit(true);\n const company = R.clone(form);\n\n if (data?.company) {\n const [subscription] = data.company.subscriptions.items;\n\n if (subscription && (subscription.status === TRIALING || subscription.status === ACTIVE)) {\n finalizeCompanySubscription(\n data.company.id,\n data.company.agencyCompanyRelation.items[0].id,\n );\n } else {\n createCompany(stripe, elements, company, membershipInfo);\n }\n } else {\n createCompany(stripe, elements, company, membershipInfo);\n }\n }, [stripe, elements, form, data]);\n\n const handleValidationReject = useCallback((failedEmails) => {\n const result = failedEmails.filter((item) => item.length !== 0);\n\n if (result.length > 0) {\n Toast.warn('To invite a user you should use a valid email');\n }\n }, []);\n\n const hasMoreThan1Seat =\n form.subscriptionPlan &&\n !form.subscriptionPlan.isFreeTrial &&\n isValidInteger(form.numberOfSeats, true) &&\n parseInt(form.numberOfSeats) > 0;\n\n const businessOptions = [\n { value: 'Limited Liability Corporation', label: 'LLC' },\n { value: 'Corporation', label: 'CORPORATION' },\n { value: 'Sole Proprietorship', label: 'SOLE PROPRIETORSHIP' },\n { value: 'Co-operative', label: 'CO-OPERATIVE' },\n { value: 'Partnership', label: 'PARTNERSHIP' },\n { value: 'Non-profit Corporation', label: 'NON-PROFIT CORPORATION' },\n ];\n\n const plans = subscriptionPlans\n .filter((plan) => {\n const subscription = data?.company?.subscriptions.items[0];\n\n if (subscription) {\n return subscription.subscriptionPlan.id === plan.id;\n }\n\n return true;\n })\n .map((plan) => {\n const subscription = data?.company?.subscriptions.items[0];\n\n return (\n onChange('subscriptionPlan', subscription)}\n onQuantityChange={onSeatsChange}\n readOnly={subscription ? true : false}\n />\n );\n });\n\n return (\n \n \n \n \n \n\n onChange('businessType', value),\n }}\n />\n\n {form.businessType !== 'Sole Proprietorship' ? (\n <>\n onChange('name', value),\n }}\n />\n\n onChange('website', value),\n }}\n />\n {loadingMembershipLookup && Searching for code...}\n {hasMembershipCode && (\n Welcome, {parentCompanyName} member!\n )}\n onChange('membershipCode', value),\n }}\n />\n\n \n \n onChange('taxId', value),\n }}\n />\n \n \n onChange('postalCode', value),\n }}\n />\n \n \n >\n ) : (\n <>\n \n \n onChange('firstName', value),\n }}\n />\n \n \n onChange('lastName', value),\n }}\n />\n \n \n onChange('postalCode', value),\n }}\n />\n \n \n\n \n \n Business Phone Number\n onChange('businessPhone', value)}\n />\n \n \n Mobile Phone Number\n onChange('mobilePhone', value)}\n />\n \n \n onChange('brandName', value),\n }}\n />\n {loadingMembershipLookup && (\n Searching for code...\n )}\n {hasMembershipCode && (\n Welcome, {parentCompanyName} member!\n )}\n onChange('membershipCode', value),\n }}\n />\n >\n )}\n \n onChange('agencyName', value),\n }}\n />\n onChange('callerIdName', value),\n }}\n />\n \n onChange(\n 'agentEmails',\n email.filter((item) => typeof item === 'string' && item.length > 0),\n )\n }\n tags={form.agentEmails}\n disabled={!hasMoreThan1Seat}\n onlyUnique\n validationRegex={emailRegexp}\n onValidationReject={handleValidationReject}\n addOnBlur\n />\n \n onChange(\n 'managerEmails',\n email.filter((item) => typeof item === 'string' && item.length > 0),\n )\n }\n tags={form.managerEmails}\n disabled={!hasMoreThan1Seat}\n onlyUnique\n validationRegex={emailRegexp}\n onValidationReject={handleValidationReject}\n addOnBlur\n />\n \n onChange(\n 'adminEmails',\n email.filter((item) => typeof item === 'string' && item.length > 0),\n )\n }\n tags={form.adminEmails}\n disabled={!hasMoreThan1Seat}\n onlyUnique\n validationRegex={emailRegexp}\n onValidationReject={handleValidationReject}\n addOnBlur\n />\n {!hasMoreThan1Seat && To invite other users you need to buy more seats}\n {form.subscriptionPlan && !form.subscriptionPlan.isFreeTrial && (\n onChange('coupon', value)} />\n )}\n \n \n \n \n \n {loadingPlans && (\n \n \n \n )}\n {plans}\n \n \n \n \n \n \n );\n};\n\nCompanyForm.propTypes = {\n id: PropTypes.string,\n isOpen: PropTypes.bool.isRequired,\n onCloseForm: PropTypes.func.isRequired,\n};\n\nCompanyForm.defaultProps = {\n id: '',\n};\n\nexport { CompanyForm };\n","import React, { useEffect, useState } from 'react';\n\nexport default function useDebounce(func, wait) {\n const [debouncedFunc, setDebouncedFunc] = useState(func);\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedFunc(func);\n }, wait);\n return () => {\n clearTimeout(handler);\n };\n }, [func]);\n return debouncedFunc;\n}\n","import React, { useState } from 'react';\nimport { Apollo } from '../../shared/apollo/Apollo';\nimport { withApollo } from '@apollo/client/react/hoc';\nimport { withAuth } from '@8base/react-sdk';\nimport YesNoDialog from '../../shared/components/YesNoDialog';\nimport { CompanyForm } from './components/CompanyForm';\nimport PropTypes from 'prop-types';\n\nconst CreateCompanyView = (props) => {\n const [isOpen] = useState(true);\n const [logoutIsOpen, setLogoutIsOpen] = useState(false);\n const [showAnnualPrice] = useState(false);\n\n const logout = async () => {\n const { auth, client } = props;\n await client.clearStore();\n localStorage.clear();\n auth.authClient.logout();\n };\n\n const onOpenLogout = () => {\n setLogoutIsOpen(true);\n };\n\n const onCloseLogout = () => {\n setLogoutIsOpen(false);\n };\n\n return (\n <>\n \n \n \n \n >\n );\n};\n\nCreateCompanyView.propTypes = {\n id: PropTypes.string,\n};\n\nCreateCompanyView.defaultProps = {\n id: '',\n};\n\nexport default withAuth(withApollo(CreateCompanyView));\n","import React from 'react';\nimport { Loader } from '@8base/boost';\nimport styled from 'styled-components';\n\nconst MainLoaderContainer = styled.div`\n width: 100vw;\n height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst MainLoader = () => (\n \n \n \n);\n\nexport default MainLoader;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Dialog, Paragraph, Row, Button as BoostButton, useModal } from '@8base/boost';\nimport styled from 'styled-components';\n\nconst Button = styled(BoostButton)`\n ${({ color }) =>\n color === 'primary' &&\n `\n &:hover {\n border: 1px solid #3db4aa !important;\n background-color: #3db4aa !important;\n }\n `}\n`;\n\nexport const modalId = 'decision-dialog';\n\nconst DecisionDialog: React.FC = () => {\n const { isOpen, args } = useModal(modalId);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n setLoading(false);\n }\n }, [isOpen]);\n\n const title = args.title;\n const text = args.text;\n const color = args.color || 'danger';\n const confirmText = args.confirmText;\n const cancelText = args.cancelText;\n const onClose = args.onClose;\n const onCancel = args.onCancel;\n\n const handleConfirm = useCallback(() => {\n setLoading(true);\n\n args.onConfirm();\n }, [args]);\n\n return (\n \n \n \n {text}\n \n \n \n \n {cancelText}\n \n \n {confirmText}\n \n \n \n \n );\n};\n\nexport default DecisionDialog;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Dialog, Paragraph, Row, Column, Button, useModal } from '@8base/boost';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { SUBSCRIPTION_STATUS } from '@cobuildlab/lead-volt-share';\nimport { OnSessionError } from '../../../shared/session/session-events';\nimport { updateMeta } from '../../auth/auth.actions';\nimport { META_AGENCY_SELECTED_NAME } from '../../../shared/constants/meta';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport MainLoader from '../../../shared/components/ui/MainLoader';\nimport { withApollo } from '@apollo/client/react/hoc';\nimport { withAuth } from '@8base/react-sdk';\nimport DecisionDialog from '../../../shared/components/dialog/DecisionDialog';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport PropTypes from 'prop-types';\n\n/**\n * Switch agency view\n *\n * @param {object} props - The component props object\n * @param {object} props.auth - The 8base auth object\n * @param {object} props.client - The 8base apollo client\n *\n * @returns {React.FC} The component to render\n */\nfunction SwitchAgencyView({ auth, client }) {\n const [user] = useUser();\n const [loading, setLoading] = useState(true);\n const { openModal, closeModal } = useModal('decision-dialog');\n\n useEffect(() => {\n const selectAgency = user.userAgencyUserRelation.items.find(({ agency }) => {\n const [subscription] = agency.company.subscriptions.items;\n\n return (\n subscription.status === SUBSCRIPTION_STATUS.ACTIVE ||\n subscription.status === SUBSCRIPTION_STATUS.TRIALING\n );\n });\n\n if (selectAgency) {\n const {\n agency: { id },\n } = selectAgency;\n updateMeta(META_AGENCY_SELECTED_NAME, id);\n } else {\n setLoading(false);\n }\n }, [user]);\n\n const handleLogout = useCallback(async () => {\n await client.clearStore();\n localStorage.clear();\n auth.authClient.logout();\n }, [client, auth]);\n\n const handleCancel = useCallback(() => {\n openModal('decision-dialog', {\n title: 'Logout',\n text: 'Are you sure you want to log out?',\n confirmText: 'Yes, logout',\n cancelText: 'Cancel',\n onClose: () => closeModal('decision-dialog'),\n onCancel: () => closeModal('decision-dialog'),\n onConfirm: () => handleLogout(),\n });\n }, [handleLogout, openModal, closeModal]);\n\n useSubscription(\n OnSessionError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n if (loading) return ;\n\n return (\n \n \n \n \n \n It looks like the service of the company you are trying to access haven not been paid,\n please contact the people in charge of this enterprise so they can put the service back\n on\n \n \n \n \n \n \n Log out\n \n \n \n \n \n );\n}\n\nSwitchAgencyView.propTypes = {\n auth: PropTypes.shape({\n authClient: PropTypes.shape({\n logout: PropTypes.func.isRequired,\n }).isRequired,\n }).isRequired,\n client: PropTypes.shape({\n clearStore: PropTypes.func.isRequired,\n }).isRequired,\n};\n\nexport default withAuth(withApollo(SwitchAgencyView));\n","import React, { useState, useEffect } from 'react';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport { withApollo } from '@apollo/client/react/hoc';\nimport { withAuth } from '@8base/react-sdk';\nimport YesNoDialog from '../../shared/components/YesNoDialog';\nimport { fetchSession, updateMeta, skipInvitations } from '../auth/auth.actions';\nimport { META_AGENCY_SELECTED_NAME } from '../../shared/constants/meta';\nimport { OnSessionFetch } from '../../shared/session/session-events';\nimport { DialogInvitations } from './components/DialogInvitations';\nimport {\n declineAgencyInvitation,\n acceptAgencyInvitation,\n} from '../agency-invitation/agency-invitation-actions';\nimport {\n declineCompanyInvitation,\n acceptCompanyInvitation,\n} from '../company-invitation/company-invitation-actions';\nimport * as R from 'ramda';\nimport { onErrorMixinFC } from '../../shared/mixins';\nimport { getPendingInvitations } from '../../shared/utils/invitations-utils';\nimport {\n OnAcceptAgencyInvitationEvent,\n OnAgencyInvitationError,\n OnDeclineAgencyInvitationEvent,\n} from 'modules/agency-invitation/agency-invitation-events';\nimport {\n OnAcceptCompanyinvitationEvent,\n OnCompanyinvitationError,\n OnDeclineCompanyinvitationEvent,\n} from 'modules/company-invitation/company-invitation-events';\n\nconst InvitationsView = () => {\n const [isOpen] = useState(true);\n const [isLoading, setIsLoading] = useState(false);\n const [isSkipOpen, setIsSkipOpen] = useState(false);\n const [agencyInvitations, setAgencyInvitations] = useState([]);\n const [companyInvitations, setCompanyInvitations] = useState([]);\n\n const setInvitations = () => {\n const { agencyInvitationsList, companyInvitationsList } = OnSessionFetch.get();\n const [pendingAgencyInvitations, pendingCompanyInvitations] = getPendingInvitations(\n agencyInvitationsList,\n companyInvitationsList,\n );\n\n if (!pendingAgencyInvitations.length && !pendingCompanyInvitations.length) {\n return skipInvitations();\n }\n setIsLoading(false);\n setAgencyInvitations(agencyInvitationsList.items);\n setCompanyInvitations(companyInvitationsList.items);\n };\n\n const onSkipOpen = () => {\n setIsSkipOpen(true);\n };\n\n const onSkipClose = () => {\n setIsSkipOpen(false);\n };\n\n const onAcceptAgencyInvitation = (invitation) => {\n setIsLoading(true);\n acceptAgencyInvitation(R.clone(invitation));\n };\n\n const onDeclineAgencyInvitation = (invitation) => {\n setIsLoading(true);\n declineAgencyInvitation(R.clone(invitation));\n };\n\n const onAcceptCompanyInvitation = (invitation) => {\n setIsLoading(true);\n acceptCompanyInvitation(R.clone(invitation));\n };\n\n const onDeclineCompanyInvitation = (invitation) => {\n setIsLoading(true);\n\n declineCompanyInvitation(R.clone(invitation));\n };\n\n useSimpleSubscription(OnAgencyInvitationError, (err) => {\n if (err) {\n setIsLoading(false);\n onErrorMixinFC(err);\n }\n });\n\n useSimpleSubscription(OnAcceptAgencyInvitationEvent, async ({ agencyUser }) => {\n await updateMeta(META_AGENCY_SELECTED_NAME, agencyUser.agency.id);\n await fetchSession();\n setInvitations();\n });\n\n useSimpleSubscription(OnDeclineAgencyInvitationEvent, async (data) => {\n await fetchSession();\n setInvitations();\n });\n\n useSimpleSubscription(OnCompanyinvitationError, (err) => {\n if (err) {\n setIsLoading(false);\n onErrorMixinFC(err);\n }\n });\n\n useSimpleSubscription(\n OnAcceptCompanyinvitationEvent,\n async ({\n agencyUsersUpdate: {\n items: { 0: agencyUser },\n },\n }) => {\n await updateMeta(META_AGENCY_SELECTED_NAME, agencyUser.agency.id);\n await fetchSession();\n setInvitations();\n },\n );\n\n useSimpleSubscription(OnDeclineCompanyinvitationEvent, async () => {\n await fetchSession();\n setInvitations();\n });\n\n useEffect(() => {\n setInvitations();\n }, []);\n\n return (\n <>\n \n \n >\n );\n};\nexport default withAuth(withApollo(InvitationsView));\n","import React from 'react';\nimport { useCompany } from '../../modules/company/company-hooks';\n\n/**\n * Higher order component that injects the current company\n *\n * @param {React.Component} WrappedComponent - The component to wrap\n *\n * @returns {React.Fc} The component to render\n */\nconst withCompany = (WrappedComponent) => (props) => {\n const company = useCompany();\n\n return ;\n};\n\nexport default withCompany;\n","import Rollbar from 'rollbar';\n\nexport const rollbar = new Rollbar({\n accessToken: process.env.REACT_APP_ROLLBAR_TOKEN,\n captureUncaught: true,\n captureUnhandledRejections: true,\n enabled: process.env.NODE_ENV === 'production',\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withApollo } from '@apollo/client/react/hoc';\nimport { log } from '@cobuildlab/pure-logger';\nimport { compose } from 'recompose';\nimport { withRouter, Redirect } from 'react-router-dom';\nimport { View as SimpleView } from '@cobuildlab/react-simple-state';\nimport { withAuth } from '@8base/react-sdk';\nimport { SUBSCRIPTION_STATUS, COMPANY_STATUS } from '@cobuildlab/lead-volt-share';\nimport {\n OnSessionError,\n OnApolloClient,\n OnSessionFetch,\n OnMetaUpdate,\n OnInvitationsSkipped,\n OnSelectedAgencyChange,\n OnTokenExpired,\n} from '../session/session-events';\nimport CreateCompanyView from '../../modules/onboarding/CreateCompanyView';\nimport SwitchAgencyView from '../../modules/agency/components/SwitchAgencyView';\nimport InvitationsView from '../../modules/onboarding/InvitationsView';\nimport { fetchSession } from '../../modules/auth/auth.actions';\nimport withCompany from '../hoc/withCompany';\nimport MainLoader from './ui/MainLoader';\nimport { rollbar } from '../../shared/rollbar';\nimport { getUserAgencies } from '../../shared/utils/agency-utils';\nimport { getAdminCompanies } from '../../shared/utils/company-utils';\nimport { getPendingInvitations } from '../../shared/utils/invitations-utils';\nimport * as toast from '../../shared/components/toast/Toast';\n\nconst { CANCELED, UNPAID } = SUBSCRIPTION_STATUS;\nconst { ACTIVE } = COMPANY_STATUS;\n\n/**\n * User Session component\n */\nclass Session extends SimpleView {\n constructor(props) {\n super(props);\n\n this.state = {\n isLoading: true,\n sessionRequired: true,\n apolloRequired: true,\n skipInvitations: false,\n sessionError: false,\n systemHasError: false,\n rollbar,\n };\n\n this.throwError = this.throwError.bind(this);\n }\n\n static getDerivedStateFromError(error) {\n // Update the status so that the following rendering shows the spare interface\n return { systemHasError: true };\n }\n\n componentDidCatch(error, errorInfo) {\n if (!process.env.NODE_ENV || process.env.NODE_ENV === 'development') {\n console.log(`Error: ${error}`);\n console.log(`ErrorInfo: ${JSON.stringify(errorInfo)}`);\n }\n\n toast.error(`${error}`);\n\n // Log the error to an error reporting service\n this.state.rollbar.error(error);\n }\n\n componentDidUpdate(prevProps) {\n const { data: prevComp } = prevProps.company;\n const { data: currComp } = this.props.company;\n\n /**\n * If the company is active but the subscription status\n * has changed to canceled, refresh the page\n */\n if (currComp && currComp.company && currComp.company.status === ACTIVE) {\n if (prevComp && prevComp.company) {\n const [prevSub] = prevComp.company.subscriptions.items;\n const [currSub] = currComp.company.subscriptions.items;\n\n if (prevSub.status !== currSub.status && currSub.status === CANCELED) {\n window.location.reload();\n }\n }\n }\n }\n\n async componentDidMount() {\n this.subscribe(OnSessionError, async (e) => {\n log('OnSessionError:message', e.message);\n\n setTimeout(async () => {\n this.setState({ sessionError: true });\n }, 5000);\n });\n\n this.subscribe(OnApolloClient, () => {\n this.setState({ apolloRequired: false }, fetchSession);\n });\n\n this.subscribe(OnTokenExpired, async () => {\n await this.props.client.clearStore();\n localStorage.clear();\n this.props.auth.authClient.logout();\n });\n\n this.subscribe(OnSessionFetch, async ({ user }) => {\n if (user.selectedAgency) {\n this.props.company.setCompany(user.selectedAgency.company.id);\n }\n\n this.setState({\n isLoading: false,\n sessionRequired: false,\n });\n });\n\n this.subscribe(OnSelectedAgencyChange, () => {\n fetchSession();\n });\n\n this.subscribe(OnInvitationsSkipped, () => {\n this.setState({\n skipInvitations: true,\n });\n });\n\n this.subscribe(OnMetaUpdate, fetchSession);\n\n return OnApolloClient.dispatch(this.props.client);\n }\n\n throwError(msg) {\n throw new Error(msg);\n }\n\n render() {\n const {\n apolloRequired,\n sessionRequired,\n skipInvitations,\n systemHasError,\n sessionError,\n isLoading,\n } = this.state;\n\n if (!this.props.auth.isAuthorized) {\n return ;\n }\n\n if (systemHasError) return null;\n\n if (sessionError && (apolloRequired || sessionRequired)) {\n return this.props.children;\n }\n\n if (apolloRequired || sessionRequired || isLoading) return ;\n\n /**\n * Handle user with no company or agency\n */\n const session = OnSessionFetch.get();\n const agencies = getUserAgencies();\n let company = getAdminCompanies().find((company) => company.status === 'PENDING');\n\n const [agencyInvitations, companyInvitations] = getPendingInvitations(\n session.agencyInvitationsList,\n session.companyInvitationsList,\n );\n\n if (!skipInvitations && (agencyInvitations.length > 0 || companyInvitations.length > 0))\n return ;\n\n if (agencies.length === 0) return ;\n\n if (company) return ;\n\n /**\n * Handle user with subscription not paid or failed\n *\n * 1. Get the status of the subscription and invoice\n * in the company he has selected\n */\n company = session.user.selectedAgency.company;\n const { location } = this.props;\n const [subscription] = company.subscriptions.items;\n\n if (subscription.status === UNPAID || subscription.status === CANCELED) {\n const isAdmin = getAdminCompanies().some((c) => c.id === company.id);\n\n /**\n * 2. If the status on the subscription is different than \"active\" or trialing\n * and he is an admin, redirect him to the billing view; if he is not\n * an admin, then change its selected agency\n */\n if (isAdmin) {\n if (location.pathname !== '/settings/billing') {\n return ;\n }\n } else {\n return ;\n }\n }\n\n return this.props.children;\n }\n}\n\nSession.propTypes = {\n client: PropTypes.any.isRequired,\n children: PropTypes.any.isRequired,\n};\n\nexport default compose(withRouter, withAuth, withApollo, withCompany)(Session);\n","import React from 'react'; // eslint-disable-line @typescript-eslint/no-use-before-define\nimport { Dropdown } from '@8base/boost';\nimport styled from 'styled-components';\n\nconst StyledBody = styled(Dropdown.Body)`\n ${({ left }) => left && `left: ${left} !important;`}\n`;\n\ntype Props = {\n pin?: string;\n left?: string;\n children: React.ReactNode;\n closeOnClickOutside?: boolean;\n};\n\nconst DropdownBodyOnTable: React.FC = ({ children, left, closeOnClickOutside, pin }) => {\n return (\n \n {children}\n \n );\n};\n\nDropdownBodyOnTable.defaultProps = {\n pin: 'right',\n left: undefined,\n closeOnClickOutside: true,\n};\n\nexport { DropdownBodyOnTable };\n","import styled from 'styled-components';\n\nexport const TextEllipsis = styled.p`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n","import React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Table as BoostTable,\n Menu,\n Icon,\n Checkbox,\n Pagination,\n Dropdown,\n Text,\n} from '@8base/boost';\nimport styled from 'styled-components';\nimport { DropdownBodyOnTable } from '../ui/dropdowns/DropdownBodyOnTable';\nimport { IconSort } from '../ui/Icons';\nimport { TextEllipsis } from '../ui/text/TextEllipsis';\n\nconst Table = styled(BoostTable)`\n & div[role='loader'] > div[role='loader'] div {\n border-color: #3db4aa !important;\n }\n`;\n\nconst Body = styled(Table.Body)`\n min-height: 500px;\n`;\n\nconst PaginationContainer = styled.div`\n display: flex;\n justify-content: center;\n font-size: 1.2rem;\n padding: 0 1rem;\n\n & > div > div > *::before {\n background-color: var(--color-primary);\n transition: all 0.2s;\n }\n\n & > div > span {\n display: inline-block;\n padding: 0.5rem 1.5rem;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n }\n`;\n\nconst ActionsCell = styled(Table.BodyCell)`\n display: flex;\n justify-content: flex-start !important;\n`;\n\nconst StyledCell = styled(Table.BodyCell)`\n padding: 8px 16px !important;\n`;\n\nconst CustomHeaderCell = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n`;\n\nconst StyledHeaderCell = styled(Table.HeaderCell)`\n padding-left: 16px !important;\n padding-right: 6px !important;\n`;\n\nconst DataTable = ({\n data,\n Actions,\n columns,\n isLoading,\n columnsSize,\n dropdownOptions,\n withCheck,\n withLabelActions,\n withPagination,\n withIconSort,\n ignoreColumns,\n leftDropdown,\n}) => {\n const paginationCtnRef = useRef();\n\n return (\n \n \n {withCheck && (\n \n \n \n )}\n {columns.map((column, index) => {\n return (\n \n {column.name}\n {withIconSort && }\n \n );\n })}\n {withLabelActions ? 'Actions' : ''}\n \n \n {(row, index) => (\n \n {withCheck && (\n \n \n \n )}\n {Object.keys(row)\n .filter((key) => ignoreColumns.indexOf(key) === -1)\n .map((key, index) => {\n if (columns[index] && columns[index].customBodyRender !== undefined) {\n const { customBodyRender } = columns[index];\n const CustomCellValue = customBodyRender(row, row[key]);\n\n return (\n \n \n \n );\n }\n return (\n \n {row[key]}\n \n );\n })}\n \n {Actions && }\n \n \n \n \n \n {() => (\n \n {dropdownOptions.map((option, index) => (\n option.onClick(row.id)} key={index}>\n {option.name}\n \n ))}\n \n )}\n \n \n \n \n )}\n \n {withPagination && (\n \n \n \n \n \n )}\n \n );\n};\n\nDataTable.propTypes = {\n leftDropdown: PropTypes.string,\n ignoreColumns: PropTypes.array,\n data: PropTypes.array.isRequired,\n Actions: PropTypes.func.isRequired,\n columns: PropTypes.array.isRequired,\n isLoading: PropTypes.bool.isRequired,\n withCheck: PropTypes.bool.isRequired,\n withIconSort: PropTypes.bool.isRequired,\n columnsSize: PropTypes.string.isRequired,\n withPagination: PropTypes.bool.isRequired,\n withLabelActions: PropTypes.bool.isRequired,\n dropdownOptions: PropTypes.array.isRequired,\n};\n\nDataTable.defaultProps = {\n ignoreColumns: [],\n leftDropdown: '0px',\n};\n\nexport default DataTable;\n","import { Link } from 'react-router-dom';\nimport styled from 'styled-components';\n\nconst CustomLink = styled(Link)`\n opacity: 0.9;\n color: #3db4aa;\n font-family: 'Poppins';\n font-size: 14px;\n line-height: 21px;\n text-decoration: none;\n`;\n\nexport default CustomLink;\n","import PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst Margin = styled.div`\n ${(props) => {\n const { top, right, left, bottom } = props;\n\n return `\n margin: ${top} ${right} ${bottom} ${left};\n `;\n }}\n`;\n\nMargin.propTypes = {\n top: PropTypes.string,\n right: PropTypes.string,\n left: PropTypes.string,\n bottom: PropTypes.string,\n};\n\nMargin.defaultProps = {\n top: '0px',\n right: '0px',\n left: '0px',\n bottom: '0px',\n};\n\nexport default Margin;\n","import React from 'react';\nimport { Card as BoostCard, Heading } from '@8base/boost';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport CustomLink from './ui/CustomLink';\nimport Margin from './ui/Margin';\n\nconst StyledHeading = styled(Heading)`\n color: #3db4aa;\n font-size: 60px;\n line-height: 70px;\n font-family: 'Poppins';\n @media (max-width: 1400px) {\n font-size: 45px;\n line-height: 50px;\n }\n`;\n\nconst Text = styled.p`\n color: #323c47;\n font-family: 'Poppins';\n font-weight: 600;\n line-height: 22px;\n @media (min-width: 1400px) {\n font-size: 16px;\n }\n`;\n\nconst Card = styled(BoostCard)`\n flex: 1 1 200px;\n margin: 4px !important;\n`;\n\nconst CardIndicator = ({ title, text, link }) => {\n return (\n \n \n {title}\n {text}\n \n {link.name}\n \n \n \n );\n};\n\nCardIndicator.propTypes = {\n link: PropTypes.object.isRequired,\n text: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n};\n\nexport default CardIndicator;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Heading, Grid } from '@8base/boost';\nimport styled from 'styled-components';\nimport CustomLink from '../ui/CustomLink';\n\nconst StyledLayout = styled(Grid.Layout)`\n padding: 16px 24px;\n\n a {\n text-align: right;\n margin-top: 0px !important;\n }\n`;\n\nconst StyledHeading = styled(Heading)`\n font-family: 'Poppins';\n font-weight: 600 !important;\n line-height: 28px !important;\n font-size: 16px !important;\n color: #323c47 !important;\n`;\n\nconst TableHeader = ({ title, link }) => {\n return (\n \n \n {title}\n \n {link && (\n \n {link.name}\n \n )}\n \n );\n};\n\nTableHeader.propTypes = {\n link: PropTypes.object,\n title: PropTypes.string.isRequired,\n};\nTableHeader.defaultProps = {\n link: { path: '', name: '' },\n};\nexport default TableHeader;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst PaperHeaderContainer = styled.div`\n padding: 16px 24px;\n border-bottom: 1px solid #eaf0f5;\n`;\n\nconst PaperHeader = ({ children }) => {\n return {children};\n};\n\nPaperHeader.propTypes = {\n children: PropTypes.any.isRequired,\n};\n\nexport default PaperHeader;\n","import React from 'react';\nimport { Text } from '@8base/boost';\nimport styled from '@emotion/styled';\nimport { PropTypes } from 'prop-types';\n\n/**\n * Styled title into the card\n */\nconst StyledTitle = styled(Text)`\n font-family: Poppins;\n font-size: 16px;\n line-height: 28px;\n color: #323c47;\n font-weight: 600;\n\n & first-letter {\n text-transform: capitalize;\n }\n`;\n\nconst Title = ({ children }) => {\n return {children};\n};\n\nTitle.propTypes = {\n children: PropTypes.any.isRequired,\n};\n\nexport { Title };\n","import React from 'react';\nimport { Icon } from '@8base/boost';\nimport styled from 'styled-components';\n\nconst Btn = styled.button`\n box-sizing: border-box;\n height: 36px;\n width: 36px;\n border: 1px solid #e2e9ef;\n border-radius: 4px;\n background-color: #ffffff;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n`;\n\nconst PlusBtn = (props) => {\n return (\n \n \n \n );\n};\n\nexport default PlusBtn;\n","import React from 'react';\nimport { Card, Column, Text } from '@8base/boost';\nimport { PropTypes } from 'prop-types';\nimport moment from 'moment';\nimport styled from 'styled-components';\n\nconst PointerCard = styled(Card)`\n margin: 11px !important;\n cursor: pointer;\n width: 60px;\n height: 108px;\n border: 1px solid ${({ active }) => (active ? '#3DB4AA' : '#EAEFF3')};\n border-radius: 8px;\n background-color: #ffffff;\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.06);\n @media screen and (max-width: 1400px) {\n margin-right: 8px !important;\n margin-left: 8px !important;\n }\n @media screen and (max-width: 1300px) {\n width: 50px;\n height: 90px;\n }\n\n @media screen and (max-width: 600px) {\n width: 40px;\n height: 90px;\n margin-right: 5px !important;\n margin-left: 5px !important;\n }\n`;\n\nconst Bar = styled.div`\n width: ${({ width }) => width};\n height: ${({ width }) => width};\n border-radius: 15px;\n background-color: ${({ active }) => (active ? '#3DB4AA' : '')};\n margin: 0 0 7px 0 !important;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst DayComponent = ({ points, active, weekday, date, day, width, onClick }) => {\n const dateToSelect = moment(date).format('YYYY-MM-DD');\n const pointsBackgrounds = ['#3DB4AA', '#F6C01E', '#F46800', '#FF0000', '#9B9B9B'];\n\n return (\n onClick(dateToSelect)}>\n \n \n \n {weekday}\n \n \n \n {day}\n \n \n {points.length > 0\n ? points.map((point, index) => (\n \n ))\n : null}\n \n \n \n );\n};\n\nDayComponent.defaultProps = {\n width: '30px',\n points: 0,\n};\n\nDayComponent.propTypes = {\n points: PropTypes.array,\n width: PropTypes.string,\n date: PropTypes.string.isRequired,\n weekday: PropTypes.string.isRequired,\n day: PropTypes.string.isRequired,\n active: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n};\n\nexport default DayComponent;\n","import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport DayComponent from './DayComponent';\nimport rightArrow from '../../assets/images/right-arrow.svg';\nimport leftArrow from '../../assets/images/left-arrow.svg';\nimport moment from 'moment';\n\nconst WeekComponent = ({ week, selectedDay, onRightClick, onLeftClick, onSelectDay, tasks }) => {\n return (\n <>\n \n {week.map((day, key) => {\n const active = day.fullDate === selectedDay;\n const pointsActives = [];\n const pointsInActives = [];\n tasks.forEach((task) => {\n if (moment(task.date).format('YYYY-MM-DD') === day.fullDate && pointsActives.length < 3) {\n pointsActives.push(task.priority);\n }\n if (\n moment(task.date).format('YYYY-MM-DD') === day.fullDate &&\n pointsInActives.length < 3\n ) {\n pointsInActives.push(4);\n }\n });\n\n return (\n \n );\n })}\n \n >\n );\n};\n\nWeekComponent.propTypes = {\n week: PropTypes.array.isRequired,\n selectedDay: PropTypes.string.isRequired,\n onLeftClick: PropTypes.func.isRequired,\n onRightClick: PropTypes.func.isRequired,\n onSelectDay: PropTypes.func.isRequired,\n tasks: PropTypes.array.isRequired,\n};\n\nexport default WeekComponent;\n","import React from 'react';\nimport { Loader as BoostLoader } from '@8base/boost';\nimport styled from 'styled-components';\n\nconst LoaderContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 10px 0px;\n`;\n\nconst SmallLoader = () => {\n return (\n \n \n \n );\n};\n\nexport default SmallLoader;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Table, Menu, Icon, Dropdown, Text } from '@8base/boost';\nimport styled from 'styled-components';\nimport { DropdownBodyOnTable } from '../ui/dropdowns/DropdownBodyOnTable';\n\nimport SmallLoader from '../ui/SmallLoader';\nimport { TextEllipsis } from '../ui/text/TextEllipsis';\n\nconst TableBody = styled(Table.Body)`\n max-height: 60vh;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst ActionsCell = styled(Table.BodyCell)`\n display: flex;\n justify-content: space-between !important;\n`;\n\nconst StyledCell = styled(Table.BodyCell)`\n padding: 0px 24px !important;\n`;\n\nconst CustomHeaderCell = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n`;\n\nconst StyledHeaderCell = styled(Table.HeaderCell)`\n padding-left: 24px !important;\n padding-right: 6px !important;\n font-weight: 700 !important;\n`;\n\nconst StyledBodyRow = styled(Table.BodyRow)`\n min-height: 37px !important;\n`;\n\nconst StyledHeader = styled(Table.Header)`\n height: 37px !important;\n`;\n\nconst TableLite = ({\n data,\n Actions,\n columns,\n isLoading,\n columnsSize,\n dropdownOptions,\n ignoreColumns,\n leftDropdown,\n}) => {\n return (\n \n \n {columns.map((column, index) => {\n return (\n \n {column.name}\n \n );\n })}\n {''}\n \n {isLoading ? (\n \n ) : (\n \n {(row, index) => (\n \n {Object.keys(row)\n .filter((key) => ignoreColumns.indexOf(key) === -1)\n .map((key, index) => {\n if (columns[index] && columns[index].customBodyRender !== undefined) {\n const { customBodyRender } = columns[index];\n const CustomCellValue = customBodyRender(row, row[key]);\n\n return (\n \n \n \n );\n }\n\n return (\n \n {row[key]}\n \n );\n })}\n \n {Actions && }\n \n \n \n \n \n {() => (\n \n {dropdownOptions.map((option, index) => (\n option.onClick(row.id)} key={index}>\n {option.name}\n \n ))}\n \n )}\n \n \n \n \n )}\n \n )}\n \n );\n};\n\nTableLite.propTypes = {\n Actions: PropTypes.func,\n leftDropdown: PropTypes.string,\n ignoreColumns: PropTypes.array,\n data: PropTypes.array.isRequired,\n columns: PropTypes.array.isRequired,\n isLoading: PropTypes.bool.isRequired,\n columnsSize: PropTypes.string.isRequired,\n dropdownOptions: PropTypes.array.isRequired,\n};\n\nTableLite.defaultProps = {\n ignoreColumns: [],\n leftDropdown: '0px',\n Actions: null,\n};\n\nexport default TableLite;\n","import gql from 'graphql-tag';\n/**\n * Query the current users details.\n */\nexport const CURRENT_USER_QUERY = gql`\n query {\n user {\n id\n email\n lastName\n firstName\n }\n }\n`;\n/**\n * Sign up a new user mutation.\n */\nexport const USER_SIGN_UP_MUTATION = gql`\n mutation UserSignUp($user: UserCreateInput!, $authProfileId: ID) {\n userSignUpWithToken(user: $user, authProfileId: $authProfileId) {\n id\n email\n }\n }\n`;\n","import React from 'react';\nimport { compose } from 'recompose';\nimport { withAuth } from '@8base/react-sdk';\nimport { withApollo } from '@apollo/client/react/hoc';\nimport { Query } from '@apollo/client/react/components';\nimport styled from 'styled-components';\nimport { CURRENT_USER_QUERY } from '../../../graphql';\nimport PropTypes from 'prop-types';\n\nconst Button = styled.button`\n cursor: pointer;\n font-size: 12px;\n`;\n\nclass AuthBtn extends React.Component {\n constructor(props) {\n super(props);\n\n this.renderContent = this.renderContent.bind(this);\n }\n\n renderContent({ loading }) {\n const { auth, client } = this.props;\n\n if (loading) {\n return null;\n }\n\n const Logout = () => (\n {\n await client.clearStore();\n auth.authClient.logout();\n }}>\n Logout\n \n );\n const Login = () => auth.authClient.authorize()}>Sign In;\n\n return <>{auth.isAuthorized ? : }>;\n }\n\n render() {\n return {this.renderContent};\n }\n}\n\nAuthBtn.propTypes = {\n client: PropTypes.shape({\n clearStore: PropTypes.func.isRequired,\n }).isRequired,\n auth: PropTypes.shape({\n isAuthorized: PropTypes.bool.isRequired,\n authClient: PropTypes.shape({\n logout: PropTypes.func.isRequired,\n authorize: PropTypes.func.isRequired,\n }).isRequired,\n }).isRequired,\n};\n\nexport default compose(withApollo, withAuth)(AuthBtn);\n","import React from 'react';\nimport { Button, Text } from '@8base/boost';\nimport styled from '@emotion/styled';\nimport { PropTypes } from 'prop-types';\n\nconst StyledButton = styled(Button)`\n box-sizing: border-box;\n height: 36px;\n border: 1px solid #d0d7dd;\n opacity: 0.9;\n border-radius: 5px;\n background-color: #ffffff;\n padding: 0px 16px !important;\n width: auto;\n\n &:hover {\n background-color: #ffffff;\n border: 1px solid #d0d7dd;\n }\n`;\n\nconst StyledText = styled(Text)`\n height: 18px;\n opacity: 0.9;\n color: #323c47;\n font-family: Poppins;\n font-size: 13px;\n line-height: 18px;\n text-align: center;\n font-weight: 600;\n\n & first-letter {\n text-transform: capitalize;\n }\n`;\n\nconst ButtonIcon = ({ onClick, text = '', iconSvg, ...rest }) => {\n return (\n \n \n {text}\n \n );\n};\n\nButtonIcon.propTypes = {\n onClick: PropTypes.func,\n text: PropTypes.string,\n iconSvg: PropTypes.string.isRequired,\n};\n\nButtonIcon.defaultProps = {\n text: '',\n onClick: () => {},\n};\n\nexport { ButtonIcon };\n","import React from 'react';\nimport { Button, Text } from '@8base/boost';\nimport styled from '@emotion/styled';\nimport { PropTypes } from 'prop-types';\n\n/**\n *\n * @param props\n * @returns {*}\n * @class\n */\n\nconst StyledButton = styled(Button)`\n box-sizing: border-box;\n height: 36px;\n border: 1px solid #d0d7dd;\n opacity: 0.9;\n border-radius: 5px;\n background-color: #ffffff;\n width: auto !important;\n padding: 0px 16px !important;\n\n &:hover {\n background-color: #ffffff;\n border: 1px solid #d0d7dd;\n }\n`;\n\nconst StyledText = styled(Text)`\n height: 18px;\n opacity: 0.9;\n color: #323c47;\n font-family: Poppins;\n font-size: 13px;\n line-height: 18px;\n text-align: center;\n font-weight: 600;\n\n & first-letter {\n text-transform: capitalize;\n }\n`;\n\nconst ButtonWithoutIcon = ({ onClick, text = '', ...rest }) => {\n return (\n \n {text}\n \n );\n};\n\nButtonWithoutIcon.propTypes = {\n onClick: PropTypes.func.isRequired,\n text: PropTypes.string,\n};\n\nButtonWithoutIcon.defaultProps = {\n text: '',\n};\n\nexport { ButtonWithoutIcon };\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport moment from 'moment';\nimport { PropTypes } from 'prop-types';\n\nconst DateContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n`;\n\nconst DateBox = ({ date }) => {\n return (\n \n {moment(date).format('MM-DD-YYYY')}\n {moment(date).format('LT')}\n \n );\n};\n\nDateBox.propTypes = {\n date: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]).isRequired,\n};\n\nexport default DateBox;\n","import { Text } from '@8base/boost';\nimport styled from '@emotion/styled';\n\nexport const TextContact = styled(Text)`\n font-family: Poppins;\n font-size: 13px;\n line-height: 20px;\n color: #3db4aa;\n text-align: right;\n font-weight: 400;\n\n &:first-letter {\n text-transform: capitalize;\n }\n`;\nexport const TextContactHeader = styled(Text)`\n font-family: Poppins;\n font-size: 10px;\n line-height: 20px;\n color: #3db4aa;\n text-align: right;\n font-weight: 300;\n\n &:first-letter {\n text-transform: capitalize;\n }\n`;\n","import React from 'react';\nimport { Text } from '@8base/boost';\nimport styled from '@emotion/styled';\nimport { PropTypes } from 'prop-types';\n\n/**\n * Styled text into the table\n */\n\nconst StyledText = styled(Text)`\n font-family: Poppins;\n font-size: 13px;\n line-height: 20px;\n color: #323c47;\n text-align: right;\n font-weight: 400;\n & first-letter {\n text-transform: capitalize;\n }\n`;\n\nconst TextTable = ({ children }) => {\n return {children};\n};\n\nTextTable.propTypes = {\n children: PropTypes.any.isRequired,\n};\n\nexport { TextTable };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst colorsAndText = {\n 1: { text: 'Lo-Priority', textColor: '#3DB4AA', bg: 'rgba(61,180,170,0.1)' },\n 2: { text: 'Mid-Priority', textColor: '#F6C01E', bg: 'rgba(246,192,30,0.15)' },\n 3: { text: 'Hi-Priority', textColor: '#eb7734', bg: 'rgba(235, 119, 52, 0.1)' },\n 4: { text: 'Very Hi-Priority', textColor: '#FF0000', bg: 'rgba(255,0,0,0.08)' },\n 5: { text: 'Paid', textColor: '#3DB4AA', bg: 'rgba(61,180,170,0.1)' },\n 6: { text: 'Processing', textColor: '#1E87F6', bg: 'rgba(30, 195, 246, 0.15)' },\n 7: { text: 'Attention Required', textColor: '#FF0000', bg: 'rgba(255,0,0,0.08)' },\n};\nconst Badge = styled.span`\n opacity: 0.9;\n color: ${({ priority }) => colorsAndText[priority].textColor};\n font-family: 'Poppins';\n font-size: 12px;\n font-weight: 600;\n line-height: 18px;\n text-align: center;\n box-sizing: border-box;\n padding: 0 10px;\n height: 26px;\n min-width: 110px;\n border: 1px solid ${({ priority }) => colorsAndText[priority].textColor};\n border-radius: 20px;\n background-color: ${({ priority }) => colorsAndText[priority].bg};\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n\n @media screen and (max-width: 1440px) {\n font-size: 10px;\n }\n`;\n\nconst PriorityBadge = ({ priority }) => {\n const priorityPos = priority === null || priority === undefined || priority > 7 ? 1 : priority;\n console.log('DEBUG', priority, priorityPos);\n return (\n \n {colorsAndText[priorityPos].text}\n \n );\n};\n\nPriorityBadge.propTypes = {\n priority: PropTypes.number.isRequired,\n};\n\nexport default PriorityBadge;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Heading, Paper, Row } from '@8base/boost';\nimport styled from 'styled-components';\n\nconst StyledHeading = styled(Heading)`\n opacity: 0.9;\n color: #323c47 !important;\n font-family: 'Poppins';\n font-size: 22px !important;\n line-height: 24px !important;\n padding: 16px 16px 15px 24px;\n font-weight: 600 !important;\n margin-right: 0px !important;\n white-space: nowrap;\n`;\n\n/**\n * Title for details views\n *\n * @param {object} props component props\n * @param {React.Component} props.children component children\n *\n * @returns {React.FC} The react component\n */\nconst TitleDetail = ({ text, children }) => {\n return (\n \n \n {text}\n {children}\n \n \n );\n};\n\nTitleDetail.propTypes = {\n children: PropTypes.element,\n text: PropTypes.string.isRequired,\n};\n\nTitleDetail.defaultProps = {\n children: null,\n};\n\nexport default TitleDetail;\n","import React from 'react';\nimport { Text } from '@8base/boost';\nimport styled from '@emotion/styled';\nimport { PropTypes } from 'prop-types';\n\nconst StyledText = styled(Text)`\n height: 19px;\n color: #323c47;\n font-family: 'Poppins';\n font-weight: 600;\n font-size: 13px;\n line-height: 20px;\n`;\n\nconst SecondaryTitle = ({ children }) => {\n return {children};\n};\n\nSecondaryTitle.propTypes = {\n children: PropTypes.any.isRequired,\n};\n\nexport { SecondaryTitle };\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Icon } from '@8base/boost';\r\nimport styled from 'styled-components';\r\n\r\nconst Btn = styled.button`\r\n box-sizing: border-box;\r\n height: 36px;\r\n padding: 0px 5px;\r\n ${({ stretch }) => (stretch ? 'width: 100%;' : '')};\r\n border: 1px solid #cfd7de;\r\n border-radius: 4px;\r\n background-color: #ffffff;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n cursor: ${({ disabled }) => {\r\n return disabled ? 'not-allowed;' : 'pointer';\r\n }};\r\n &:hover {\r\n box-shadow: 0 2px 4px 0 rgba(50, 50, 93, 0.2);\r\n }\r\n &:active {\r\n box-shadow: inset 0 1px 3px 0 rgba(50, 50, 93, 0.14), inset 0 4px 6px 0 rgba(51, 80, 107, 0.08);\r\n }\r\n > span:not(:last-child) {\r\n margin-right: 5px;\r\n }\r\n`;\r\n\r\nconst BtnText = styled.span`\r\n color: #3db4aa;\r\n font-size: 1.4rem;\r\n font-weight: 600;\r\n line-height: 2rem;\r\n`;\r\n\r\nconst CreateButton = (props) => {\r\n return (\r\n \r\n \r\n {props.text}\r\n \r\n );\r\n};\r\n\r\nCreateButton.propTypes = {\r\n color: PropTypes.string.isRequired,\r\n size: PropTypes.string.isRequired,\r\n onClick: PropTypes.func.isRequired,\r\n text: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default CreateButton;\r\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { Button } from '@8base/boost';\n\nconst StyledButton = styled(Button)`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 36px !important;\n font-weight: normal !important;\n`;\n\nconst Icon = styled.img`\n max-width: 100%;\n object-fit: contain;\n margin-right: 2px;\n`;\n\nconst FilterBtn = ({ onClick }) => {\n return (\n \n \n Filters\n \n );\n};\n\nFilterBtn.propTypes = {\n onClick: PropTypes.func.isRequired,\n};\n\nexport default FilterBtn;\n","import React, { ReactNode, useMemo } from 'react';\nimport { Button as BoostButton, Text } from '@8base/boost';\nimport styled from 'styled-components';\nimport { IconFilterGrey, IconFilterGreen } from 'shared/components/ui/Icons';\n\nconst StyledButton = styled(BoostButton)`\n padding: 0 10px !important;\n ${(props) => props.isOpen && 'border-color: #3db4aa !important;'}\n\n & > *:not(:last-child) {\n margin-right: 4px !important;\n }\n`;\n\n/**\n * Button component for filtering with focus styles.\n *\n * @param {object} props - Component props.\n * @param {boolean} props.isOpen - Wheter the button is active or not.\n * @param {React.MouseEventHandler} [props.onClick] - Action to perform when clicking the button.\n * @returns {ReactNode} Button component.\n */\nexport default function FilterButtonWithFocus({ isOpen, onClick }) {\n const icon = useMemo(() => {\n return isOpen ? : ;\n }, [isOpen]);\n\n return (\n \n {icon} Filters\n \n );\n}\n","import React from 'react';\nimport { Button } from '@8base/boost';\nimport styled from 'styled-components';\n\nconst StyledButton = styled(Button)`\n display: flex;\n align-items: center;\n border-radius: 5px;\n border: solid 1px #d0d7dd;\n background-color: #fff;\n padding: 0.7rem;\n box-sizing: border-box;\n cursor: pointer;\n\n &:focus {\n outline: none;\n }\n`;\n\nconst Icon = styled.img`\n width: 2rem;\n height: 2rem;\n margin-right: 2px;\n`;\n\nconst SortBtn = () => {\n return (\n \n \n \n );\n};\n\nexport default SortBtn;\n","import React from 'react';\nimport { Input } from '@8base/boost';\nimport { PropTypes } from 'prop-types';\nimport searchIcon from '../../../assets/images/Search-dark.svg';\n\nimport styled from 'styled-components';\n\nconst SearchIcon = styled.img`\n cursor: pointer;\n transition: all 0.2s;\n &:active {\n transform: translateY(2px);\n }\n`;\n\nconst SearchInput = ({ onIconClick, onChange, ...rest }) => {\n return (\n }\n {...rest}\n />\n );\n};\n\nSearchInput.propTypes = {\n onChange: PropTypes.func.isRequired,\n onIconClick: PropTypes.func.isRequired,\n};\n\nexport default SearchInput;\n","import PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst Padding = styled.div`\n ${(props) => {\n const { top, right, left, bottom, width } = props;\n\n return `\n padding: ${top} ${right} ${bottom} ${left};\n width: ${width};\n `;\n }}\n`;\n\nPadding.propTypes = {\n top: PropTypes.string,\n right: PropTypes.string,\n left: PropTypes.string,\n bottom: PropTypes.string,\n};\n\nPadding.defaultProps = {\n top: '0px',\n right: '0px',\n left: '0px',\n bottom: '0px',\n width: 'auto',\n};\n\nexport default Padding;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid, SelectField } from '@8base/boost';\nimport SearchInput from '../ui/inputs/SearchInput';\nimport FilterBtn from '../ui/buttons/FilterBtn';\nimport styled from 'styled-components';\nimport { ButtonIcon } from '../ui/buttons/ButtonIcon';\nimport Margin from '../ui/Margin';\n\nconst StyledLayout = styled(Grid.Layout)`\n padding: 16px;\n`;\n\nconst StyledBox = styled(Grid.Box)`\n display: grid;\n align-items: flex-end;\n justify-content: flex-end;\n flex-direction: row !important;\n`;\n\nconst TableToolBar = ({\n searchPlaceholder,\n selectSortByProps = {\n value: '',\n options: [],\n stretch: false,\n },\n buttonCreateProps = {\n text: 'Create',\n },\n}) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nTableToolBar.propTypes = {\n selectSortByProps: PropTypes.object.isRequired,\n searchPlaceholder: PropTypes.string.isRequired,\n buttonCreateProps: PropTypes.object.isRequired,\n};\n\nexport default TableToolBar;\n","import React from 'react';\nimport { Avatar as BoostAvatar } from '@8base/boost';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst Avatar = styled(BoostAvatar)`\n border: 1px solid #9b9b9b;\n`;\n\nconst Slide = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n position: relative;\n margin-top: 16px;\n`;\n\nconst Performance = styled.span`\n width: 114px;\n color: #3db4aa;\n font-family: 'Poppins';\n font-weight: 600;\n font-size: 16px;\n line-height: 28px;\n text-align: center;\n margin-top: 12px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst Name = styled.span`\n min-height: 24px;\n width: 120px;\n opacity: 0.9;\n color: #323c47;\n font-family: 'Poppins';\n font-size: 13px;\n line-height: 16px;\n text-align: center;\n white-space: break-spaces;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst positions = {\n '1': {\n textColor: '#D09D07',\n bgColor: '#F6C01E',\n },\n '2': {\n textColor: '#9B9B9B',\n bgColor: '#DBDBDB',\n },\n '3': {\n textColor: '#AB5D1D',\n bgColor: '#DE953D',\n },\n};\n\nconst Position = styled.div`\n width: 20px;\n height: 20px;\n font-family: 'Poppins';\n font-size: 12px;\n font-weight: bold;\n line-height: 28px;\n text-align: center;\n position: absolute;\n left: calc(50% - 10px);\n top: -10px;\n color: ${({ value }) => positions[value].textColor};\n background-color: ${({ value }) => positions[value].bgColor};\n border: 1px solid ${({ value }) => positions[value].textColor};\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 10;\n`;\n\nconst AgentSlide = ({ imgUrl, firstName, lastName, performance, position }) => {\n return (\n \n {position > 0 && (\n \n {position}\n \n )}\n \n {performance}\n {firstName}\n \n );\n};\n\nAgentSlide.propTypes = {\n position: PropTypes.number,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n imgUrl: PropTypes.string.isRequired,\n performance: PropTypes.string.isRequired,\n};\n\nAgentSlide.defaultProps = {\n position: 0,\n};\n\nexport default AgentSlide;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Dialog, Button } from '@8base/boost';\nimport { PrimaryBtn } from '../ui/buttons/PrimaryBtn';\nimport styled from 'styled-components';\n\nconst Body = styled(Dialog.Body)`\n &::-webkit-scrollbar {\n display: none;\n }\n min-height: 30vh;\n`;\n\nconst StyledButton = styled.button`\n color: #323c47;\n text-decoration: none;\n height: 50px;\n width: 100%;\n padding-left: 24px;\n display: flex;\n align-items: center;\n text-align: center;\n ${(props) =>\n props.active\n ? `\n color: #3db4aa;\n border-top: 2.5px solid #3db4aa;\n `\n : ''}\n &:hover {\n color: #3db4aa;\n border-top: 2.5px solid #3db4aa;\n }\n`;\n\nconst Tab = styled.div`\n display: flex;\n justify-content: space-around;\n`;\n\nconst Show = styled.div`\n ${(props) => (props.active ? 'display:inhereit' : 'display:none')}\n`;\n\nconst DialogForm = ({\n title,\n isOpen,\n createText,\n children,\n onCloseDialog,\n onClickCreate,\n isLoading,\n size,\n tabs = [''],\n}) => {\n const [tabSelected, setTabSelected] = useState(0);\n if (tabs.length > 0) {\n const views = tabs.map((tab, idx) => {\n // eslint-disable-next-line\n return (selected) => {\n return {children[idx]};\n };\n });\n return (\n \n \n {tabs.map((tab, idx) => (\n setTabSelected(idx)}>\n {tab}\n \n ))}\n \n {views.map((view) => view(tabs[tabSelected]))}\n \n \n Cancel\n \n \n {createText}\n \n \n \n );\n }\n return (\n \n \n {children}\n \n \n Cancel\n \n \n {createText}\n \n \n \n );\n};\n\nDialogForm.defaultProps = {\n size: 'lg',\n createText: 'Create',\n isLoading: false,\n title: '',\n tabs: [],\n};\n\nDialogForm.propTypes = {\n size: PropTypes.string,\n createText: PropTypes.string,\n isOpen: PropTypes.bool.isRequired,\n title: PropTypes.string,\n children: PropTypes.node.isRequired,\n onClickCreate: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n isLoading: PropTypes.bool,\n tabs: PropTypes.array,\n};\n\nexport default DialogForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Slider from 'react-slick';\nimport AgentSlide from './AgentSlide';\nimport { IconRightArrow, IconLeftArrow } from '../ui/Icons';\nimport styled from 'styled-components';\nimport { Loader } from 'shared/components';\n\nconst Arrow = styled.div`\n top: 45% !important;\n\n &::before {\n display: none !important;\n }\n`;\n\nconst Container = styled.div`\n width: 100%;\n max-width: 550px;\n`;\n\nconst NextArrow = (props) => {\n return (\n \n \n \n );\n};\n\nconst PrevArrow = (props) => {\n return (\n \n \n \n );\n};\n\nconst AgentsSlider = ({ performers, isLoading }) => {\n const settings = {\n variableWidth: false,\n dots: false,\n infinite: false,\n slidesToShow: 5,\n slidesToScroll: 1,\n nextArrow: ,\n prevArrow: ,\n };\n\n return (\n \n \n {isLoading ? (\n \n ) : (\n performers.map((user, i) => (\n 2 ? null : i + 1}\n performance={'$' + new Intl.NumberFormat('en-US').format(user.performance)}\n />\n ))\n )}\n \n \n );\n};\n\nAgentsSlider.propTypes = {\n performers: PropTypes.array.isRequired,\n isLoading: PropTypes.bool.isRequired,\n};\n\nexport default AgentsSlider;\n","import React from 'react';\nimport { Label, Icon, Avatar } from '@8base/boost';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { Margin } from 'shared/components';\nimport Select, { components } from 'react-select';\n\nconst CustomMultiValueContainer = styled.span`\n padding: 5px;\n display: flex;\n height: 42px;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n border: 1px solid #d0d7dd;\n border-radius: 5px;\n background-color: #ffffff;\n margin-right: 10px;\n cursor: pointer;\n margin-bottom: 10px;\n`;\n\nconst CustomOption = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n`;\n\nconst CustomLabel = styled(Label)`\n cursor: pointer !important;\n margin-left: 5px !important;\n`;\n\nconst MultiValueContainer = (props) => {\n return (\n \n \n \n );\n};\n\nconst MultiValueLabel = (props) => {\n return (\n <>\n \n \n >\n );\n};\n\nconst MultiValueRemove = (props) => {\n return (\n \n \n \n );\n};\n\nconst Option = ({ data, innerProps, isDisabled }) => {\n return !isDisabled ? (\n \n \n \n \n \n \n ) : null;\n};\n\nconst IndicatorsContainer = () => {\n return (\n \n \n \n \n );\n};\n\n// Custom components prop types\n\nMultiValueLabel.propTypes = {\n data: PropTypes.shape({\n imgUrl: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n }).isRequired,\n};\n\nOption.propTypes = {\n data: PropTypes.shape({\n imgUrl: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n }).isRequired,\n isDisabled: PropTypes.bool,\n innerProps: PropTypes.object.isRequired,\n};\n\nOption.defaultProps = { isDisabled: false };\n\nconst SelectMultipleAgents = ({ name, options, placeholder, defaultValue, onChange }) => {\n return (\n ({\n ...base,\n alignItems: 'center',\n backgroundColor: '#fff',\n justifyContent: 'center',\n }),\n container: (base) => ({\n ...base,\n borderRadius: '5px',\n border: '1px dashed #D0D7DD',\n }),\n control: (base) => ({\n ...base,\n border: '0px',\n padding: '10px',\n }),\n menu: (base) => ({\n ...base,\n zIndex: '11',\n // maxHeight: '200px',\n }),\n menuList: (base) => ({\n ...base,\n maxHeight: '200px',\n }),\n // menu,\n }}\n />\n );\n};\n\nSelectMultipleAgents.propTypes = {\n defaultValue: PropTypes.array,\n name: PropTypes.string.isRequired,\n options: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n placeholder: PropTypes.string.isRequired,\n};\n\nSelectMultipleAgents.defaultProps = {\n defaultValue: [],\n selectedValue: [],\n};\n\nexport default SelectMultipleAgents;\n","import React from 'react';\n\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\n\nconst InputContainer = styled.div`\n position: relative;\n`;\n\nconst RadioButton = styled.span`\n height: 22px;\n width: 22px;\n border: 1px solid #d0d7dd;\n border-radius: ${(props) => (props.square ? '4px' : '50%')};\n display: inline-block;\n position: absolute;\n left: ${(props) => (props.left ? '0' : '10px')};\n top: 50%;\n transform: translateY(-50%);\n\n &::after {\n height: 10px;\n width: 10px;\n content: '';\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n border-radius: ${(props) => (props.square ? '0' : '50%')};\n transform: translate(-50%, -50%);\n background-color: #3db4aa;\n opacity: 0;\n }\n`;\n\nconst Input = styled.input`\n display: none;\n &:checked ~ label span::after {\n opacity: 1;\n }\n`;\n\nconst RadioLabel = styled.label`\n padding: 10px 10px 10px 40px;\n display: flex;\n align-items: center;\n width: 100%;\n cursor: pointer;\n`;\n\nconst RadioInputField = (props) => {\n return (\n \n \n {\n props.onChange();\n }}>\n \n {props.label}\n \n \n );\n};\n\nRadioInputField.defaultProps = {\n label: undefined,\n square: false,\n left: false,\n};\n\nRadioInputField.propTypes = {\n onChange: PropTypes.func.isRequired,\n label: PropTypes.string,\n checked: PropTypes.bool.isRequired,\n square: PropTypes.bool,\n left: PropTypes.bool,\n};\n\nexport default RadioInputField;\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { PropTypes } from 'prop-types';\n\nconst Container = styled.div`\n border-top: 1px solid #d0d7dd;\n padding: 10px 15px;\n display: flex;\n align-items: center;\n justify-content: space-around;\n`;\n\nconst Option = styled.span`\n color: ${(props) => (props.active ? '#3db4aa' : '#384A59')};\n cursor: pointer;\n`;\n\nconst DropdownFooter = (props) => {\n return (\n \n \n Accept\n \n Cancel\n \n );\n};\n\nDropdownFooter.propTypes = {\n onConfirm: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n};\n\nexport default DropdownFooter;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Menu, Dropdown, Icon } from '@8base/boost';\nimport * as R from 'ramda';\nimport styled from 'styled-components';\nimport RadioInputField from '../../inputs/RadioInputField';\nimport DropdownFooter from '../DropdownFooter';\nimport { DropdownBodyOnTable } from '../DropdownBodyOnTable';\nimport { PropTypes } from 'prop-types';\nimport { customScrollBar } from 'shared/css/mixins';\n\nconst DropdownMenu = styled(Menu)`\n padding-bottom: 0 !important;\n`;\n\nconst Item = styled(Menu.Item)`\n color: #323c47 !important;\n padding: 0 !important;\n height: auto !important;\n`;\n\nconst HeaderCell = styled.span`\n display: flex;\n align-items: center;\n flex: 1;\n justify-content: space-between;\n`;\n\nconst StyledDropdown = styled(Dropdown)`\n flex: 1 !important;\n`;\n\nconst IconContainer = styled.div`\n display: flex;\n justify-content: flex-end;\n flex: 1;\n`;\n\nconst ItemsContainer = styled.div`\n max-height: 160px;\n min-width: 140px;\n max-width: 250px;\n overflow-y: scroll;\n ${customScrollBar}\n`;\n\nconst DropdownWithCheck = ({ onConfirm, itemList, header }) => {\n const [isOpen, setIsOpen] = useState(false);\n const [items, setItems] = useState(itemList);\n const [control, setControl] = useState(\n items.reduce((ac, cv) => {\n if (cv.checked) {\n ac.push(cv.id);\n }\n\n return ac;\n }, []),\n );\n\n useEffect(() => {\n setItems(itemList);\n }, [itemList]);\n\n useEffect(() => {\n setControl(\n items.reduce((ac, cv) => {\n if (cv.checked) {\n ac.push(cv.id);\n }\n\n return ac;\n }, []),\n );\n }, [items]);\n\n const inputChangeHandler = (id) => {\n let newControl;\n\n if (control.includes(id)) {\n newControl = control.filter((oldId) => oldId !== id);\n } else {\n newControl = control.concat([id]);\n }\n\n setControl(newControl);\n };\n const onConfirmHandler = useCallback(() => {\n onConfirm(control);\n const newItemList = R.clone(items);\n\n for (const item of newItemList) {\n item.checked = control.includes(item.id);\n }\n\n setItems(newItemList);\n }, [items, control, onConfirm]);\n const onCancelHandler = useCallback(() => {\n const newControl = items.reduce((ac, cv) => {\n if (cv.checked) {\n ac.push(cv.id);\n }\n return ac;\n }, []);\n\n setControl(newControl);\n }, [items]);\n const switchHandler = () => {\n if (isOpen) {\n onCancelHandler();\n }\n\n setIsOpen((prevValue) => !prevValue);\n };\n\n const renderItems = items.map((item) => (\n \n {\n inputChangeHandler(item.id);\n }}\n />\n \n ));\n\n return (\n \n \n \n {header}\n \n \n \n \n \n \n {({ closeDropdown }) => (\n \n {renderItems}\n {\n onConfirmHandler();\n closeDropdown();\n }}\n onCancel={() => {\n onCancelHandler();\n closeDropdown();\n }}\n />\n \n )}\n \n \n );\n};\n\nDropdownWithCheck.propTypes = {\n itemList: PropTypes.array.isRequired,\n header: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,\n onConfirm: PropTypes.func.isRequired,\n};\n\nexport default DropdownWithCheck;\n","import React from 'react';\nimport { Heading, Row } from '@8base/boost';\nimport styled from '@emotion/styled';\nimport { PropTypes } from 'prop-types';\n\n/**\n * Styled FormTitle for the forms\n */\nconst StyledTitle = styled(Heading)`\n color: #7d828c;\n font-size: 12px;\n letter-spacing: 0.5px !important;\n`;\n\nconst StyledRow = styled(Row)`\n margin: 0 !important;\n min-height: 36px !important;\n`;\n\nconst FormTitle = ({ text, Icon, offsetBottom, offsetTop }) => {\n return (\n \n {Icon ? : null}\n \n \n );\n};\n\nFormTitle.defaultProps = {\n Icon: null,\n offsetBottom: 'md',\n offsetTop: 'md',\n};\n\nFormTitle.propTypes = {\n text: PropTypes.string.isRequired,\n Icon: PropTypes.any,\n offsetBottom: PropTypes.string,\n offsetTop: PropTypes.string,\n};\n\nexport { FormTitle };\n","import React from 'react';\nimport { SelectField } from '@8base/boost';\nimport { PropTypes } from 'prop-types';\n\nconst ItemFilter = ({ onChange, value, options, placeholder, ...rest }) => {\n return (\n {\n if (option.label === '') {\n option.label = 'None';\n }\n return { label: option.label, value: option.value };\n })}\n {...rest}\n />\n );\n};\n\nItemFilter.propTypes = {\n onChange: PropTypes.func.isRequired,\n value: PropTypes.string.isRequired,\n options: PropTypes.array.isRequired,\n placeholder: PropTypes.string,\n stretch: PropTypes.bool,\n};\nItemFilter.defaultProps = {\n placeholder: 'Filter of The items',\n stretch: true,\n};\n\nexport default ItemFilter;\n","import React from 'react';\nimport { Card } from '@8base/boost';\nimport { PropTypes } from 'prop-types';\n\n/**\n * Use this instead of Card.Body for List Views,\n * Add any css Padding, margin on this component\n *\n * @param {React.Component} children - the children component\n *\n * @returns {React.FC} The react component\n */\nconst ListCardBody = ({ children, ...rest }) => {\n return (\n \n {children}\n \n );\n};\n\nListCardBody.propTypes = {\n children: PropTypes.any.isRequired,\n};\n\nexport { ListCardBody };\n","import React, { useState, useCallback } from 'react';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\n\nimport { Menu, Dropdown, Icon } from '@8base/boost';\nimport { DropdownBodyOnTable } from '../../index';\nimport { customScrollBar } from 'shared/css/mixins';\n\nconst Item = styled(Menu.Item)`\n color: ${({ active }) => (active ? '#FFF' : '#323c47 ')} !important;\n ${({ active }) => (active ? 'background-color: #3DB4AA !important' : '')};\n padding: 10px !important;\n height: auto !important;\n text-transform: capitalize;\n &:hover {\n color: ${({ active }) => (active ? '#FFF' : '#3DB4AA ')} !important;\n }\n`;\n\nconst HeaderCell = styled.span`\n display: flex;\n align-items: center;\n flex: 1;\n justify-content: space-between;\n`;\n\nconst HeaderTitle = styled.span`\n ${({ active }) => (active ? 'color: #3DB4AA;' : '')}\n text-transform: capitalize;\n`;\n\nconst StyledDropdown = styled(Dropdown)`\n flex: 1 !important;\n border-radius: 5px;\n ${({ border }) => (border ? 'padding: 0.5rem 1rem;' : '')}\n ${({ border }) => (border ? 'border: 1px solid;' : '')}\n ${({ active }) => (active ? 'border-color: #3DB4AA' : 'border-color: #D0D7DD')};\n`;\n\nconst IconContainer = styled.div`\n display: flex;\n justify-content: flex-end;\n flex: 1;\n`;\n\nconst ItemsContainer = styled.div`\n max-height: 160px;\n min-width: 140px;\n max-width: 250px;\n overflow-y: scroll;\n\n ${customScrollBar}\n`;\n\nconst SelectWithoutBorder = ({ onChange, options, placeholder, value: initialValue, border }) => {\n const [isOpen, setIsOpen] = useState(false);\n const [value, setValue] = useState(initialValue);\n\n const onItemClickHandler = useCallback(\n (value, closeDropdown) => {\n setValue(value);\n onChange(value);\n closeDropdown();\n setIsOpen((prevValue) => !prevValue);\n },\n [onChange],\n );\n\n const getValueLabel = () => {\n const selectedOption = options.find((option) => option.value === value);\n if (!selectedOption) {\n return '';\n }\n return selectedOption.label;\n };\n\n const selectClickHandler = () => {\n setIsOpen((prevValue) => !prevValue);\n };\n\n return (\n \n \n \n {value ? getValueLabel() : placeholder}\n \n \n \n \n \n \n {({ closeDropdown }) => (\n \n \n {options.map((option) => (\n {\n onItemClickHandler(option.value, closeDropdown);\n }}\n active={value === option.value}>\n {option.label.toLowerCase()}\n \n ))}\n \n \n )}\n \n \n );\n};\n\nSelectWithoutBorder.defaultProps = {\n value: undefined,\n placeholder: '',\n border: false,\n};\n\nSelectWithoutBorder.propTypes = {\n onChange: PropTypes.func.isRequired,\n value: PropTypes.any,\n options: PropTypes.array.isRequired,\n placeholder: PropTypes.string,\n border: PropTypes.bool,\n};\n\nexport default SelectWithoutBorder;\n","import React from 'react';\nimport { Label, Row, styled } from '@8base/boost';\nimport ReactTag from 'react-tagsinput';\nimport { PropTypes } from 'prop-types';\nimport { IconAskInfo } from '../ui/Icons';\nimport './tag-input.css';\n\nconst Tag = styled(ReactTag)`\n ${(props) => props.disabled && 'background-color: #F4F7F9 !important;'}\n`;\n\nconst TagsInput = ({\n onChange,\n tags,\n placeholder,\n label,\n tooltipPlacement,\n tooltipText,\n disabled,\n ...rest\n}) => {\n const inputProps = {\n placeholder,\n };\n\n return (\n <>\n \n \n \n \n onChange([...new Set(array)])}\n inputProps={inputProps}\n {...rest}\n />\n >\n );\n};\n\nTagsInput.defaultProps = {\n label: '',\n disabled: false,\n placeholder: '',\n tooltipPlacement: '',\n tooltipText: '',\n};\n\nTagsInput.propTypes = {\n label: PropTypes.string,\n disabled: PropTypes.bool,\n placeholder: PropTypes.string,\n tooltipText: PropTypes.string,\n tooltipPlacement: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n tags: PropTypes.array.isRequired,\n};\nexport { TagsInput };\n","import React from 'react';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport { Dropdown, Icon, Menu } from '@8base/boost';\nimport { DropdownBodyOnTable } from '../../index';\n\nconst MenuItem = styled(Menu.Item)`\n color: ${({ danger }) => (danger ? '#FF0000' : 'rgb(50, 60, 71)')}!important;\n &:hover {\n ${({ danger }) => (danger ? '' : 'color: #3db4aa !important;')}\n }\n`;\nconst OptionsIcon = styled.span`\n & i {\n height: 30px !important;\n width: 30px !important;\n }\n`;\n\nconst OptionsDropdown = ({ options }) => {\n const body = (\n \n {({ closeDropdown }) => (\n \n {options.map((option) => (\n {\n option.onClick();\n closeDropdown();\n }}>\n {option.label}\n \n ))}\n \n )}\n \n );\n\n return (\n \n \n \n \n \n \n {body}\n \n );\n};\n\nOptionsDropdown.propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n danger: PropTypes.bool,\n }),\n ).isRequired,\n};\n\nexport default OptionsDropdown;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport { Icon, Dropdown, Menu } from '@8base/boost';\nimport { DropdownBodyOnTable } from './DropdownBodyOnTable';\nimport DropdownFooter from './DropdownFooter';\n\nconst DropdownMenu = styled(Menu)`\n padding-bottom: 0 !important;\n`;\n\nconst Item = styled.div`\n color: #323c47 !important;\n padding: 10px 0 !important;\n height: auto !important;\n margin-left: 15px;\n`;\n\nconst HeaderCell = styled.span`\n display: flex;\n align-items: center;\n flex: 1;\n justify-content: space-between;\n`;\n\nconst StyledDropdown = styled(Dropdown)`\n flex: 1 !important;\n`;\n\nconst IconContainer = styled.div`\n display: flex;\n justify-content: flex-end;\n flex: 1;\n`;\n\nconst ItemsContainer = styled.div`\n max-height: 160px;\n min-width: 140px;\n max-width: 250px;\n overflow-y: scroll;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst SimpleDropdown = ({ header, itemList }) => {\n const items = itemList.map((item) => {item.label});\n\n return (\n \n \n \n {header}\n \n \n \n \n \n \n {({ closeDropdown }) => (\n \n {items}\n {\n closeDropdown();\n }}\n onCancel={() => {\n closeDropdown();\n }}\n />\n \n )}\n \n \n );\n};\n\nSimpleDropdown.defaultProps = {\n header: '',\n};\n\nSimpleDropdown.propTypes = {\n header: PropTypes.string,\n itemList: PropTypes.array.isRequired,\n};\n\nexport default SimpleDropdown;\n","import React from 'react';\nimport { Dialog, Row, Link } from '@8base/boost';\nimport { PropTypes } from 'prop-types';\n\nconst FilterFooter = (props) => {\n return (\n \n \n {\n props.onConfirm();\n props.closeDropdown();\n }}>\n Apply Filters\n \n {\n props.onCancel();\n props.closeDropdown();\n }}>\n {props.cancelText}\n \n\n {props.onClose && (\n {\n props.onClose();\n props.closeDropdown();\n }}>\n {props.closeText}\n \n )}\n \n \n );\n};\n\nFilterFooter.propTypes = {\n onConfirm: PropTypes.func.isRequired,\n closeDropdown: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n cancelText: PropTypes.string,\n onClose: PropTypes.func,\n closeText: PropTypes.string,\n};\n\nFilterFooter.defaultProps = {\n cancelText: 'Cancel',\n onClose: null,\n closeText: 'Close',\n};\n\nexport default FilterFooter;\n","import React, { useCallback, useState } from 'react';\nimport { DateInput, InputField } from '@8base/boost';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport ItemFilter from '../../ItemFilter';\nimport RadioInputField from '../../ui/inputs/RadioInputField';\n\nconst Container = styled.div`\n width: 204px;\n`;\n\nconst CategoryTitle = styled.strong`\n line-height: 28px;\n font-weight: 600 !important;\n display: inline-block;\n margin-bottom: 3px !important;\n`;\n\nconst RadioGroupContainer = styled.form`\n display: flex;\n justify-content: space-around;\n margin-top: 7px;\n`;\n\nconst FilterCategory = ({ category, onFilter, value }) => {\n const [inputValue, setInputValue] = useState(value);\n\n const onCategoryChange = useCallback(\n (identifier, value) => {\n onFilter(identifier, value);\n },\n [onFilter],\n );\n\n let filter;\n switch (category.type) {\n case 'text':\n filter = (\n setInputValue(value),\n onBlur: () => {\n onCategoryChange(category.identifier, inputValue);\n },\n value: inputValue,\n }}\n stretch={true}\n />\n );\n break;\n case 'date':\n filter = (\n {\n onCategoryChange(category.identifier, value);\n }}\n />\n );\n break;\n case 'radioGroup':\n filter = (\n \n {category.options.map((title) => (\n {\n onCategoryChange(category.identifier, title);\n }}\n checked={value === title}\n />\n ))}\n \n );\n break;\n default:\n filter = (\n {\n onCategoryChange(category.identifier, value);\n }}>\n );\n }\n\n return (\n \n {category.title}\n {filter}\n \n );\n};\n\nFilterCategory.propTypes = {\n category: PropTypes.any.isRequired,\n onFilter: PropTypes.func.isRequired,\n value: PropTypes.string.isRequired,\n};\n\nexport default FilterCategory;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Table, Menu, Icon, Dropdown, Text } from '@8base/boost';\nimport styled from 'styled-components';\nimport { DropdownBodyOnTable } from '../ui/dropdowns/DropdownBodyOnTable';\n\nimport SmallLoader from '../ui/SmallLoader';\nimport { TextEllipsis } from '../ui/text/TextEllipsis';\n\nconst TableBody = styled(Table.Body)`\n max-height: 60vh;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst ActionsCell = styled(Table.BodyCell)`\n display: flex;\n justify-content: space-between !important;\n`;\n\nconst StyledCell = styled(Table.BodyCell)`\n padding: 0px 14px !important;\n flex-shrink: 0;\n min-width: 150px;\n max-width: 150px;\n`;\n\nconst CustomHeaderCell = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n`;\n\nconst StyledHeaderCell = styled(Table.HeaderCell)`\n padding-left: 24px !important;\n padding-right: 6px !important;\n font-weight: 700 !important;\n`;\n\nconst StyledBodyRow = styled(Table.BodyRow)`\n min-height: 37px !important;\n`;\n\nconst StyledHeader = styled(Table.Header)`\n height: 37px !important;\n`;\n\nconst AgingTableLite = ({\n data,\n Actions,\n columns,\n isLoading,\n columnsSize,\n dropdownOptions,\n ignoreColumns,\n leftDropdown,\n}) => {\n return (\n \n \n {columns.map((column, index) => {\n return (\n \n {column.name}\n \n );\n })}\n {''}\n \n {isLoading ? (\n \n ) : (\n \n {(row, index) => (\n \n {Object.keys(row)\n .filter((key) => ignoreColumns.indexOf(key) === -1)\n .map((key, index) => {\n if (columns[index] && columns[index].customBodyRender !== undefined) {\n const { customBodyRender } = columns[index];\n const CustomCellValue = customBodyRender(row, row[key]);\n\n return (\n \n \n \n );\n }\n\n return (\n \n {row[key]}\n \n );\n })}\n \n {Actions && }\n \n \n \n \n \n {() => (\n \n {dropdownOptions.map((option, index) => (\n option.onClick(row.id)} key={index}>\n {option.name}\n \n ))}\n \n )}\n \n \n \n \n )}\n \n )}\n \n );\n};\n\nAgingTableLite.propTypes = {\n Actions: PropTypes.func,\n leftDropdown: PropTypes.string,\n ignoreColumns: PropTypes.array,\n data: PropTypes.array.isRequired,\n columns: PropTypes.array.isRequired,\n isLoading: PropTypes.bool.isRequired,\n columnsSize: PropTypes.string.isRequired,\n dropdownOptions: PropTypes.array.isRequired,\n};\n\nAgingTableLite.defaultProps = {\n ignoreColumns: [],\n leftDropdown: '0px',\n Actions: null,\n};\n\nexport default AgingTableLite;\n","import { Auth, AUTH_STRATEGIES } from '@8base/auth';\n/**\n * Creating an Authentication Profile in 8base will provide\n * you with a Client ID and Domain.\n */\nconst domain = process.env.REACT_APP_AUTH_DOMAIN;\nconst clientId = process.env.REACT_APP_AUTH_CLIENT_ID;\n/**\n * The redirect and logout URIs are all configured in the\n * authentication profile that gets set up in the 8base\n * management console.\n */\nconst logoutRedirectUri = `${window.location.origin}/logout`;\nconst redirectUri = `${window.location.origin}/auth/callback`;\n/**\n * There are multiple auth strategies that can be\n * used when using 8base. By default, specifying\n * 'web_8base' will configure the 8base auth client.\n */\nexport default Auth.createClient(\n {\n strategy: AUTH_STRATEGIES.WEB_8BASE,\n subscribable: true,\n },\n {\n domain,\n clientId,\n redirectUri,\n logoutRedirectUri,\n }\n);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withAuth } from '@8base/app-provider';\nimport MainLoader from 'shared/components/ui/MainLoader';\n\nclass AuthContainerClass extends React.Component {\n async componentDidMount() {\n const { auth } = this.props;\n\n await auth.authClient.authorize();\n }\n\n render() {\n return ;\n }\n}\n\nAuthContainerClass.propTypes = {\n auth: PropTypes.object.isRequired,\n};\n\nconst AuthContainer = withAuth(AuthContainerClass);\n\nexport { AuthContainer };\n","import { Client } from '@8base/api-client';\n\n/* Instantiate new instance with workspace endpoint */\nexport const client = new Client(process.env.REACT_APP_WORKSPACE_ENDPOINT);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withAuth } from '@8base/react-sdk';\nimport moment from 'moment';\nimport * as jwtToken from 'jwt-decode';\n\nimport { client } from 'shared/api';\nimport * as gql from 'shared/graphql';\nimport MainLoader from 'shared/components/ui/MainLoader';\n\nclass CallbackContainerClass extends React.Component {\n async handleAuthentication({ idToken, email }) {\n /**\n * Auth headers for communicating with the 8base API.\n */\n client.setIdToken(idToken);\n /**\n * Check if user exists in 8base.\n */\n try {\n await client.request(gql.CURRENT_USER_QUERY);\n } catch {\n /**\n * If user doesn't exist, an error will be\n * thrown, which then the new user can be\n * created using the authResult values.\n */\n const user = { email: email };\n const namespace = 'https://leadvolt.8base.com/';\n let jwtData;\n\n try {\n jwtData = jwtToken(idToken);\n } catch (e) {\n console.error('Auth:error', e);\n }\n\n user.firstName = jwtData[namespace + 'first_name'];\n user.lastName = jwtData[namespace + 'last_name'];\n\n await client.request(gql.USER_SIGN_UP_MUTATION, {\n user,\n authProfileId: process.env.REACT_APP_AUTH_PROFILE_ID,\n });\n }\n }\n\n async componentDidMount() {\n const { auth, history } = this.props;\n /* Get authResult from auth client after redirect */\n const authResult = await auth.authClient.getAuthorizedData();\n /* Identify or create user record using authenticated details */\n await this.handleAuthentication(authResult);\n /* Add the idToken to the auth state */\n auth.authClient.setState({ token: authResult.idToken });\n /* Add last connection timestamp */\n localStorage.setItem('lastConnection', moment().unix());\n\n /* Redirect user to root path */\n history.replace('/');\n }\n\n render() {\n return ;\n }\n}\n\nCallbackContainerClass.propTypes = {\n auth: PropTypes.object.isRequired,\n history: PropTypes.object.isRequired,\n};\n\n/* withAuth injects 'auth' prop into component */\nconst CallbackContainer = withAuth(CallbackContainerClass);\n\nexport { CallbackContainer };\n","import React from 'react';\nimport { Route } from 'react-router';\n\nimport { AuthContainer } from './routes/root';\nimport { CallbackContainer } from './routes/callback';\n\nexport const AuthCallback = () => (\n \n \n \n \n);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Grid, Dialog, Button, InputField, SelectField, TextAreaField } from '@8base/boost';\n//import { PrimaryBtn } from '../../../shared/components/ui/buttons/PrimaryBtn';\nimport UpdateIcon from '../../../shared/assets/images/update.svg';\nimport { ButtonIcon, PrimaryBtn } from 'shared/components';\nimport styled from 'styled-components';\n\nconst StyledButtonIcon = styled(ButtonIcon)`\n margin-top: 20px;\n`;\n\nconst AnnouncementForm = ({\n isOpen,\n isUpdate,\n onCloseDialog,\n announcement,\n onChangeInput,\n getRandomQuote,\n loading,\n onSubmit,\n}) => {\n return (\n \n \n \n \n \n \n \n \n onChangeInput('type', value),\n }}\n options={[\n {\n label: 'QUOTE',\n value: 'QUOTE',\n },\n {\n label: 'ANNOUNCEMENT',\n value: 'ANNOUNCEMENT',\n },\n ]}\n />\n \n {announcement.type === 'QUOTE' ? (\n \n \n \n ) : (\n ''\n )}\n {announcement.type === 'ANNOUNCEMENT' && (\n \n onChangeInput('title', value),\n }}\n />\n \n )}\n \n \n \n onChangeInput('content', value),\n }}\n />\n \n {announcement.type === 'QUOTE' && (\n \n \n \n )}\n {/* \n \n \n \n \n */}\n \n \n \n \n \n \n \n Cancel\n \n \n {'Save'}\n \n \n \n );\n};\n\nAnnouncementForm.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n isUpdate: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n getRandomQuote: PropTypes.func.isRequired,\n announcement: PropTypes.object.isRequired,\n onSubmit: PropTypes.func.isRequired,\n};\n\nexport default AnnouncementForm;\n","import gql from 'graphql-tag';\n\nconst AnnouncementFragment = gql`\n fragment AnnouncementFragment on Announcement {\n id\n title\n content\n type\n author\n }\n`;\n\nexport const ANNOUNCEMENT_LIST_QUERY = gql`\n query AnnouncementQuery($filter: AnnouncementFilter) {\n announcementsList(filter: $filter) {\n items {\n ...AnnouncementFragment\n }\n }\n }\n ${AnnouncementFragment}\n`;\n\nexport const ANNOUNCEMENT_UPDATE_MUTATION = gql`\n mutation AnnouncementUpdateMutation($data: AnnouncementUpdateInput!) {\n announcementUpdate(data: $data) {\n ...AnnouncementFragment\n }\n }\n ${AnnouncementFragment}\n`;\n\nexport const ANNOUNCEMENT_CREATE_MUTATION = gql`\n mutation AnnouncementCreateMutation($data: AnnouncementCreateInput!) {\n announcementCreate(data: $data) {\n ...AnnouncementFragment\n }\n }\n ${AnnouncementFragment}\n`;\n","import { ValidationError } from '../../shared/errors';\nimport { isValidString } from '../../shared/validators';\n\nexport const createAndUpdateAnnouncementValidator = (announcement) => {\n let errorMessages = [];\n\n if (announcement.type === 'ANNOUNCEMENT' && !isValidString(announcement.title))\n errorMessages.push('The Announcement must have a valid title');\n\n if (!isValidString(announcement.type))\n errorMessages.push('The Announcement must have a valid type');\n\n if (!isValidString(announcement.content))\n errorMessages.push('The Announcement must have a valid content');\n\n if (announcement.type === 'QUOTE' && !isValidString(announcement.author))\n errorMessages.push('The Announcement must have a valid author');\n\n if (errorMessages.length !== 0) throw new ValidationError(errorMessages);\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnAnnouncementError = createEvent();\n\nexport const OnAnnouncementCreateEvent = createEvent();\n\nexport const OnAnnouncementUpdateEvent = createEvent();\n\nexport const OnAnnouncementListEvent = createEvent();\n","import { log, error } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../shared/session/session-events';\nimport {\n ANNOUNCEMENT_LIST_QUERY,\n ANNOUNCEMENT_UPDATE_MUTATION,\n ANNOUNCEMENT_CREATE_MUTATION,\n} from './announcement-queries';\nimport { createAndUpdateAnnouncementValidator } from './announcement-validators';\nimport { sanitize8BaseReference } from '../../shared/utils';\nimport {\n OnAnnouncementCreateEvent,\n OnAnnouncementError,\n OnAnnouncementListEvent,\n OnAnnouncementUpdateEvent,\n} from './announcement-events';\n\n/**\n * create filters for announcements query.\n *\n * @param {object} filterData createdAt filters.\n * @returns {object} graphql filter object.\n */\nconst createFilter = (filterData) => {\n return {\n ...(filterData.dateCreatedStart && filterData.dateCreatedStart !== ''\n ? {\n createdAt: { gte: filterData.dateCreatedStart + 'T00:00:00Z' },\n }\n : {}),\n ...(filterData.agency && filterData.agency !== ''\n ? {\n agency: { id: { equals: filterData.agency } },\n }\n : {}),\n };\n};\n\n/**\n * fetch announcements\n *\n * @param {object} filterData - agency and createdAt filters\n * @param {number} attempts - The number of attempts\n *\n * @returns {object} response data\n */\nexport const fetchAnnouncements = async (filterData = {}, attempts = 0) => {\n const client = OnApolloClient.get();\n const filter = createFilter(filterData);\n let response;\n\n const variables = {\n ...(filter && { filter }),\n };\n\n try {\n response = await client.query({\n query: ANNOUNCEMENT_LIST_QUERY,\n variables,\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n if (attempts <= 0) {\n error('fetchAnnouncements', e);\n return OnAnnouncementError.dispatch(e);\n }\n return fetchAnnouncements(filterData, attempts - 1);\n }\n\n log('fetchAnnouncements', response);\n OnAnnouncementListEvent.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Updates a announcement\n *\n * @param {object} announcement data from the update form.\n *\n * @returns {object} the response data\n */\nexport const updateAnnouncement = async (announcement) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n createAndUpdateAnnouncementValidator(announcement);\n } catch (e) {\n error('updateAnnouncement', e);\n\n return OnAnnouncementError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: ANNOUNCEMENT_UPDATE_MUTATION,\n variables: { data: announcement },\n });\n } catch (e) {\n error('updateAnnouncement', e);\n\n return OnAnnouncementError.dispatch(e);\n }\n\n log('updateAnnouncement', response);\n OnAnnouncementUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Updates a announcement\n *\n * @param {object} announcement data from the update form.\n * @returns {object} the response data\n */\nexport const createAnnouncement = async (announcement) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n createAndUpdateAnnouncementValidator(announcement);\n } catch (e) {\n error('createAnnouncement', e);\n\n return OnAnnouncementError.dispatch(e);\n }\n\n sanitize8BaseReference(announcement, 'agency');\n\n try {\n response = await client.mutate({\n mutation: ANNOUNCEMENT_CREATE_MUTATION,\n variables: { data: announcement },\n });\n } catch (e) {\n error('createAnnouncement', e);\n\n return OnAnnouncementError.dispatch(e);\n }\n\n log('createAnnouncement', response);\n OnAnnouncementCreateEvent.dispatch(response.data);\n\n return response.data;\n};\n","export default {\n type: '',\n title: '',\n author: '',\n content: '',\n};\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid, Paper, Heading, Row } from '@8base/boost';\nimport styled from 'styled-components';\nimport AnnouncementForm from './AnnouncementForm';\nimport Loader from '../../../shared/components/ui/Loader';\nimport { onChangeDataHookMixin } from '../../../shared/mixins';\nimport { updateAnnouncement, createAnnouncement } from '../../announcement/announcement-actions';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport announcementModel from '../../announcement/announcement-model';\nimport { ADMIN, MANAGER } from '../../../shared/constants';\nimport quotes from '../../announcement/quotes.json';\nimport * as R from 'ramda';\nimport getRandomly from 'get-randomly';\nimport {\n OnAnnouncementCreateEvent,\n OnAnnouncementError,\n OnAnnouncementUpdateEvent,\n} from 'modules/announcement/announcement-events';\n\nconst StyledPaper = styled(Paper)`\n position: relative;\n min-height: 264px;\n background-color: #f3fafa !important;\n display: flex;\n justify-content: ${({ justifyContent }) => justifyContent};\n`;\n\nconst Title = styled(Heading)`\n opacity: 0.9 !important;\n color: #1e4358 !important;\n font-size: 36px !important;\n line-height: 55px !important;\n font-weight: 600 !important;\n margin-top: 10px !important;\n height: 51px !important;\n`;\n\nconst SubTitle = styled(Heading)`\n color: #323c47 !important;\n font-size: 11px !important;\n letter-spacing: 1px;\n line-height: 27px;\n font-weight: 600;\n margin-top: 10px !important;\n margin-bottom: 10px !important;\n`;\n\nconst Text = styled.p`\n width: 34rem;\n color: #1e4358;\n font-family: 'Poppins';\n font-size: 18px;\n font-style: italic;\n line-height: 24px;\n`;\n\nconst Author = styled.p`\n color: #939ea7;\n font-family: 'Poppins';\n font-size: 12px;\n line-height: 18px;\n margin-top: 15px;\n margin-left: 15px;\n`;\n\nconst UpdateButton = styled.span`\n position: absolute;\n bottom: 20px;\n right: 20px;\n height: 20px;\n opacity: 0.9;\n color: #3db4aa;\n font-family: 'Poppins';\n font-size: 14px;\n line-height: 21px;\n cursor: pointer;\n`;\n\nconst Image = styled.img`\n height: 82px;\n width: 107px;\n object-fit: contain;\n max-width: 100%;\n margin-top: 30px;\n`;\n\nconst TextHelp = styled.p`\n color: #cfd4d4;\n font-family: Poppins;\n font-size: 12px;\n line-height: 18px;\n margin-top: 15px;\n`;\n\nconst QuoteOpen = styled.span`\n width: 15px;\n color: #384a59;\n font-family: Poppins;\n font-size: 4em;\n font-style: italic;\n line-height: 0.5em;\n margin-left: -8px;\n height: 51px;\n opacity: 0.2;\n position: relative;\n top: 40px;\n left: -5px;\n`;\n\nconst QuoteClose = styled.span`\n width: 15px;\n color: #384a59;\n font-family: Poppins;\n font-size: 4em;\n font-style: italic;\n line-height: 0.5em;\n margin-left: -8px;\n height: 51px;\n opacity: 0.2;\n position: relative;\n top: 50px;\n right: 12px;\n`;\n\nconst Announcement = ({\n user,\n isUpdate,\n loading,\n onUpdate,\n announcement,\n activeAgencyId,\n userAgencyRoles,\n}) => {\n const [data, setData] = useState(announcement);\n const [isOpen, setIsOpen] = useState(false);\n const [loadingForm, setLoadingForm] = useState(false);\n const handleOnClickUpdate = () => setIsOpen(true);\n const handleOnCloseDialog = () => setIsOpen(false);\n\n const ramdomizeData = (key = 'type', value = 'QUOTE') => {\n const quote = getRandomly(quotes);\n setData({\n ...data,\n [key]: value,\n content: quote.content,\n author: quote.author,\n });\n };\n\n const handleOnChangeInput = (key, value) => {\n onChangeDataHookMixin(data, setData, key, value);\n if (key === 'type' && value === 'QUOTE') {\n ramdomizeData();\n }\n };\n\n const getRandomQuote = (event) => {\n event.preventDefault();\n onChangeDataHookMixin(data, setData, 'type', 'QUOTE');\n ramdomizeData();\n };\n\n const handleOnSubmitForm = () => {\n const announcementData = {\n title: data.title,\n content: data.content,\n type: data.type,\n author: data.author,\n };\n\n setLoadingForm(true);\n\n if (isUpdate) {\n announcementData.id = announcement.id;\n\n updateAnnouncement(announcementData);\n } else {\n announcementData.agency = activeAgencyId;\n\n createAnnouncement(announcementData);\n }\n };\n const handleOnCreateAndUpdate = () => {\n setLoadingForm(false);\n setIsOpen(false);\n onUpdate();\n setData(R.clone(announcementModel));\n };\n const userFirstName = user ? user.firstName : '';\n const defaultTitle = `Morning${userFirstName ? `, ${userFirstName}!` : ''}`;\n const userCanUpdateAndCreate =\n userAgencyRoles.includes(ADMIN) || userAgencyRoles.includes(MANAGER);\n\n useSimpleSubscription(OnAnnouncementCreateEvent, handleOnCreateAndUpdate);\n useSimpleSubscription(OnAnnouncementUpdateEvent, handleOnCreateAndUpdate);\n useSimpleSubscription(OnAnnouncementError, (e) => {\n if (e) {\n onErrorMixinFC(e);\n setLoadingForm(false);\n }\n });\n\n useEffect(() => {\n if (announcement.id !== undefined) {\n setData(announcement);\n } else {\n setData(R.clone(announcementModel));\n }\n }, [announcement]);\n\n return (\n \n {loading ? (\n \n ) : (\n <>\n {isUpdate ? (\n <>\n {announcement.type === 'QUOTE' ? (\n <>\n {defaultTitle}\n QUOTE OF THE DAY\n \n \n “\n {announcement.content}\n ”\n \n \n {announcement.type === 'QUOTE' && - {announcement.author}}\n >\n ) : (\n <>\n {announcement.title}\n \n {announcement.content}\n >\n )}\n {userCanUpdateAndCreate && (\n Update\n )}\n >\n ) : (\n <>\n \n \n {defaultTitle}\n \n \n {/*Launch Lead Manager*/}\n \n \n \n \n \n There are currently no announcements\n \n \n {userCanUpdateAndCreate && (\n Create\n )}\n >\n )}\n \n >\n )}\n \n );\n};\n\nAnnouncement.propTypes = {\n user: PropTypes.object,\n isUpdate: PropTypes.bool.isRequired,\n announcement: PropTypes.object.isRequired,\n onUpdate: PropTypes.func.isRequired,\n loading: PropTypes.bool.isRequired,\n activeAgencyId: PropTypes.string.isRequired,\n userAgencyRoles: PropTypes.array.isRequired,\n};\n\nAnnouncement.defaultProps = {\n user: null,\n};\n\nexport default Announcement;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { Grid, Row } from '@8base/boost';\nimport PriorityBadge from '../../../shared/components/ui/PriorityBadge';\nimport moment from 'moment';\n\nconst TaskContainer = styled.div`\n padding: 15px 24px;\n border-bottom: 1px solid #e9eff4;\n\n &:last-child {\n border-bottom: 0;\n }\n`;\n\nconst TaskTitle = styled.h3`\n height: 20px;\n width: 486px;\n opacity: 0.9;\n color: #3db4aa;\n font-family: 'Poppins';\n font-weight: 600;\n font-size: 14px;\n line-height: 21px;\n margin: 0;\n padding: 0;\n cursor: pointer;\n`;\n\nconst TaskText = styled.p`\n height: 19px;\n width: 446px;\n opacity: 0.9;\n color: #323c47;\n font-family: 'Poppins';\n font-size: 13px;\n line-height: 20px;\n padding: 0;\n margin-top: 2px;\n`;\n\nconst Task = (props) => {\n const { data } = props;\n const time = moment(data.createdAt).format('LLLL');\n\n return (\n \n \n \n {data.title}\n Assigned {moment(time).fromNow()}\n \n \n \n \n \n \n );\n};\n\nTask.propTypes = {\n data: PropTypes.object.isRequired,\n};\n\nTask.defaultProps = {\n assignedBy: '',\n};\n\nexport default Task;\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Grid, Row } from '@8base/boost';\r\nimport { Title, PaperHeader, CustomLink, PlusBtn, WeekComponent } from 'shared/components';\r\nimport Loader from '../../../shared/components/ui/Loader';\r\nimport Task from './Task';\r\nimport TaskForm from '../../leads/components/forms/TaskForm';\r\nimport moment from 'moment';\r\n\r\nconst TasksByDay = ({\r\n data,\r\n isLoading,\r\n week,\r\n fromNowDate,\r\n onSelectDay,\r\n selectedDay,\r\n onLeftClick,\r\n onRightClick,\r\n selectedDayFormat,\r\n refetchTasks,\r\n activeAgencyId,\r\n leads,\r\n users,\r\n}) => {\r\n const [taskFormIsOpen, setTaskFormIsOpen] = useState(false);\r\n\r\n const closeTaskFormDialog = () => {\r\n setTaskFormIsOpen(false);\r\n };\r\n\r\n const tasksFromDay = [];\r\n\r\n data.forEach((task) => {\r\n if (moment(task.date).format('YYYY-MM-DD') === selectedDay && tasksFromDay.length < 3)\r\n tasksFromDay.push(task);\r\n });\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n Tasks for {fromNowDate}, {selectedDayFormat}\r\n \r\n \r\n \r\n setTaskFormIsOpen(true)} />\r\n \r\n \r\n View all Tasks\r\n \r\n \r\n \r\n <>\r\n \r\n \r\n \r\n {taskFormIsOpen && (\r\n \r\n )}\r\n >\r\n {isLoading ? (\r\n \r\n ) : (\r\n <>\r\n {tasksFromDay.map((task, key) => (\r\n \r\n ))}\r\n >\r\n )}\r\n >\r\n );\r\n};\r\n\r\nTasksByDay.propTypes = {\r\n data: PropTypes.array.isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n week: PropTypes.array.isRequired,\r\n fromNowDate: PropTypes.string.isRequired,\r\n selectedDayFormat: PropTypes.string.isRequired,\r\n selectedDay: PropTypes.string.isRequired,\r\n onLeftClick: PropTypes.func.isRequired,\r\n onRightClick: PropTypes.func.isRequired,\r\n onSelectDay: PropTypes.func.isRequired,\r\n refetchTasks: PropTypes.func.isRequired,\r\n activeAgencyId: PropTypes.string.isRequired,\r\n leads: PropTypes.object.isRequired,\r\n users: PropTypes.array.isRequired,\r\n};\r\n\r\nexport default TasksByDay;\r\n","import { gql } from 'graphql-tag';\nimport { LEAD_STAGES } from '../leads/leads-model';\n\nconst CampaignFragment = gql`\n fragment CampaignFragment on Campaign {\n id\n name\n status\n createdAt\n priority\n automaticCalls\n amount\n startsAt\n endsAt\n assignees {\n items {\n id\n firstName\n lastName\n avatar {\n id\n downloadUrl\n }\n }\n }\n workflows {\n items {\n id\n name\n }\n }\n vendor {\n name\n id\n }\n campaignLeadRelation {\n count\n }\n phoneNumber {\n id\n number {\n number\n code\n }\n }\n }\n`;\n\nexport const CAMPAIGN_DETAIL_QUERY = gql`\n query FetchCampaignDetails($id: ID!) {\n campaign(id: $id) {\n ...CampaignFragment\n }\n }\n ${CampaignFragment}\n`;\n\nexport const CAMPAIGN_LIST_QUERY = gql`\n query FetchCampaignsList(\n $skip: Int\n $first: Int\n $filter: CampaignFilter\n $sort: [CampaignSort!]\n $orderBy: [CampaignOrderBy]\n ) {\n campaignsList(skip: $skip, first: $first, filter: $filter, sort: $sort, orderBy: $orderBy) {\n count\n items {\n id\n name\n status\n createdAt\n priority\n assignees {\n items {\n id\n firstName\n lastName\n }\n }\n workflows {\n items {\n id\n name\n }\n }\n campaignLeadRelation {\n count\n }\n }\n }\n }\n`;\nexport const CAMPAIGN_LIST_LIGHT_QUERY = gql`\n query FetchLightCampaignsList(\n $skip: Int\n $first: Int\n $filter: CampaignFilter\n $sort: [CampaignSort!]\n $orderBy: [CampaignOrderBy]\n ) {\n campaignsList(skip: $skip, first: $first, filter: $filter, sort: $sort, orderBy: $orderBy) {\n count\n items {\n id\n name\n }\n }\n }\n`;\n\nexport const CAMPAIGN_PROGRESS_QUERY = gql`\n query FetchCampaignProgress ($campaignId: ID) {\n campaign(id: $campaignId) {\n campaignLeadRelation(\n filter: { stages: { equals: \"${LEAD_STAGES.SOLD}\" } }\n groupBy: {\n query: {\n id: { as: \"count\", fn: { aggregate: COUNT } }\n amount: { as: \"amount\", fn: { aggregate: SUM } }\n }\n }\n ) {\n count\n groups {\n count: String\n amount: String\n }\n }\n }\n leadsList(\n filter: { campaign: { id: { equals: $campaignId } } }\n groupBy: { query: { amount: { as: \"amount\", fn: { aggregate: SUM } } } }\n ) {\n count\n groups {\n amount: String\n }\n }\n }\n`;\n\nexport const CAMPAIGN_CREATE_MUTATION = gql`\n mutation CreateCampaign($data: CampaignCreateInput!) {\n campaignCreate(data: $data) {\n ...CampaignFragment\n }\n }\n ${CampaignFragment}\n`;\n\nexport const CAMPAIGN_DELETE_MUTATION = gql`\n mutation DeleteCampaign($data: CampaignDeleteInput!) {\n campaignDelete(data: $data) {\n success\n }\n }\n`;\n\nexport const CAMPAIGN_UPDATE_MUTATION = gql`\n mutation UpdateCampaign($data: CampaignUpdateInput!) {\n campaignUpdate(data: $data) {\n ...CampaignFragment\n }\n }\n ${CampaignFragment}\n`;\n\nexport const FETCH_CAMPAIGN_LEADS = gql`\n query FetchCampaignLeads($campaignId: ID, $first: Int, $skip: Int) {\n leadsList(filter: { campaign: { id: { equals: $campaignId } } }, first: $first, skip: $skip) {\n items {\n id\n firstName\n lastName\n }\n }\n }\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\nimport { CampaignListResponse } from 'gerated/types';\n// import { FetchCampaignsList } from '../../shared/graphql-types';\n\nexport const OnCampaignsList = createEvent<{ campaignsList: CampaignListResponse }>();\n\nexport const OnCampaignsListError = createEvent();\n\nexport const OnCampaignReplaceList = createEvent<{ campaignsList: CampaignListResponse }>();\n\nexport const OnCampaignReplaceListError = createEvent();\n\nexport const OnCampaignCreate = createEvent();\n\nexport const OnCampaignUpdate = createEvent();\n\nexport const OnCampaignDelete = createEvent();\n\nexport const OnCampaignDeleteError = createEvent();\n\nexport const OnCampaignError = createEvent();\n\nexport const OnCampaignDeleteProgress = createEvent<{ progress: number }>();\n\nexport const OnCampaignDetailsEvent = createEvent();\n\n// Campaign Progress Events\n\nexport const OnFetchCampaignProgressEvent = createEvent();\n\nexport const OnFetchCampaignProgressError = createEvent();\n","import { ValidationError } from '../../shared/errors';\nimport { isValidNumber } from '../../shared/validators';\nimport { isValidString } from '@cobuildlab/validation-utils';\n\n/**\n * Crate and update campaign input validtor\n *\n * @param {object} campaign - The campaign object\n *\n * @returns {void}\n */\nexport const createAndUpdateCampaignValidator = (campaign) => {\n let errorMessages = [];\n\n if (!isValidString(campaign.name)) errorMessages.push('The Campaign must have a valid name');\n\n if (!isValidNumber(campaign.priority))\n errorMessages.push('The campaign must have a valid priority');\n\n if (campaign.assignees.length === 0) errorMessages.push('The campaign must have at least 1 User');\n\n if (!campaign.startsAt || !campaign.endsAt) {\n errorMessages.push('Both the start and end of the campaign are needed');\n } else {\n const start = new Date(campaign.startsAt);\n const end = new Date(campaign.endsAt);\n\n if (start > end) errorMessages.push('The end of the campaign should be after the start');\n }\n\n if (errorMessages.length !== 0) throw new ValidationError(errorMessages);\n};\n\n/**\n * Delete campaign input validator\n *\n * @param {object} data - The data to use to delete the specified campaign\n *\n * @returns {void}\n */\nexport const deleteCampaignValidator = (data) => {\n const errors = [];\n\n if (!isValidString(data.campaignId)) {\n errors.push('No campaign was selected to delete');\n }\n\n if (!isValidString(data.nextCampaignId)) {\n errors.push('No campaign was selected to replace the old one');\n }\n\n if (errors.length > 0) {\n throw new ValidationError(errors);\n }\n};\n","import { log, error } from '@cobuildlab/pure-logger';\nimport {\n CAMPAIGN_LIST_QUERY,\n CAMPAIGN_CREATE_MUTATION,\n CAMPAIGN_DELETE_MUTATION,\n CAMPAIGN_DETAIL_QUERY,\n CAMPAIGN_UPDATE_MUTATION,\n CAMPAIGN_PROGRESS_QUERY,\n FETCH_CAMPAIGN_LEADS,\n CAMPAIGN_LIST_LIGHT_QUERY,\n} from './campaigns-queries';\nimport {\n FETCH_LEADS_COUNT_IN_CAMPAIGN,\n LEAD_USERS_UPDATE_MUTATION,\n LEAD_DELETE_MUTATION,\n} from '../leads/leads-queries';\nimport { OnApolloClient, OnSessionFetch } from '../../shared/session/session-events';\nimport {\n sanitize8BaseReconnects,\n sanitize8BaseReferences,\n sanitize8BaseEmptyFields,\n} from '../../shared/utils';\nimport {\n OnCampaignsList,\n OnCampaignsListError,\n OnCampaignReplaceList,\n OnCampaignReplaceListError,\n OnCampaignDelete,\n OnCampaignDeleteError,\n OnCampaignDeleteProgress,\n OnCampaignCreate,\n OnCampaignError,\n OnCampaignUpdate,\n OnCampaignDetailsEvent,\n OnFetchCampaignProgressError,\n OnFetchCampaignProgressEvent,\n} from './campaign-events';\nimport { createAndUpdateCampaignValidator, deleteCampaignValidator } from './campaigns-validators';\nimport { CAMPAIGN_STATUSES, MANAGER, AGENT } from '../../shared/constants';\nimport { getActiveAgency, getUserAgencyRoles } from '../../shared/utils/agency-utils';\nimport moment from 'moment';\n\n/**\n * create filters for campaigns query.\n *\n * @param filterData - createdAt, updatedAt, assignedTo and status filters.\n * @param search - string from search input.\n *\n * @returns graphql filter object.\n */\nconst createFilter = (filterData: Record, search: string) => {\n const roles = getUserAgencyRoles();\n const { user } = OnSessionFetch.get() as { user: { id: string } };\n\n return {\n ...(filterData && {\n AND: [\n ...(!roles.includes(MANAGER) && roles.includes(AGENT)\n ? [\n {\n OR: [\n {\n users: { some: { id: { equals: user.id } } },\n },\n {\n users: { every: { id: { is_empty: true } } },\n },\n ],\n },\n ]\n : []),\n ...(filterData.dateCreatedStart && filterData.dateCreatedStart !== ''\n ? [\n {\n createdAt: {\n gte: moment(filterData.dateCreatedStart)\n .startOf('day')\n .toISOString(),\n },\n },\n ]\n : []),\n ...(filterData.dateCreatedEnd && filterData.dateCreatedEnd !== ''\n ? [\n {\n createdAt: {\n lte: moment(filterData.dateCreatedEnd)\n .endOf('day')\n .toISOString(),\n },\n },\n ]\n : []),\n ...(filterData.assignedTo && filterData.assignedTo !== ''\n ? [\n {\n assignees: { some: { id: { equals: filterData.assignedTo } } },\n },\n ]\n : []),\n ...(filterData.lastUpdatedStart && filterData.lastUpdatedStart !== ''\n ? [\n {\n updatedAt: {\n gte: moment(filterData.lastUpdatedStart)\n .startOf('day')\n .toISOString(),\n },\n },\n ]\n : []),\n ...(filterData.lastUpdatedEnd && filterData.lastUpdatedEnd !== ''\n ? [\n {\n updatedAt: {\n lte: moment(filterData.lastUpdatedEnd)\n .endOf('day')\n .toISOString(),\n },\n },\n ]\n : []),\n ...(typeof filterData.status === 'number'\n ? [\n {\n status: { equals: CAMPAIGN_STATUSES[filterData.status] },\n },\n ]\n : []),\n ...(filterData.agency && filterData.agency !== ''\n ? [\n {\n agency: { id: { equals: filterData.agency } },\n },\n ]\n : []),\n ],\n }),\n ...(search && {\n name: {\n contains: search,\n },\n }),\n };\n};\n\n/**\n * create sort object for campaigns query.\n *\n * @param sortData - string from select sort.\n *\n * @returns graphql sort object.\n */\nconst createSort = (sortData: string) => {\n return {\n ...(sortData === 'top' && { sort: [{ priority: 'DESC' }] }),\n ...(sortData === 'low' && { sort: [{ priority: 'ASC' }] }),\n ...(sortData === 'newest' && { sort: [{ createdAt: 'DESC' }] }),\n ...(sortData === 'oldest' && { sort: [{ createdAt: 'ASC' }] }),\n };\n};\n\n/**\n * create order for campaigns query.\n *\n * @param order - The order to sort the results\n *\n * @returns graphql sort object.\n */\nconst createOrder = (order: string) => {\n switch (order) {\n case 'top':\n return 'priority_DESC';\n case 'low':\n return 'priority_ASC';\n case 'newest':\n return 'createdAt_DESC';\n case 'oldest':\n return 'createdAt_ASC';\n default:\n return 'createdAt_ASC';\n }\n};\n\n/**\n * Creates a campaign\n *\n * @param campaign - data from the create form.\n *\n * @returns the response data\n */\nexport const createCampaign = async (campaign: Record): Promise => {\n const client = OnApolloClient.get();\n\n if (!client) return;\n\n let newCampaign;\n\n try {\n createAndUpdateCampaignValidator(campaign);\n } catch (e) {\n error('createCampaign', e);\n\n return OnCampaignError.dispatch(e as Error);\n }\n\n sanitize8BaseEmptyFields(campaign);\n sanitize8BaseReferences(campaign, 'assignees');\n sanitize8BaseReferences(campaign, 'workflows');\n sanitize8BaseReferences(campaign, 'users');\n sanitize8BaseReferences(campaign, 'agents');\n\n campaign.agency = {\n connect: {\n id: getActiveAgency().id,\n },\n };\n\n try {\n newCampaign = await client.mutate({\n mutation: CAMPAIGN_CREATE_MUTATION,\n variables: { data: campaign },\n });\n } catch (e) {\n error('createCampaign', e);\n\n return OnCampaignError.dispatch(e as Error);\n }\n\n log('createCampaign', newCampaign);\n OnCampaignCreate.dispatch(newCampaign.data);\n return newCampaign.data;\n};\n\n/**\n * Fetches the campaign list\n *\n * @param agencyId - The agency to fetch the campaigns from\n * @param page - The page to fetch\n * @param search - The search to filter the results\n * @param sortData - Orders the data\n * @param filters - The filters to limit the results from\n *\n * @returns The request result\n */\nexport const fetchCampaignsList = async (\n agencyId: string,\n page = 1,\n search = '',\n sortData = '',\n filters: Record = {},\n): Promise => {\n const client = OnApolloClient.get();\n\n if (client) {\n const first = 10;\n const skip = first * (page - 1);\n const filter = createFilter({ agency: agencyId, ...filters }, search);\n const orderBy = createOrder(sortData);\n let response = null;\n\n try {\n response = await client.query({\n query: CAMPAIGN_LIST_QUERY,\n variables: { filter, first, skip, orderBy },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchCampaignsList', e);\n\n return OnCampaignsListError.dispatch(e);\n }\n\n log('fetchCampaignsList', response);\n\n return OnCampaignsList.dispatch(response.data);\n }\n};\n\n/**\n * Action for fetch the campaigns\n *\n * @param data - filter data that contains search, filters and sort.\n * @param attempts - The number of attempts\n *\n * @returns the response data\n */\nexport const fetchCampaigns = async (\n data: Record = {},\n attempts = 0,\n): Promise => {\n const { first, search, filterData, sortData } = data;\n const client = OnApolloClient.get();\n const filter = createFilter(filterData, search);\n const sort = sortData ? createSort(sortData).sort : null;\n let response;\n\n if (client) {\n const variables = {\n ...(first && { first }),\n ...(filter && { filter }),\n ...(sort && { sort }),\n };\n\n try {\n response = await client.query({\n query: CAMPAIGN_LIST_QUERY,\n fetchPolicy: 'network-only',\n variables,\n });\n } catch (e) {\n if (attempts <= 0) {\n error('fetchCampaigns', e);\n return OnCampaignError.dispatch(e as Error);\n }\n return fetchCampaigns(data, attempts - 1);\n }\n\n log('fetchCampaigns', response);\n OnCampaignsList.dispatch(response.data);\n }\n};\n/**\n * Action for fetch the campaigns\n *\n * @param data - filter data that contains search, filters and sort.\n *\n * @returns the response data\n */\nexport const fetchCampaignsLight = async (\n data: Record = {},\n): Promise> => {\n const { first, search, filterData, sortData } = data;\n const client = OnApolloClient.get();\n const filter = createFilter(filterData, search);\n const sort = sortData ? createSort(sortData).sort : null;\n let response;\n\n if (client) {\n const variables = {\n ...(first && { first }),\n ...(filter && { filter }),\n ...(sort && { sort }),\n };\n\n try {\n response = await client.query({\n query: CAMPAIGN_LIST_LIGHT_QUERY,\n fetchPolicy: 'network-only',\n variables,\n });\n } catch (e) {\n error('fetchCampaigns', e);\n return OnCampaignError.dispatch(e as Error);\n }\n\n log('fetchCampaigns', response);\n OnCampaignsList.dispatch(response.data);\n\n return response.data;\n }\n};\n/**\n * Deletes a campaign by id\n *\n * @param id - identifier of the campaign\n *\n * @returns the response data\n */\nexport const deleteCampaign = async (id: string): Promise> => {\n const client = OnApolloClient.get();\n let response;\n\n if (client) {\n try {\n response = await client.mutate({\n mutation: CAMPAIGN_DELETE_MUTATION,\n variables: { data: { id, force: true } },\n });\n } catch (e) {\n error('campaignDelete', e);\n return OnCampaignError.dispatch(e as Error);\n }\n\n log('campaignDelete', response);\n OnCampaignDelete.dispatch(response.data);\n return response.data;\n }\n};\n\n/**\n * Show details of a campaign\n *\n * @param id - identifier of the campaign\n *\n * @returns the response data\n */\nexport const fetchCampaignDetail = async (id: string): Promise> => {\n const client = OnApolloClient.get();\n let response;\n\n if (client) {\n try {\n response = await client.query({\n query: CAMPAIGN_DETAIL_QUERY,\n variables: { id },\n });\n } catch (e) {\n error('fetchCampaignDetail', e);\n OnCampaignError.dispatch(e as Error);\n return OnCampaignError.dispatch(e as Error);\n }\n\n log('fetchCampaignDetail', response);\n OnCampaignDetailsEvent.dispatch(response.data);\n\n return response.data;\n }\n};\n\n/**\n * Fetches a specific campaign progess\n *\n * @param id - The id of the campaign\n *\n * @returns The request result\n */\nexport const fetchCampaignProgress = async (id: string): Promise> => {\n const client = OnApolloClient.get();\n let response = null;\n\n if (!client) return;\n\n try {\n response = await client.query({\n query: CAMPAIGN_PROGRESS_QUERY,\n fetchPolicy: 'no-cache',\n variables: { campaignId: id },\n });\n } catch (e) {\n error('fetchCampaignProgress', e);\n\n return OnFetchCampaignProgressError.dispatch(e);\n }\n\n log('fetchCampaignProgress', response.data);\n\n OnFetchCampaignProgressEvent.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Updates a campaign\n *\n * @param campaign - data from the update form.\n * @param validate - make the validate or not.\n *\n * @returns the response data\n */\nexport const updateCampaign = async (\n campaign: Record,\n validate = false,\n): Promise> => {\n const client = OnApolloClient.get();\n let response;\n\n if (!client) return;\n\n if (validate) {\n try {\n createAndUpdateCampaignValidator(campaign);\n } catch (e) {\n error('updateCampaign', e);\n return OnCampaignError.dispatch(e as Error);\n }\n }\n\n sanitize8BaseReconnects(campaign, 'assignees');\n sanitize8BaseReconnects(campaign, 'workflows');\n\n try {\n response = await client.mutate({\n mutation: CAMPAIGN_UPDATE_MUTATION,\n variables: { data: campaign },\n });\n } catch (e) {\n error('updateCampaign', e);\n return OnCampaignError.dispatch(e as Error);\n }\n\n log('updateCampaign', response);\n OnCampaignUpdate.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Returns a list of campaigns excepts the specified one\n * for selection when the specified is going to be deleted\n *\n * @param id - The id of the campaign to exclude\n * @param agencyId - The id of the agency where the campaigns belong\n * @param page - The page to search\n * @param search - The search to filter the results from\n *\n * @returns The request result\n */\nexport const fetchAvailableCampaigns = async (\n id: string,\n agencyId: string,\n page = 1,\n search = '',\n): Promise => {\n const client = OnApolloClient.get();\n const first = 20;\n const skip = first * (page - 1);\n const filter = {\n id: { not_equals: id },\n name: { contains: search },\n agency: { id: { equals: agencyId } },\n };\n\n let response = null;\n\n if (!client) {\n return;\n }\n\n try {\n response = await client.query({\n query: CAMPAIGN_LIST_QUERY,\n fetchPolicy: 'network-only',\n variables: { first, skip, filter },\n });\n } catch (e) {\n error('fetchAvailableCampaigns', e);\n\n return OnCampaignReplaceListError.dispatch(e as Error);\n }\n\n log('fetchAvailableCampaigns', response.data);\n\n return OnCampaignReplaceList.dispatch(response.data);\n};\n\n/**\n * Moves the lead from one campaign to another and deletes\n * the first\n *\n * @param id - The campaign to delete\n * @param nextCampaignId - The campaign to move the leads to\n *\n * @returns The request result\n */\nexport const moveLeadsAndDelete = async (id: string, nextCampaignId: string): Promise => {\n const client = OnApolloClient.get();\n let response = null;\n\n if (!client) {\n return;\n }\n\n try {\n deleteCampaignValidator({ campaignId: id, nextCampaignId });\n } catch (e) {\n error('moveLeadsAndDelete', e);\n\n return OnCampaignDeleteError.dispatch(e as Error);\n }\n\n try {\n response = await client.query({\n query: FETCH_LEADS_COUNT_IN_CAMPAIGN,\n variables: { campaignId: id },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('moveLeadsAndDelete', e);\n\n return OnCampaignDeleteError.dispatch(e as Error);\n }\n\n log('moveLeadsAndDelete', response.data);\n\n const {\n leadsList: {\n groups: [result],\n },\n } = response.data;\n const total: number = result.count ? result.count : 0;\n let acum = 0;\n\n if (total === 0) {\n try {\n response = await client.mutate({\n mutation: CAMPAIGN_DELETE_MUTATION,\n variables: { data: { id } },\n });\n } catch (e) {\n error('moveLeadsAndDelete', e);\n\n return OnCampaignDeleteError.dispatch(e as Error);\n }\n\n log('moveLeadsAndDelete', response.data);\n\n return OnCampaignDelete.dispatch(response.data);\n }\n\n let leads = [];\n\n do {\n try {\n response = await client.query({\n query: FETCH_CAMPAIGN_LEADS,\n fetchPolicy: 'network-only',\n variables: { campaignId: id, first: 20, skip: 0 },\n });\n } catch (e) {\n error('moveLeadsAndDelete', e);\n\n return OnCampaignDeleteError.dispatch(e as Error);\n }\n\n leads = response.data.leadsList.items;\n\n const promises = leads.map((lead: { id: string }) =>\n client.mutate({\n mutation: LEAD_USERS_UPDATE_MUTATION,\n variables: {\n data: { id: lead.id, campaign: { reconnect: { id: nextCampaignId } } },\n },\n }),\n );\n\n try {\n response = await Promise.all(promises);\n } catch (e) {\n error('moveLeadsAndDelete', e);\n\n return OnCampaignDeleteError.dispatch(e as Error);\n }\n\n log('moveLeadsAndDelete', response);\n\n acum += leads.length;\n\n OnCampaignDeleteProgress.dispatch({\n progress: parseInt(`${(acum * 99) / total}`),\n });\n } while (leads.length === 20);\n\n try {\n response = await client.mutate({\n mutation: CAMPAIGN_DELETE_MUTATION,\n variables: { data: { id, force: true } },\n });\n } catch (e) {\n error('moveLeadsAndDelete', e);\n\n return OnCampaignDeleteError.dispatch(e as Error);\n }\n\n log('moveLeadsAndDelete', response.data);\n\n return OnCampaignDelete.dispatch(response.data);\n};\n\n/**\n * Deletes all of the campaign's leads and the\n * campaign itself\n *\n * @param id - The campaign id\n *\n * @returns The request result\n */\nexport const forceDeleteCampaign = async (id: string): Promise => {\n const client = OnApolloClient.get();\n let response = null;\n\n if (!client) return;\n\n try {\n response = await client.query({\n query: FETCH_LEADS_COUNT_IN_CAMPAIGN,\n variables: { campaignId: id },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('forceDeleteCampaign', e);\n\n return OnCampaignDeleteError.dispatch(e as Error);\n }\n\n log('forceDeleteCampaign', response.data);\n\n const {\n leadsList: {\n groups: [result],\n },\n } = response.data;\n const total = result.count ? result.count : 0;\n let acum = 0;\n\n if (total === 0) {\n try {\n response = await client.mutate({\n mutation: CAMPAIGN_DELETE_MUTATION,\n variables: { data: { id } },\n });\n } catch (e) {\n error('forceDeleteCampaign', e);\n\n return OnCampaignDeleteError.dispatch(e as Error);\n }\n\n log('forceDeleteCampaign', response.data);\n\n return OnCampaignDelete.dispatch(response.data);\n }\n\n let leads = [];\n\n do {\n try {\n response = await client.query({\n query: FETCH_CAMPAIGN_LEADS,\n fetchPolicy: 'network-only',\n variables: { campaignId: id, first: 20, skip: 0 },\n });\n } catch (e) {\n error('forceDeleteCampaign', e);\n\n return OnCampaignDeleteError.dispatch(e as Error);\n }\n\n leads = response.data.leadsList.items;\n\n const promises = leads.map((lead: { id: string }) =>\n client.mutate({\n mutation: LEAD_DELETE_MUTATION,\n variables: {\n data: { id: lead.id, force: true },\n },\n }),\n );\n\n let res: Array>>;\n\n try {\n res = await Promise.allSettled>(promises);\n } catch (e) {\n error('forceDeleteCampaign', e);\n\n return OnCampaignDeleteError.dispatch(e as Error);\n }\n\n log('forceDeleteCampaign', res);\n\n // eslint-disable-next-line no-loop-func\n acum += res.reduce((prev: number, curr: PromiseSettledResult>) => {\n if (curr.status === 'rejected') {\n return prev;\n }\n\n return prev + 1;\n }, 0);\n\n OnCampaignDeleteProgress.dispatch({\n progress: parseInt(`${(acum * 99) / total}`),\n });\n } while (leads.length === 20);\n\n try {\n response = await client.mutate({\n mutation: CAMPAIGN_DELETE_MUTATION,\n variables: { data: { id, force: true } },\n });\n } catch (e) {\n error('forceDeleteCampaign', e);\n\n return OnCampaignDeleteError.dispatch(e as Error);\n }\n\n log('forceDeleteCampaign', response.data);\n\n return OnCampaignDelete.dispatch(response.data);\n};\n","import gql from 'graphql-tag';\n\nexport const UserFragment = gql`\n fragment UserFragment on User {\n email\n firstName\n id\n lastName\n cellPhone\n workPhone\n workPhoneExt\n timezone\n avatar {\n id\n downloadUrl\n }\n }\n`;\n\nexport const DASHBOARD_ELEMENTS_QUERY = gql`\n query FetchDashboardData($id: ID, $filter: LeadFilter, $actualMonth: LeadStageHistoryFilter) {\n agency(id: $id) {\n name\n agencyAgencyUserRelation {\n items {\n id\n user {\n ...UserFragment\n }\n }\n }\n agencyAgentRelation {\n items {\n id\n user {\n ...UserFragment\n }\n }\n }\n agencyManagerRelation {\n items {\n id\n user {\n ...UserFragment\n }\n }\n }\n agencyCampaignRelation {\n items {\n campaignLeadRelation(filter: $filter) {\n items {\n leadLeadStageHistoryRelation(filter: $actualMonth) {\n items {\n createdBy {\n id\n firstName\n }\n stage {\n name\n }\n }\n }\n updatedAt\n status\n firstName\n amount\n id\n assignees {\n items {\n ...UserFragment\n }\n }\n }\n }\n }\n }\n }\n }\n ${UserFragment}\n`;\n\nexport const LEADS_LAST_24HOURS = gql`\n query FetchLeadsLastDay($date: DateTime, $agencyId: ID) {\n agency(id: $agencyId) {\n agencyCampaignRelation {\n items {\n campaignLeadRelation(filter: { createdAt: { gte: $date } }) {\n count\n }\n }\n }\n }\n }\n`;\n\nexport const FETCH_TOP_PERFORMERS = gql`\n query FetchTopPerformers($filter: LeadFilter, $sort: [GroupBySort!], $first: Int, $skip: Int) {\n leadsList(\n groupBy: {\n query: {\n assignees: {\n id: { as: \"id\" }\n firstName: { as: \"agentFirstName\" }\n lastName: { as: \"agentLastName\" }\n avatar: { downloadUrl: { as: \"avatar\" } }\n }\n amount: { as: \"amount\", fn: { aggregate: SUM } }\n }\n sort: $sort\n first: $first\n skip: $skip\n }\n filter: $filter\n ) {\n groups {\n id: ID\n agentFirstName: String\n agentLastName: String\n avatar: String\n amount: BigInt\n }\n }\n }\n`;\nexport const FETCH_AGENCY_BI_REPORT = gql`\n query getAgencyBIReports($periodType: String, $agencyId: ID) {\n agencyReportsList(\n filter: { agencyId: { id: { equals: $agencyId } }, periodType: { equals: $periodType } }\n orderBy: periodNumber_DESC\n first: 1\n ) {\n items {\n id\n periodType\n periodNumber\n input\n output\n }\n }\n }\n`;\n\nexport const UPDATE_FEEDBACK_ON_REPORT = gql`\n mutation updateReportWithFeedback($reportId: ID, $feedbackObj: JSON) {\n agencyReportUpdate(filter: { id: $reportId }, data: { feedback: $feedbackObj }) {\n id\n feedback\n }\n }\n`;\nexport const GET_REPORT = gql`\n query getReport($reportId: ID) {\n agencyReport(id: $reportId) {\n id\n feedback\n }\n }\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchTopPerformersEvent = createEvent();\n\nexport const OnFetchTopPerformersError = createEvent();\n\nexport const OnDashBoardElementsEvent = createEvent();\n\nexport const OnDashBoardElementsError = createEvent();\n\nexport const OnLeadsLast24HoursEvent = createEvent();\n\nexport const OnFetchAgencyReportEvent = createEvent();\n\nexport const OnFetchAgencyReportError = createEvent();\n\nexport const OnFeedbackReportCreate = createEvent();\nexport const OnFeedbackReportCreateError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../shared/session/session-events';\nimport {\n DASHBOARD_ELEMENTS_QUERY,\n LEADS_LAST_24HOURS,\n FETCH_TOP_PERFORMERS,\n FETCH_AGENCY_BI_REPORT,\n UPDATE_FEEDBACK_ON_REPORT,\n GET_REPORT,\n} from './dashboard-queries';\nimport {\n OnFetchTopPerformersEvent,\n OnFetchTopPerformersError,\n OnDashBoardElementsError,\n OnDashBoardElementsEvent,\n OnLeadsLast24HoursEvent,\n OnFetchAgencyReportEvent,\n OnFetchAgencyReportError,\n OnFeedbackReportCreate,\n OnFeedbackReportCreateError,\n} from './dashboard-events';\nimport moment from 'moment';\n\n/**\n * Method to get the users and leads from the agency\n *\n * @memberof Dashboard\n * @param {string} agencyId - id of the agency\n * @param {string} userId - The user id\n * @param {Date} dateFilter - the date filter\n *\n * @returns {Promise} The request result\n */\nexport const fetchUsers = async (agencyId, userId, dateFilter) => {\n const client = OnApolloClient.get();\n let response;\n\n const previusMonth = moment().subtract(1, 'month');\n\n const actualMonth = {\n createdAt: {\n gte: previusMonth.startOf('month').toISOString(),\n lte: previusMonth.endOf('month').toISOString(),\n },\n };\n\n const filter = {\n leadLeadStageHistoryRelation: {\n some: {\n stage: { name: { equals: 'Sold' } },\n ...dateFilter,\n },\n },\n };\n\n try {\n response = await client.query({\n query: DASHBOARD_ELEMENTS_QUERY,\n fetchPolicy: 'network-only',\n variables: { id: agencyId, filter, actualMonth },\n });\n } catch (e) {\n error('dashboard elements error', e);\n return OnDashBoardElementsError.dispatch(e.message);\n }\n\n log('fetchUsers', response.data);\n\n const { data } = response;\n\n const users = data.agency.agencyAgencyUserRelation.items;\n const leads = [];\n\n data.agency.agencyCampaignRelation.items.forEach((campaing) => {\n campaing.campaignLeadRelation.items.forEach((lead) => {\n leads.push(lead);\n });\n });\n\n const performers = users.map((user) => {\n return {\n performance: parseFloat(0),\n name: `${user.user.firstName} ${user.user.lastName}`,\n imgUrl:\n user.user.avatar !== null\n ? user.user.avatar.downloadUrl\n : 'https://randomuser.me/api/portraits/women/17.jpg',\n id: user.user.id,\n };\n });\n\n leads.forEach((lead) => {\n lead.assignees.items.forEach((user) => {\n let exist = false;\n performers.forEach((u, i) => {\n if (u.id === user.id) {\n performers[i].performance = performers[i].performance + parseFloat(lead.amount);\n exist = true;\n }\n });\n if (!exist) {\n const newData = {\n performance: parseFloat(lead.amount),\n name: `${user.firstName} ${user.lastName}`,\n imgUrl:\n user.avatar !== null\n ? user.avatar.downloadUrl\n : 'https://randomuser.me/api/portraits/women/17.jpg',\n id: user.id,\n };\n performers.push(newData);\n }\n });\n });\n\n performers.sort((a, b) => {\n if (a.performance < b.performance) {\n return 1;\n }\n if (a.performance > b.performance) {\n return -1;\n }\n return 0;\n });\n\n const myUser = performers.find((user, i) => {\n return user.id === userId;\n });\n\n const position = performers.indexOf(myUser) + 1;\n\n const elements = {\n position,\n users,\n performers,\n leads,\n };\n\n OnDashBoardElementsEvent.dispatch(elements);\n\n return response.data;\n};\n\n/**\n * Method for get new leads in 24 hours\n *\n * @memberof Dashboard\n * @param agencyId id of the agency\n */\n\nexport const fetchLeadsInLast24Hours = async (agencyId, attempts = 0) => {\n const client = OnApolloClient.get();\n const date = `${moment()\n .subtract(24, 'hours')\n .format('YYYY-MM-DD')}T00:00:00Z`;\n let response;\n try {\n response = await client.query({\n query: LEADS_LAST_24HOURS,\n fetchPolicy: 'network-only',\n variables: { date, agencyId },\n });\n } catch (e) {\n if (attempts <= 0) {\n error('dashboard elements error', e);\n return OnDashBoardElementsError.dispatch(e.message);\n }\n return fetchLeadsInLast24Hours(agencyId, attempts - 1);\n }\n OnLeadsLast24HoursEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Fetches the top performers\n *\n * @param {number} page - The page to fetch from\n * @param {object} data - The data to create the filters from\n *\n * @returns {Promise} The request result\n */\nexport async function fetchTopPerformers(page = 1, data = {}) {\n const client = OnApolloClient.get();\n const first = 10;\n const skip = first * (page - 1);\n const sort = { alias: 'amount', direction: 'DESC' };\n const filter = createPerformersFilter(data);\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_TOP_PERFORMERS,\n fetchPolicy: 'no-cache',\n variables: { filter, first, skip, sort },\n });\n } catch (e) {\n error('fetchTopPerformers', e);\n\n return OnFetchTopPerformersError.dispatch(e);\n }\n\n log('fetchTopPerformers', response.data);\n\n return OnFetchTopPerformersEvent.dispatch(response.data);\n}\n\n/**\n * Creates a filter for a list of performers\n *\n * @param {object} data - Data to create the filter from\n *\n * @returns {object} The performers filters\n */\nfunction createPerformersFilter(data = {}) {\n const filters = {\n ...(data.agency\n ? {\n campaign: { agency: { id: { equals: data.agency } } },\n }\n : {}),\n leadLeadStageHistoryRelation: {\n some: {\n stage: {\n name: { equals: 'Sold' },\n },\n ...(data.period ? data.period : {}),\n },\n },\n };\n\n return filters;\n}\n\n/**\n * Fetches the agency's Business Intelligence reports\n *\n * @param {number} agencyId - The agency for which to fetch the report\n * @param {object} periodType - The data to create the filters from\n *\n * @returns {Promise} The request result\n */\nexport async function fetchAgencyReport(agencyId, periodType = 'weekly') {\n const client = OnApolloClient.get();\n\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_AGENCY_BI_REPORT,\n fetchPolicy: 'no-cache',\n variables: { agencyId, periodType },\n });\n } catch (e) {\n error('fetchAgencyReport', e);\n\n return OnFetchAgencyReportError.dispatch(e);\n }\n\n log('fetchAgencyReport', response.data);\n\n return OnFetchAgencyReportEvent.dispatch(response.data);\n}\n\n/**\n * Mutates the agency's Business Intelligence report to reflect the feedback on the insight given by the user\n *\n * @param {number} reportId - The report that is being rated\n * @param {object} feedback - Object that holds the information of the feedback for re-training purposes\n *\n * @returns {Promise} The request result\n */\nexport async function createFeedback(reportId, feedback) {\n const client = OnApolloClient.get();\n\n let response = null,\n report = null;\n\n try {\n report = await client.query({\n query: GET_REPORT,\n fetchPolicy: 'no-cache',\n variables: { reportId },\n });\n } catch (e) {\n error('error getting report', e);\n }\n\n const feedbackObj = Array.isArray(report.data.agencyReport.feedback)\n ? [...report.data.agencyReport.feedback, feedback]\n : [feedback];\n\n try {\n response = await client.mutate({\n mutation: UPDATE_FEEDBACK_ON_REPORT,\n variables: { reportId, feedbackObj },\n });\n } catch (e) {\n error('feedbackUpdate', e);\n\n return OnFeedbackReportCreateError.dispatch(e);\n }\n\n log('content feedbackUpdate', response.data);\n\n return OnFeedbackReportCreate.dispatch(response.data);\n}\n","import gql from 'graphql-tag';\r\nimport { LEAD_TASK_FRAGMENT } from '../leads/leads-queries';\r\n\r\nexport const LEAD_TASK_DETAIL_QUERY = gql`\r\n query FetchLeadTask($id: ID!) {\r\n leadTask(id: $id) {\r\n ...LEAD_TASK_FRAGMENT\r\n }\r\n }\r\n ${LEAD_TASK_FRAGMENT}\r\n`;\r\n\r\nexport const LEAD_TASK_LIST_QUERY = gql`\r\n query FetchLeadTasks($skip: Int, $first: Int, $filter: LeadTaskFilter, $sort: [LeadTaskSort!]) {\r\n leadTasksList(skip: $skip, first: $first, filter: $filter, sort: $sort) {\r\n items {\r\n ...LEAD_TASK_FRAGMENT\r\n }\r\n }\r\n }\r\n ${LEAD_TASK_FRAGMENT}\r\n`;\r\n\r\nexport const LEAD_TASK_CREATE_MUTATION = gql`\r\n mutation CreateLeadTask($data: LeadTaskCreateInput!) {\r\n LeadTasksFragment(data: $data) {\r\n ...LeadTasksFragment\r\n }\r\n }\r\n ${LEAD_TASK_FRAGMENT}\r\n`;\r\n\r\nexport const LEAD_TASK_DELETE_MUTATION = gql`\r\n mutation DeleteLeadTask($data: LeadTaskDeleteInput!) {\r\n leadTaskDelete(data: $data) {\r\n success\r\n }\r\n }\r\n`;\r\n\r\nexport const LEAD_TASK_UPDATE_MUTATION = gql`\r\n mutation UpdateLeadTask($data: LeadTaskUpdateInput!) {\r\n leadTaskUpdate(data: $data) {\r\n ...LEAD_TASK_FRAGMENT\r\n }\r\n }\r\n ${LEAD_TASK_FRAGMENT}\r\n`;\r\n","import { ValidationError } from '../../shared/errors';\r\nimport { isValidString, isValidNumber } from '../../shared/validators';\r\n\r\nexport const createAndUpdateLeadTaskValidator = (leadTask) => {\r\n let errorMessages = [];\r\n\r\n if (!isValidString(leadTask.name)) errorMessages.push('The LeadTask must have a valid name');\r\n\r\n if (!isValidString(leadTask.name)) errorMessages.push('The LeadTask must have a valid name');\r\n\r\n if (!isValidNumber(leadTask.type)) errorMessages.push('The LeadTask must have a valid type');\r\n\r\n if (!isValidNumber(leadTask.priority))\r\n errorMessages.push('The LeadTask must have a valid priority');\r\n\r\n if (leadTask.agents.length === 0) errorMessages.push('The LeadTask must have at least 1 Agent');\r\n\r\n if (!isValidString(leadTask.emailMarketingCampaign))\r\n errorMessages.push('The LeadTask must have a email marketing');\r\n\r\n if (errorMessages.length !== 0) throw new ValidationError(errorMessages);\r\n};\r\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnLeadTaskList = createEvent();\n\nexport const OnLeadTaskDetails = createEvent();\n\nexport const OnLeadTaskCreate = createEvent();\n\nexport const OnLeadTaskUpdate = createEvent();\n\nexport const OnLeadTaskDelete = createEvent();\n\nexport const OnLeadTaskError = createEvent();\n\nexport const OnLeadTaskDetailEvent = createEvent();\n\nexport const OnLeadTaskDetailError = createEvent();\n","import { log, error } from '@cobuildlab/pure-logger';\nimport {\n LEAD_TASK_LIST_QUERY,\n LEAD_TASK_CREATE_MUTATION,\n LEAD_TASK_DELETE_MUTATION,\n LEAD_TASK_DETAIL_QUERY,\n LEAD_TASK_UPDATE_MUTATION,\n} from './lead-task-queries';\nimport { OnApolloClient, OnSessionFetch } from '../../shared/session/session-events';\nimport {\n sanitize8BaseReference,\n sanitize8BaseReconnects,\n sanitize8BaseReferences,\n sanitize8BaseEmptyFields,\n} from '../../shared/utils';\nimport { createAndUpdateLeadTaskValidator } from './lead-task-validators';\nimport { onTaskCreate } from '../leads/leads-events';\nimport { getActiveAgency } from '../../shared/utils/agency-utils';\nimport {\n OnLeadTaskError,\n OnLeadTaskList,\n OnLeadTaskUpdate,\n OnLeadTaskDelete,\n OnLeadTaskDetails,\n} from './lead-task-events';\n\n/**\n * create filters for lead tasks query.\n *\n * @param {object} filterData createdAt, updatedAt, assignedTo and status filters.\n * @param {string} search string from search input.\n * @returns {object} graphql filter object.\n */\nconst createFilter = (filterData, search) => {\n return {\n ...(filterData && {\n AND: [\n ...(filterData.assignedTo && filterData.assignedTo !== ''\n ? [\n {\n users: { some: { id: { equals: filterData.assignedTo } } },\n },\n ]\n : []),\n ...(filterData.agency && filterData.agency !== ''\n ? [\n {\n agency: {\n id: {\n equals: filterData.agency,\n },\n },\n },\n ]\n : []),\n ...(filterData.onDate && filterData.onDate !== ''\n ? [\n {\n date: { gte: filterData.onDate },\n },\n ]\n : []),\n ...(filterData.onStatus && filterData.onStatus !== ''\n ? [\n {\n status: { equals: filterData.onStatus },\n },\n ]\n : []),\n ],\n }),\n ...(search && {\n title: {\n contains: search,\n },\n }),\n };\n};\n\n/**\n * create sort object for lead tasks query.\n *\n * @param {string} sortData string from select sort.\n * @returns {object} graphql sort object.\n */\nconst createSort = (sortData) => {\n return {\n ...(sortData === 'top' && { sort: [{ priority: 'DESC' }] }),\n ...(sortData === 'low' && { sort: [{ priority: 'ASC' }] }),\n ...(sortData === 'newest' && { sort: [{ createdAt: 'DESC' }] }),\n ...(sortData === 'oldest' && { sort: [{ createdAt: 'ASC' }] }),\n };\n};\n\n/**\n * Creates a leadTask\n *\n * @param {object} leadTask data from the create form.\n * @returns {object} the response data\n */\nexport const createLeadTask = async (leadTask) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n createAndUpdateLeadTaskValidator(leadTask);\n } catch (e) {\n error('createLeadTask', e);\n return OnLeadTaskError.dispatch(e);\n }\n\n sanitize8BaseEmptyFields(leadTask);\n // sanitize8BaseReference(leadTask, 'emailMarketingCampaign');\n sanitize8BaseReferences(leadTask, 'agents');\n\n leadTask.agency = {\n connect: {\n id: getActiveAgency().id,\n },\n };\n\n try {\n response = await client.mutate({\n mutation: LEAD_TASK_CREATE_MUTATION,\n variables: { data: leadTask },\n });\n } catch (e) {\n error('createLeadTask', e);\n return OnLeadTaskError.dispatch(e);\n }\n\n log('createLeadTask', response);\n\n onTaskCreate.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Action for fetch the campaigns\n *\n * @param {object} data filter data that contains search, filters and sort.\n * @param {number} attempts retry amount\n * @returns {object} the response data\n */\nexport const fetchLeadTask = async (data = {}, attempts = 0) => {\n const client = OnApolloClient.get();\n const session = OnSessionFetch.get();\n\n const { first, search, filterData, sortData, page } = data;\n const skip = (page - 1) * 10;\n const filter = createFilter(filterData, search);\n const sort = sortData ? createSort(sortData).sort : null;\n\n let response;\n if (client) {\n const variables = {\n ...(skip && { skip }),\n ...(first && { first }),\n ...(filter && { filter }),\n ...(sort && { sort }),\n };\n\n try {\n response = await client.query({\n query: LEAD_TASK_LIST_QUERY,\n fetchPolicy: 'network-only',\n variables,\n });\n } catch (e) {\n if (attempts <= 0) {\n error('fetchLeadTask', e);\n return OnLeadTaskError.dispatch(e);\n }\n return fetchLeadTask(data, attempts - 1);\n }\n\n log('fetchLeadTask', response, session.user.id);\n OnLeadTaskList.dispatch(response.data);\n\n return response.data;\n }\n};\n\n/**\n * Deletes a leadTask by id\n *\n * @param {string} id identifier of the leadTask\n * @returns {object} the response data\n */\nexport const deleteLeadTask = async (id) => {\n const client = OnApolloClient.get();\n let response;\n\n if (client) {\n try {\n response = await client.mutate({\n mutation: LEAD_TASK_DELETE_MUTATION,\n variables: { data: { id } },\n });\n } catch (e) {\n error('leadTaskDelete', e);\n\n return OnLeadTaskError.dispatch(e);\n }\n\n log('leadTaskDelete', response);\n OnLeadTaskDelete.dispatch(response.data);\n\n return response.data;\n }\n};\n\n/**\n * Show details of a leadTask\n *\n * @param {string} id identifier of the leadTask\n * @returns {object} the response data\n */\nexport const fetchLeadTaskDetail = async (id) => {\n const client = OnApolloClient.get();\n let response;\n\n if (client) {\n try {\n response = await client.query({\n query: LEAD_TASK_DETAIL_QUERY,\n variables: { id },\n });\n } catch (e) {\n error('fetchLeadTaskDetail', e);\n return OnLeadTaskError.dispatch(e);\n }\n\n log('fetchLeadTaskDetail', response);\n OnLeadTaskDetails.dispatch(response.data);\n\n return response.data;\n }\n};\n\n/**\n * Updates a leadTask\n *\n * @param {object} leadTask data from the update form.\n * @param {boolean} validate make the validate or not.\n * @returns {object} the response data\n */\nexport const updateLeadTask = async (leadTask, validate) => {\n const client = OnApolloClient.get();\n let response;\n\n if (validate) {\n try {\n createAndUpdateLeadTaskValidator(leadTask);\n } catch (e) {\n error('updateLeadTask', e);\n return OnLeadTaskError.dispatch(e);\n }\n }\n\n sanitize8BaseEmptyFields(leadTask);\n sanitize8BaseReconnects(leadTask, 'agents');\n sanitize8BaseReference(leadTask, 'emailMarketingLeadTask');\n\n try {\n response = await client.mutate({\n mutation: LEAD_TASK_UPDATE_MUTATION,\n variables: { data: leadTask },\n });\n } catch (e) {\n error('updateLeadTask', e);\n return OnLeadTaskError.dispatch(e);\n }\n\n OnLeadTaskUpdate.dispatch(response.data);\n\n return response.data;\n};\n","import moment from 'moment';\nimport { CAMPAIGN_STATUSES } from '../../shared/constants';\nimport bigInt from 'big-integer';\n\n/**\n * Map for showing the data formatted\n *\n * @param {object} campaign the data of the campaign.\n * @returns {object} new data of the campaign with formatted values.\n */\nexport const campaignMap = (campaign) => {\n return {\n ...campaign,\n assignees: campaign.assignees.items,\n leads: campaign.campaignLeadRelation ? campaign.campaignLeadRelation.count : 0,\n startsAt: campaign.startsAt,\n endsAt: campaign.endsAt,\n vendor: campaign.vendor ? campaign.vendor.id : null,\n status: CAMPAIGN_STATUSES.indexOf(campaign.status),\n priority: campaign.priority - 1, // convert to array index.\n workflows: campaign.workflows.items,\n createdAtFormat: moment(campaign.createdAt).format('MM-DD-YYYY, hh:mm a'),\n amount: bigInt(campaign.amount),\n };\n};\n\nexport const campaignMapTable = ({\n id,\n name,\n createdAtFormat,\n priority,\n assignees,\n workflows,\n leads,\n status,\n}) => {\n return {\n id,\n name,\n createdAtFormat,\n priority,\n assignees,\n workflows,\n leads,\n status: CAMPAIGN_STATUSES[status],\n };\n};\n\nexport const campaignMapDashboardTable = (campaign) => {\n const { id, name, agentsFormat } = campaignMap(campaign);\n\n return {\n id,\n name,\n agentsFormat,\n endsFormat: moment().format('MM-DD-YYYY'),\n };\n};\n","import moment from 'moment';\r\nimport { getAssignedAgents } from '../agents/agents-utils';\r\n\r\n/**\r\n * Map for showing the data formatted\r\n *\r\n * @param {object} leadTask the data of the leadTask.\r\n * @returns {object} new data of the leadTask with formatted values.\r\n */\r\nexport const leadTaskMap = (leadTask) => {\r\n return {\r\n ...leadTask,\r\n date: moment(leadTask.date).format('MM-DD-YYYY'),\r\n createdAtFormat: moment(leadTask.createdAt).format('MM-DD-YYYY, hh:mm a'),\r\n agentsFormat: leadTask.users.items.length\r\n ? getAssignedAgents(leadTask.users.items.map((item) => ({ user: item })))\r\n : '',\r\n type: leadTask.type,\r\n priority: leadTask.priority,\r\n };\r\n};\r\n\r\nexport const leadTaskMapTable = ({\r\n id,\r\n title,\r\n date,\r\n type,\r\n priority,\r\n status,\r\n agentsFormat,\r\n users,\r\n description,\r\n lead,\r\n}) => {\r\n const data = {\r\n id,\r\n title,\r\n date,\r\n type: type.name,\r\n priority,\r\n status,\r\n users: getAssignedAgents(users.items.map((user) => ({ user }))),\r\n agentsFormat,\r\n description,\r\n lead,\r\n };\r\n\r\n return data;\r\n};\r\n\r\nexport const leadTaskMapDashboardTable = (leadTask) => {\r\n const {\r\n id,\r\n title,\r\n date,\r\n status,\r\n createdAt,\r\n description,\r\n priority,\r\n agents,\r\n agentsFormat,\r\n } = leadTaskMap(leadTask);\r\n\r\n return {\r\n id,\r\n title,\r\n description,\r\n date,\r\n status,\r\n createdAt,\r\n priority,\r\n agents,\r\n agentsFormat,\r\n };\r\n};\r\n","import moment from 'moment';\n\n/**\n * Create data week, day, weekday and full date.\n *\n * @param {string} date - The date data\n *\n * @returns {Array} The week of the calendar\n */\nexport const getWeekForCalendar = (date) => {\n const week = [];\n\n for (let i = 0, j = 7; i < j; i++) {\n const dataWeek = {};\n const _date = moment(date).weekday(i)._d;\n\n dataWeek.day = moment(_date).format('DD');\n dataWeek.weekday = moment(_date)\n .weekday(i)\n .format('dd')\n .substr(0, 1);\n dataWeek.fullDate = moment(_date).format('YYYY-MM-DD');\n week.push(dataWeek);\n }\n\n return week;\n};\n\nexport const PERIOD_OF_TIME_OPTIONS = [\n {\n label: 'Current Year',\n value: {\n createdAt: {\n gte: moment()\n .startOf('year')\n .format('YYYY-MM-DDTHH:mm:ssZ'),\n },\n },\n },\n {\n label: 'Last 30 days',\n value: {\n createdAt: {\n gte: moment()\n .subtract(30, 'days')\n .startOf('day')\n .format('YYYY-MM-DDTHH:mm:ssZ'),\n },\n },\n },\n {\n label: 'Last month',\n value: {\n createdAt: {\n gte: moment()\n .subtract(1, 'months')\n .startOf('month')\n .format('YYYY-MM-DDTHH:mm:ssZ'),\n },\n },\n },\n {\n label: 'Last 3 months',\n value: {\n createdAt: {\n gte: moment()\n .subtract(3, 'months')\n .startOf('month')\n .format('YYYY-MM-DDTHH:mm:ssZ'),\n },\n },\n },\n {\n label: 'Last 6 months',\n value: {\n createdAt: {\n gte: moment()\n .subtract(6, 'months')\n .startOf('month')\n .format('YYYY-MM-DDTHH:mm:ssZ'),\n },\n },\n },\n {\n label: 'Last Year',\n value: {\n createdAt: {\n gte: moment()\n .subtract(1, 'years')\n .startOf('year')\n .format('YYYY-MM-DDTHH:mm:ssZ'),\n },\n },\n },\n];\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown } from 'shared/components';\nimport { PRIORITIES } from '../../../shared/constants';\nimport styled from 'styled-components';\nimport { updateCampaign } from '../campaigns-actions';\n\nconst DropdownOption = styled.div`\n padding: 0px ${(props) => (props.isHead ? '0px' : '16px')};\n`;\nconst component = (priority) => (props) => {priority};\n\nconst PriorityCell = ({ rowData, value }) => {\n const [priority, setPriority] = useState(value);\n const handleOnChange = (value) => {\n setPriority(value);\n updateCampaign({ id: rowData.id, priority: value.toString() });\n };\n\n return (\n {\n return {\n value: `${index + 1}`,\n Component: component(priority),\n };\n })}\n onChange={handleOnChange}\n />\n );\n};\n\nPriorityCell.propTypes = {\n value: PropTypes.string.isRequired,\n rowData: PropTypes.object.isRequired,\n};\n\nexport default PriorityCell;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown } from 'shared/components';\nimport { CAMPAIGN_STATUSES } from '../../../shared/constants';\nimport { updateCampaign } from '../campaigns-actions';\nimport styled from 'styled-components';\n\nconst DropdownOption = styled.div`\n padding: 0px ${(props) => (props.isHead ? '0px' : '16px')};\n`;\nconst component = (priority) => (props) => {priority};\n\nconst StatusCell = ({ rowData, value }) => {\n const [status, setStatus] = useState(value);\n const handleOnChange = (value) => {\n setStatus(value);\n updateCampaign({ id: rowData.id, status: value });\n };\n\n return (\n {\n return {\n value: status,\n Component: component(status),\n };\n })}\n onChange={handleOnChange}\n />\n );\n};\n\nStatusCell.propTypes = {\n value: PropTypes.string.isRequired,\n rowData: PropTypes.object.isRequired,\n};\n\nexport default StatusCell;\n","import React from 'react';\nimport EmailMarketingCell from './components/EmailMarketingCell';\nimport PriorityCell from './components/PriorityCell';\nimport StatusCell from './components/StatusCell';\nimport { DropdownWithCheck } from 'shared/components';\nimport CustomLink from '../../shared/components/ui/CustomLink';\nimport DateBox from '../../shared/components/ui/DateBox';\n\n/**\n * Creates a customized priority cell for a Table component\n *\n * @param {object} rowData - Data user in a row of the table\n * @param {object} value - Value\n *\n * @returns {Function} Function that the table component will use to render the component\n */\nexport const priorityCellComponent = (rowData, value) => {\n const component = () => ;\n\n return component;\n};\n\n/**\n * Creates a customized email marketing cell for a Table component\n *\n * @param {object} rowData - Data user in a row of the table\n * @param {object} value - Value\n *\n * @returns {Function} Function that the table component will use to render the component\n */\nexport const emailMarketingCellComponent = (rowData, value) => {\n const component = () => ;\n\n return component;\n};\n\n/**\n * Creates a customized status cell for a Table component\n *\n * @param {object} rowData - Data user in a row of the table\n * @param {object} value - Value\n *\n * @returns {Function} Function that the table component will use to render the component\n */\nexport const statusCellComponent = (rowData, value) => {\n const component = () => ;\n\n return component;\n};\n\n/**\n * Function that generates functions for table components\n *\n * @param {object} users - All users available to select\n * @param {Function} users.onConfirm - Function to call on form confirmation\n *\n * @returns {Function} Function received by the Table component to create the customized cell\n */\nexport const dropdownUpdateCellFactory = ({ items, onConfirm, rowDataKey, label }) => {\n /**\n * Creates a customized dropdown cell for a Table component\n *\n * @param {object} rowData - Data user in a row of the table\n * @param {object} value - Value\n *\n * @returns {Function} Function that the table component will use to render the component\n */\n const dropdownUpdateCellComponent = (rowData, value) => {\n const component = () => {\n const selectedItems = rowData[rowDataKey]; // this selected items come from the record.\n let header = '';\n\n if (selectedItems.length > 0) {\n const firstItem = selectedItems[0];\n header = label(firstItem);\n header =\n selectedItems.length > 1 ? `${header} and ${selectedItems.length - 1} others` : header;\n }\n\n if (items.length === 0) return null;\n\n return (\n ({\n id: item.id,\n label: label(item),\n checked: selectedItems.some((u) => u.id === item.id),\n }))}\n header={header}\n onConfirm={(value) => onConfirm(rowData.id, value)}\n />\n );\n };\n\n return component;\n };\n\n return dropdownUpdateCellComponent;\n};\n\n/**\n * Returns a cell component with a name that links to the\n * campaign details\n *\n * @param {object} rowData - The resource object\n * @param {string} value - The value of the cell\n *\n * @returns {React.FC} the cell function component\n */\nexport const nameCellComponent = (rowData, value) => {\n const component = () => {value};\n\n return component;\n};\n\n/**\n * Returns a cell component with a date\n *\n * @param {object} rowData - The resource object\n * @param {string} value - The value of the cell\n *\n * @returns {React.FC} the cell function component\n */\nexport const dateCellComponent = (rowData, value) => {\n const component = () => ;\n\n return component;\n};\n","import React, { useState, useEffect } from 'react';\nimport { Card, Row, Column, Loader, Select, NoData, styled } from '@8base/boost';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { Title, SecondaryTitle } from '../../../shared/components';\nimport AgentSlide from '../../../shared/components/agents-slider/AgentSlide';\nimport { IconPerformanceGreen } from '../../../shared/components/ui/Icons';\nimport { fetchTopPerformers } from '../dashboard-action';\nimport { IconLeftArrow, IconRightArrow } from '../../../shared/components/ui/Icons';\nimport { PERIOD_OF_TIME_OPTIONS } from '../dashboard-utils';\nimport { OnFetchTopPerformersEvent } from '../dashboard-events';\nimport Slider from 'react-slick';\nimport PropTypes from 'prop-types';\n\nconst Container = styled.div`\n width: 100%;\n max-width: 550px;\n`;\n\nconst Arrow = styled.div`\n top: 45% !important;\n\n &::before {\n display: none !important;\n }\n`;\n\nconst currency = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n notation: 'compact',\n});\n\n/**\n * Top performers component\n *\n * @param {object} props - The component's props object\n * @param {string} props.agencyId - The id of the agency to fetch the performers from\n *\n * @returns {React.ReactElement} The component to render\n */\nfunction TopPerformersSlide(props) {\n const [loading, setLoading] = useState(true);\n const [performers, setPerformers] = useState([]);\n const [period, setPeriod] = useState(\n PERIOD_OF_TIME_OPTIONS.find((p) => p.label === 'Current Year').value,\n );\n\n useEffect(() => {\n setLoading(true);\n\n fetchTopPerformers(1, {\n agency: props.agencyId,\n period,\n });\n }, [props.agencyId, period]);\n\n useSubscription(\n OnFetchTopPerformersEvent,\n ({ leadsList }) => {\n setPerformers(leadsList.groups);\n setLoading(false);\n },\n [],\n );\n\n const content = loading ? (\n \n \n \n ) : (\n \n \n {performers.length > 0 ? (\n \n \n {performers.map((performance, i) => {\n return (\n \n );\n })}\n \n \n ) : (\n \n )}\n \n );\n\n return (\n \n \n \n Top Performers\n \n \n Performance Overview\n \n \n \n {content}\n \n );\n}\n\nconst NextArrow = (props) => {\n return (\n \n \n \n );\n};\n\nconst PrevArrow = (props) => {\n return (\n \n \n \n );\n};\n\nconst settings = {\n variableWidth: false,\n dots: false,\n infinite: false,\n slidesToShow: 5,\n slidesToScroll: 1,\n nextArrow: ,\n prevArrow: ,\n};\n\nTopPerformersSlide.propTypes = {\n agencyId: PropTypes.string.isRequired,\n};\n\nexport default TopPerformersSlide;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchCampaignMetricsEvent = createEvent();\nexport const OnFetchCampaignMetricsError = createEvent();\nexport const OnFetchCampaignAgingLeadsEvent = createEvent();\nexport const OnFetchCampaignAgingLeadsError = createEvent();\nexport const OnFetchAgencyMetricsEvent = createEvent();\nexport const OnFetchAgencyMetricsError = createEvent();\nexport const OnFetchUserMetricsEvent = createEvent();\nexport const OnFetchUserMetricsError = createEvent();\nexport const OnFetchCampaignsEvent = createEvent();\nexport const OnFetchCampaignsError = createEvent();\n","import React from 'react';\nimport { Icon } from '@8base/boost';\n\n/**\n * Returns a cell component with a name that links to the\n * campaign details\n *\n * @param {object} _rowData - The resource object\n * @param {string} value - The value of the cell\n *\n * @returns {React.FC} the cell function component\n */\nexport const metricCellComponent = (_rowData, value) => {\n const component = () => (\n {value}\n );\n\n return component;\n};\nexport const leadNameCellComponent = (_rowData, value) => {\n const component = () => {value};\n\n return component;\n};\n\nexport const leadStatusCellComponent = (_rowData, value) => {\n const component = () => {\n if (value === 'X') {\n return (\n \n \n \n );\n } else {\n return ;\n }\n };\n return component;\n};\n","import gql from 'graphql-tag';\n\nexport const agencyMetrics = gql`\n query AgencyMetricsAggregate($agencyId: String!, $from: DateTime, $to: DateTime) {\n agencyMetricsAggregate(agencyId: $agencyId, from: $from, to: $to) {\n speedToContact\n speedToContactAttempt\n leadsContactRate\n leadsCompetitiveRate\n leadsConversionRate\n uniqueLeadsContacted\n uniqueLeadsCompetitive\n uniqueLeadsConverted\n totalContactAttempts\n totalContactsMade\n }\n }\n`;\n\nexport const campaignMetrics = gql`\n query CampaignMetricsAggregate($campaignId: String!, $from: DateTime, $to: DateTime) {\n campaignMetricsAggregate(campaignId: $campaignId, from: $from, to: $to) {\n speedToContact\n speedToContactAttempt\n leadsContactRate\n leadsCompetitiveRate\n leadsConversionRate\n uniqueLeadsContacted\n uniqueLeadsCompetitive\n uniqueLeadsConverted\n totalContactAttempts\n totalContactsMade\n }\n }\n`;\n\nexport const userMetrics = gql`\n query UserMetricsAggregate($userId: String!, $from: DateTime, $to: DateTime) {\n userMetricsAggregate(userId: $userId, from: $from, to: $to) {\n speedToContact\n speedToContactAttempt\n leadsContactRate\n leadsCompetitiveRate\n leadsConversionRate\n uniqueLeadsContacted\n uniqueLeadsCompetitive\n uniqueLeadsConverted\n totalContactAttempts\n totalContactsMade\n }\n }\n`;\n\nexport const fetchCampaignsByAgency = gql`\n query CampaignsByAgency($agencyId: ID) {\n agency(id: $agencyId) {\n agencyCampaignRelation {\n items {\n id\n name\n }\n }\n }\n }\n`;\n\nexport const getCampaignAgingLeads = gql`\n query GET_AGING_CAMPAIGN_LEADS($campaignId: ID, $page: Int) {\n agingCampaignLeads(campaignId: $campaignId, page: $page) {\n count\n result {\n id\n leadName\n zeroToThirty\n thirtyToSixty\n sixtyToNinety\n ninetyPlus\n }\n }\n }\n`;\n","import { OnApolloClient } from 'shared/session/session-events';\nimport {\n campaignMetrics,\n agencyMetrics,\n userMetrics,\n fetchCampaignsByAgency,\n getCampaignAgingLeads,\n} from './metrics-queries';\nimport {\n OnFetchCampaignMetricsEvent,\n OnFetchCampaignMetricsError,\n OnFetchAgencyMetricsEvent,\n OnFetchAgencyMetricsError,\n OnFetchUserMetricsEvent,\n OnFetchUserMetricsError,\n OnFetchCampaignsEvent,\n OnFetchCampaignsError,\n OnFetchCampaignAgingLeadsEvent,\n OnFetchCampaignAgingLeadsError,\n} from './metrics-events';\n\nexport async function fetchCampaignMetrics(campaignId, from, to) {\n const client = OnApolloClient.get();\n let response = null;\n\n try {\n response = await client.query({\n query: campaignMetrics,\n fetchPolicy: 'no-cache',\n variables: { campaignId: campaignId, from: from, to: to },\n });\n } catch (error) {\n console.log('error fetching campaign metrics', error);\n\n return OnFetchCampaignMetricsError.dispatch(error);\n }\n\n return OnFetchCampaignMetricsEvent.dispatch(response.data);\n}\n\nexport async function fetchAgencyMetrics(agencyId, from, to) {\n const client = OnApolloClient.get();\n let response = null;\n\n try {\n response = await client.query({\n query: agencyMetrics,\n fetchPolicy: 'no-cache',\n variables: { agencyId: agencyId, from: from, to: to },\n });\n } catch (e) {\n console.log('error fetching agency metrics', e);\n\n return OnFetchAgencyMetricsError.dispatch(e);\n }\n\n return OnFetchAgencyMetricsEvent.dispatch(response.data);\n}\n\nexport async function fetchUserMetrics(userId, from, to) {\n const client = OnApolloClient.get();\n let response = null;\n\n try {\n response = await client.query({\n query: userMetrics,\n fetchPolicy: 'no-cache',\n variables: { userId: userId, from: from, to: to },\n });\n } catch (e) {\n console.log('error fetching user metrics', e);\n\n return OnFetchUserMetricsError.dispatch(e);\n }\n\n return OnFetchUserMetricsEvent.dispatch(response.data);\n}\n\nexport async function fetchCampaignAgingLeads(campaignId, page) {\n const client = OnApolloClient.get();\n let response = null;\n\n try {\n response = await client.query({\n query: getCampaignAgingLeads,\n fetchPolicy: 'no-cache',\n variables: { campaignId: campaignId, page: page },\n });\n } catch (e) {\n console.log('error fetching campaign aging leads', e);\n\n return OnFetchCampaignAgingLeadsError.dispatch(e);\n }\n\n return OnFetchCampaignAgingLeadsEvent.dispatch(response.data);\n}\n\nexport async function fetchCampaigns(agencyId) {\n const client = OnApolloClient.get();\n //const first = 10;\n //const skip = first * (page - 1);\n // const sort = { alias: 'amount', direction: 'DESC' };\n let response = null;\n\n try {\n response = await client.query({\n query: fetchCampaignsByAgency,\n fetchPolicy: 'no-cache',\n variables: { agencyId: agencyId },\n });\n } catch (e) {\n console.log('error fetching campaigns', e);\n\n return OnFetchCampaignsError.dispatch(e);\n }\n\n return OnFetchCampaignsEvent.dispatch(response.data);\n}\n","import React, { useState, useEffect, useRef } from 'react';\nimport { OnFetchCampaignsEvent, OnFetchCampaignsError } from './metrics-events';\n\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { Grid, Paper, Pagination } from '@8base/boost';\nimport { AgingTableLite, TableHeader } from 'shared/components';\nimport styled from 'styled-components';\nimport { Button, SelectField } from '@8base/boost';\nimport { leadNameCellComponent, leadStatusCellComponent } from './metrics-cells';\nimport { onErrorMixinFC } from 'shared/mixins';\nimport { useHistory } from 'react-router-dom';\nimport { fetchCampaignAgingLeads } from './metrics-actions';\nimport { OnFetchCampaignAgingLeadsEvent, OnFetchCampaignAgingLeadsError } from './metrics-events';\n\nconst StyledLayoutFilters = styled(Grid.Layout)`\n grid-template-columns: repeat(2, 1fr);\n grid-gap: 15px;\n margin-bottom: 30px;\n margin: 0 10px;\n\n @media screen and (max-width: 1300px) {\n grid-template-columns: 1fr;\n grid-gap: 15px;\n }\n\n @media screen and (max-width: 1150px) {\n display: block;\n\n > div:first-child {\n margin-bottom: 24px;\n }\n }\n`;\n\nconst PaginationContainer = styled.div`\n display: flex;\n justify-content: center;\n font-size: 1.2rem;\n padding: 0 1rem;\n\n & > div > div > *::before {\n background-color: var(--color-primary);\n transition: all 0.2s;\n }\n\n & > div > span {\n display: inline-block;\n padding: 0.5rem 1.5rem;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n }\n`;\nconst StyledPaper = styled(Paper)`\n height: 25rem;\n`;\nconst Padded = styled.div`\n padding-bottom: 1.5rem;\n`;\n/**\n *\n */\nexport default function AgingTable() {\n const paginationRef = useRef(null);\n const [page, setPage] = useState(1);\n const [campaignId, setCampaignId] = useState();\n const [campaign, setCampaign] = useState('');\n const [campaigns, setCampaigns] = useState();\n const [leadCount, setLeadCount] = useState(0);\n const [fetchedLeads, setFetchedLeads] = useState([]);\n const [loading, setLoading] = useState(true);\n const history = useHistory();\n\n useEffect(() => {\n if (campaignId) {\n setLoading(true);\n fetchCampaignAgingLeads(campaignId, page);\n }\n }, [campaignId, page]);\n\n useSubscription(\n OnFetchCampaignAgingLeadsEvent,\n ({ agingCampaignLeads }) => {\n if (!agingCampaignLeads) {\n setLeadCount(0);\n setFetchedLeads([]);\n setLoading(false);\n return;\n }\n\n let { result, count } = agingCampaignLeads;\n let cleanResult = result.map((item) => {\n const { __typename, ...rest } = item;\n return rest;\n });\n\n setFetchedLeads(cleanResult);\n if (cleanResult.length > 0) {\n setLeadCount(count);\n } else {\n setLeadCount(0);\n }\n console.log('AGING CAMPAIGN LEADS', JSON.stringify(agingCampaignLeads.result));\n\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchCampaignsEvent,\n ({ agency }) => {\n let campaigns = agency.agencyCampaignRelation.items.map((item) => {\n return {\n value: item.id,\n label: item.name,\n };\n });\n\n console.log('CAMPAIGN', campaign);\n if (campaigns.length > 0) {\n setCampaigns(campaigns);\n setCampaign(campaigns?.[0]?.value);\n setCampaignId(campaigns?.[0]?.value);\n } else {\n setCampaigns([]);\n setCampaignId(null);\n setCampaign(null);\n setFetchedLeads([]);\n setLoading(false);\n }\n },\n [],\n );\n useSubscription(OnFetchCampaignsError, (err) => {\n onErrorMixinFC(err);\n });\n useSubscription(OnFetchCampaignAgingLeadsError, (err) => {\n onErrorMixinFC({ message: 'GraphQL error: Could not fetch Aging Leads' });\n });\n return (\n \n \n \n \n\n \n \n Select Campaign\n \n \n {\n setCampaign(value);\n setCampaignId(value);\n },\n }}\n />\n \n {/* \n console.log({ page, campaign })}>\n Apply\n \n */}\n \n\n {\n history.push(`/leads/${leadId}`);\n },\n },\n ]}\n ignoreColumns={['id']}\n />\n \n \n \n setPage(page)}\n defaultPage={1}\n total={leadCount}\n page={page}\n />\n \n \n \n \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { Grid, Paper, Row } from '@8base/boost';\nimport { TableLite, TableHeader } from 'shared/components';\nimport styled from 'styled-components';\nimport {\n ButtonGroup,\n Button,\n Icon,\n Menu,\n DateInputField,\n SelectField,\n Select,\n Checkbox,\n} from '@8base/boost';\nimport { metricCellComponent } from './metrics-cells';\nimport { AGENT, CAMPAIGN, AGENCY } from './metrics-utils';\n\nconst StyledLayout = styled(Grid.Layout)`\n grid-template-columns: repeat(2, 1fr);\n grid-gap: 15px;\n margin-bottom: 30px;\n\n @media screen and (max-width: 1300px) {\n grid-template-columns: 1fr;\n grid-gap: 15px;\n }\n\n @media screen and (max-width: 1150px) {\n display: block;\n\n > div:first-child {\n margin-bottom: 24px;\n }\n }\n`;\nconst StyledLayoutFilters = styled(Grid.Layout)`\n grid-template-columns: repeat(2, 1fr);\n grid-gap: 15px;\n margin-bottom: 30px;\n margin: 0 10px;\n\n @media screen and (max-width: 1300px) {\n grid-template-columns: 1fr;\n grid-gap: 15px;\n }\n\n @media screen and (max-width: 1150px) {\n display: block;\n\n > div:first-child {\n margin-bottom: 24px;\n }\n }\n`;\n\nexport default function MetricsTable({\n aggregateMetrics,\n performanceMetrics,\n type = 'normal',\n entityType,\n setEntityType,\n isLoading = false,\n campaigns,\n setCampaignId,\n createdFromCheck,\n setCreatedFromCheck,\n dateRangeCheck,\n setDateRangeCheck,\n dateStartsAt,\n setDateStartsAt,\n dateEndsAt,\n setDateEndsAt,\n campaign,\n setCampaign,\n range,\n setRange,\n setShouldFetchMetrics,\n}) {\n const isDateStateClear =\n !dateStartsAt && !dateEndsAt && !dateRangeCheck && !createdFromCheck && !range;\n\n const handleClearDateRange = () => {\n setDateStartsAt(''); // Reset start date\n setDateEndsAt(''); // Reset end date\n setDateRangeCheck(false); // Uncheck the date range checkbox\n setCreatedFromCheck(false); // Uncheck the created from checkbox\n setRange(''); // Reset the range dropdown\n };\n\n return (\n \n \n \n \n\n <>\n \n \n setEntityType(AGENCY)}>\n Agency\n \n setEntityType(CAMPAIGN)}>\n Campaigns\n \n setEntityType(AGENT)}>\n Agent\n \n \n \n\n \n {entityType === CAMPAIGN && (\n \n {\n setCampaign(value);\n setCampaignId(value);\n console.log('CAMPAIGN VALUE', value);\n },\n }}\n />\n \n )}\n \n {\n setCreatedFromCheck(!createdFromCheck);\n setDateRangeCheck(false);\n setRange('');\n }}\n />\n \n\n \n setDateStartsAt(value),\n }}\n />\n \n \n setDateEndsAt(value),\n }}\n />\n \n {/* \n {\n setDateRangeCheck(!dateRangeCheck);\n setCreatedFromCheck(false);\n setDateEndsAt('');\n setDateStartsAt('');\n }}\n />\n \n \n setRange(value),\n }}\n />\n */}\n \n \n Clear\n \n \n \n {\n if (entityType === CAMPAIGN) {\n setCampaign(campaign);\n setCampaignId(campaign);\n }\n setShouldFetchMetrics(true);\n console.log({\n dateEndsAt,\n dateStartsAt,\n dateRangeCheck,\n createdFromCheck,\n entityType,\n campaign,\n range,\n });\n }}>\n Apply\n \n \n \n >\n \n \n \n {} }]}\n ignoreColumns={['id']}\n />\n \n \n \n {} }]}\n ignoreColumns={['id']}\n />\n \n \n \n );\n}\n","export const AGENCY = 'Agency';\nexport const CAMPAIGN = 'Campaign';\nexport const AGENT = 'Agent';","import React, { useState, useEffect, useCallback } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport MetricsTable from './MetricsTable';\nimport {\n OnFetchCampaignMetricsEvent,\n OnFetchCampaignMetricsError,\n OnFetchAgencyMetricsEvent,\n OnFetchAgencyMetricsError,\n OnFetchUserMetricsEvent,\n OnFetchUserMetricsError,\n OnFetchCampaignsEvent,\n OnFetchCampaignsError,\n} from './metrics-events';\nimport {\n fetchCampaignMetrics,\n fetchAgencyMetrics,\n fetchUserMetrics,\n fetchCampaigns,\n} from './metrics-actions';\nimport { AGENT, CAMPAIGN, AGENCY } from './metrics-utils';\nimport { onErrorMixinFC } from 'shared/mixins';\nexport default function MetricsWrapper({ type = 'normal', user }) {\n const [loading, setLoading] = useState(true);\n const [entityType, setEntityType] = useState(AGENCY);\n const [campaignId, setCampaignId] = useState();\n const [campaign, setCampaign] = useState('');\n const [campaigns, setCampaigns] = useState();\n const [aggregateMetrics, setAggregateMetrics] = useState(null);\n const [performanceMetrics, setPerformanceMetrics] = useState(null);\n const [dateRangeCheck, setDateRangeCheck] = useState(false);\n const [createdFromCheck, setCreatedFromCheck] = useState(false);\n const [dateStartsAt, setDateStartsAt] = useState('');\n const [dateEndsAt, setDateEndsAt] = useState('');\n const [range, setRange] = useState('');\n const [shouldFetchMetrics, setShouldFetchMetrics] = useState(true);\n const [initialFetchDone, setInitialFetchDone] = useState(false);\n\n useEffect(() => {\n fetchCampaigns(user?.selectedAgency.id);\n }, []);\n\n useEffect(() => {\n setDateRangeCheck(false);\n setCreatedFromCheck(false);\n setDateStartsAt('');\n setDateEndsAt('');\n setRange('');\n }, [entityType]);\n\n useEffect(() => {\n const shouldFetch = shouldFetchMetrics || !initialFetchDone || entityType;\n let from, to;\n\n if (shouldFetch) {\n // Set initialFetchDone to true\n setInitialFetchDone(true);\n\n // Reset the shouldFetchMetrics flag\n setShouldFetchMetrics(false);\n\n // Set loading to true\n setLoading(true);\n\n // Check if dateStartsAt and dateEndsAt are set, then add them to fetchParams\n if (dateStartsAt) from = dateStartsAt + 'T00:00:00.000Z';\n if (dateEndsAt) to = dateEndsAt + 'T12:59:59.999Z';\n\n switch (entityType) {\n case AGENCY: {\n fetchAgencyMetrics(user?.selectedAgency.id, from, to);\n break;\n }\n case CAMPAIGN: {\n if (campaignId) {\n fetchCampaignMetrics(campaignId, from, to);\n } else {\n setPerformanceMetrics([\n {\n id: 'id',\n totalContactAttempts: 0,\n totalContactsMade: 0,\n uniqueLeadsContacted: 0,\n uniqueLeadsQualified: 0,\n uniqueLeadsConverted: 0,\n },\n ]);\n setAggregateMetrics([\n {\n id: 'id2',\n avgSpeedToContactAttempt: 'N/A',\n avgSpeedToContact: 'N/A',\n leadContactRate: 0 + '%',\n leadCompetitiveRate: 0 + '%',\n leadConversionRate: 0 + '%',\n },\n ]);\n setLoading(false);\n }\n break;\n }\n case AGENT: {\n fetchUserMetrics(user?.id, from, to);\n break;\n }\n }\n }\n }, [shouldFetchMetrics, initialFetchDone, entityType, campaignId]);\n\n function setMetrics(metric) {\n if (metric) {\n setPerformanceMetrics([\n {\n id: metric?.id,\n totalContactAttempts: metric?.totalContactAttempts,\n totalContactsMade: metric?.totalContactsMade,\n uniqueLeadsContacted: metric?.uniqueLeadsContacted,\n uniqueLeadsQualified: metric?.uniqueLeadsCompetitive,\n uniqueLeadsConverted: metric?.uniqueLeadsConverted,\n },\n ]);\n setAggregateMetrics([\n {\n id: metric?.id,\n avgSpeedToContactAttempt: metric?.speedToContactAttempt,\n avgSpeedToContact: metric?.speedToContact,\n leadContactRate: metric?.leadsContactRate + '%',\n leadCompetitiveRate: metric?.leadsCompetitiveRate + '%',\n leadConversionRate: metric?.leadsConversionRate + '%',\n },\n ]);\n } else {\n setPerformanceMetrics([]);\n setAggregateMetrics([]);\n setLoading(false);\n }\n }\n useSubscription(\n OnFetchCampaignMetricsEvent,\n ({ campaignMetricsAggregate }) => {\n let metric = campaignMetricsAggregate;\n setMetrics(metric);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchAgencyMetricsEvent,\n ({ agencyMetricsAggregate }) => {\n let metric = agencyMetricsAggregate;\n setMetrics(metric);\n setLoading(false);\n },\n [],\n );\n useSubscription(\n OnFetchUserMetricsEvent,\n ({ userMetricsAggregate }) => {\n let metric = userMetricsAggregate;\n setMetrics(metric);\n\n setLoading(false);\n },\n [],\n );\n useSubscription(\n OnFetchCampaignsEvent,\n ({ agency }) => {\n let fetchedCampaigns = agency.agencyCampaignRelation.items.map((item) => {\n return {\n value: item.id,\n label: item.name,\n };\n });\n\n if (fetchedCampaigns.length > 0) {\n setCampaigns(fetchedCampaigns);\n const firstCampaign = fetchedCampaigns[0];\n setCampaignId(firstCampaign.value);\n setCampaign(firstCampaign.value);\n } else {\n // Handle the case when no campaigns exist\n console.log('THIS TRIGGERED');\n setCampaigns([]);\n setCampaignId(null);\n setCampaign(null);\n setLoading(false);\n }\n\n setLoading(false);\n },\n [],\n );\n\n useSubscription(OnFetchCampaignMetricsError, (err) => {\n onErrorMixinFC({ message: 'GraphQL error: Could not fetch Campaign Metrics' });\n });\n useSubscription(OnFetchAgencyMetricsError, (err) => {\n onErrorMixinFC({ message: 'GraphQL error: Could not fetch Agency Metrics' });\n });\n useSubscription(OnFetchUserMetricsError, (err) => {\n onErrorMixinFC({ message: 'GraphQL error: Could not fetch User Metrics' });\n });\n useSubscription(OnFetchCampaignsError, (err) => {\n onErrorMixinFC({ message: 'GraphQL error: Could not fetch Campaigns List' });\n });\n\n return (\n \n );\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Grid, styled, Row } from '@8base/boost';\nimport { Margin } from 'shared/components';\n\nexport const Label = styled.span`\n font-family: 'Poppins';\n font-size: 13px !important;\n line-height: 20px;\n font-weight: 600;\n`;\n\nexport const Value = styled.span`\n font-family: 'Poppins';\n font-size: 13px !important;\n line-height: 20px;\n ${(props) =>\n props.oneline &&\n `\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n `}\n`;\n\nconst FormSectionBody = styled(Form.SectionBody)`\n & > *:not(:last-child) {\n margin-bottom: ${(props) => props.space}px;\n }\n`;\n\nconst GridBoxFlexStart = styled(Grid.Box)`\n justify-content: flex-start;\n`;\n\n/**\n * Form with the values to show later\n *\n * @param {object} props - Component props\n * @param {object} props.data - Data to render\n * @param {object} props.rows - Rows with fields\n * @param {boolean} props.space - The number of pixels on margin bottom applied to each field row\n *\n * @returns {React.FC} - The component to render\n */\nconst FormValues = ({ data, rows, space = 16 }) => {\n return (\n \n \n \n {rows.map((row, rowIndex) => {\n const columnSize = (100 / row.length).toFixed(2);\n const gapSize = 16 * (row.length - 1);\n const columns = `repeat(${row.length -\n 1}, ${columnSize}%) calc(${columnSize}% - ${gapSize}px)`;\n\n return (\n \n {row.map((field, fieldIndex) => {\n let inputField;\n\n if (field.type === 'text') {\n inputField = (\n \n {field.inline ? (\n \n {field.label && {field.label}}\n {data[field.key]}\n \n ) : (\n <>\n {field.label && (\n <>\n {field.label} \n >\n )}\n {data[field.key]}\n >\n )}\n \n );\n }\n\n if (field.type === 'html') {\n inputField = (\n \n \n \n );\n }\n\n return {inputField};\n })}\n \n );\n })}\n \n \n \n );\n};\n\nFormValues.propTypes = {\n rows: PropTypes.array.isRequired,\n data: PropTypes.object.isRequired,\n space: PropTypes.number,\n};\n\nFormValues.defaultProps = {\n space: 16,\n};\n\nexport default FormValues;\n","import React, { useState, useEffect } from 'react';\nimport chevronDown from '../../../shared/assets/images/chevron-down.svg';\nimport { Loader } from 'shared/components';\nimport styled from 'styled-components';\nimport { AccordionItem as Item } from '@szhsin/react-accordion';\nimport { OnFeedbackReportCreate } from '../dashboard-events';\nimport { FaRegThumbsUp, FaRegThumbsDown, FaCheck, FaTimes } from 'react-icons/fa';\nimport { Label } from 'shared/components/forms/FormValues';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport { createFeedback } from '../dashboard-action';\n\nconst ItemWithChevron = ({ header, ...rest }) => (\n \n {header}\n \n >\n }\n />\n);\n\nconst AccordionItem = styled(ItemWithChevron)`\n border-bottom: 1px solid #ccc;\n .szh-accordion__item {\n &-btn {\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n margin: 0;\n padding: 1rem;\n font-size: 1.4rem;\n font-weight: 400;\n text-align: left;\n color: #555;\n min-height: 5.5rem;\n background-color: transparent;\n border: none;\n &:hover {\n background-color: #f3f3f3;\n }\n }\n\n &-content {\n transition: height 0.25s cubic-bezier(0, 0, 0, 1);\n }\n\n &-panel {\n padding: 1rem;\n }\n }\n\n .chevron-down {\n margin-left: auto;\n transition: transform 0.25s cubic-bezier(0, 0, 0, 1);\n }\n\n &.szh-accordion__item--expanded {\n .szh-accordion__item-btn {\n background-color: #e7e7e7;\n }\n .chevron-down {\n transform: rotate(180deg);\n }\n }\n`;\n\nconst StyledTextarea = styled.textarea`\n width: 100%;\n max-width: 100%;\n min-height: 100px;\n padding: 8px;\n box-sizing: border-box;\n resize: vertical;\n border: 1px solid #ccc;\n border-radius: 8px;\n outline: none;\n flex: 1;\n &:focus {\n border-color: #4a90e2;\n box-shadow: 0 0 0 2px rgba(74, 144, 226, 0.5);\n }\n\n @media (max-width: 768px) {\n min-height: 80px;\n }\n\n @media (max-width: 480px) {\n padding: 4px;\n }\n`;\n\nconst RatingButton = styled.button`\n border: none;\n background: none;\n padding: 0;\n margin: 0;\n cursor: pointer;\n`;\n\nconst FeedbackButtons = styled.div`\n justify-content: flex-start;\n display: flex;\n gap: 8px;\n`;\n\nconst FeedbackForm = styled.div`\n display: grid;\n grid-template-columns: 1fr 15%;\n grid-template-rows: auto auto;\n grid-column-gap: 1rem;\n grid-template-areas:\n 'textarea submit'\n 'textarea cancel';\n`;\n\nconst FeedbackFormTextArea = styled.div`\n grid-area: textarea;\n`;\nconst FeedbackFormSubmit = styled.div`\n grid-area: submit;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\nconst FeedbackFormCancel = styled.div`\n grid-area: cancel;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\nconst Spacer = styled.div`\n margin: 1rem 0;\n`;\n\nconst ReportItem = ({ content, insightType, id, user }) => {\n const [feedback, setFeedback] = useState('');\n const [showFeedbackInput, setShowFeedbackInput] = useState(false);\n const [hideRatingButtons, setHideRatingButtons] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [isActive, setIsActive] = useState(false); //sets whether this component is the active one to show the confirmation msg\n const [showConfirmationMessage, setShowConfirmationMessage] = useState(false);\n\n useEffect(() => {\n console.log('content User:', user.selectedAgency.id);\n }, []);\n useSimpleSubscription(OnFeedbackReportCreate, () => {\n setIsLoading(false);\n if (isActive) {\n setShowConfirmationMessage(true);\n }\n });\n const handleThumbsUpClick = () => {\n setIsActive(true);\n setHideRatingButtons(true);\n setIsLoading(true);\n createFeedback(id, {\n dateTime: new Date().toISOString(),\n insight: content.insight,\n insightType,\n userId: user.id,\n agencyId: user.selectedAgency.id,\n rating: 'positive',\n });\n };\n const handleThumbsDownClick = () => {\n setIsActive(true);\n setShowFeedbackInput(true);\n setHideRatingButtons(true);\n };\n\n const handleCancelClick = () => {\n setShowFeedbackInput(false);\n setHideRatingButtons(false);\n setIsActive(false);\n setFeedback('');\n };\n\n const handleSubmitClick = () => {\n if (!feedback.trim()) {\n //exit function if feedback is empty\n return;\n }\n setShowFeedbackInput(false);\n setFeedback('');\n setIsLoading(true);\n createFeedback(id, {\n dateTime: new Date().toISOString(),\n insight: content.insight,\n insightType,\n feedback,\n userId: user.id,\n agencyId: user.selectedAgency.id,\n rating: 'negative',\n });\n };\n\n const handleChange = (event) => {\n setFeedback(event.target.value);\n };\n\n return (\n \n {content.insight}\n \n\n {!hideRatingButtons && (\n \n \n \n \n \n \n \n Rate this {insightType}\n \n )}\n {showFeedbackInput && (\n <>\n Please Provide Feedback\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n >\n )}\n {isLoading && }\n {showConfirmationMessage && Thank you for your feedback!}\n \n );\n};\n\nexport default ReportItem;\n","import React, { useState, useEffect } from 'react';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport * as R from 'ramda';\nimport { fetchAgencyReport } from '../dashboard-action';\nimport { OnFetchAgencyReportEvent } from '../dashboard-events';\nimport { Accordion } from '@szhsin/react-accordion';\n\nimport styled from 'styled-components';\nimport AgencyReportItem from './ReportItem';\nimport { Paper, Grid, Tabs, Row, Button, Select, Label } from '@8base/boost';\nimport { Loader } from 'shared/components';\n\nconst StyledPaper = styled(Paper)`\n padding: 0.75rem !important;\n`;\n\nconst Container = styled.div`\n max-width: 25rem;\n`;\n\nconst StyledButton = styled(Button)`\n font-size: 1.3rem !important;\n width: 12rem;\n`;\n\nconst Spacer = styled.div`\n margin: 1rem 0;\n`;\n\nconst OPTIONS = [\n { label: 'Weekly Report', value: 'weekly' },\n { label: 'Monthly Report', value: 'monthly' },\n { label: 'Quarterly Report', value: 'quarterly' },\n { label: 'Yearly Report', value: 'yearly' },\n];\nconst BusinessIntelligenceTabs = (props) => {\n /*if (!data || data.length === 0) {\n return No data available;\n }*/\n const [period, setPeriod] = useState(OPTIONS.find((p) => p.label === 'Weekly Report').value);\n\n const [loading, setLoading] = useState(true);\n const [agencyReportId, setAgencyReportId] = useState(null);\n const [agencyReportOutput, setAgencyReportOutput] = useState(\n R.clone({ output: { observations: [], suggestions: [] } }),\n );\n\n useEffect(() => {\n setLoading(true);\n\n fetchAgencyReport(props.agencyId, period);\n }, [props.agencyId, period]);\n\n useSimpleSubscription(OnFetchAgencyReportEvent, (data) => {\n if (data) {\n setAgencyReportOutput(data.agencyReportsList?.items?.[0]?.output);\n setAgencyReportId(data.agencyReportsList?.items?.[0]?.id);\n\n setLoading(false);\n //console.log('OnFetchAgencyReportEvent data', data);\n }\n });\n\n console.log('BusinessIntelligenceTabs props', agencyReportOutput);\n\n return (\n \n \n \n \n Agency Report\n \n \n \n {loading ? (\n \n ) : (\n \n \n \n {({ selected }) => (\n \n Observations\n \n )}\n \n \n {({ selected }) => (\n \n Suggestions\n \n )}\n \n \n \n \n \n \n {agencyReportOutput?.observations?.map((observation, index) => {\n return (\n \n );\n })}\n \n \n \n \n \n \n {agencyReportOutput?.suggestions?.map((suggestion, index) => {\n return (\n \n );\n })}\n \n \n \n \n )}\n \n \n \n \n );\n};\n\nexport default BusinessIntelligenceTabs;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Grid, Paper, Row } from '@8base/boost';\nimport Announcement from './components/Announcement';\nimport TasksByDate from './components/TasksByDay';\nimport { TableLite, CardIndicator, TableHeader } from 'shared/components';\nimport styled from 'styled-components';\nimport { fetchCampaigns } from '../campaigns/campaigns-actions';\nimport { fetchUsers, fetchLeadsInLast24Hours } from './dashboard-action';\nimport { fetchLeadTask } from '../lead-task/lead-task-actions';\nimport { campaignMapDashboardTable } from '../campaigns/campaigns-utils';\nimport { leadTaskMapDashboardTable } from '../lead-task/lead-task-utils';\nimport { getWeekForCalendar, PERIOD_OF_TIME_OPTIONS } from './dashboard-utils';\nimport { fetchAnnouncements } from '../announcement/announcement-actions';\nimport { nameCellComponent } from '../campaigns/campaigns-cells';\nimport announcementModel from '../announcement/announcement-model';\nimport TopPerformersSlide from './components/TopPerformersSlide';\nimport * as R from 'ramda';\nimport moment from 'moment';\nimport qs from 'qs';\nimport { useAgency } from 'shared/hooks/useAgency';\nimport { useUser } from 'shared/hooks/useUser';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport { OnDashBoardElementsEvent, OnLeadsLast24HoursEvent } from './dashboard-events';\nimport { OnCampaignsList } from 'modules/campaigns/campaign-events';\nimport { OnLeadTaskList } from 'modules/lead-task/lead-task-events';\nimport { OnAnnouncementListEvent } from 'modules/announcement/announcement-events';\nimport AgingTable from 'modules/metrics/AgingTable';\nimport NormalMetrics from 'modules/metrics/MetricsTableWrapper';\nimport AgencyReportTabs from './components/AgencyReportTabs';\n\nconst DashboardLayout = styled.div`\n padding: 25px;\n\n @media screen and (max-width: 1440px) {\n padding: 15px;\n }\n`;\n\nconst StyledLayout = styled(Grid.Layout)`\n grid-template-columns: 2fr 2fr 1fr;\n grid-gap: 15px;\n margin-bottom: 30px;\n\n @media screen and (max-width: 1300px) {\n grid-template-columns: 1fr;\n grid-gap: 15px;\n }\n\n @media screen and (max-width: 1150px) {\n display: block;\n\n > div:first-child {\n margin-bottom: 24px;\n }\n }\n`;\nconst NormalLayout = styled(Grid.Layout)`\n grid-template-columns: 1fr 1fr;\n grid-gap: 15px;\n margin-bottom: 30px;\n\n @media screen and (max-width: 1300px) {\n grid-template-columns: 1fr;\n grid-gap: 15px;\n }\n\n @media screen and (max-width: 1150px) {\n display: block;\n\n > div:first-child {\n margin-bottom: 24px;\n }\n }\n`;\nconst StyledLayoutFilters = styled(Grid.Layout)`\n grid-template-columns: repeat(2, 1fr);\n grid-gap: 15px;\n margin-bottom: 30px;\n margin: 0 10px;\n\n @media screen and (max-width: 1300px) {\n grid-template-columns: 1fr;\n grid-gap: 15px;\n }\n\n @media screen and (max-width: 1150px) {\n display: block;\n\n > div:first-child {\n margin-bottom: 24px;\n }\n }\n`;\n\nexport const DashboardView = () => {\n const agency = useAgency();\n const [user] = useUser();\n const [week, setWeek] = useState([]);\n const [campaigns, setCampaigns] = useState([]);\n const [leads, setLeads] = useState([]);\n const [users, setUsers] = useState([]);\n const [tasks, setTasks] = useState([]);\n const [newLeads24hours, setNewLeads24hours] = useState(0);\n const [loadingAnnouncement, setLoadingAnnouncement] = useState(false);\n const [isLoadingCampaigns, setIsLoadingCampaigns] = useState(false);\n const [isLoadingLeadTasks, setIsLoadingLeadTasks] = useState(false);\n const [periodOfTime] = useState(\n PERIOD_OF_TIME_OPTIONS.find((p) => p.label === 'Current Year').value,\n );\n const [selectedDay, setSelectedDay] = useState(moment().format('YYYY-MM-DD'));\n const [dateReference, setDateReference] = useState(moment().format('YYYY-MM-DD'));\n const [announcement, setAnnouncement] = useState(R.clone(announcementModel));\n const [position, setPosition] = useState('');\n\n const fetchAttempts = 3;\n const oneDayAgo = moment().subtract(24, 'hours');\n const now = moment();\n\n const getCampaigns = useCallback(() => {\n const filterData = agency.id\n ? {\n agency: agency.id,\n }\n : {};\n setIsLoadingCampaigns(true);\n fetchCampaigns({ first: 5, filterData }, fetchAttempts);\n }, [agency.id]);\n\n const getTasks = useCallback(\n (selectedDay) => {\n const week = getWeekForCalendar(dateReference);\n setWeek(week);\n const filterData =\n user.id && selectedDay\n ? {\n assignedTo: user.id,\n onDate: `${week[0].fullDate}T00:00:00Z`,\n }\n : {};\n if (agency && agency.id) {\n filterData['agency'] = agency.id;\n }\n setIsLoadingLeadTasks(true);\n fetchLeadTask({ filterData }, fetchAttempts);\n },\n [user.id, dateReference, agency],\n );\n\n const getLeadsInLast24Hours = useCallback(() => {\n fetchLeadsInLast24Hours(agency.id, fetchAttempts);\n }, [agency.id]);\n\n const getAnnouncement = useCallback(() => {\n const announcementFilter = agency.id\n ? {\n agency: agency.id,\n }\n : {};\n setLoadingAnnouncement(true);\n fetchAnnouncements(announcementFilter, fetchAttempts);\n }, [agency.id]);\n\n const onSelectDay = (selectedDay) => {\n setSelectedDay(selectedDay);\n };\n\n const onRightClick = () => {\n const DateReference = moment(dateReference).add(7, 'days');\n const week = getWeekForCalendar(DateReference);\n setWeek(week);\n setDateReference(dateReference);\n setSelectedDay(week[0].fullDate);\n };\n\n const onLeftClick = () => {\n const DateReference = moment(dateReference).subtract(7, 'days');\n const week = getWeekForCalendar(DateReference);\n setWeek(week);\n setDateReference(dateReference);\n setSelectedDay(week[6].fullDate);\n };\n\n useEffect(() => {\n getAnnouncement();\n getLeadsInLast24Hours();\n getTasks();\n getCampaigns();\n }, [getAnnouncement, getLeadsInLast24Hours, getTasks, getCampaigns]);\n\n useSimpleSubscription(OnDashBoardElementsEvent, (data) => {\n if (data) {\n const { position: positionData, leads, users } = data;\n setPosition(positionData === '' && positionData !== 0 ? positionData : position);\n setLeads(leads);\n setUsers(users);\n }\n });\n\n useSimpleSubscription(OnLeadsLast24HoursEvent, (data) => {\n if (data) {\n let leads = 0;\n data.agency.agencyCampaignRelation.items.forEach((campaing) => {\n leads = leads + campaing.campaignLeadRelation.count;\n });\n setNewLeads24hours(leads);\n }\n });\n\n useSimpleSubscription(OnCampaignsList, (data) => {\n if (data) {\n const {\n campaignsList: { items },\n } = data;\n setIsLoadingCampaigns(false);\n setCampaigns(items.map(campaignMapDashboardTable));\n }\n });\n\n useSimpleSubscription(OnLeadTaskList, (data) => {\n if (data) {\n const {\n leadTasksList: { items },\n } = data;\n setIsLoadingLeadTasks(false);\n setTasks(items.map(leadTaskMapDashboardTable));\n }\n });\n\n useSimpleSubscription(OnAnnouncementListEvent, (data) => {\n if (data) {\n let announcement = R.clone(announcementModel);\n\n if (data.announcementsList.items.length > 0) {\n announcement = data.announcementsList.items[0];\n }\n setAnnouncement(announcement);\n setLoadingAnnouncement(false);\n }\n });\n\n useEffect(() => {\n fetchUsers(agency.id, user.id, periodOfTime);\n }, [agency.id, user.id, periodOfTime]);\n\n const selectedDayFormat = moment(selectedDay).format('dddd MMMM Do');\n const momentSelectedDay = moment(selectedDay);\n const fromNowDate =\n moment().diff(momentSelectedDay, 'days') >= 1\n ? momentSelectedDay.fromNow()\n : momentSelectedDay.calendar().split(' ')[0];\n\n //Filter Leads sold in lastMonth\n const agencyLeadSoldInLastMonth = [];\n leads.forEach((lead) => {\n const findSale = lead.leadLeadStageHistoryRelation.items.find(\n (item) => item.stage.name === 'Sold',\n );\n if (findSale !== undefined) agencyLeadSoldInLastMonth.push(lead);\n });\n\n //Filter Leads sold by the user active in the last month\n const mySales = [];\n agencyLeadSoldInLastMonth.forEach((lead) => {\n lead.assignees.items.forEach((userLead) => {\n if (userLead.id === user.id) mySales.push(lead);\n });\n });\n // Function to determine which layout to use\n const getLayoutComponent = () => {\n return agency.enableInsights ? StyledLayout : NormalLayout;\n };\n\n // Use the determined layout component\n const LayoutComponent = getLayoutComponent();\n\n return (\n \n \n \n \n \n \n \n \n \n 0 ? `${newLeads24hours}` : '0'}\n text=\"New Leads in the last 24 hours\"\n link={{\n path: `/leads?${qs.stringify({\n createdAfter: oneDayAgo.toISOString(),\n createdBefore: now.toISOString(),\n })}`,\n name: 'Manage Leads',\n }}\n />\n \n \n \n \n \n \n \n {} },\n { name: 'Update', onClick: () => {} },\n ]}\n ignoreColumns={['id']}\n />\n \n \n \n \n \n \n \n item.user)}\n refetchTasks={() => getTasks(selectedDay)}\n leads={{ items: leads }}\n activeAgencyId={agency.id}\n fromNowDate={fromNowDate}\n selectedDayFormat={selectedDayFormat}\n onSelectDay={onSelectDay}\n selectedDay={selectedDay}\n onLeftClick={onLeftClick}\n onRightClick={onRightClick}\n />\n \n \n \n \n \n \n \n {agency.enableInsights && (\n \n \n \n )}\n \n \n \n \n \n );\n};\n","import styled from 'styled-components';\n\nexport const H1 = styled.h1`\n font-family: 'Poppins';\n font-weight: 500;\n font-size: 32px;\n line-height: 48px;\n letter-spacing: 0.5;\n`;\n\nexport const H2 = styled.h2`\n font-family: 'Poppins';\n font-weight: 400;\n font-size: 18px;\n line-height: 28px;\n letter-spacing: 0.5;\n`;\n\nexport const H3 = styled.h3`\n font-family: 'Poppins';\n font-weight: 600;\n font-size: 16px;\n line-height: 24px;\n letter-spacing: 0.2;\n`;\n\nexport const H4 = styled.h4`\n font-family: 'Poppins';\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0.5;\n`;\n\nexport const SubTitle = styled.p`\n font-family: 'Poppins';\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0.5;\n`;\n\nexport const Body = styled.p`\n font-family: 'Poppins';\n font-weight: 400;\n font-size: 13px;\n line-height: 20px;\n letter-spacing: 0.2;\n`;\n\nexport const Button = styled.span`\n font-family: 'Poppins';\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0.2;\n`;\n\nexport const Link = styled.a`\n font-family: 'Poppins';\n font-weight: 400;\n font-size: 13px;\n line-height: 20px;\n letter-spacing: 0.2;\n color: var(--color-blue-light);\n`;\n\nexport const Overline = styled.p`\n font-family: 'Poppins';\n font-weight: 400;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.5;\n`;\n\nexport const OverlineBold = styled.p`\n font-family: 'Poppins';\n font-weight: 600;\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.5;\n text-transform: uppercase;\n`;\n\nexport const Small = styled.span`\n font-family: 'Poppins';\n font-weight: 500;\n font-size: 10px;\n line-height: 16px;\n letter-spacing: 0.2;\n`;\n\nexport const SmallUpper = styled.span`\n font-family: 'Poppins';\n font-weight: 500;\n font-size: 10px;\n line-height: 16px;\n letter-spacing: 0.2;\n text-transform: uppercase;\n`;\n","import React from 'react';\nimport { Row } from '@8base/boost';\nimport {\n Title,\n TextTable,\n TextContact,\n ButtonWithoutIcon,\n ButtonIcon,\n PrimaryBtn,\n AuthBtn,\n CardIndicator,\n DateBox,\n PriorityBadge,\n TitleDetail,\n CustomLink,\n Loader,\n SecondaryTitle,\n DeleteBtn,\n FilterBtn,\n SortBtn,\n RadioInputField,\n OptionsDropdown,\n} from 'shared/components';\nimport {\n H1,\n H2,\n H3,\n H4,\n SubTitle,\n Body,\n Button,\n Link,\n Overline,\n OverlineBold,\n Small,\n SmallUpper,\n} from 'shared/components/Typography';\n\nconst TitleExample = () => My Account / Settings;\nconst TextTableExample = () => 123456;\nconst TextContactExample = () => (\n \n George Franklin \n (562) 353-0543\n \n);\nconst ButtonWithoutIconExample = () => ;\nconst ButtonIconExample = () => (\n \n);\nconst PrimaryBtnExample = () => Create;\nconst CardIndicatorExample = () => (\n \n \n \n);\nconst AuthBtnExample = () => ;\nconst DateBoxExample = () => ;\nconst PriorityBadgeExample = () => (\n \n \n \n \n \n);\nconst TitleDetailExample = () => ;\nconst CustomLinkExample = () => View all Campaigns;\nconst LoaderExample = () => ;\nconst SecondaryTitleExample = () => Top Performers;\nconst DeleteBtnExample = () => ;\nconst FilterBtnExample = () => ;\nconst SortBtnExample = () => ;\nconst RadioInputFieldExample = () => ;\nconst TypographyExample = () => (\n <>\n H1\n H2\n H3\n H4\n SubTitle\n Body\n Button\n \n Link\n Overline\n OverlineBold\n Small\n \n SmallUpper\n >\n);\n\nconst OptionsDropdownExample = () => (\n {}, label: 'TEST' },\n { onClick: () => {}, label: 'Danger', danger: true },\n ]}\n />\n);\n\nexport default [\n {\n name: 'Title',\n description: 'Received a children',\n Component: TitleExample,\n code: `My Account / Settings`,\n props: [],\n },\n {\n name: 'TextTable',\n description: 'Received a children',\n Component: TextTableExample,\n code: `123456`,\n props: [],\n },\n {\n name: 'TextContact',\n description: 'Received a children',\n Component: TextContactExample,\n code: `George Franklin (562) 353-0543`,\n props: [],\n },\n {\n name: 'ButtonWithoutIcon',\n description: 'Received a Text and function action by props onClick',\n Component: ButtonWithoutIconExample,\n code: ``,\n props: [\n {\n name: 'text',\n type: 'string',\n isRequired: true,\n },\n {\n name: 'onClick',\n type: 'func',\n isRequired: true,\n },\n ],\n },\n {\n name: 'ButtonIcon',\n description:\n 'Received a Text, image icon svg by props iconSvg and function action by props onClick',\n Component: ButtonIconExample,\n code: ``,\n props: [\n {\n name: 'text',\n type: 'string',\n isRequired: true,\n },\n {\n name: 'onClick',\n type: 'func',\n isRequired: true,\n },\n {\n name: 'iconSvg',\n type: 'image',\n isRequired: true,\n },\n ],\n },\n {\n name: 'PrimaryBtn',\n description: 'Received a children and onClick prop function',\n Component: PrimaryBtnExample,\n code: `Create`,\n props: [\n {\n name: 'onClick',\n type: 'func',\n isRequired: true,\n },\n ],\n },\n {\n name: 'AuthBtn',\n description: 'This component is from 8base repo starter, show button for logout and sign in',\n Component: AuthBtnExample,\n code: ``,\n props: [],\n },\n {\n name: 'CardIndicator',\n description: 'Card with title, subtitle and a link',\n Component: CardIndicatorExample,\n code: `\n\n `,\n props: [\n {\n name: 'title',\n type: 'string',\n isRequired: true,\n },\n {\n name: 'text',\n type: 'string',\n isRequired: true,\n },\n {\n name: 'link',\n type: 'object',\n isRequired: true,\n },\n ],\n },\n {\n name: 'DateBox',\n description: 'Received a date via props',\n Component: DateBoxExample,\n code: '',\n props: [\n {\n name: 'date',\n type: 'string',\n isRequired: true,\n },\n ],\n },\n {\n name: 'PriorityBadge',\n description: 'Badge for tasks, values for priority prop: lo, mid and hi',\n Component: PriorityBadgeExample,\n code: `\n<>\n \n \n \n>\n `,\n props: [\n {\n name: 'priority',\n type: 'string',\n isRequired: true,\n },\n ],\n },\n {\n name: 'TitleDetail',\n description: 'Title for use it in details view',\n Component: TitleDetailExample,\n code: `\n\n `,\n props: [\n {\n name: 'text',\n type: 'string',\n isRequired: true,\n },\n ],\n },\n {\n name: 'CustomLink',\n description: 'Custom react-router-dom link',\n Component: CustomLinkExample,\n code: `\nView all Campaigns\n `,\n props: [],\n },\n {\n name: 'Loader',\n description: 'Loader usign 8base-boost',\n Component: LoaderExample,\n code: '',\n props: [],\n },\n {\n name: 'SecondaryTitle',\n description: 'Received a children',\n Component: SecondaryTitleExample,\n code: 'Top Performers',\n props: [],\n },\n {\n name: 'DeleteBtn',\n description: 'Red button that received a children as text',\n Component: DeleteBtnExample,\n code: '',\n props: [],\n },\n {\n name: 'FilterBtn',\n description: 'Button with filter icon',\n Component: FilterBtnExample,\n code: '',\n props: [\n {\n name: 'text',\n type: 'string',\n isRequired: true,\n },\n {\n name: 'onClick',\n type: 'func',\n isRequired: true,\n },\n ],\n },\n {\n name: 'SortBtn',\n description: 'Button with sort icon',\n Component: SortBtnExample,\n code: '',\n props: [],\n },\n {\n name: 'RadioInputField',\n description: 'Radio Button with an optional Label',\n Component: RadioInputFieldExample,\n code: '',\n props: [\n {\n name: 'checked',\n type: 'bool',\n isRequired: true,\n },\n {\n name: 'onChange',\n type: 'func',\n isRequired: true,\n },\n {\n name: 'label',\n type: 'string',\n isRequired: false,\n },\n {\n name: 'square',\n type: 'bool',\n isRequired: false,\n },\n {\n name: 'left',\n type: 'bool',\n isRequired: false,\n },\n ],\n },\n {\n name: 'Typography',\n description: 'All components for tipography',\n Component: TypographyExample,\n code: `\nH1\nH2\nH3\nH4\n `,\n props: [],\n },\n {\n name: 'OptionsDropdown',\n description: 'A dropdown for options',\n Component: OptionsDropdownExample,\n code: `\n {}, label: 'TEST' },\n { onClick: () => {}, label: 'Danger', danger: true },\n ]}\n />\n `,\n props: [\n {\n name: 'options',\n type: `[{\n label: string.isRequired,\n onClick: func.isRequired,\n danger: bool}\n ]`,\n isRequired: true,\n },\n ],\n },\n];\n\n// ,\n// {\n// name: 'OptionsDropdown',\n// description: 'A dropdown for options',\n// component: OptionsDropdownExample,\n// code: `\n// {}, label: 'TEST' },\n// { onClick: () => {}, label: 'Danger', danger: true },\n// ]}\n// />`,\n// props: [\n// { name: 'options', type: '{label: string, onClick: func, danger: bool}', isRequired: true },\n// ],\n// },\n","import React from 'react';\nimport { Code, Grid, Paper, Table, Divider } from '@8base/boost';\nimport components from './components';\nimport styled from 'styled-components';\n\nconst Text = styled.p`\n margin: 10px 0;\n color: #323c47;\n font-size: 16px;\n\n strong {\n font-weight: bold !important;\n }\n`;\n\nconst DesignSystem = () => {\n return (\n \n \n \n {components.map((component) => {\n return (\n \n \n Name: {component.name}\n \n Description: {component.description}\n Props:\n {component.props.length ? (\n \n \n Name\n Type\n Is Required\n \n \n {component.props.map((prop) => {\n return (\n \n {prop.name}\n {prop.type}\n {prop.isRequired ? 'true' : 'false'}\n \n );\n })}\n \n \n ) : (\n None\n )}\n Code:\n {component.code}\n Result:\n \n \n \n \n \n );\n })}\n \n \n \n );\n};\n\nexport default DesignSystem;\n","import React, { useState, useEffect } from 'react';\nimport { Dialog, Column, Paragraph, Progress, useModal } from '@8base/boost';\nimport { OnCampaignDeleteProgress } from '../campaign-events';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\n\nexport const modalId = 'delete-campaign-progress';\n\nconst DeleteCampaignProgress: React.FC = () => {\n const { isOpen } = useModal(modalId);\n const [progress, setProgress] = useState(0);\n\n useEffect(() => {\n if (!isOpen) {\n setProgress(0);\n }\n }, [isOpen]);\n\n useSubscription(\n OnCampaignDeleteProgress,\n (data) => {\n if (data) {\n setProgress(data.progress);\n }\n },\n [],\n );\n\n return (\n \n \n \n Deleting campaign...\n \n \n \n \n );\n};\n\nexport default DeleteCampaignProgress;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport {\n fetchAvailableCampaigns,\n moveLeadsAndDelete,\n forceDeleteCampaign,\n} from '../campaigns-actions';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport {\n OnCampaignReplaceList,\n OnCampaignReplaceListError,\n OnCampaignDelete,\n OnCampaignDeleteError,\n} from '../campaign-events';\n\nimport { Dialog, Button, Row, Column, Paragraph, Select, Switch, useModal } from '@8base/boost';\nimport DeleteCampaignProgress, { modalId as progressId } from './DeleteCampaignProgress';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport * as Toast from '../../../shared/components/toast/Toast';\nimport { Campaign } from 'gerated/types';\n\nexport const modalId = 'delete-campaign-dialog';\n\nconst DeleteCampaignDialog: React.FC = ({ agencyId }) => {\n const { isOpen, args, closeModal, openModal } = useModal(modalId);\n const [campaigns, setCampaigns] = useState<{ items: Array; loading: boolean }>({\n items: [],\n loading: true,\n });\n const [selected, setSelected] = useState('');\n const [destroy, setDestroy] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const handleClose = useCallback(() => {\n closeModal(modalId);\n\n setDestroy(false);\n setSelected('');\n setLoading(false);\n\n setCampaigns((state) => ({\n ...state,\n loading: false,\n items: [],\n }));\n }, [closeModal]);\n\n const handleSubmit = useCallback(() => {\n setLoading(true);\n\n openModal(progressId);\n\n if (destroy) {\n forceDeleteCampaign(args.id);\n } else {\n moveLeadsAndDelete(args.id, selected);\n }\n }, [args, selected, destroy, openModal]);\n\n useEffect(() => {\n if (isOpen) {\n setCampaigns((state) => ({\n ...state,\n items: [],\n loading: true,\n }));\n\n fetchAvailableCampaigns(args.id, agencyId, 1);\n }\n }, [isOpen, args, agencyId]);\n\n useEffect(() => {\n if (destroy) {\n Toast.warn('If you delete the leads their information cannot be recovered');\n }\n }, [destroy]);\n\n useSubscription(\n OnCampaignReplaceList,\n (data) => {\n if (data) {\n setCampaigns((state) => ({\n ...state,\n items: data.campaignsList.items,\n loading: false,\n }));\n }\n },\n [],\n );\n\n useSubscription(\n OnCampaignReplaceListError,\n (e: Error | null) => {\n if (e) {\n onErrorMixinFC(e);\n }\n\n closeModal(modalId);\n },\n [closeModal],\n );\n\n useSubscription(\n OnCampaignDelete,\n () => {\n setLoading(false);\n closeModal(progressId);\n closeModal(modalId);\n },\n [closeModal],\n );\n\n useSubscription(\n OnCampaignDeleteError,\n (e: Error | null) => {\n if (e) {\n onErrorMixinFC(e);\n }\n\n setLoading(false);\n closeModal(progressId);\n },\n [closeModal],\n );\n\n return (\n \n \n \n \n \n Are you sure you want to delete this campaign ? If so, you need to move all the leads to\n another campaign, please choose which one.\n \n ({\n label: campaign.name,\n value: campaign.id,\n }))}\n isSearchable={true}\n />\n \n \n \n \n \n \n \n \n Cancel\n \n \n Yes, Delete\n \n \n \n \n \n );\n};\n\ntype Props = {\n agencyId: string;\n};\n\nexport default DeleteCampaignDialog;\n","import React, { useCallback } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { Table, Dropdown, Icon, Menu, Text, useModal } from '@8base/boost';\nimport { DropdownWithCheck } from '../../../shared/components';\nimport PriorityCell from './PriorityCell';\nimport StatusCell from './StatusCell';\nimport { modalId } from './DeleteCampaignDialog';\nimport { forceDeleteCampaign, updateCampaign } from '../campaigns-actions';\nimport { modalId as decisionDialogId } from '../../../shared/components/dialog/DecisionDialog';\nimport CustomLink from '../../../shared/components/ui/CustomLink';\nimport DateBox from '../../../shared/components/ui/DateBox';\nimport { DropdownBodyOnTable } from '../../../shared/components/ui/dropdowns/DropdownBodyOnTable';\nimport { IconInfo } from '../../../shared/components/ui/Icons';\nimport { Campaign } from 'gerated/types';\n\nconst CampaignListRow: React.FC = ({ campaign, automations, users, columns }) => {\n const history = useHistory();\n const { openModal, closeModal } = useModal(modalId);\n const assignees = campaign.assignees?.items || [];\n const workflows = campaign.workflows?.items || [];\n\n const assigneesLabel =\n assignees.length > 0 ? (\n `${assignees[0].firstName} ${assignees[0].lastName}${\n assignees.length > 1 ? ` and ${assignees.length - 1} more` : ''\n }`\n ) : (\n Assign users\n );\n\n const workflowsLabel =\n workflows.length > 0 ? (\n `${workflows[0].name} ${workflows.length > 1 ? ` and ${workflows.length - 1} more` : ''}`\n ) : (\n Assign workflows\n );\n\n const handleAssigneesChange = useCallback(\n (value) => {\n updateCampaign({\n id: campaign.id,\n assignees: value,\n });\n },\n [campaign],\n );\n\n const handleWorkflowsChange = useCallback(\n (value) => {\n updateCampaign({\n id: campaign.id,\n workflows: value,\n });\n },\n [campaign],\n );\n\n const handleDeleteClick = useCallback(() => {\n if ((campaign.campaignLeadRelation?.count || 0) > 0) {\n openModal(modalId, {\n id: campaign.id,\n });\n } else {\n openModal(decisionDialogId, {\n title: 'Delete Campaign',\n text:\n 'Are you sure you want to delete this campaign? This information cannot be recovered.',\n confirmText: 'Yes, Delete',\n cancelText: 'Cancel',\n onClose: () => closeModal(decisionDialogId),\n onCancel: () => closeModal(decisionDialogId),\n onConfirm: () =>\n forceDeleteCampaign(campaign.id || '').then(() => closeModal(decisionDialogId)),\n });\n }\n }, [campaign, openModal, closeModal]);\n\n const userOptions = users.map((user) => ({\n id: user.id,\n label: `${user.firstName} ${user.lastName}`,\n checked: assignees.some((assignee) => assignee.id === user.id),\n }));\n\n const workflowOptions = automations.map((automation) => ({\n id: automation.id,\n label: automation.name,\n checked: workflows.some((workflow) => workflow.id === automation.id),\n }));\n\n /**\n * If there are no options available to assign users or workflows\n * do not render anything\n */\n const usersDropdown =\n userOptions.length > 0 ? (\n \n ) : null;\n\n const workflowsDropdown =\n workflowOptions.length > 0 ? (\n \n ) : null;\n\n return (\n \n \n {campaign.name}\n \n \n \n \n \n \n \n {usersDropdown}\n {workflowsDropdown}\n {campaign.campaignLeadRelation?.count}\n \n \n \n \n history.push(`/campaigns/${campaign.id}`)} />\n \n \n \n \n \n {(dropdown: { closeDropdown: () => void }) => (\n \n {\n dropdown.closeDropdown();\n handleDeleteClick();\n }}>\n Delete Campaign\n \n \n )}\n \n \n \n \n );\n};\n\ntype Props = {\n campaign: Campaign;\n users: Array>;\n automations: Array>;\n columns: string;\n};\n\nexport default CampaignListRow;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Input,\n InputField,\n Select,\n SelectField,\n DateInput,\n DateInputField,\n CheckboxField,\n} from '@8base/boost';\nimport Margin from '../components/ui/Margin';\n\n/**\n * Field for render select, input, checkbox and datepicker\n *\n * @param {object} props component props\n * @param {string} props.name input name\n * @param {string} props.defaultValue input value\n * @param {Function} props.onBlur handle on blur\n * @param {Array} props.options select options\n * @param {boolean} props.loading select options\n * @param {boolean} props.multiple select options\n * @param {string} props.placeholder select/input placeholder\n * @param {string} props.label text label\n * @returns {React.ReactElement} component\n */\nconst Field = ({\n name,\n type,\n defaultValue,\n onBlur,\n onChange,\n multiple,\n options,\n loading,\n placeholder,\n label,\n ...rest\n}) => {\n const [value, setValue] = useState(defaultValue);\n const handleOnChange = useCallback(\n (value) => {\n setValue(value);\n\n onChange && onChange(value);\n },\n [onChange],\n );\n let inputComponent;\n\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n if (type === 'select') {\n inputComponent = label ? (\n \n ) : (\n \n );\n }\n\n if (type === 'date') {\n inputComponent = label ? (\n \n ) : (\n \n );\n }\n\n if (type === 'checkbox') {\n inputComponent = (\n \n \n \n );\n }\n\n if (type === 'text' || type === 'number') {\n inputComponent = label ? (\n \n ) : (\n \n );\n }\n\n return <>{inputComponent}>;\n};\n\nField.propTypes = {\n onChange: PropTypes.func,\n label: PropTypes.string,\n onBlur: PropTypes.func,\n type: PropTypes.string,\n multiple: PropTypes.bool,\n loading: PropTypes.bool,\n options: PropTypes.array,\n defaultValue: PropTypes.any,\n placeholder: PropTypes.string,\n name: PropTypes.string.isRequired,\n};\n\nField.defaultProps = {\n multiple: false,\n loading: false,\n options: [],\n type: 'text',\n placeholder: '',\n onBlur: () => {},\n defaultValue: '',\n label: undefined,\n onChange: () => {},\n};\n\nexport default Field;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport Select, { components } from 'react-select';\nimport { styled, Label, Icon } from '@8base/boost';\nimport { Margin } from 'shared/components/';\n\nconst CustomMultiValueContainer = styled.span`\n padding: 2px 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n border: 1px solid #d0d7dd;\n border-radius: 5px;\n background-color: #ffffff;\n margin-right: 10px;\n cursor: pointer;\n margin-bottom: 2px;\n margin-top: 2px;\n`;\n\nconst CustomOption = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n`;\n\nconst CustomLabel = styled(Label)`\n cursor: pointer !important;\n margin-left: 5px !important;\n`;\n\nconst MultiValueContainer = (props) => {\n return (\n \n \n \n );\n};\n\nconst MultiValueLabel = (props) => {\n return (\n <>\n \n >\n );\n};\n\nconst MultiValueRemove = (props) => {\n return (\n \n \n \n );\n};\n\nconst Option = ({ data, innerProps, isDisabled }) => {\n return !isDisabled ? (\n \n \n \n \n \n ) : null;\n};\n\nconst IndicatorsContainer = () => {\n return (\n \n \n \n \n );\n};\n\n// Custom components prop types\n\nMultiValueLabel.propTypes = {\n data: PropTypes.shape({\n imgUrl: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n }).isRequired,\n};\n\nOption.propTypes = {\n data: PropTypes.shape({\n imgUrl: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n }).isRequired,\n isDisabled: PropTypes.bool,\n innerProps: PropTypes.object.isRequired,\n};\n\nOption.defaultProps = { isDisabled: false };\n\nconst mapValues = (email) => ({\n label: email.name,\n value: email.id,\n});\n\nconst WorkflowAutomationSelect = ({ defaultValue, emails, onChange, label }) => {\n const [value, setValue] = useState(defaultValue?.map(mapValues)?.[0] ?? null);\n\n React.useEffect(() => {\n setValue(defaultValue?.map(mapValues)?.[0]);\n }, [defaultValue]);\n\n const handleOnChange = (value) => {\n setValue(value);\n onChange(value);\n };\n\n return (\n \n {label}\n ({\n ...base,\n alignItems: 'center',\n backgroundColor: '#fff',\n justifyContent: 'center',\n }),\n container: (base) => ({\n ...base,\n borderRadius: '5px',\n border: '1px solid #D0D7DD',\n zIndex: 10,\n }),\n control: (base) => ({\n ...base,\n border: '0px',\n }),\n }}\n />\n \n );\n};\n\nWorkflowAutomationSelect.propTypes = {\n label: PropTypes.element,\n defaultValue: PropTypes.array.isRequired,\n emails: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n};\n\nWorkflowAutomationSelect.defaultProps = {\n label: null,\n};\n\nexport default WorkflowAutomationSelect;\n","import gql from 'graphql-tag';\n\nconst WorkflowAutomationFragment = gql`\n fragment WorkflowAutomationFragment on WorkflowAutomation {\n id\n name\n conditions {\n items {\n id\n name\n args\n emailTemplate {\n id\n name\n }\n smsTemplate {\n id\n name\n }\n }\n }\n clicks {\n count\n }\n openings(filter: { opened: { equals: true } }) {\n count\n }\n createdAt\n campaigns {\n count\n }\n }\n`;\n\nexport const WORKFLOW_AUTOMATIONS_LIST_QUERY = gql`\n query FetchWorkflowAutomations(\n $filter: WorkflowAutomationFilter\n $first: Int\n $skip: Int\n $orderBy: [WorkflowAutomationOrderBy]\n ) {\n workflowAutomationsList(filter: $filter, first: $first, skip: $skip, orderBy: $orderBy) {\n count\n items {\n ...WorkflowAutomationFragment\n }\n }\n }\n ${WorkflowAutomationFragment}\n`;\n\nexport const WORKFLOW_AUTOMATION_CREATE_MUTATION = gql`\n mutation CreateWorkflowAutomation($data: WorkflowAutomationCreateInput!) {\n workflowAutomationCreate(data: $data) {\n ...WorkflowAutomationFragment\n }\n }\n ${WorkflowAutomationFragment}\n`;\n\nexport const WORKFLOW_AUTOMATION_UPDATE_MUTATION = gql`\n mutation UpdateWorkflowAutomation($data: WorkflowAutomationUpdateInput!, $force: Boolean) {\n workflowAutomationUpdate(data: $data, force: $force) {\n ...WorkflowAutomationFragment\n }\n }\n ${WorkflowAutomationFragment}\n`;\n\nexport const WORKFLOW_AUTOMATION_DELETE_MUTATION = gql`\n mutation DeleteWorkflowAutomation($data: WorkflowAutomationDeleteInput!, $force: Boolean) {\n workflowAutomationDelete(data: $data, force: $force) {\n success\n }\n }\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnWorkflowAutomationList = createEvent();\n\nexport const OnWorkflowAutomationListError = createEvent();\n\nexport const OnWorkflowAutomaticationCreateEvent = createEvent();\n\nexport const OnWorkflowAutomaticationCreateError = createEvent();\n\nexport const OnWorkflowAutomaticationUpdateEvent = createEvent();\n\nexport const OnWorkflowAutomaticationUpdateError = createEvent();\n\nexport const OnWorkflowAutomaticationDeleteEvent = createEvent();\n\nexport const OnWorkflowAutomaticationDeleteError = createEvent();\n","import { ValidationError } from '../../../shared/errors';\nimport { isValidString } from '@cobuildlab/validation-utils';\n\n/**\n * Validates a workflow automation creation/update\n *\n * @param {object} data - Marketing campaign data to create/update a record\n *\n * @returns {void}\n */\nexport function createUpdateWorkflowAutomationValidator(data) {\n const errors = [];\n\n if (!isValidString(data.name)) errors.push('The name of the campaign should be a valid string');\n\n data.conditions.some((condition) => {\n if (!isValidString(condition.name)) {\n errors.push('A condition should have a valid name');\n return true;\n }\n\n if (!condition.emailTemplate?.id && !condition.smsTemplate?.id) {\n errors.push('The condition should have at least one of either an email or sms template');\n return true;\n }\n\n return false;\n });\n\n if (errors.length > 0) throw new ValidationError(errors);\n}\n","import { log, error } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport {\n WORKFLOW_AUTOMATIONS_LIST_QUERY,\n WORKFLOW_AUTOMATION_CREATE_MUTATION,\n WORKFLOW_AUTOMATION_DELETE_MUTATION,\n WORKFLOW_AUTOMATION_UPDATE_MUTATION,\n} from './workflow-automation-queries';\nimport {\n OnWorkflowAutomaticationCreateError,\n OnWorkflowAutomaticationCreateEvent,\n OnWorkflowAutomaticationDeleteError,\n OnWorkflowAutomaticationDeleteEvent,\n OnWorkflowAutomaticationUpdateError,\n OnWorkflowAutomaticationUpdateEvent,\n OnWorkflowAutomationList,\n OnWorkflowAutomationListError,\n} from './workflow-automation-events';\nimport { createUpdateWorkflowAutomationValidator } from './workflow-automation-validator';\nimport { normalize8baseReferenceConnect } from '@cobuildlab/8base-utils';\n\n/**\n * Fetches workflow automations\n *\n * @param {string} agency - The agency id\n * @param {string} search - The search term to filter the results by\n * @param {number} page - The page of the list to fetch\n *\n * @returns {Promise} The request result\n */\nexport const fetchWorkflowAutomationsList = async (agency, search = '', page = 1) => {\n const client = OnApolloClient.get();\n const first = 10;\n const skip = first * (page - 1);\n const orderBy = 'createdAt_DESC';\n let response = null;\n\n const filter = {\n agency: { id: { equals: agency } },\n name: { contains: search },\n };\n\n try {\n response = await client.query({\n query: WORKFLOW_AUTOMATIONS_LIST_QUERY,\n fetchPolicy: 'network-only',\n variables: page === 0 ? { filter, orderBy } : { filter, first, skip, orderBy },\n });\n } catch (e) {\n error('fetchWorkflowAutomationsList', e);\n\n return OnWorkflowAutomationListError.dispatch(e);\n }\n\n log('fetchWorkflowAutomationsList', response.data);\n\n return OnWorkflowAutomationList.dispatch(response.data);\n};\n\n/**\n * Creates a workflow automation\n *\n * @param {object} workflowAutomation - data from the create form.\n *\n * @returns {object} the response data\n */\nexport const createWorkflowAutomation = async (workflowAutomation) => {\n console.log('createWorkflowAutomation running');\n const client = OnApolloClient.get();\n let response;\n\n try {\n createUpdateWorkflowAutomationValidator(workflowAutomation);\n } catch (e) {\n console.log('createWorkflowAutomation error', e);\n\n return OnWorkflowAutomaticationCreateError.dispatch(e);\n }\n\n const data = {\n name: workflowAutomation.name,\n agency: workflowAutomation.agency,\n conditions: {\n create: workflowAutomation.conditions.map((c) => ({\n name: c.name,\n args: c.args,\n emailTemplate: c.emailTemplate.id ? { connect: { id: c.emailTemplate.id } } : undefined,\n smsTemplate: c.smsTemplate.id ? { connect: { id: c.smsTemplate.id } } : undefined,\n })),\n },\n };\n\n normalize8baseReferenceConnect(data, 'agency');\n\n try {\n response = await client.mutate({\n mutation: WORKFLOW_AUTOMATION_CREATE_MUTATION,\n variables: { data },\n });\n } catch (e) {\n error('createWorkflowAutomation', e);\n\n return OnWorkflowAutomaticationCreateError.dispatch(e);\n }\n\n log('createWorkflowAutomation', response);\n OnWorkflowAutomaticationCreateEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Updates a workflow automation\n *\n * @param {object} workflowAutomation - data from the update form.\n * @param {Array} prevConditions - The ids of the previosly connected conditions\n *\n * @returns {object} the response data\n */\nexport const updateWorkflowAutomation = async (workflowAutomation, prevConditions = []) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n createUpdateWorkflowAutomationValidator(workflowAutomation);\n } catch (e) {\n error('updateWorkflowAutomation', e);\n\n return OnWorkflowAutomaticationUpdateError.dispatch(e);\n }\n\n const data = {\n id: workflowAutomation.id,\n name: workflowAutomation.name,\n conditions: {\n create: workflowAutomation.conditions.map((c) => ({\n name: c.name,\n args: c.args,\n emailTemplate: c.emailTemplate?.id ? { connect: { id: c.emailTemplate.id } } : undefined,\n smsTemplate: c.smsTemplate?.id ? { connect: { id: c.smsTemplate.id } } : undefined,\n })),\n disconnect: prevConditions,\n },\n };\n\n try {\n response = await client.mutate({\n mutation: WORKFLOW_AUTOMATION_UPDATE_MUTATION,\n variables: { data, force: true },\n });\n } catch (e) {\n error('updateWorkflowAutomation', e);\n\n return OnWorkflowAutomaticationUpdateError.dispatch(e);\n }\n\n log('updateWorkflowAutomation', response);\n OnWorkflowAutomaticationUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Deletes a workflow automation by id\n *\n * @param {string} id - identifier of the workflow automation\n *\n * @returns {object} the response data\n */\nexport const deleteWorkflowAutomation = async (id) => {\n const client = OnApolloClient.get();\n let response;\n\n if (client) {\n try {\n response = await client.mutate({\n mutation: WORKFLOW_AUTOMATION_DELETE_MUTATION,\n variables: { data: { id }, force: true },\n });\n } catch (e) {\n error('deleteWorkflowAutomation', e);\n\n return OnWorkflowAutomaticationDeleteError.dispatch(e);\n }\n\n log('deleteWorkflowAutomation', response);\n OnWorkflowAutomaticationDeleteEvent.dispatch(response.data);\n\n return response.data;\n }\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport { LIST_INITIAL_STATE } from '../../../shared/constants';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { fetchWorkflowAutomationsList } from './workflow-automation-actions';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport {\n OnWorkflowAutomationList,\n OnWorkflowAutomationListError,\n} from './workflow-automation-events';\n\n/**\n * Marketing campaign list\n *\n * @param agency - The agency to fetch the workflow automations from\n * @param search - The search term to filter the results by\n * @param page - The page of the list\n *\n * @returns The list state\n */\nexport function useWorkflowAutomations(agency: string, search = '', page = 1): State {\n const [state, setState] = useState(LIST_INITIAL_STATE);\n\n const fetch = useCallback(() => {\n setState((state) => ({ ...state, loading: true }));\n\n fetchWorkflowAutomationsList(agency, search, page);\n }, [agency, search, page]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n useSubscription(\n OnWorkflowAutomationList,\n ({ workflowAutomationsList }) => {\n setState((state) => ({\n ...state,\n loading: false,\n items: workflowAutomationsList.items,\n count: workflowAutomationsList.count,\n }));\n },\n [],\n );\n\n useSubscription(\n OnWorkflowAutomationListError,\n (e) => {\n setState((state) => ({\n ...state,\n loading: false,\n items: [],\n count: 0,\n }));\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n return {\n ...state,\n fetch,\n };\n}\n\n/**\n * Hook that fetches the available workflow automations whenever\n * the users wants\n *\n * @param agency - The agency to fetch the workflow automations from\n * @param search - The search term to filter the results by\n * @param page - The page of the list\n *\n * @returns The list state\n */\nexport function useWorkflowAutomationsLater(agency: string, search = '', page = 1): State {\n const [state, setState] = useState(LIST_INITIAL_STATE);\n\n const fetch = useCallback(() => {\n setState((state) => ({ ...state, loading: true }));\n\n fetchWorkflowAutomationsList(agency, search, page);\n }, [agency, search, page]);\n\n useSubscription(\n OnWorkflowAutomationList,\n ({ workflowAutomationsList }) => {\n setState((state) => ({\n ...state,\n loading: false,\n items: workflowAutomationsList.items,\n count: workflowAutomationsList.count,\n }));\n },\n [],\n );\n\n useSubscription(\n OnWorkflowAutomationListError,\n (e) => {\n setState((state) => ({\n ...state,\n loading: false,\n items: [],\n count: 0,\n }));\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n return {\n ...state,\n fetch,\n };\n}\n\ntype State = {\n items: Array>;\n count: number;\n loading: boolean;\n fetch: () => void;\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnVendorsEvent = createEvent();\n\nexport const OnVendorsError = createEvent();\n\nexport const OnVendorslistEvent = createEvent();\n\nexport const OnVendorslistError = createEvent();\n\nexport const OnVendorCreateEvent = createEvent();\n\nexport const OnVendorCreateError = createEvent();\n\nexport const OnVendorUpdateEvent = createEvent();\n\nexport const OnVendorUpdateError = createEvent();\n\nexport const OnVendorDeleteEvent = createEvent();\n\nexport const OnVendorDeleteError = createEvent();\n","import gql from 'graphql-tag';\n\nexport const VENDOR_FRAGMENT = gql`\n fragment VENDOR_FRAGMENT on Vendor {\n id\n name\n vendorCampaignRelation {\n count\n items {\n id\n name\n }\n }\n }\n`;\n\nexport const VENDORS_LIST_QUERY = gql`\n query FetchVendorsList($filter: VendorFilter) {\n vendorsList(filter: $filter) {\n items {\n ...VENDOR_FRAGMENT\n }\n }\n }\n ${VENDOR_FRAGMENT}\n`;\n\nexport const VENDOR_CREATE_MUTATION = gql`\n mutation CreateVendor($data: VendorCreateInput!) {\n vendorCreate(data: $data) {\n ...VENDOR_FRAGMENT\n }\n }\n ${VENDOR_FRAGMENT}\n`;\n\nexport const VENDOR_UPDATE_MUTATION = gql`\n mutation UpdateVendor($data: VendorUpdateInput!) {\n vendorUpdate(data: $data) {\n ...VENDOR_FRAGMENT\n }\n }\n ${VENDOR_FRAGMENT}\n`;\n\nexport const VENDOR_DELETE_MUTATION = gql`\n mutation DeleteVendor($data: VendorDeleteInput!) {\n vendorDelete(data: $data) {\n success\n }\n }\n`;\n","import { ValidationError } from '../../shared/errors';\nimport { isValidString } from '../../shared/validators';\n\n/**\n * Validators for create and update actions.\n *\n * @param {object} vendor data\n */\nexport const createAndUpdateVendorValidator = (vendor) => {\n let errorMessages = [];\n\n if (!isValidString(vendor.name)) errorMessages.push('The Vendor must have a valid name');\n\n if (errorMessages.length !== 0) throw new ValidationError(errorMessages);\n};\n","import { log, error } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../shared/session/session-events';\nimport { getActiveAgency } from '../../shared/utils/agency-utils';\nimport {\n OnVendorCreateEvent,\n OnVendorDeleteEvent,\n OnVendorsError,\n OnVendorsEvent,\n OnVendorUpdateEvent,\n} from './vendors-events';\nimport {\n VENDORS_LIST_QUERY,\n VENDOR_CREATE_MUTATION,\n VENDOR_UPDATE_MUTATION,\n VENDOR_DELETE_MUTATION,\n} from './vendors-queries';\nimport { createAndUpdateVendorValidator } from './vendors-validators';\n\n/**\n * create filters for vendors query.\n *\n * @param filterData\n * @param {string} search string from search input.\n * @returns {object} graphql filter object.\n */\nconst createFilter = (filterData = {}) => {\n return {\n ...(filterData.search && {\n name: {\n contains: filterData.search,\n },\n }),\n ...(filterData.agency && {\n agency: { id: { equals: filterData.agency } },\n }),\n };\n};\n\n/**\n * Fetch vendors\n *\n * @param filterData\n * @param {string} search - The search string\n * @returns {Array} response data\n */\nexport const fetchVendors = async (filterData = {}) => {\n const client = OnApolloClient.get();\n const filter = createFilter(filterData);\n const variables = {\n ...(filter && { filter }),\n };\n let response;\n\n try {\n response = await client.query({\n query: VENDORS_LIST_QUERY,\n fetchPolicy: 'network-only',\n variables,\n });\n } catch (e) {\n error('fetchVendors', e);\n\n return OnVendorsError.dispatch(e);\n }\n\n log('fetchVendors', response);\n OnVendorsEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Creates a vendor\n *\n * @param {object} vendor data from the create form.\n * @returns {object} the response data\n */\nexport const createVendor = async (vendor) => {\n const client = OnApolloClient.get();\n const agency = getActiveAgency();\n\n const vendorData = {\n ...vendor,\n agency: {\n connect: {\n id: agency.id,\n },\n },\n };\n let response;\n\n try {\n createAndUpdateVendorValidator(vendor);\n } catch (e) {\n error('createVendor', e);\n\n return OnVendorsError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: VENDOR_CREATE_MUTATION,\n variables: { data: vendorData },\n });\n } catch (e) {\n error('createVendor', e);\n return OnVendorsError.dispatch(e);\n }\n\n log('createVendor', response);\n OnVendorCreateEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Update a vendor\n *\n * @param {object} vendor data from the create form.\n * @returns {object} the response data\n */\nexport const updateVendor = async (vendor) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n createAndUpdateVendorValidator(vendor);\n } catch (e) {\n error('updateVendor', e);\n\n return OnVendorsError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: VENDOR_UPDATE_MUTATION,\n variables: { data: vendor },\n });\n } catch (e) {\n error('updateVendor', e);\n\n return OnVendorsError.dispatch(e);\n }\n\n log('updateVendor', response);\n OnVendorUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Deletes a vendor by id\n *\n * @param {string} id identifier of the vendor\n * @returns {object} the response data\n */\nexport const deleteVendor = async (id) => {\n const client = OnApolloClient.get();\n let response;\n\n if (client) {\n try {\n response = await client.mutate({\n mutation: VENDOR_DELETE_MUTATION,\n variables: { data: { id } },\n });\n } catch (e) {\n error('vendorDelete', e);\n\n return OnVendorsError.dispatch(e);\n }\n\n log('vendorDelete', response);\n OnVendorDeleteEvent.dispatch(response.data);\n\n return response.data;\n }\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnPhoneNumbersListEvent = createEvent();\n\nexport const OnPhoneNumbersListError = createEvent();\n\nexport const OnTwilioPhoneNumberslistEvent = createEvent();\n\nexport const OnTwilioPhoneNumberslistError = createEvent();\n\nexport const OnpurchasedPhoneNumbersEvent = createEvent();\n\nexport const OnpurchasedPhoneNumbersError = createEvent();\n\nexport const OnPhoneNumberUpdateEvent = createEvent();\n\nexport const OnPhoneNumberUpdateError = createEvent();\n\nexport const OnPhoneNumberDeleteEvent = createEvent();\n\nexport const OnPhoneNumberDeleteError = createEvent();\n\nexport const OnTwilioPhonenumbersListEvent = createEvent();\n\nexport const OnTwilioPhonenumbersListError = createEvent();\n\nexport const OnPurchasedPhoneNumbersEvent = createEvent();\n\nexport const OnPurchasedPhoneNumbersError = createEvent();\n","import React, { useState, useEffect, useCallback } from 'react'; // eslint-disable-line @typescript-eslint/no-use-before-define\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport { Form, Grid, SelectField, Label, Switch, DateInputField, useModal } from '@8base/boost';\nimport { PRIORITIES } from '../../../shared/constants';\nimport { Margin, DialogForm, SelectMultipleAgents } from '../../../shared/components';\nimport { mapUserToMultipleSelect } from '../../users/user-utils';\nimport Field from '../../../shared/components/Field';\nimport { createCampaign } from '../campaigns-actions';\nimport WorkflowAutomationSelect from './WorkflowAutomationSelect';\nimport { useUsersInAgencyLater } from '../../users/users-hooks';\nimport { useWorkflowAutomationsLater } from '../../workflow/workflow-automation/workflow-automation-hooks';\nimport * as toast from '../../../shared/components/toast/Toast';\nimport { fetchVendors } from '../../vendors/vendors-actions';\nimport * as R from 'ramda';\nimport { OnCampaignCreate, OnCampaignError } from '../campaign-events';\nimport { OnpurchasedPhoneNumbersError } from 'modules/my-account/phone-numbers/phone-numbers-events';\nimport { OnVendorsEvent } from 'modules/vendors/vendors-events';\n\nconst modalId = 'campaign-form-dialog';\n\ntype FormType = {\n name: string;\n priority: string;\n startsAt: string;\n endsAt: string;\n vendor: string;\n assignees: Array<{ value: string }>;\n workflows: Array<{ id?: string; value?: string }>;\n automaticCalls: boolean;\n};\n\nconst initialForm: FormType = {\n name: '',\n priority: '',\n startsAt: '',\n endsAt: '',\n vendor: '',\n assignees: [],\n workflows: [],\n automaticCalls: false,\n};\n\nconst CampaignForm: React.FC<{ agencyId: string }> = ({ agencyId }) => {\n const { isOpen, closeModal } = useModal(modalId);\n const [form, setForm] = useState(initialForm);\n const [loading, setLoading] = useState(false);\n const [loadingVendors, setLoadingVendors] = useState(false);\n const [vendors, setVendors] = useState([]);\n const { items: users, loading: loadingUsers, fetch: fetchUsers } = useUsersInAgencyLater(\n agencyId,\n 0,\n );\n\n const {\n items: workflows,\n loading: loadingWorkflows,\n fetch: fetchWorkflows,\n } = useWorkflowAutomationsLater(agencyId, '', 0);\n\n useEffect(() => {\n if (isOpen) {\n fetchUsers();\n fetchWorkflows();\n } else {\n setForm(initialForm);\n }\n }, [isOpen, fetchUsers, fetchWorkflows]);\n\n useSimpleSubscription(OnVendorsEvent, (data) => {\n if (data) {\n setLoadingVendors(false);\n const vendorsOptions = data.vendorsList.items.map((vendor: Record) => ({\n label: vendor.name,\n value: vendor.id,\n }));\n\n setVendors(vendorsOptions);\n }\n });\n\n useEffect(() => {\n setLoadingVendors(true);\n fetchVendors();\n }, []);\n\n useSimpleSubscription(OnCampaignCreate, (data) => {\n if (data) {\n setLoading(false);\n\n closeModal(modalId);\n }\n });\n\n useSimpleSubscription(OnCampaignError, (e) => {\n if (e) setLoading(false);\n });\n\n useSimpleSubscription(OnpurchasedPhoneNumbersError, (e) => {\n toast.warn(\n 'Could not create phone number automatically on the campaign, please create it manually',\n );\n });\n\n const handleChange = useCallback((name, value) => {\n setForm((state) => ({\n ...state,\n [name]: value,\n }));\n }, []);\n\n const onClose = useCallback(() => {\n closeModal(modalId);\n\n setLoading(false);\n }, [closeModal]);\n\n const handleSubmit = useCallback(() => {\n setLoading(true);\n const cloned = R.clone(form);\n\n const campaign: {\n name: string;\n priority: string;\n assignees: Array;\n workflows: Array;\n automaticCalls: boolean;\n startsAt: string;\n endsAt: string;\n vendor?: { connect: { id: string } };\n } = {\n name: cloned.name,\n priority: (cloned.priority + 1).toString(),\n assignees: cloned.assignees.map((user) => user.value),\n workflows: cloned.workflows.map((workflows) => workflows.value || workflows.id),\n automaticCalls: cloned.automaticCalls,\n startsAt: cloned.startsAt,\n endsAt: cloned.endsAt,\n };\n\n if (cloned.vendor && cloned.vendor !== '') {\n campaign.vendor = {\n connect: {\n id: cloned.vendor,\n },\n };\n }\n createCampaign(campaign);\n }, [form]);\n\n return (\n \n \n \n \n \n \n \n handleChange(e.target.name, e.target.value)\n }\n />\n \n \n \n \n handleChange('priority', value),\n }}\n options={PRIORITIES.map((priority, index) => ({\n label: priority,\n value: index,\n }))}\n />\n \n \n \n \n handleChange('vendor', value),\n }}\n options={vendors}\n />\n \n \n \n \n handleChange('startsAt', value),\n }}\n />\n \n \n handleChange('endsAt', value),\n }}\n />\n \n \n \n \n \n \n \n handleChange('assignees', value || [])}\n options={mapUserToMultipleSelect(users)}\n />\n \n \n \n \n \n }\n onChange={(value) => handleChange('workflows', value || [])}\n />\n \n \n \n \n \n handleChange('automaticCalls', value)}\n />\n \n \n \n \n \n \n );\n};\n\nexport default CampaignForm;\n","import React from 'react';\nimport { useEvent } from '@cobuildlab/react-simple-state';\nimport { OnUsersInAgencyFetch } from '../../users/user-events';\nimport { Dropdown } from '@8base/boost';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport { DropdownBodyOnTable, FilterFooter, FilterCategory } from 'shared/components';\nimport filterIconGrey from 'shared/assets/images/filter-grey.svg';\nimport filterIconGreen from 'shared/assets/images/filter-green.svg';\n\nconst FilterDropdown = styled(Dropdown)`\n display: inline-block;\n`;\n\nconst DropdownBody = styled.div`\n background-color: #fff;\n position: relative;\n z-index: 2000;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n`;\n\nconst FilterBody = styled.div`\n display: grid;\n grid-template-rows: repeat(3, min-content);\n grid-template-columns: repeat(2, [col-start] 1fr [col-end]);\n gap: 12px;\n padding: 12px;\n`;\n\nconst FilterBtn = styled.div`\n display: flex;\n border-radius: 5px;\n border: solid 1px ${({ active }) => (active ? '#3db4aa' : '#d0d7dd')};\n padding: 0px 16px;\n height: 36px;\n box-sizing: border-box;\n align-items: center;\n`;\n\nconst FilterIconLabel = styled.span`\n margin-left: 4px;\n font-size: 13px;\n opacity: 0.9;\n ${(props) => (props.active ? 'color: #3db4aa;' : '')}\n`;\n\nconst FilterIcon = styled.img`\n width: 2rem;\n height: 2rem;\n`;\n\nconst CampaignFilter = (props) => {\n const users = useEvent(OnUsersInAgencyFetch);\n\n const categories = Object.entries(props.categories).map(([identifier, category]) => (\n ({\n value: user.id,\n label: `${user.firstName} ${user.lastName}`,\n })),\n }\n : category\n }\n />\n ));\n const icon = props.active ? (\n \n ) : (\n \n );\n\n return (\n \n \n props.onFilterClick()}>\n {icon}\n Filters\n \n \n \n {({ closeDropdown }) => (\n \n {categories}\n \n \n )}\n \n \n );\n};\n\nCampaignFilter.propTypes = {\n onConfirm: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n onFilterClick: PropTypes.func.isRequired,\n active: PropTypes.bool.isRequired,\n categories: PropTypes.object.isRequired,\n values: PropTypes.object.isRequired,\n onFilter: PropTypes.func.isRequired,\n};\n\nexport default CampaignFilter;\n","import React, { useCallback } from 'react';\nimport { useModal } from '@8base/boost';\nimport { CreateButton } from '../../../shared/components';\n\nconst CreateCampaignButton: React.FC = () => {\n const { openModal } = useModal('campaign-form-dialog');\n\n const handleClick = useCallback(() => {\n openModal('campaign-form-dialog');\n }, [openModal]);\n\n return ;\n};\n\nexport default CreateCampaignButton;\n","import { CAMPAIGN_STATUSES } from '../../shared/constants';\nimport bigInt from 'big-integer';\n\nexport default {\n id: null,\n name: '',\n type: null,\n priority: 1,\n assignees: [],\n targetAmount: bigInt(1),\n currentAmount: bigInt(0),\n workflows: [],\n vendor: '',\n status: null,\n startsAt: '',\n endsAt: '',\n automaticCalls: false,\n};\n\nexport const FILTER_DATA = {\n dateCreatedStart: '',\n dateCreatedEnd: '',\n lastUpdatedStart: '',\n lastUpdatedEnd: '',\n assignedTo: '',\n status: '',\n};\n\nexport const FILTER_CATEGORIES = {\n dateCreatedStart: {\n title: 'Date Created Start',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'dateCreatedStart',\n },\n dateCreatedEnd: {\n title: 'Date Created End',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'dateCreatedEnd',\n },\n lastUpdatedStart: {\n title: 'Last Updated Start',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'lastUpdatedStart',\n },\n lastUpdatedEnd: {\n title: 'Last Updated End',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'lastUpdatedEnd',\n },\n assignedTo: {\n title: 'Assigned to',\n placeholher: 'Select',\n identifier: 'assignedTo',\n options: [],\n clearable: true,\n },\n status: {\n title: 'Status',\n placeholher: 'Select',\n identifier: 'status',\n options: [\n {\n value: '',\n label: 'ALL',\n },\n ...CAMPAIGN_STATUSES.map((status, index) => {\n return {\n value: index,\n label: status,\n };\n }),\n ],\n },\n};\n\nexport const SORT_OPTIONS = [\n { label: 'Priority: Top First', value: 'top' },\n { label: 'Priority: Low First', value: 'low' },\n { label: 'Date: Newest First', value: 'newest' },\n { label: 'Date: Oldest First', value: 'oldest' },\n];\n","import React, { useState, useCallback, Dispatch, SetStateAction } from 'react';\nimport { Grid, SelectField, Row } from '@8base/boost';\nimport { SearchInput } from '../../../shared/components';\nimport CampaignFilter from './CampaignFilter';\nimport CreateCampaignButton from './CreateCampaignButton';\nimport { FILTER_CATEGORIES, SORT_OPTIONS } from '../campaigns-model';\nimport { Filter } from '../campaign-hooks';\n\nconst CampaignListHeader: React.FC = ({ onFilter }) => {\n const [search, setSearch] = useState('');\n const [filters, setFilters] = useState({ open: false });\n const [sort, setSort] = useState('');\n\n const handleSubmit = useCallback(\n (value) => {\n onFilter({ sortData: value ? value : sort, search, filters });\n },\n [search, filters, sort, onFilter],\n );\n\n const handleFilter = useCallback((name, value) => {\n setFilters((state) => ({\n ...state,\n [name]: value,\n }));\n }, []);\n\n const toggleFilter = useCallback(() => {\n setFilters((state) => ({\n ...state,\n open: !state.open,\n }));\n }, []);\n\n const handleSortChange = useCallback(\n (value) => {\n setSort(value);\n\n handleSubmit(value);\n },\n [handleSubmit],\n );\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\ntype Props = {\n onFilter: Dispatch>;\n};\n\nexport default CampaignListHeader;\n","import React, { useState } from 'react';\nimport { Card, Table as BoostTable, Row, Pagination } from '@8base/boost';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport CampaignListRow from './components/CampaignListRow';\nimport CampaignForm from './components/EnhancedCampaignForm';\nimport CampaignListHeader from './components/CampaignListHeader';\nimport DeleteCampaignDialog from './components/DeleteCampaignDialog';\nimport DecisionDialog from '../../shared/components/dialog/DecisionDialog';\nimport { onErrorMixinFC } from '../../shared/mixins';\nimport * as Toast from '../../shared/components/toast/Toast';\nimport styled from 'styled-components';\nimport { useCampaignList } from './campaign-hooks';\nimport {\n OnCampaignDelete,\n OnCampaignCreate,\n OnCampaignUpdate,\n OnCampaignError,\n} from './campaign-events';\nimport { useWorkflowAutomations } from '../workflow/workflow-automation/workflow-automation-hooks';\nimport { useUsersInAgency } from '../users/users-hooks';\nimport { useAgency } from '../../shared/hooks/useAgency';\nimport { Campaign } from 'gerated/types';\n\nconst Table = styled(BoostTable)`\n & div[role='loader'] > div[role='loader'] div {\n border-color: #3db4aa !important;\n }\n`;\n\nconst Body = styled(BoostTable.Body)`\n min-height: 400px;\n`;\n\nconst columnsSize =\n 'minmax(200px, 1fr) 150px 150px minmax(230px, 1fr) 220px minmax(60px, 100px) minmax(100px, 110px) 150px';\n\nconst CampaignsView: React.FC = () => {\n const agency = useAgency();\n const [page, setPage] = useState(1);\n const { items, loading, count, refetch, setFilters } = useCampaignList(agency.id, page);\n const { items: workflows } = useWorkflowAutomations(agency.id, '', 0);\n const { items: users } = useUsersInAgency(agency.id, 0);\n\n useSimpleSubscription(\n OnCampaignCreate,\n () => {\n refetch();\n\n Toast.success('Success', 'Campaign successfully created');\n },\n [refetch],\n );\n\n useSimpleSubscription(\n OnCampaignUpdate,\n () => {\n refetch();\n\n Toast.success('Success', 'Campaign successfully updated');\n },\n [refetch],\n );\n\n // npm install --save-dev @types/8base__boost @types/cobuildlab__react-flux-state\n\n useSimpleSubscription(\n OnCampaignDelete,\n () => {\n refetch();\n\n Toast.success('Success', 'Campaign successfully deleted');\n },\n [refetch],\n );\n\n useSimpleSubscription(OnCampaignError, (e) => {\n if (e) onErrorMixinFC(e);\n });\n\n return (\n \n \n \n \n \n \n \n \n NAME\n CREATED\n PRIORITY\n ASSIGNED TO\n WORKFLOWS\n LEADS\n STATUS\n ACTIONS\n \n \n {(campaign: Campaign) => (\n \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default CampaignsView;\n","import { useState, useEffect, useCallback, Dispatch, SetStateAction } from 'react';\nimport { LIST_INITIAL_STATE } from '../../shared/constants';\nimport { OnCampaignsList, OnCampaignsListError } from './campaign-events';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchCampaignsList } from './campaigns-actions';\nimport { Campaign } from 'gerated/types';\n\nexport type Filter = {\n search: string;\n sortData: string;\n filters: Record;\n};\n\ntype State = {\n items: Array;\n count: number;\n loading: boolean;\n};\n\ntype HookState = State & {\n setFilters: Dispatch>;\n refetch: () => void;\n};\n\n/**\n * Hook to list and filter campaigns\n *\n * @param agency - The agency id\n * @param page - The page the campaigns from\n *\n * @returns The hook state\n */\nexport function useCampaignList(agency: string, page = 1): HookState {\n const [state, setState] = useState(LIST_INITIAL_STATE);\n const [filters, setFilters] = useState({ search: '', sortData: '', filters: {} });\n\n const fetch = useCallback(() => {\n setState((state) => ({ ...state, loading: true }));\n\n fetchCampaignsList(agency, page, filters.search, filters.sortData, filters.filters);\n }, [agency, page, filters]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n useSubscription(\n OnCampaignsList,\n (data) => {\n if (data) {\n setState((state) => ({\n ...state,\n error: undefined,\n items: data.campaignsList.items,\n count: data.campaignsList.count,\n loading: false,\n }));\n }\n },\n [],\n );\n\n useSubscription(\n OnCampaignsListError,\n (error) => {\n setState((state) => ({\n ...state,\n error: error,\n items: [],\n count: 0,\n loading: false,\n }));\n },\n [],\n );\n\n return {\n ...state,\n setFilters,\n refetch: fetch,\n };\n}\n","import React, { useState, useEffect, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Grid, SelectField, Label, Switch, DateInputField } from '@8base/boost';\nimport { PRIORITIES } from '../../../shared/constants';\nimport { fetchManagerAndAgents } from '../../users/user-actions';\nimport * as toast from '../../../shared/components/toast/Toast';\nimport { Margin, DialogForm, SelectMultipleAgents } from '../../../shared/components';\nimport { mapUserToMultipleSelect } from '../../users/user-utils';\nimport Field from '../../../shared/components/Field';\nimport initialData from '../campaigns-model';\nimport WorkflowAutomationSelect from './WorkflowAutomationSelect';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchVendors } from '../../vendors/vendors-actions';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { OnVendorsError, OnVendorsEvent } from 'modules/vendors/vendors-events';\n\nconst CampaignForm = ({\n isOpen,\n onCloseForm,\n data,\n agencyId,\n onChange,\n onSubmit,\n workflowAutomations,\n isUpdate,\n isLoading,\n}) => {\n const [usersOptions, setUsersOptions] = useState([]);\n const campaign = data || initialData;\n const [loading, setLoading] = useState(false);\n const [vendors, setVendors] = useState([]);\n\n const onCreate = useCallback(() => {\n onSubmit(campaign);\n }, [campaign, onSubmit]);\n\n useEffect(() => {\n setLoading(true);\n fetchVendors();\n }, []);\n\n useSimpleSubscription(OnVendorsEvent, (data) => {\n if (data) {\n setLoading(false);\n const vendorsOptions = data.vendorsList.items.map((vendor) => ({\n label: vendor.name,\n value: vendor.id,\n }));\n\n setVendors(vendorsOptions);\n }\n });\n\n useSimpleSubscription(OnVendorsError, (e) => {\n if (e) {\n setLoading(false);\n onErrorMixinFC(e);\n }\n });\n\n useEffect(() => {\n if (isOpen) {\n fetchManagerAndAgents(agencyId)\n .then(({ usersList }) => setUsersOptions(usersList.items))\n .catch((e) => toast.error('Something happened fetching the users, please try again'));\n }\n }, [agencyId, isOpen]);\n\n return (\n \n \n \n \n \n \n onChange(e.target.name, e.target.value)}\n />\n \n \n \n \n onChange('priority', value),\n }}\n options={PRIORITIES.map((priority, index) => ({\n label: priority,\n value: index,\n }))}\n />\n \n \n \n \n onChange('vendor', value),\n }}\n options={vendors}\n />\n \n \n \n \n onChange('startsAt', value),\n }}\n />\n \n \n onChange('endsAt', value),\n }}\n />\n \n \n \n \n \n \n \n onChange('assignees', value || [])}\n options={mapUserToMultipleSelect(usersOptions)}\n />\n \n \n \n \n \n }\n onChange={(value) => onChange('workflows', value || [])}\n />\n \n \n \n \n \n onChange('automaticCalls', value)}\n />\n \n \n \n \n \n \n );\n};\n\nCampaignForm.propTypes = {\n data: PropTypes.object,\n agencyId: PropTypes.string.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onChange: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onCloseForm: PropTypes.func.isRequired,\n workflowAutomations: PropTypes.array.isRequired,\n isUpdate: PropTypes.bool,\n isLoading: PropTypes.bool,\n};\n\nCampaignForm.defaultProps = {\n data: null,\n isUpdate: false,\n isLoading: false,\n};\n\nexport default CampaignForm;\n","import React, { useState, useEffect } from 'react';\nimport { Progress as BoostProgress, Label } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchCampaignProgress } from '../campaigns-actions';\nimport { numberWithCommas } from '../../../shared/utils';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport { OnFetchCampaignProgressError, OnFetchCampaignProgressEvent } from '../campaign-events';\n\nconst Progress = styled(BoostProgress)`\n margin: 12px 0px;\n\n div > div {\n height: 126px !important;\n border-radius: 5px;\n }\n\n div > div > div {\n border-top-left-radius: 5px !important;\n border-top-right-radius: 0px !important;\n border-bottom-right-radius: 0px !important;\n border-bottom-left-radius: 5px !important;\n transition: width 1.5s ease-in-out;\n }\n`;\n\n/**\n * Campaign progress component\n *\n * @param {object} props - React component's prop object\n * @param {string} props.id - Campaign id to show the progress from\n *\n * @returns {React.FC} Component to render\n */\nfunction CampaignProgress({ id, amount }) {\n const [progress, setProgress] = useState(0);\n const [raised, setRaised] = useState(0);\n const [target, setTarget] = useState(0);\n\n useEffect(() => {\n fetchCampaignProgress(id);\n }, [id]);\n\n useEventSubscription(\n OnFetchCampaignProgressEvent,\n ({ campaign: { campaignLeadRelation: sold }, leadsList }) => {\n const raised = sold.count > 0 ? parseFloat(sold.groups[0].amount) : parseFloat(0);\n const target =\n amount ||\n (leadsList.count > 0 && leadsList.groups[0].amount !== null\n ? parseFloat(leadsList.groups[0].amount)\n : parseFloat(0));\n\n if (raised > 0) {\n setProgress(raised * 100 / target);\n } else {\n setProgress(parseFloat(0));\n }\n\n setRaised(raised);\n setTarget(target);\n },\n );\n\n useEventSubscription(OnFetchCampaignProgressError, (err) => {\n if (err) onErrorMixinFC(err);\n });\n\n return (\n \n ${raised === 0 ? 0 : numberWithCommas(raised)}/\n \n \n ${target === 0 ? 0 : numberWithCommas(target)} Goal\n \n \n }\n />\n );\n}\n\nCampaignProgress.propTypes = {\n id: PropTypes.string.isRequired,\n amount: PropTypes.string.isRequired,\n};\n\nexport default CampaignProgress;\n","import React from 'react';\nimport { YesNoDialog } from 'shared/components';\n\nconst DialogDeleteCampaign = (props) => {\n return (\n \n );\n};\n\nexport default DialogDeleteCampaign;\n","import gql from 'graphql-tag';\n\nexport const QUERY_PHONE_NUMBERS = gql`\n query PhoneNumbers($agency: ID!, $offset: Int!, $limit: Int) {\n phoneNumbersList(\n filter: { agency: { id: { equals: $agency } }, active: { equals: true } }\n sort: { priority: ASC }\n skip: $offset\n first: $limit\n ) {\n count\n items {\n number {\n number\n code\n }\n priority\n status\n id\n }\n }\n }\n`;\n/* \nquery MyQuery {\n __typename\n phoneNumbersList(filter: {agency: {id: {equals: \"asda\"}}}, sort: {priority: ASC})\n}\n\n*/\nexport const CREATE_PHONE_NUMBER = gql`\n mutation createPhoneNumber($agency: ID!, $user: ID!, $code: String!, $number: String!) {\n phoneNumberCreate(\n data: {\n agency: { connect: { id: $agency } }\n user: { connect: { id: $user } }\n number: { code: $code, number: $number }\n }\n ) {\n id\n }\n }\n`;\n\nexport const UPDATE_PHONE_NUMBER = gql`\n mutation phoneNumberUpdate($id: ID!, $data: PhoneNumberUpdateInput!) {\n __typename\n phoneNumberUpdate(data: $data, filter: { id: $id }) {\n id\n }\n }\n`;\n\nexport const DELETE_PHONE_NUMBER = gql`\n mutation deleteMutation($id: ID!) {\n phoneNumberDelete(filter: { id: $id }) {\n success\n }\n }\n`;\n","import gql from 'graphql-tag';\n\nconst SubscriptionPlanFragment = gql`\n fragment SubscriptionPlanFragment on SubscriptionPlan {\n id\n name\n order\n isFreeTrial\n monthlyPrice\n annualPrice\n monthlyStripePlanID\n annualStripePlanID\n description\n }\n`;\n\nconst CompanySubFragment = gql`\n fragment CompanySubFragment on CompanySub {\n id\n expireDate\n status\n numberOfSeats\n stripeSubscriptionId\n stripePaymentMethodId\n stripeCustomerId\n subscriptionPlan {\n ...SubscriptionPlanFragment\n }\n company {\n id\n name\n taxId\n }\n pendingUpdate\n }\n ${SubscriptionPlanFragment}\n`;\n\nexport const FETCH_COMPANY_SUBSCRIPTION_PLAN = gql`\n query FetchCompanySubscription($id: ID) {\n companySub(id: $id) {\n ...CompanySubFragment\n }\n }\n ${CompanySubFragment}\n`;\n\nexport const FETCH_COMPANY_SUBSCRIPTION_PLANS = gql`\n query FetchCompanyCompanySubscriptionPlans(\n $filter: CompanySubFilter\n $first: Int\n $skip: Int\n $orderBy: [CompanySubOrderBy]\n ) {\n companySubsList(filter: $filter, first: $first, skip: $skip, orderBy: $orderBy) {\n items {\n ...CompanySubFragment\n }\n }\n }\n ${CompanySubFragment}\n`;\n\nexport const FETCH_SUBSCRIPTION_PLANS = gql`\n query FetchSubscriptionPlans(\n $filter: SubscriptionPlanFilter\n $first: Int\n $skip: Int\n $orderBy: [SubscriptionPlanOrderBy]\n ) {\n subscriptionPlansList(filter: $filter, first: $first, skip: $skip, orderBy: $orderBy) {\n count\n items {\n ...SubscriptionPlanFragment\n }\n }\n }\n ${SubscriptionPlanFragment}\n`;\n","import { OnApolloClient } from '../../../shared/session/session-events';\nimport {\n QUERY_PHONE_NUMBERS,\n CREATE_PHONE_NUMBER,\n UPDATE_PHONE_NUMBER,\n} from './phone-numbers-querys';\nimport { canCreatePhoneNumber } from '@cobuildlab/lead-volt-share';\nimport { FETCH_COMPANY_SUBSCRIPTION_PLANS } from '../billing/subscription-plan/subscription-plan-queries';\nimport { formatPhoneNumber } from '../../phone-calls/phone-calls-utils';\nimport { parseSavedNumbers } from './phone-numbers-utils';\nimport { fetchSession } from '../../../modules/auth/auth.actions';\nimport {\n OnPhoneNumberDeleteError,\n OnPhoneNumberDeleteEvent,\n OnPhoneNumbersListError,\n OnPhoneNumbersListEvent,\n OnPhoneNumberUpdateError,\n OnPhoneNumberUpdateEvent,\n OnPurchasedPhoneNumbersError,\n OnPurchasedPhoneNumbersEvent,\n OnTwilioPhonenumbersListError,\n OnTwilioPhonenumbersListEvent,\n} from './phone-numbers-events';\n\nconst workspaceEndpoint = process.env.REACT_APP_WORKSPACE_ENDPOINT;\n\n/**\n * @param {string} agency Agency Id\n * @param {number} pageSize Page size\n * @param {number} queryOffset Offset\n * @param {number} fetchPolicy Cache options\n * @returns {Array} response array\n */\nexport async function fetchPhoneNumbersList(\n agency,\n pageSize,\n queryOffset,\n fetchPolicy = 'cache-first',\n) {\n const client = OnApolloClient.get();\n const variables = { agency, limit: pageSize, offset: queryOffset };\n //console.log('VARIABLES FROM PHONE NUMBERS', agency);\n try {\n const response = await client.query({\n query: QUERY_PHONE_NUMBERS,\n fetchPolicy,\n variables,\n });\n OnPhoneNumbersListEvent.dispatch(response.data);\n return response.data;\n } catch (e) {\n return OnPhoneNumbersListError.dispatch(e);\n }\n}\n\n/**\n * @param {string} search Search to\n */\nexport async function fetchTwilioPhoneNumbersList(search = '', type = 'Local') {\n const sessionReq = await fetchSession();\n //console.log('from fetchTwilioPhoneNUmbersList', type);\n const getPhonesEnpoint = `${workspaceEndpoint}/webhook/phoneNumbers/available`;\n try {\n const config = {\n method: 'POST',\n body: JSON.stringify({ search, agency: sessionReq?.user?.selectedAgency?.id, type: type }), //the toll-free or local numbers list is gotten from the server\n };\n\n const response = await fetch(getPhonesEnpoint, config);\n\n const { data, ...rest } = await response.json();\n\n if (!data) {\n throw Error({ ...rest });\n }\n return OnTwilioPhonenumbersListEvent.dispatch(data);\n } catch (e) {\n console.log('phone number list error', JSON.stringify(e));\n return OnTwilioPhonenumbersListError.dispatch(e);\n }\n}\n\n/**\n * Purchases the specified phone numbers\n *\n * @param {object} relation Relation for the numbers\n * @param {object} relation.company Company Id\n * @param {object} relation.agency Agency Id\n * @param {object} relation.user User Id\n * @param {Array<{code:string,number:string}>} numbers Array of number object\n *\n * @returns {Promise} The request result\n */\nexport async function purchasePhoneNumbers({ company, agency, user }, numbers) {\n const client = OnApolloClient.get();\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_COMPANY_SUBSCRIPTION_PLANS,\n fetchPolicy: 'network-only',\n variables: {\n filter: { company: { id: { equals: company } } },\n first: 1,\n orderBy: 'createdAt_DESC',\n skip: 0,\n },\n });\n } catch (e) {\n return OnPurchasedPhoneNumbersError.dispatch(e);\n }\n\n const [companySubscription] = response.data.companySubsList.items;\n const [canCreate, reason] = canCreatePhoneNumber(companySubscription);\n\n if (!canCreate) {\n return OnPurchasedPhoneNumbersError.dispatch(new Error(reason));\n }\n\n const savedNumbers = numbers.map(async ({ code, number }) => {\n const variables = {\n agency,\n user,\n code,\n number,\n };\n\n const phoneNumber = formatPhoneNumber(`+${code}${number}`);\n\n try {\n const response = await client.mutate({\n mutation: CREATE_PHONE_NUMBER,\n variables,\n });\n\n return { ...response.data, phoneNumber };\n } catch (error) {\n console.log('ERROR PURCHASING PHONE NO.', error);\n return { error: true, phoneNumber };\n }\n });\n\n const result = await Promise.all(savedNumbers);\n\n const [successfulNumbers, failedNumbers] = parseSavedNumbers(result);\n\n if (successfulNumbers.length > 0) {\n OnPurchasedPhoneNumbersEvent.dispatch(successfulNumbers);\n }\n\n if (failedNumbers.length > 0) {\n OnPurchasedPhoneNumbersError.dispatch(failedNumbers);\n }\n}\n\n/**\n * Purchases a random phone number\n *\n * @param {string} id - The agency id\n * @param {string} campaignId - The campaign id\n *\n * @returns {Promise} The request result\n */\nexport async function purchaseRandomPhoneNumber(id, campaignId = undefined) {\n const response = await fetch(\n `${process.env.REACT_APP_WORKSPACE_ENDPOINT}/webhook/purchase-phone-number`,\n {\n method: 'POST',\n body: JSON.stringify({ agencyId: id, campaignId }),\n },\n );\n\n const body = await response.json();\n\n if (!response.ok) throw new Error(body.message);\n\n return body;\n}\n\n/**\n * @param {string} id Phone number id\n * @param {boolean} status Phone number id\n * @param {object} number Phone number id\n * @param {string} number.code Phone number country code\n * @param {string} number.number Phone number\n */\nexport async function updatePhoneNumberStatus(id, status, { code, number }) {\n const client = OnApolloClient.get();\n const variables = { id, data: { status, number: { code, number } } };\n\n try {\n const response = await client.mutate({\n mutation: UPDATE_PHONE_NUMBER,\n variables,\n });\n\n return OnPhoneNumberUpdateEvent.dispatch(response.data);\n } catch (e) {\n return OnPhoneNumberUpdateError.dispatch(e);\n }\n}\n\n/**\n * @param {string } id Phone numner id to remove\n */\nexport async function deletePhoneNumber(id) {\n const client = OnApolloClient.get();\n const variables = {\n id,\n data: {\n active: false,\n },\n };\n\n try {\n const response = await client.mutate({\n mutation: UPDATE_PHONE_NUMBER,\n variables,\n });\n\n return OnPhoneNumberDeleteEvent.dispatch(response.data);\n } catch (e) {\n return OnPhoneNumberDeleteError.dispatch(e);\n }\n}\n\n/**\n * @param {string} id Phone number id\n * @param {object} data Upadate data\n */\nexport async function updatePhoneNumber(id, data) {\n const client = OnApolloClient.get();\n const {\n number: { code, number },\n ...restData\n } = data;\n\n // Use decturing with code, number porperties to avoid pass adicional data to te request\n // This facilite the use of the action, so it not require an expecific object model\n const variables = { id, data: { ...restData, number: { code, number } } };\n\n try {\n const response = await client.mutate({\n mutation: UPDATE_PHONE_NUMBER,\n variables,\n });\n\n return OnPhoneNumberUpdateEvent.dispatch(response.data);\n } catch (e) {\n return OnPhoneNumberUpdateError.dispatch(e);\n }\n}\n","import React, { useState, useEffect } from 'react';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport { useParams, useHistory } from 'react-router-dom';\nimport { fetchCampaignDetail, updateCampaign } from './campaigns-actions';\nimport model from './campaigns-model';\nimport * as R from 'ramda';\nimport {\n Paper,\n Grid,\n Row,\n Form,\n Text,\n Label,\n Dropdown,\n Menu,\n Input,\n Button,\n Tooltip,\n SelectField,\n InputField,\n Link,\n} from '@8base/boost';\nimport { CustomIconBoost } from '../../shared/components/ui/Icons';\nimport { campaignMap } from './campaigns-utils';\nimport { fetchManagerAndAgents } from '../users/user-actions';\nimport { getAssignedUsersLabel, mapUserToDropdownWithCheck } from '../users/user-utils';\nimport { fetchWorkflowAutomationsList } from '../workflow/workflow-automation/workflow-automation-actions';\nimport styled from 'styled-components';\nimport { fetchAgents } from '../agents/agents-actions';\nimport CampaignForm from './components/CampaignForm';\nimport CampaignProgress from './components/CampaignProgress';\nimport { PRIORITIES, CAMPAIGN_STATUSES } from '../../shared/constants';\nimport {\n Loader,\n TitleDetail,\n Title,\n PaperHeader,\n ButtonIcon,\n ButtonWithoutIcon,\n Margin,\n DropdownWithCheck,\n DropdownBodyOnTable,\n} from 'shared/components';\nimport DialogDeleteCampaign from './components/DialogDeleteCampaign';\nimport { onErrorMixinFC } from '../../shared/mixins';\nimport * as toast from 'shared/components/toast/Toast';\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\nimport { formatDuration } from '../phone-calls/phone-calls-utils';\nimport moment from 'moment';\nimport WorkflowAutomationSelect from './components/WorkflowAutomationSelect';\nimport { fetchPhoneNumbersList } from '../my-account/phone-numbers/phone-numbers-actions';\nimport { formatPhoneNumber } from 'modules/phone-calls/phone-calls-utils';\nimport bigInt from 'big-integer';\nimport { deleteCampaign } from './campaigns-actions';\nimport docs from '../../shared/assets/documents/campaign-leads-endpoint.md';\nimport { useAgency } from 'shared/hooks/useAgency';\nimport { OnFetchManagerAndAgentUsersEvent } from 'modules/users/user-events';\nimport {\n OnCampaignDelete,\n OnCampaignDetailsEvent,\n OnCampaignError,\n OnCampaignUpdate,\n} from './campaign-events';\nimport { OnWorkflowAutomationList } from 'modules/workflow/workflow-automation/workflow-automation-events';\nimport { OnAgentsListEvent } from 'modules/agents/agents-events';\nimport { OnPhoneNumbersListEvent } from 'modules/my-account/phone-numbers/phone-numbers-events';\n\nconst CustomDropdownWrap = styled.div`\n border: 1px solid #ced7dd;\n border-radius: 4px;\n padding: 2px 10px 2px 8px;\n min-height: 36px;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n`;\n\nexport const CampaignDetailsView = () => {\n const agency = useAgency();\n const history = useHistory();\n const { id } = useParams();\n const [data, setData] = useState(R.clone(model));\n const [isLoading, setIsLoading] = useState(true);\n const [isLoadingForm, setIsLoadingForm] = useState(false);\n const [agents, setAgents] = useState([]);\n const [users, setUsers] = useState([]);\n const [workflowAutomations, setWorkflowAutomations] = useState([]);\n const [isOpenForm, setIsOpenForm] = useState(false);\n const [campaign, setCampaign] = useState(R.clone(model));\n const [isOpenDelete, setIsOpenDelete] = useState(false);\n const [phoneNumbers, setPhoneNumbers] = useState([]);\n const [selectedPhoneNumber, setSelectedPhoneNumber] = useState('');\n const [cachedAmount, setCachedAmount] = useState('');\n\n const toggleOpenForm = () => {\n setIsOpenForm(!isOpenForm);\n setData(R.clone(campaign));\n };\n\n const handleOnChangeData = (name, value) => {\n setData({ ...data, [name]: value });\n };\n\n const handleOnSubmitForm = (data) => {\n setIsLoadingForm(true);\n const cloned = R.clone(data);\n const campaign = {\n id,\n name: cloned.name,\n priority: (cloned.priority + 1).toString(),\n assignees: cloned.assignees ? cloned.assignees.map((user) => user.value || user.id) : [],\n agents: cloned.agents ? cloned.agents.map((agent) => agent.value || agent.id) : [],\n status: CAMPAIGN_STATUSES[cloned.status],\n workflows: cloned.workflows.map((workflows) => workflows.value || workflows.id),\n automaticCalls: cloned.automaticCalls,\n startsAt: cloned.startsAt,\n endsAt: cloned.endsAt,\n };\n if (cloned.vendor && cloned.vendor !== '') {\n campaign.vendor = {\n connect: {\n id: cloned.vendor,\n },\n };\n }\n updateCampaign(campaign, true);\n };\n\n const handleOnChangeEmailMarketing = (value) => {\n const campaign = {\n id,\n workflows: value ? value.map((workflows) => workflows.value || workflows.id) : [],\n };\n\n updateCampaign(campaign, false);\n };\n\n const handlePhoneNumberChange = (value) => {\n setSelectedPhoneNumber(value);\n\n updateCampaign({\n id: campaign.id,\n phoneNumber: {\n connect: { id: value },\n },\n });\n };\n\n const handleAmountChange = (value) => {\n setCampaign({ ...campaign, amount: bigInt(value) });\n };\n\n const updateCampaignAmount = () => {\n const amount = campaign.amount;\n\n if (cachedAmount && bigInt(cachedAmount).compare(amount) === 0) {\n return;\n }\n updateCampaign({\n id: campaign.id,\n amount,\n });\n setCachedAmount(amount);\n };\n\n const handleOnYes = () => {\n if (id !== null) {\n setIsLoading(true);\n setIsOpenDelete(false);\n deleteCampaign(id);\n }\n };\n\n const handleOnNo = () => {\n setIsOpenDelete(false);\n };\n\n useSimpleSubscription(OnFetchManagerAndAgentUsersEvent, ({ usersList }) => {\n if (usersList) {\n setUsers(usersList.items);\n }\n });\n\n useSimpleSubscription(OnCampaignDetailsEvent, (data) => {\n if (data) {\n setIsLoading(false);\n setData(campaignMap(data.campaign));\n setCampaign(campaignMap(data.campaign));\n setSelectedPhoneNumber(data.campaign?.phoneNumber?.id);\n setCachedAmount(bigInt(data.campaign.amount));\n }\n });\n\n useSimpleSubscription(OnCampaignError, (err) => {\n if (err) {\n setIsLoading(false);\n onErrorMixinFC(err);\n }\n });\n\n useSimpleSubscription(OnWorkflowAutomationList, (data) => {\n if (data) {\n setWorkflowAutomations(data.workflowAutomationsList.items);\n }\n });\n\n useSimpleSubscription(OnAgentsListEvent, (data) => {\n if (data) {\n setAgents(\n data.agentsList.items.filter((agent) => {\n return agent.agency.id === agency.id;\n }),\n );\n }\n });\n\n useSimpleSubscription(OnCampaignUpdate, (data) => {\n if (data) {\n toast.success('Campaigns', 'Campaign Successfully Updated');\n setIsLoadingForm(false);\n setIsOpenForm(false);\n setData(campaignMap(data.campaignUpdate));\n setCampaign(campaignMap(data.campaignUpdate));\n }\n });\n\n useSimpleSubscription(OnCampaignDelete, (data) => {\n if (data) {\n history.push('/campaigns');\n }\n });\n\n useSimpleSubscription(OnPhoneNumbersListEvent, ({ phoneNumbersList }) => {\n if (phoneNumbersList) {\n const phoneNumbers = phoneNumbersList.items.filter((item) => {\n if (item.campaign) {\n return item.campaign.id === campaign.id;\n }\n return true;\n });\n setPhoneNumbers(phoneNumbers);\n }\n });\n\n useEffect(() => {\n if (id) {\n setIsLoading(true);\n fetchCampaignDetail(id, true);\n fetchManagerAndAgents(agency.id);\n fetchWorkflowAutomationsList(agency.id, '', 0);\n fetchAgents();\n fetchPhoneNumbersList(agency.id, undefined, 0);\n }\n }, [agency.id, id]);\n\n if (isLoading) {\n return ;\n }\n\n const campaignName = campaign.name.toLocaleLowerCase().replace(/ /g, '');\n const campaignEndpoint = `${process.env.REACT_APP_WORKSPACE_ENDPOINT}/webhook/campaign/leads/${campaign.id}/${campaignName}`;\n const interval = moment(campaign.endsAt).diff(`${moment().format('YYYY-MM-DD')}T00:00:00Z`);\n const numbers = phoneNumbers.map((number) => {\n const numberStr = formatPhoneNumber(`${number.number.code}${number.number.number}`);\n return { label: numberStr, value: number.id };\n });\n\n return (\n \n \n \n \n \n \n \n Campaign Information\n \n \n \n \n \n \n \n \n \n \n \n \n {\n setIsOpenDelete(true);\n }}>\n Delete Campaign\n \n \n \n \n \n \n \n \n \n e.preventDefault()}>\n \n \n \n \n Amount\n \n \n \n \n {\n handleOnChangeEmailMarketing(value);\n }}\n label={\n \n Automation Workflow\n \n }\n />\n \n \n \n Assigned to\n \n \n \n updateCampaign({ id: data.id, assignees: value }, false)\n }\n itemList={mapUserToDropdownWithCheck(users, data.assignees)}\n />\n \n \n \n \n Phone Number\n \n \n \n \n \n \n \n \n Created:\n {campaign.startsAt}\n \n \n \n \n Ends:\n {campaign.endsAt}\n \n \n \n \n Vendor:\n {campaign.vendor}\n \n \n \n \n Priority:\n {PRIORITIES[campaign.priority]}\n \n \n \n \n Leads:\n {campaign.leads}\n \n \n \n \n Status:\n {CAMPAIGN_STATUSES[campaign.status]}\n \n \n \n \n Campaign Progress\n \n \n \n \n {interval === 0\n ? 'Today is the last day of the campaign'\n : interval > 0\n ? `${formatDuration(interval)} left`\n : `${formatDuration(interval * -1)} ago`}\n \n \n \n \n \n \n \n Campaign Endpoint\n \n \n \n \n \n \n Copy to Clipboard\n \n \n \n \n Download Documentation\n \n \n \n \n \n \n \n \n \n setIsOpenDelete(false)}\n />\n \n );\n};\n","import React, { useState, useCallback } from 'react';\nimport { ButtonGroup, Button, Input } from '@8base/boost';\nimport { IconSearchDark } from '../../../shared/components/ui/Icons';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst Search = styled(Button)`\n border-radius: 0px 0.5rem 0.5rem 0px !important;\n`;\n\nconst TextInput = styled(Input)`\n & > input {\n border-width: 1px 0px 1px 1px !important;\n border-radius: 5px 0px 0px 5px !important;\n }\n`;\n\n/**\n * Input component to make searches on\n *\n * @param {object} props - React component's props object\n * @param {boolean} props.searching - Tells if the parent component is currently fetching something related\n * @param {Function} props.onFocus - Callback to execute on search input focus\n * @param {Function} props.onClear - Callback to execute when the search input is cleared\n * @param {Function} props.onChange - Callback to execute when the search input value has changed\n * @param {Function} props.onSubmit - Callback to execute on search submit\n *\n * @returns {React.FC} The component to render\n */\nfunction SearchInput({ stretch, searching, onFocus, onClear, onSubmit, onChange, ...rest }) {\n const [search, setSearch] = useState('');\n\n const handleChange = useCallback(\n (value) => {\n setSearch(value);\n\n if (onChange) {\n onChange(value);\n }\n },\n [onChange],\n );\n\n const handleSubmit = useCallback(() => {\n onSubmit(search);\n }, [search, onSubmit]);\n\n const handleClearable = useCallback(() => {\n if (onClear) {\n onClear();\n } else {\n onSubmit('');\n }\n }, [onClear, onSubmit]);\n\n return (\n \n \n \n \n \n \n );\n}\n\nSearchInput.propTypes = {\n stretch: PropTypes.bool,\n searching: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onClear: PropTypes.func,\n onChange: PropTypes.func,\n onFocus: PropTypes.func,\n};\n\nSearchInput.defaultProps = {\n stretch: false,\n onFocus: () => {},\n onClear: null,\n onChange: null,\n};\n\nexport default SearchInput;\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { useLocation, useHistory } from 'react-router-dom';\nimport qs from 'qs';\n\n/**\n * Hook that returns url query parameters as an object\n *\n * @returns {Array} The query object and the function to set it\n */\nexport function useURLQuery() {\n const loc = useLocation();\n const history = useHistory();\n const [query, setQuery] = useState(qs.parse(loc.search, { ignoreQueryPrefix: true }));\n const prevSearch = useRef(loc.search);\n\n useEffect(() => {\n const unlisten = history.listen((location) => {\n if (prevSearch.current !== location.search) {\n prevSearch.current = location.search;\n\n setQuery(qs.parse(location.search, { ignoreQueryPrefix: true }));\n }\n });\n\n return () => unlisten();\n }, [history]);\n\n const updateQuery = useCallback(\n (path, filters) => {\n history.push(`${path}?${qs.stringify(filters)}`);\n },\n [history],\n );\n\n return [query, updateQuery];\n}\n","import React, { useCallback } from 'react';\nimport { Avatar, Column, Text, Grid, Paragraph } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport moment from 'moment';\nimport PropTypes from 'prop-types';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { useParams } from 'react-router';\nimport { EMAIL_TYPES } from '@cobuildlab/lead-volt-share';\n\n/**\n * Component to use as an item in a list of mails.\n *\n * @param {object} props - Component props\n * @param {object} props.lead - The lead related to the email\n * @param {string} props.lead.firstName - The lead's first name\n * @param {string} props.lead.lastName - The lead's last name\n * @param {string} props.lead.email - The lead's email address\n * @param {string} props.subject - Subject of the mail\n * @param {string} props.body - The mail content\n * @param {string} props.hoverBackground - Background on the item when it is hovered\n *\n * @returns {React.Component} Component to render\n */\nfunction EmailListItem({ email }) {\n const [query, setQuery] = useURLQuery();\n const { emailId } = useParams();\n const [user] = useUser();\n const { lead } = email;\n\n const onClick = useCallback(() => {\n setQuery(`/email/${email.id}`, query);\n }, [email, query, setQuery]);\n\n let firstName = '';\n let lastName = '';\n let from = email.from;\n\n if (email.type === EMAIL_TYPES.INBOX) {\n firstName = lead ? lead.firstName : email.from;\n lastName = lead ? lead.lastName : email.from[1];\n from = lead ? `${lead.firstName} ${lead.lastName}` : email.from;\n } else {\n firstName = user.firstName;\n lastName = user.lastName;\n }\n\n return (\n \n \n \n \n \n \n \n \n {from}\n \n \n \n {moment(email.createdAt).format('MM-DD-YYYY, hh:mm a')}\n {email.subject}\n \n \n );\n}\n\nEmailListItem.propTypes = {\n email: PropTypes.shape({\n id: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n from: PropTypes.string.isRequired,\n to: PropTypes.string.isRequired,\n lead: PropTypes.shape({\n firstName: PropTypes.string,\n lastName: PropTypes.string,\n }),\n subject: PropTypes.string.isRequired,\n createdAt: PropTypes.string.isRequired,\n }).isRequired,\n};\n\nexport default EmailListItem;\n","import React, { useMemo } from 'react';\nimport { Loader, Text, Row } from '@8base/boost';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport EmailListItem from './EmailListItem';\n\nconst Container = styled.div`\n overflow-y: auto;\n width: 100%;\n\n & > div:not(:last-child) {\n border-bottom: 1px solid #d8d8d8;\n }\n`;\n\nconst LoaderBlock = styled.div`\n width: 100%;\n position: relative;\n padding: 20px 20px;\n text-align: center;\n`;\n\nconst TouchableText = styled(Text)`\n font-family: Poppins !important;\n font-size: 13px !important;\n line-height: 20px !important;\n color: #3db4aa !important;\n font-weight: 400 !important;\n cursor: pointer !important;\n\n &:first-letter {\n text-transform: capitalize !important;\n }\n`;\n\n/**\n * List of emails for a specific user component\n *\n * @param {object} props - Component props\n * @param {Array} props.items - Email list to render\n * @param {boolean} props.loading - Whether the email list is loading or not\n * @param {boolean} props.available - Whether there are more emails available to fetch or not\n * @param {Function} props.onItemClick - Function to fire when user clicks an item in the list\n * @param {Function} props.onNextPage - Function to fire when the \"load more button is clicked\n *\n * @returns {React.Component} React component to render\n */\nfunction EmailList({ items, loading, available, onNextPage }) {\n const emails = useMemo(\n () => items.map((email) => ),\n [items],\n );\n\n return (\n \n {emails}\n {loading && (\n \n \n \n )}\n {!loading && available && (\n \n Load more\n \n )}\n \n );\n}\n\nEmailList.propTypes = {\n items: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n from: PropTypes.string.isRequired,\n to: PropTypes.string.isRequired,\n lead: PropTypes.shape({\n firstName: PropTypes.string,\n lastName: PropTypes.string,\n }),\n subject: PropTypes.string.isRequired,\n createdAt: PropTypes.string.isRequired,\n }).isRequired,\n ).isRequired,\n loading: PropTypes.bool.isRequired,\n available: PropTypes.bool.isRequired,\n onNextPage: PropTypes.func.isRequired,\n};\n\nexport default EmailList;\n","import { LIST_FILTER_OPTIONS } from './email-model';\nconst { INBOX, SEND, ARCHIVE, TRASH } = LIST_FILTER_OPTIONS;\n\n/**\n * Returns the label corresponding to the option\n *\n * @param {number} option - The type of filter\n *\n * @returns {string} The corresponding filter label\n */\nexport const getSelectedListOptionLabel = (option) => {\n switch (option) {\n case INBOX:\n return 'Inbox';\n case SEND:\n return 'Sent';\n case ARCHIVE:\n return 'Archived';\n case TRASH:\n return 'Trash';\n default:\n return 'Inbox';\n }\n};\n\nexport const getSelectedGmailOptionLabel = (option) => {\n switch (option) {\n case 'INBOX':\n return 'Inbox';\n case 'SENT':\n return 'Sent';\n case 'STARRED':\n return 'Starred';\n case 'TRASH':\n return 'Trash';\n default:\n return 'Inbox';\n }\n};\n\nexport const getSelectedOutlookOptionLabel = (option) => {\n switch (option) {\n case 'inbox':\n return 'Inbox';\n case 'sentitems':\n return 'Sent';\n case 'deleteditems':\n return 'Trash';\n default:\n return 'Inbox';\n }\n};\n\n/**\n * Recovers the email id from the current path from url\n *\n * @param {string} path - Current path of the app\n *\n * @returns {string} - The email id recovered from the path or empty\n */\nexport const getEmailIdFromPath = (path) => {\n const result = /\\/email\\/([a-zA-z0-9]+)\\/thread\\/([a-zA-z0-9]+)/.exec(path);\n\n if (result) {\n const emailId = result[1];\n\n return emailId;\n }\n\n return '';\n};\n\n/**\n * Formats subject for response\n *\n * @param {string} subject - The current format of the email\n *\n * @returns {string} - The desired format for the response mail\n */\nexport const formatResponseSubject = (subject) => {\n const result = /^Re:/.exec(subject);\n\n if (result) return subject;\n\n return `Re: ${subject.trim()}`;\n};\n\n/**\n * Gets text from first paragraph of the body\n *\n * @param {string} body - The content to get the paragraph from\n *\n * @returns {string} The first paragraph of the provided body\n */\nexport const getFirstParagraph = (body) => {\n const result = /([^<]*)<\\/p>/.exec(body);\n\n if (!result) return '';\n\n const { 1: paragraph } = result;\n\n return paragraph;\n};\n","import React from 'react';\nimport { Icon, Button as BoostButton, styled } from '@8base/boost';\nimport PropTypes from 'prop-types';\n\nexport const Button = styled(BoostButton)`\n background-color: #fff;\n border: 2px solid #000;\n color: #000;\n\n &:after {\n border: 4px solid #000;\n border-top-color: transparent;\n }\n\n ${(props) =>\n props.disabled\n ? `\n color: #CFD7DE;\n background-color: #E8EFF5;\n border: 1px solid #CFD7DE;\n\n & > span > i {\n display: none;\n }\n `\n : `\n &:hover {\n border: 2px solid #000;\n background-color: #fff;\n }\n \n &:active {\n border: 2px solid #000;\n background-color: #fff;\n }\n `}\n`;\n\nexport const GoogleButton = ({ children, ...rest }) => {\n return (\n \n \n {children}\n \n );\n};\n\nGoogleButton.propTypes = {\n children: PropTypes.node.isRequired,\n};\n","import React from 'react';\nimport { Icon, Button as BoostButton, styled } from '@8base/boost';\nimport PropTypes from 'prop-types';\n\nexport const Button = styled(BoostButton)`\n background-color: #fff;\n border: 2px solid #000;\n color: #000;\n\n &:after {\n border: 4px solid #000;\n border-top-color: transparent;\n }\n\n ${(props) =>\n props.disabled\n ? `\n color: #CFD7DE;\n background-color: #E8EFF5;\n border: 1px solid #CFD7DE;\n\n & > span > i {\n display: none;\n }\n `\n : `\n &:hover {\n border: 2px solid #000;\n background-color: #fff;\n }\n \n &:active {\n border: 2px solid #000;\n background-color: #fff;\n }\n `}\n`;\n\nexport const MicrosoftButton = ({ children, ...rest }) => {\n return (\n \n \n {children}\n \n );\n};\n\nMicrosoftButton.propTypes = {\n children: PropTypes.node.isRequired,\n};\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Column, Row, Button, Icon } from '@8base/boost';\nimport { GoogleButton } from '../../../shared/components/GoogleButton';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { FileInput } from '@8base-react/file-input';\nimport styled from 'styled-components';\nimport {\n OnCreateEmailError,\n OnFetchEmailConfig,\n OnFetchEmailConfigError,\n OnCreateOutlookEmailError,\n} from '../email-store';\nimport { MicrosoftButton } from '../../../shared/components/MicrosoftButton';\nimport { PRE_SIGNATURE } from '../email-model';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { IconTrash } from '../../../shared/components/ui/Icons';\nimport PropTypes from 'prop-types';\nimport { fetchEmailConfiguration, fetchUserSignature } from '../email-actions';\nimport { Editor } from '@tinymce/tinymce-react';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { OnCreateGoogleEmailError, OnUserSignatureEvent } from '../email-events';\n\nconst FormColumn = styled(Column)`\n & > div:not(:last-child) {\n border-bottom: 1px solid #e9eff4;\n }\n\n & > *:not(:last-child) {\n margin-bottom: 0px !important;\n }\n`;\n\nconst InputColumn = styled(Column)`\n padding: 5px 0px;\n`;\n\nconst Actions = styled.div`\n padding: 24px 0px;\n width: 100%;\n`;\n\nconst Label = styled.label`\n color: #9b9b9b;\n margin-right: 5px;\n`;\n\nconst Section = styled.div`\n ${(props) => (props.paddingLess ? 'padding: 0px !important' : 'padding: 0px 24px !important;')}\n display: flex;\n align-items: center;\n ${(props) => (props.stretch ? `width: 100%;` : '')}\n`;\n\nconst Div = styled.div`\n width: 50%;\n text-align: ${(props) => props.textAlign};\n`;\n\nconst Input = styled.input`\n width: ${(props) => (props.width ? props.width : '100%')};\n border: none !important;\n &:focus {\n outline: none !important;\n }\n\n &::placeholder {\n color: #cfd7de;\n }\n`;\n\nconst ReadOnly = styled.p`\n font-weight: 600;\n width: 100%;\n`;\n\nconst Normal = styled.span`\n font-weight: 400;\n`;\n\nconst TextBody = styled.p`\n font-size: 12px;\n text-align: center;\n width: 100%;\n`;\n\nconst IconDelete = styled.div`\n display: inline-flex;\n width: 16px;\n height: 16px;\n border-radius: 100%;\n background-color: #ccc;\n justify-content: center;\n align-items: center;\n > div {\n width: 10px;\n height: 3px;\n background: #fff;\n }\n`;\n\nconst onLoading = { config: true, signature: true };\n\nconst onNotLoading = { config: false, signature: false };\n\n/**\n * Email form component\n *\n * @param {object} props - The component's props object\n * @param {object} props.dest - The destination object\n * @param {string} props.dest.id - Id of the lead to relate the email\n * @param {string} props.threadId - The thread id where the email is going to be created\n * @param {string} props.initialSubject - Subject to initialize the input\n * @param {object} props.onSubmit - Handler of the click event on the submit button\n * @param {object} props.onTrash - Handler of the click event on the trash button\n *\n * @returns {React.Component} Component to render\n */\nfunction EmailForm({ dest, onSubmit, onSubmitWithGoogle, onSubmitWithOutlook, onTrash }) {\n const [to, setTo] = useState(dest?.to || '');\n const [cc, setCc] = useState(dest?.cc || '');\n let [subject, setSubject] = useState(dest?.subject || '');\n const [body, setBody] = useState('');\n const [attachments, setAttachments] = useState([]);\n const [loading, setLoading] = useState({ config: true, signature: true });\n const [signature, setSignature] = useState(null);\n const [config, setConfig] = useState(null);\n const [service, setService] = useState(null);\n const [user] = useUser();\n const agency = useAgency();\n\n useEffect(() => {\n setLoading(onLoading);\n\n fetchUserSignature();\n fetchEmailConfiguration(user.id, agency.id);\n }, [user, agency]);\n\n useEffect(() => {\n if (signature) {\n setBody((prevBody) => `${prevBody}${PRE_SIGNATURE}${signature}`);\n }\n }, [signature]);\n\n useEventSubscription(\n OnFetchEmailConfig,\n ({ gmail, outlook, outbound }) => {\n if (gmail && gmail.active) {\n setService(gmail);\n setConfig('GMAIL');\n } else if (outlook && outlook.active) {\n setService(outlook);\n setConfig('OUTLOOK');\n } else {\n setService(outbound);\n setConfig('MANUAL');\n }\n\n setLoading((prevState) => ({\n ...prevState,\n config: false,\n }));\n },\n [],\n );\n\n useEventSubscription(\n OnFetchEmailConfigError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n useEventSubscription(\n OnCreateEmailError,\n (e) => {\n setLoading(onNotLoading);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useEventSubscription(\n OnCreateOutlookEmailError,\n (e) => {\n setLoading(onNotLoading);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useEventSubscription(OnUserSignatureEvent, (data) => {\n if (data.user.isEnableSignature) {\n if (data.user.signature !== null) {\n setSignature(data.user.signature);\n }\n }\n\n setLoading((prevState) => ({\n ...prevState,\n signature: false,\n }));\n });\n\n const addFile = (value) => {\n const aux = [...attachments];\n aux.push(value);\n setAttachments(aux);\n };\n\n const deleteFile = (i) => {\n const aux = attachments.filter((file) => {\n return file !== attachments[i];\n });\n\n setAttachments(aux);\n };\n\n useEventSubscription(OnCreateGoogleEmailError, () => {\n setLoading(onNotLoading);\n });\n\n const emailAttachList = useMemo(\n () =>\n attachments.map((file) => {\n const url = file.downloadUrl;\n return `${file.filename}`;\n }),\n [attachments],\n );\n\n const handleSubmit = () => {\n setLoading(onLoading);\n\n let sub = subject.trim();\n\n if (dest && dest.isReply) {\n if (!/^Re: /.test(subject.match)) {\n sub = `Re: ${sub}`;\n }\n }\n\n onSubmit({\n to,\n cc,\n subject: sub,\n from: service.username,\n body: `${body}${attachments.length > 0 ? ` Attachments: ${emailAttachList}` : ''}`,\n attachments: attachments,\n lead: dest?.id ? { id: dest.id } : undefined,\n agency: { id: agency.id },\n user: { id: user.id },\n });\n };\n\n const handleSubmitWithGoogle = () => {\n setLoading(onLoading);\n\n onSubmitWithGoogle({\n subject,\n to,\n cc,\n content: body,\n agency: agency.id,\n });\n };\n\n const handleSubmitWithOutlook = () => {\n setLoading(onLoading);\n\n onSubmitWithOutlook({\n subject,\n cc,\n to,\n body,\n agency: agency.id,\n });\n };\n\n const attachmentsList = attachments.map((file, i) => {\n return (\n \n {file.filename}\n deleteFile(i)}>\n \n \n \n );\n });\n\n let submit = (\n <>\n \n Send\n \n \n {({ pick }) => (\n pick()} name=\"PaperClip\" color=\"ICON_GRAY\" cursor=\"pointer\" />\n )}\n \n >\n );\n\n let from = service ? service.username : '';\n\n if (config === 'GMAIL') {\n submit = (\n \n Send\n \n );\n\n from = service.profile.email;\n }\n\n if (config === 'OUTLOOK') {\n submit = (\n \n Send\n \n );\n\n from = service.profile.email;\n }\n\n return (\n \n \n \n \n From:\n \n {from}\n \n \n \n To:\n {dest ? (\n \n {dest.to}\n \n ) : (\n setTo(e.target.value)}\n placeholder=\"Emails\"\n />\n )}\n \n \n Cc:\n setCc(e.target.value)}\n placeholder=\"Emails\"\n />\n \n \n \n \n \n \n Subject:\n {dest && dest.subject ? (\n \n {subject}\n \n ) : (\n setSubject(e.target.value)}\n />\n )}\n \n \n \n \n \n \n \n {attachmentsList.length < 1 ? There are no files : attachmentsList}\n \n \n \n \n \n \n {submit}\n \n \n \n \n \n \n \n \n \n );\n}\n\nEmailForm.propTypes = {\n dest: PropTypes.shape({\n id: PropTypes.string,\n to: PropTypes.string,\n cc: PropTypes.string,\n subject: PropTypes.string,\n isReply: PropTypes.bool,\n }),\n onSubmit: PropTypes.func.isRequired,\n onSubmitWithGoogle: PropTypes.func,\n onSubmitWithOutlook: PropTypes.func,\n onTrash: PropTypes.func.isRequired,\n};\n\nEmailForm.defaultProps = {\n onSubmitWithGoogle: () => {},\n onSubmitWithOutlook: () => {},\n initialSubject: '',\n threadId: '',\n dest: null,\n};\n\nexport default EmailForm;\n","import React from 'react';\nimport { Button, Modal, Card, Icon, Row, Heading } from '@8base/boost';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnCreateEmail, OnCreateOutlookEmail } from '../email-store';\nimport EmailForm from './EmailForm';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport * as toast from '../../../shared/components/toast/Toast';\n\nconst Body = styled(Card.Body)`\n min-width: 50vw;\n`;\n\n/**\n * Renders the Email form in a dialog\n *\n * @param {object} props - The component's prop object\n * @param {object} props.dest - The data to initially fill the form\n * @param {boolean} props.isOpen - Open/Closes the dialog\n * @param {Function} props.onSubmit - Handles submit operation\n * @param {Function} props.onClose - Handles close operation\n *\n * @returns {React.Component} Component to render\n */\nfunction EmailDialog({ dest, isOpen, onSubmit, onSubmitWithGoogle, onSubmitWithOutlook, onClose }) {\n useSubscription(\n OnCreateEmail,\n () => {\n onClose();\n\n toast.success('Success', 'Email sent successfully');\n },\n [onClose],\n );\n\n useSubscription(\n OnCreateOutlookEmail,\n () => {\n onClose();\n\n toast.success('Success', 'Email sent successfuly');\n },\n [onClose],\n );\n\n return (\n \n \n \n \n Compose Email\n \n \n \n \n \n \n {isOpen && (\n \n )}\n \n \n \n );\n}\n\nEmailDialog.propTypes = {\n dest: PropTypes.object,\n isOpen: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onSubmitWithGoogle: PropTypes.func.isRequired,\n onSubmitWithOutlook: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n};\n\nEmailDialog.defaultProps = {\n dest: null,\n};\n\nexport default EmailDialog;\n","import React, { useState } from 'react';\nimport EmailDialog from './EmailDialog';\nimport { createNewEmail, createGoogleEmail, createOutlookEmail } from '../email-actions';\nimport PropTypes from 'prop-types';\nimport * as toast from '../../../shared/components/toast/Toast';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { OnCreateGoogleEmailError, OnCreateGoogleEmailEvent } from '../email-events';\n\nexport const ComposeEmailContext = React.createContext();\n\nexport const ComposeEmailProvider = ({ children }) => {\n const [isOpen, setIsOpen] = useState(false);\n const [dest, setDest] = useState(null);\n\n const onCompose = (dest = null) => {\n setIsOpen(true);\n setDest(dest);\n };\n\n const onSubmit = (form) => {\n createNewEmail(form);\n };\n\n const onSubmitWithGoogle = (form) => {\n createGoogleEmail(form);\n };\n\n const onSubmitWithOutlook = (form) => {\n createOutlookEmail(form);\n };\n\n const onClose = () => {\n setIsOpen(false);\n setDest(null);\n };\n\n useEventSubscription(OnCreateGoogleEmailEvent, () => {\n setIsOpen(false);\n setDest(null);\n\n toast.success('Success', 'Email sent successfully');\n });\n\n useEventSubscription(OnCreateGoogleEmailError, (e) => {\n toast.error(e.message);\n });\n\n return (\n \n {children}\n \n \n );\n};\n\nComposeEmailProvider.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport { fetchEmails } from '../email-actions';\nimport { OnFetchEmails, OnFetchEmailsError } from '../email-store';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\n\nconst initialState = {\n items: [],\n count: 0,\n loading: false,\n error: null,\n};\n\n/**\n * Email list hook\n *\n * @param {string} user - The user id\n * @param {string} agency - The agency id\n * @param {object} filters - The data to filter the results\n *\n * @returns {object} Returns an Object\n */\nexport function useEmailList(user, agency, filters = {}) {\n const [state, setState] = useState(initialState);\n const [page, setPage] = useState(1);\n\n const fetch = useCallback(() => {\n if (filters.folder) {\n setState((prevState) => ({\n ...prevState,\n loading: true,\n items: page === 1 ? [] : prevState.items,\n }));\n\n fetchEmails(user, agency, filters, page);\n }\n }, [user, agency, filters, page]);\n\n const next = useCallback(() => {\n setPage((prevPage) => prevPage + 1);\n }, []);\n\n const refresh = useCallback(() => {\n if (page === 1) {\n setState((prevState) => ({\n ...prevState,\n loading: true,\n items: [],\n }));\n\n fetchEmails(user, agency, filters, page);\n } else {\n setPage(1);\n }\n }, [user, agency, filters, page]);\n\n useSubscription(\n OnFetchEmails,\n ({ mailList }) => {\n setState((prevState) => ({\n ...prevState,\n items: page === 1 ? mailList.items : [...prevState.items, ...mailList.items],\n count: mailList.count,\n loading: false,\n error: null,\n }));\n },\n [page],\n );\n\n useSubscription(\n OnFetchEmailsError,\n (e) => {\n setState((prevState) => ({\n ...prevState,\n loading: false,\n error: e,\n }));\n },\n [],\n );\n\n useEffect(() => {\n setPage(1);\n }, [filters]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n return {\n ...state,\n next,\n refresh,\n };\n}\n","import React from 'react';\n\nexport const EmailProfileContext = React.createContext(null);\n","import React, { useEffect, useState, useContext, useCallback } from 'react';\nimport { Card, Icon, Row, Loader, Text, Paragraph, styled } from '@8base/boost';\nimport { useParams } from 'react-router';\nimport { fetchEmail } from '../email-actions';\nimport { OnFetchEmail, OnFetchEmailError } from '../email-store';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { Box } from '../../../shared/components/Box';\nimport { ComposeEmailContext } from './ComposeEmailProvider';\nimport { EmailProfileContext } from './EmailProfileContext';\n\nconst Body = styled(Card.Body)`\n height: 100%;\n`;\n\nexport const EmailDetails = () => {\n const { emailId } = useParams();\n const [loading, setLoading] = useState(true);\n const [query, setQuery] = useURLQuery();\n const [email, setEmail] = useState(null);\n const { onCompose } = useContext(ComposeEmailContext);\n const outbound = useContext(EmailProfileContext);\n\n useEffect(() => {\n setLoading(true);\n\n fetchEmail(emailId);\n }, [emailId]);\n\n const onReply = useCallback(() => {\n const cc = [...(email.to || '').split(','), ...(email.ccopy || '').split(',')]\n .filter((address) => address.trim() !== outbound.username)\n .join(',');\n\n onCompose({\n id: email.lead?.id,\n from: outbound.username,\n to: email.from,\n cc,\n subject: email.subject,\n isReply: true,\n });\n }, [email, outbound, onCompose]);\n\n useSubscription(\n OnFetchEmail,\n ({ mail }) => {\n setEmail(mail);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchEmailError,\n (e) => {\n onErrorMixinFC(e);\n\n setLoading(false);\n },\n [],\n );\n\n const onClose = () => setQuery('/email', query);\n\n const canReply = email?.type === 'INBOX';\n\n const users =\n email && !loading ? (\n \n \n \n \n From\n \n {email.from}\n \n \n \n \n \n To\n \n {email.to}\n \n \n \n \n \n CC\n \n {email.ccopy}\n \n \n \n ) : null;\n\n const content = loading ? (\n \n \n \n ) : (\n \n \n \n );\n\n return (\n \n \n \n \n \n {email?.subject}\n \n \n \n {email && canReply && (\n \n )}\n \n \n \n \n \n {users}\n {content}\n \n \n );\n};\n","import React, { useState, useEffect, useCallback, useContext, useRef } from 'react';\nimport { Switch, Route } from 'react-router-dom';\nimport { Icon, Dropdown, Menu, Row, Column, Button } from '@8base/boost';\nimport { ButtonIcon } from '../../../shared/components/ui/buttons/ButtonIcon';\nimport SearchInput from './SearchInput';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { Title } from '../../../shared/components/ui/text/Title';\nimport composeEmail from '../../../shared/assets/images/compose-email.svg';\nimport { IconUpdateGrey } from '../../../shared/components/ui/Icons';\nimport styled from '@emotion/styled';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport EmailList from './EmailList';\nimport { LIST_FILTER_OPTIONS } from '../email-model';\nimport { getSelectedListOptionLabel } from '../email-utils';\n// import Thread from './Thread';\n// import ThreadFallback from './ThreadFallback';\nimport { ComposeEmailContext } from './ComposeEmailProvider';\nimport { useEmailList } from '../hooks/useEmailList';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { EmailDetails } from './EmailDetails';\n\nconst { INBOX, SEND, ARCHIVE, TRASH } = LIST_FILTER_OPTIONS;\n\nconst MailListToolbarRow = styled(Row)`\n width: 100%;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 0px !important;\n`;\n\nconst StyledColumn = styled(Column)`\n margin-right: 0px !important;\n height: 100%;\n position: relative;\n`;\n\nconst StyledDivBorder = styled(Column)`\n border-bottom: 1px solid #d8d8d8;\n padding: 24px;\n`;\n\nconst Container = styled.div`\n height: ${({ top }) => (top ? `calc(100vh - ${top}px)` : 'auto')};\n`;\n\nconst StyledRow = styled(Row)`\n margin-top: 16px;\n width: 100%;\n`;\n\nconst InboxSection = styled.div`\n width: 385px;\n height: 100%;\n border-right: 1px solid #d8d8d8;\n overflow: auto;\n`;\n\nconst ThreadContainer = styled.div`\n width: 100%;\n height: 100%;\n padding: 24px;\n`;\n\nexport const ManualEmailsView = () => {\n const [user] = useUser();\n const agency = useAgency();\n const [query, setQuery] = useURLQuery();\n const [top, setTop] = useState(null);\n const { onCompose } = useContext(ComposeEmailContext);\n const container = useRef(null);\n const { items, loading, count, next, refresh, error } = useEmailList(user.id, agency.id, query);\n\n useEffect(() => {\n if (!query.folder) {\n setQuery('/email', {\n ...query,\n folder: INBOX,\n });\n }\n }, [query, setQuery]);\n\n useEffect(() => {\n const { top } = container.current.getBoundingClientRect();\n setTop(top);\n }, []);\n\n useEffect(() => {\n if (error) {\n onErrorMixinFC(error);\n }\n }, [error]);\n\n const onFolderChange = useCallback(\n (folder, callback) => {\n setQuery('/email', {\n ...query,\n folder,\n });\n\n if (callback) {\n callback();\n }\n },\n [query, setQuery],\n );\n\n const onSearch = useCallback(\n (search) => {\n setQuery('/email', {\n ...query,\n search: search ? search : undefined,\n });\n },\n [query, setQuery],\n );\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {getSelectedListOptionLabel(query.folder)}\n \n \n \n \n {({ toggleDropdown }) => (\n \n onFolderChange(INBOX, toggleDropdown)}>\n Inbox\n \n onFolderChange(SEND, toggleDropdown)}>\n Sent\n \n onFolderChange(ARCHIVE, toggleDropdown)}>\n Archived\n \n onFolderChange(TRASH, toggleDropdown)}>\n Trash\n \n \n )}\n \n \n \n \n onCompose()}\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","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnFetchGmailList, OnFetchGmailListError } from '../email-store';\nimport { fetchGoogleEmails } from '../email-actions';\n\nconst initialState = {\n items: [],\n count: 0,\n loading: true,\n error: null,\n next: null,\n};\n\n/**\n * Manages email fetching with the gmail api\n *\n * @param {string} agency - The agency id\n * @param {object} filters - Object with the data to filter\n *\n * @returns {object} The hook state\n */\nexport function useGmailList(agency, filters = {}) {\n const [state, setState] = useState(initialState);\n const after = useRef(null);\n\n const fetch = useCallback(() => {\n setState((prevState) => ({ ...prevState, loading: true }));\n\n fetchGoogleEmails(agency, 10, state.next, filters);\n }, [agency, state.next, filters]);\n\n const refresh = useCallback(() => {\n if (state.next) {\n setState((prevState) => ({\n ...prevState,\n items: [],\n count: 0,\n error: null,\n next: null,\n }));\n } else {\n setState((prevState) => ({\n ...prevState,\n items: [],\n count: 0,\n error: null,\n }));\n\n fetch();\n }\n }, [state.next, fetch]);\n\n const next = useCallback(() => {\n setState((prevState) => ({\n ...prevState,\n next: after.current,\n }));\n }, []);\n\n useSubscription(\n OnFetchGmailList,\n ({ googleEmailsList }) => {\n after.current = googleEmailsList.next;\n\n setState((prevState) => ({\n ...prevState,\n count: googleEmailsList.count,\n items:\n prevState.next === null\n ? googleEmailsList.items\n : [...prevState.items, ...googleEmailsList.items],\n loading: false,\n error: null,\n }));\n },\n [],\n );\n\n useSubscription(\n OnFetchGmailListError,\n (e) => {\n setState((prevState) => ({\n ...prevState,\n loading: false,\n error: e,\n }));\n },\n [],\n );\n\n useEffect(() => {\n after.current = null;\n\n setState(initialState);\n }, [filters]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n return {\n ...state,\n refresh,\n next,\n hasMore: after.current !== null,\n };\n}\n","import React, { useCallback, useMemo } from 'react';\nimport { Grid, Avatar, Text, Column, Paragraph } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\n\nexport const GmailListItem = ({ email }) => {\n const [query, setQuery] = useURLQuery();\n\n const onClick = useCallback(() => {\n setQuery(`/email/${email.id}`, query);\n }, [query, email, setQuery]);\n\n const from = useMemo(\n () => email.payload.headers.find((header) => header.name.toLowerCase() === 'from'),\n [email],\n );\n\n const subject = useMemo(\n () => email.payload.headers.find((header) => header.name.toLowerCase() === 'subject'),\n [email],\n );\n\n const [firstName, lastName] = from.value.split(' ');\n\n return (\n \n \n \n \n \n \n \n \n {from.value}\n \n \n \n {moment(parseInt(email.internalDate)).format('MM-DD-YYYY, hh:mm a')}\n {subject.value}\n \n \n );\n};\n\nGmailListItem.propTypes = {\n email: PropTypes.shape({\n id: PropTypes.string.isRequired,\n payload: PropTypes.shape({\n headers: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n ),\n }).isRequired,\n internalDate: PropTypes.string.isRequired,\n }).isRequired,\n};\n","import React, { useMemo } from 'react';\nimport { Box } from '../../../shared/components/Box';\nimport { GmailListItem } from './GmailListItem';\nimport { Row, Loader, Link } from '@8base/boost';\nimport PropTypes from 'prop-types';\n\nexport const GmailList = (props) => {\n const emails = useMemo(\n () => props.items.map((email) => ),\n [props.items],\n );\n\n const loading = props.loading ? (\n \n \n \n \n \n ) : null;\n\n const next =\n !props.loading && props.hasMore ? (\n \n \n \n Load more\n \n \n \n ) : null;\n\n return (\n \n {emails}\n {loading}\n {next}\n \n );\n};\n\nGmailList.propTypes = {\n items: PropTypes.arrayOf({\n id: PropTypes.string.isRequired,\n payload: PropTypes.shape({\n headers: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n ),\n }).isRequired,\n internalDate: PropTypes.string.isRequired,\n }).isRequired,\n loading: PropTypes.bool.isRequired,\n hasMore: PropTypes.bool.isRequired,\n onMore: PropTypes.bool.isRequired,\n};\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { GoogleButton } from '../../../shared/components/GoogleButton';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchUserSignature, replyGoogleEmail } from '../email-actions';\nimport { OnReplyGoogleEmail, OnReplyGoogleEmailError } from '../email-store';\nimport { Box } from '../../../shared/components/Box';\nimport { Editor } from '@tinymce/tinymce-react';\nimport { Dialog, Row, Icon, useModal, Loader, Card, Text } from '@8base/boost';\nimport * as toast from '../../../shared/components/toast/Toast';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { OnUserSignatureEvent } from '../email-events';\n\nexport const modalId = 'gmail-reply-dialog';\n\nexport const GmailReplyDialog = () => {\n const { isOpen, args, closeModal } = useModal(modalId);\n const [loading, setLoading] = useState(true);\n const [submitting, setSubmitting] = useState(false);\n const [signature, setSignature] = useState('');\n const [, setQuery] = useURLQuery();\n const editorRef = useRef(null);\n const agency = useAgency();\n\n useEffect(() => {\n if (isOpen) {\n setLoading(true);\n\n fetchUserSignature();\n } else {\n setSignature('');\n }\n }, [isOpen]);\n\n useEventSubscription(OnUserSignatureEvent, ({ user }) => {\n if (user && user.isEnableSignature) {\n setSignature(user.signature || '');\n }\n\n setLoading(false);\n });\n\n useEventSubscription(\n OnReplyGoogleEmail,\n ({ googleEmailCreate }) => {\n toast.success('Success', 'Email sent successfuly');\n\n setQuery(`/email/${googleEmailCreate.id}`, {\n type: 'SENT',\n });\n\n closeModal(modalId);\n },\n [setQuery, closeModal],\n );\n\n useEventSubscription(\n OnReplyGoogleEmailError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n const close = useCallback(() => {\n if (!submitting) {\n closeModal(modalId);\n }\n }, [submitting, closeModal]);\n\n const onSubmit = useCallback(() => {\n if (editorRef.current) {\n setSubmitting(true);\n\n replyGoogleEmail({\n to: args.to,\n subject: args.subject,\n content: editorRef.current.getContent(),\n agency: agency.id,\n threadId: args.threadId,\n });\n }\n }, [args, agency]);\n\n const content = loading ? (\n \n \n \n \n \n ) : (\n (editorRef.current = editor)}\n apiKey={process.env.REACT_APP_EDITOR_API_KEY}\n initialValue={signature}\n init={{\n height: 300,\n width: '100%',\n menubar: false,\n plugins: [\n 'advlist autolink lists link image charmap print preview anchor',\n 'searchreplace visualblocks code fullscreen',\n 'insertdatetime media table paste code',\n ],\n toolbar:\n 'fontselect fontsizeselect capitalize | bold italic underline forecolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | code',\n }}\n />\n );\n\n return (\n \n \n \n {`Re: ${args.subject}`}\n \n \n \n {content}\n \n \n \n \n \n Send\n \n \n \n \n \n \n );\n};\n","import React, { useCallback, useEffect, useState, useMemo } from 'react';\nimport { useParams } from 'react-router';\nimport { Card, Row, Loader, Icon, useModal, styled } from '@8base/boost';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { fetchGoogleEmail } from '../email-actions';\nimport { OnFetchGmailItem, OnFetchGmailItemError } from '../email-store';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { GmailReplyDialog, modalId } from './GmailReplyDialog';\n\nconst Body = styled(Card.Body)`\n height: 100%;\n`;\n\nexport const GmailDetails = () => {\n const { emailId } = useParams();\n const agency = useAgency();\n const [query, setQuery] = useURLQuery();\n const [email, setEmail] = useState(null);\n const [loading, setLoading] = useState(true);\n const { openModal } = useModal(modalId);\n\n useEffect(() => {\n setLoading(true);\n setEmail(null);\n fetchGoogleEmail(emailId, agency.id);\n }, [emailId, agency]);\n\n useSubscription(\n OnFetchGmailItem,\n ({ googleEmail }) => {\n setEmail(googleEmail);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchGmailItemError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n const onClose = useCallback(() => {\n setQuery('/email', query);\n }, [query, setQuery]);\n\n const onReply = useCallback(() => {\n if (!loading) {\n const subject = email.payload.headers.find(\n (header) => header.name.toLowerCase() === 'subject',\n );\n\n const to = email.payload.headers.find((header) => header.name.toLowerCase() === 'from');\n\n openModal(modalId, {\n subject: subject.value,\n to: to.value,\n threadId: email.threadId,\n });\n }\n }, [loading, email, openModal]);\n\n const canReply = useMemo(() => {\n if (!email) {\n return false;\n }\n\n return !email.labelIds.includes('SENT');\n }, [email]);\n\n const content = loading ? (\n \n \n \n ) : (\n \n \n \n );\n\n return (\n \n \n \n {canReply && (\n \n )}\n \n \n \n {content}\n \n \n );\n};\n","import React, { useCallback, useEffect, useContext } from 'react';\nimport { Switch, Route } from 'react-router-dom';\nimport { Grid, Dropdown, Button, Menu, Icon, Row, Column, styled } from '@8base/boost';\nimport { useGmailList } from '../hooks/useGmailList';\nimport { ButtonIcon } from '../../../shared/components/ui/buttons/ButtonIcon';\nimport { Title } from '../../../shared/components/ui/text/Title';\nimport { GmailList } from './GmailList';\nimport { getSelectedGmailOptionLabel } from '../email-utils';\nimport { Box } from '../../../shared/components/Box';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { IconUpdateGrey } from '../../../shared/components/ui/Icons';\nimport google from '../../../shared/assets/images/google.svg';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport SearchInput from './SearchInput';\nimport { GmailDetails } from './GmailDetails';\nimport { ComposeEmailContext } from './ComposeEmailProvider';\n\nconst Layout = styled(Grid.Layout)`\n height: 100%;\n max-height: 100%;\n`;\n\nexport const GmailEmailsView = () => {\n const agency = useAgency();\n const [query, setQuery] = useURLQuery();\n const { items, loading, hasMore, next, refresh } = useGmailList(agency.id, query);\n const { onCompose } = useContext(ComposeEmailContext);\n\n useEffect(() => {\n if (!query.type) {\n setQuery('/email', {\n ...query,\n type: 'INBOX',\n });\n }\n }, [query, setQuery]);\n\n const handleType = useCallback(\n (type, callback) => {\n setQuery('/email', {\n ...query,\n type,\n });\n\n if (callback) {\n callback();\n }\n },\n [query, setQuery],\n );\n\n const handleSearch = useCallback(\n (value) => {\n setQuery('/email', {\n ...query,\n q: value || undefined,\n });\n },\n [query, setQuery],\n );\n\n return (\n \n \n \n \n \n \n \n \n \n {getSelectedGmailOptionLabel(query.type)}\n \n \n \n \n {({ toggleDropdown }) => (\n \n handleType('INBOX', toggleDropdown)}>\n Inbox\n \n handleType('SENT', toggleDropdown)}>\n Sent\n \n handleType('STARRED', toggleDropdown)}>\n Starred\n \n handleType('TRASH', toggleDropdown)}>\n Trash\n \n \n )}\n \n \n onCompose()}\n disabled={loading}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnFetchOutlookEmails, OnFetchOutlookEmailsError } from '../email-store';\nimport { fetchOutlookEmails } from '../email-actions';\n\nconst initialState = {\n items: [],\n count: 0,\n loading: true,\n error: null,\n next: null,\n};\n\n/**\n * Manages email fetching with the outlook api\n *\n * @param {string} agency - The agency id\n * @param {object} filters - Object with the data to filter\n *\n * @returns {object} The hook state\n */\nexport function useOutlookList(agency, filters = {}) {\n const [state, setState] = useState(initialState);\n const after = useRef(null);\n\n const fetch = useCallback(() => {\n if (filters.folder) {\n setState((prevState) => ({ ...prevState, loading: true }));\n\n fetchOutlookEmails(agency, state.next, filters);\n }\n }, [agency, state.next, filters]);\n\n const refresh = useCallback(() => {\n if (state.next) {\n setState((prevState) => ({\n ...prevState,\n items: [],\n count: 0,\n error: null,\n next: null,\n }));\n } else {\n setState((prevState) => ({\n ...prevState,\n items: [],\n count: 0,\n error: null,\n }));\n\n fetch();\n }\n }, [state.next, fetch]);\n\n const next = useCallback(() => {\n setState((prevState) => ({\n ...prevState,\n next: after.current,\n }));\n }, []);\n\n useSubscription(\n OnFetchOutlookEmails,\n ({ outlookEmailsList }) => {\n after.current = outlookEmailsList.next;\n\n setState((prevState) => ({\n ...prevState,\n count: outlookEmailsList.count,\n items:\n prevState.next === null\n ? outlookEmailsList.items\n : [...prevState.items, ...outlookEmailsList.items],\n loading: false,\n error: null,\n }));\n },\n [],\n );\n\n useSubscription(\n OnFetchOutlookEmailsError,\n (e) => {\n setState((prevState) => ({\n ...prevState,\n loading: false,\n error: e,\n }));\n },\n [],\n );\n\n useEffect(() => {\n after.current = null;\n\n setState(initialState);\n }, [filters]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n return {\n ...state,\n refresh,\n next,\n hasMore: after.current !== null,\n };\n}\n","import React, { useCallback } from 'react';\nimport { Grid, Avatar, Text, Column, Paragraph } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\n\nexport const OutlookListItem = ({ email }) => {\n const [query, setQuery] = useURLQuery();\n\n const onClick = useCallback(() => {\n setQuery(`/email/${email.id}`, query);\n }, [query, email, setQuery]);\n\n const [firstName, lastName] = email.from.name.split(' ');\n\n return (\n \n \n \n \n \n \n \n \n {email.from.address}\n \n \n \n {moment(email.createdAt).format('MM-DD-YYYY, hh:mm a')}\n {email.subject}\n \n \n );\n};\n\nOutlookListItem.propTypes = {\n email: PropTypes.shape({\n id: PropTypes.string.isRequired,\n subject: PropTypes.string.isRequired,\n from: PropTypes.shape({\n name: PropTypes.string.isRequired,\n address: PropTypes.string.isRequired,\n }).isRequired,\n createdAt: PropTypes.string.isRequired,\n }).isRequired,\n};\n","import React, { useMemo } from 'react';\nimport { Box } from '../../../shared/components/Box';\nimport { OutlookListItem } from './OutlookListItem';\nimport { Row, Loader, Link } from '@8base/boost';\nimport PropTypes from 'prop-types';\n\nexport const OutlookList = (props) => {\n const emails = useMemo(\n () => props.items.map((email) => ),\n [props.items],\n );\n\n const loading = props.loading ? (\n \n \n \n \n \n ) : null;\n\n const next =\n !props.loading && props.hasMore ? (\n \n \n \n Load more\n \n \n \n ) : null;\n\n return (\n \n {emails}\n {loading}\n {next}\n \n );\n};\n\nOutlookList.propTypes = {\n items: PropTypes.arrayOf({\n id: PropTypes.string.isRequired,\n subject: PropTypes.string.isRequired,\n from: PropTypes.shape({\n name: PropTypes.string.isRequired,\n address: PropTypes.string.isRequired,\n }).isRequired,\n createdAt: PropTypes.string.isRequired,\n }).isRequired,\n loading: PropTypes.bool.isRequired,\n hasMore: PropTypes.bool.isRequired,\n onMore: PropTypes.bool.isRequired,\n};\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { MicrosoftButton } from '../../../shared/components/MicrosoftButton';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchUserSignature, replyOutlookEmail } from '../email-actions';\nimport { OnReplyOutlookEmail, OnReplyOutlookEmailError } from '../email-store';\nimport { Box } from '../../../shared/components/Box';\nimport { Editor } from '@tinymce/tinymce-react';\nimport { Dialog, Row, Icon, useModal, Loader, Card, Text } from '@8base/boost';\nimport * as toast from '../../../shared/components/toast/Toast';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { OnUserSignatureEvent } from '../email-events';\n\nexport const modalId = 'outlook-reply-dialog';\n\nexport const OutlookReplyDialog = () => {\n const { isOpen, args, closeModal } = useModal(modalId);\n const [loading, setLoading] = useState(true);\n const [submitting, setSubmitting] = useState(false);\n const [signature, setSignature] = useState('');\n const [, setQuery] = useURLQuery();\n const editorRef = useRef(null);\n const agency = useAgency();\n\n useEffect(() => {\n if (isOpen) {\n setLoading(true);\n\n fetchUserSignature();\n } else {\n setSignature('');\n }\n }, [isOpen]);\n\n useEventSubscription(OnUserSignatureEvent, ({ user }) => {\n if (user && user.isEnableSignature) {\n setSignature(user.signature || '');\n }\n\n setLoading(false);\n });\n\n useEventSubscription(\n OnReplyOutlookEmail,\n () => {\n toast.success('Success', 'Email sent successfuly');\n\n setLoading(false);\n\n setQuery('/email', {\n folder: 'sentitems',\n });\n\n closeModal(modalId);\n },\n [setQuery, closeModal],\n );\n\n useEventSubscription(\n OnReplyOutlookEmailError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n const close = useCallback(() => {\n if (!submitting) {\n closeModal(modalId);\n }\n }, [submitting, closeModal]);\n\n const onSubmit = useCallback(() => {\n if (editorRef.current) {\n setSubmitting(true);\n\n replyOutlookEmail({\n agency: agency.id,\n body: editorRef.current.getContent(),\n replyId: args.emailId,\n });\n }\n }, [args, agency]);\n\n const content = loading ? (\n \n \n \n \n \n ) : (\n (editorRef.current = editor)}\n apiKey={process.env.REACT_APP_EDITOR_API_KEY}\n initialValue={signature}\n init={{\n height: 300,\n width: '100%',\n menubar: false,\n plugins: [\n 'advlist autolink lists link image charmap print preview anchor',\n 'searchreplace visualblocks code fullscreen',\n 'insertdatetime media table paste code',\n ],\n toolbar:\n 'fontselect fontsizeselect capitalize | bold italic underline forecolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | code',\n }}\n />\n );\n\n return (\n \n \n \n {`Re: ${args.subject}`}\n \n \n \n {content}\n \n \n \n \n \n Send\n \n \n \n \n \n \n );\n};\n","import React, { useCallback, useEffect, useState, useMemo, useContext } from 'react';\nimport { useParams } from 'react-router';\nimport { Card, Row, Loader, Icon, useModal, Text, styled } from '@8base/boost';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { fetchOutlookEmail } from '../email-actions';\nimport { OnFetchOutlookEmailError, OnFetchOutlookEmail } from '../email-store';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { OutlookReplyDialog, modalId } from './OutlookReplyDialog';\nimport { EmailProfileContext } from './EmailProfileContext';\nimport { Box } from '../../../shared/components/Box';\n\nconst Body = styled(Card.Body)`\n height: 100%;\n`;\n\nexport const OutlookDetails = () => {\n const { emailId } = useParams();\n const agency = useAgency();\n const [query, setQuery] = useURLQuery();\n const [email, setEmail] = useState(null);\n const [loading, setLoading] = useState(true);\n const outlookProfile = useContext(EmailProfileContext);\n const { openModal } = useModal(modalId);\n\n useEffect(() => {\n setLoading(true);\n setEmail(null);\n fetchOutlookEmail(emailId, agency.id);\n }, [emailId, agency]);\n\n useSubscription(\n OnFetchOutlookEmail,\n ({ outlookEmail }) => {\n setEmail(outlookEmail);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchOutlookEmailError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n const onClose = useCallback(() => {\n setQuery('/email', query);\n }, [query, setQuery]);\n\n const onReply = useCallback(() => {\n if (!loading) {\n openModal(modalId, {\n subject: email.subject,\n emailId: email.id,\n });\n }\n }, [loading, email, openModal]);\n\n const canReply = email?.from?.address !== outlookProfile?.email;\n\n const to = useMemo(() => {\n if (!email) {\n return '';\n }\n\n return email.to.map((address) => address.address).join(', ');\n }, [email]);\n\n const users = email ? (\n \n \n From: {email.from.address}\n \n \n To: {to}\n \n \n ) : null;\n\n const content = loading ? (\n \n \n \n ) : (\n \n \n \n );\n\n return (\n \n \n \n {email && canReply && (\n \n )}\n \n \n \n \n {users}\n {content}\n \n \n \n );\n};\n","import React, { useCallback, useEffect, useContext } from 'react';\nimport { Switch, Route } from 'react-router-dom';\nimport { Grid, Dropdown, Button, Menu, Icon, Row, Column, styled } from '@8base/boost';\nimport { useOutlookList } from '../hooks/useOutlookList';\nimport { ButtonIcon } from '../../../shared/components/ui/buttons/ButtonIcon';\nimport { Title } from '../../../shared/components/ui/text/Title';\nimport { OutlookList } from './OutlookList';\nimport { getSelectedOutlookOptionLabel } from '../email-utils';\nimport { Box } from '../../../shared/components/Box';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { IconUpdateGrey } from '../../../shared/components/ui/Icons';\nimport microsoft from '../../../shared/assets/images/microsoft.svg';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport SearchInput from './SearchInput';\nimport { OutlookDetails } from './OutlookDetails';\nimport { ComposeEmailContext } from './ComposeEmailProvider';\n\nconst Layout = styled(Grid.Layout)`\n height: 100%;\n max-height: 100%;\n`;\n\nexport const OutlookEmailsView = () => {\n const agency = useAgency();\n const [query, setQuery] = useURLQuery();\n const { items, loading, hasMore, next, refresh } = useOutlookList(agency.id, query);\n const { onCompose } = useContext(ComposeEmailContext);\n\n useEffect(() => {\n if (!query.folder) {\n setQuery('/email', {\n ...query,\n folder: 'inbox',\n });\n }\n }, [query, setQuery]);\n\n const handlFolder = useCallback(\n (folder, callback) => {\n setQuery('/email', {\n ...query,\n folder,\n });\n\n if (callback) {\n callback();\n }\n },\n [query, setQuery],\n );\n\n const handleSearch = useCallback(\n (value) => {\n setQuery('/email', {\n ...query,\n search: value || undefined,\n });\n },\n [query, setQuery],\n );\n\n return (\n \n \n \n \n \n \n \n \n \n {getSelectedOutlookOptionLabel(query.folder)}\n \n \n \n \n {({ toggleDropdown }) => (\n \n handlFolder('inbox', toggleDropdown)}>\n Inbox\n \n handlFolder('sentitems', toggleDropdown)}>\n Sent\n \n handlFolder('deleteditems', toggleDropdown)}>\n Trash\n \n \n )}\n \n \n onCompose()}\n disabled={loading}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { ManualEmailsView } from './components/ManualEmailsView';\nimport { GmailEmailsView } from './components/GmailEmailsView';\nimport { Row, Loader } from '@8base/boost';\nimport { useAgency } from '../../shared/hooks/useAgency';\nimport { Box } from '../../shared/components/Box';\nimport { useUser } from '../../shared/hooks/useUser';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchEmailConfiguration } from './email-actions';\nimport { OnFetchEmailConfig, OnFetchEmailConfigError } from './email-store';\nimport { onErrorMixinFC } from '../../shared/mixins';\nimport { OutlookEmailsView } from './components/OutlookEmailsView';\nimport { EmailProfileContext } from './components/EmailProfileContext';\n\n/**\n * Email view\n *\n * @returns {React.Component} The component to render\n */\nfunction Email() {\n const agency = useAgency();\n const [user] = useUser();\n const [loading, setLoading] = useState(true);\n const [mode, setMode] = useState('manual');\n const [profile, setProfile] = useState(null);\n\n useEffect(() => {\n setLoading(true);\n\n fetchEmailConfiguration(user.id, agency.id);\n }, [agency.id, user.id]);\n\n useSubscription(\n OnFetchEmailConfig,\n ({ gmail, outlook, outbound }) => {\n if (gmail && gmail.active) {\n setProfile(gmail.profile);\n setMode('gmail');\n }\n\n if (outlook && outlook.active) {\n setProfile(outlook.profile);\n setMode('outlook');\n }\n\n if (outbound && outbound.active) {\n setProfile(outbound);\n setMode('manual');\n }\n\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchEmailConfigError,\n (e) => {\n onErrorMixinFC(e);\n\n setLoading(false);\n },\n [],\n );\n\n if (loading) {\n return (\n \n \n \n \n \n );\n }\n\n if (mode === 'gmail') {\n return (\n \n \n \n );\n }\n\n if (mode === 'outlook') {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n );\n}\n\nexport default Email;\n","import { useState, useCallback, useEffect } from 'react';\nimport { fetchLeadsLight, createFilter } from '../leads-actions';\nimport { useSubscription } from '@apollo/client/react/hooks';\nimport { LEADS_LIST_LIGHT_SUBSCRIPTION } from '../leads-queries';\nimport { SUBSCRIPTIONS_OPERATIONS } from '../../../shared/constants/8base';\n\nconst initialState = {\n items: [],\n count: 0,\n loading: true,\n error: null,\n};\n\n/**\n * Hook that fetches a list of leads in an agency\n *\n * @param {string} agency - The agency id\n * @param {string} sort - The order of the results\n * @param {string} filters - Data to create a filter from\n * @param {string} filters.firstName - To search leads by their first name\n * @param {string} filters.middleName - To search leads by their middle name\n * @param {string} filters.lastName - To searcg leads by their last name\n * @param {string} filters.createdAfter - Filter for leads created after the date (YYYY-MM-DD hh:mm:ss)\n * @param {string} filters.createdBefore - Filter for leads created before the date (YYYY-MM-DD hh:mm:ss)\n * @param {string} filters.leadType - Type of the lead (Auto, Comercial Auto, Employee, etc)\n * @param {string} filters.campaign - The campaign id\n * @param {string} filters.leadVendor - Lead vendor id\n * @param {string} filters.assignedTo - The id of the user assigned to the lead (, \"None\" or Empty)\n * @param {string} filters.hasNotes - If the lead should have notes or not\n * @param {string} filters.phoneNumber - A phone number to filter leads from\n *\n * @returns {object} The list state\n */\nexport function useAgencyLeads(agency, sort, filters = {}) {\n const [page, setPage] = useState(1);\n const [state, setState] = useState(initialState);\n\n const fetch = useCallback(async () => {\n setState((prevState) => ({ ...prevState, loading: true }));\n\n const data = await fetchLeadsLight(\n page,\n {\n agency,\n sort,\n ...filters,\n },\n filters.search || '',\n );\n\n if (data && data.leadsList) {\n setState((prevState) => ({\n ...prevState,\n items: data.leadsList.items,\n count: data.leadsList.count,\n loading: false,\n error: null,\n }));\n } else {\n setState((prevState) => ({\n ...prevState,\n items: [],\n count: 0,\n loading: false,\n error: new Error('Something happened while fetching the leads'),\n }));\n }\n }, [agency, sort, page, filters]);\n\n useEffect(() => {\n setPage(1);\n }, [filters]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n const { data } = useSubscription(LEADS_LIST_LIGHT_SUBSCRIPTION, {\n variables: { filter: createFilter(filters, filters.search) },\n });\n\n useEffect(() => {\n if (!data) return;\n\n const { mutation, node } = data.Lead;\n\n if (mutation === SUBSCRIPTIONS_OPERATIONS.UPDATE) {\n setState((prevState) => {\n if (prevState.items.length === 0) {\n return prevState;\n }\n\n return {\n ...prevState,\n items: prevState.items.map((item) => (item.id === node.id ? node : item)),\n };\n });\n } else {\n fetch();\n }\n }, [data, fetch]);\n\n return {\n ...state,\n refresh: fetch,\n page,\n setPage,\n };\n}\n","import React, { useState } from 'react';\nimport { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { compose } from 'recompose';\nimport { withAuth } from '@8base/react-sdk';\nimport { withApollo } from '@apollo/client/react/hoc';\nimport MainLoader from 'shared/components/ui/MainLoader';\nimport { useHistory } from 'react-router-dom';\n\n//Component to monitor statuses of registration for messaging and phone services\nconst Welcome = ({ checkRegistration, ...restProps }) => {\n const history = useHistory();\n const [registration, setRegistration] = useState(undefined);\n\n useEffect(() => {\n checkRegistration().then((res) => {\n setRegistration(res);\n });\n }, [checkRegistration]);\n useEffect(() => {\n if (registration === true) {\n history.push('/dashboard');\n }\n if (registration === false && restProps.location.pathname !== '/waiting-phone-registration') {\n history.push('/waiting-phone-registration');\n }\n }, [history, registration, restProps.location.pathname]);\n return ;\n};\n\nexport default compose(withApollo, withAuth)(Welcome);\n","export const ENTITIES = {\n LEAD: 'LEAD',\n NOTE: 'NOTE',\n TASK: 'TASK',\n EMAIL: 'EMAIL',\n CALL: 'CALL',\n SMS: 'SMS',\n STAGE: 'STAGE',\n};\n\nexport const OPERATIONS = {\n CREATE: 'CREATE',\n UPDATE: 'Update',\n};\n\nexport const ENTITY_SELECTOR_OPTIONS = [\n { label: 'No Filter', value: '' },\n { label: 'Lead', value: 'LEAD' },\n { label: 'Note', value: 'NOTE' },\n { label: 'Task', value: 'TASK' },\n { label: 'Email', value: 'EMAIL' },\n { label: 'Call', value: 'CALL' },\n { label: 'Sms', value: 'SMS' },\n { label: 'Stage', value: 'STAGE' },\n];\n\nexport const RESULTS_PER_PAGE = 15;\n","import { Column, Grid } from '@8base/boost';\nimport styled from 'styled-components';\n\nexport const IconContainer = styled.div`\n width: ${(props) => (props.horizontal ? '12%' : '100%')};\n ${(props) => !props.horizontal && 'text-align: center;'}\n`;\n\nexport const DateContainer = styled.div`\n width: ${(props) => (props.horizontal ? '25%' : '100%')};\n`;\n\nexport const InfoContainer = styled.div`\n width: ${(props) => (props.horizontal ? '58%' : '100%')};\n`;\n\nexport const MarginLessCol = styled(Column)`\n & > *:not(:last-child) {\n margin-bottom: 0px !important;\n }\n`;\n\nexport const Layout = styled(Grid.Layout)`\n ${(props) => props.padding && ' padding: 0px 14px;'}\n ${(props) =>\n props.border &&\n `\n padding-bottom: 14px;\n border-bottom: 1px solid #e8eff5;\n `}\n`;\nLayout.defaultProps = {\n padding: true,\n};\nexport const Box = styled(Grid.Box)`\n justify-content: ${(props) => props.justifyContent};\n align-items: ${(props) => props.alignItems};\n`;\n\nexport const Content = styled.div`\n border-bottom: 1px solid #e8eff5;\n transition: opacity 1s;\n overflow: hidden;\n width: 100%;\n ${({ state, isData }) => {\n switch (state) {\n case 'entering':\n case 'entered':\n return `\n ${isData &&\n `\n padding: 14px; \n `}\n height: auto;\n opacity: 1;\n `;\n case 'exiting':\n case 'exited':\n return `\n padding: 0px;\n height: 0px !important;\n opacity: 0; \n `;\n default:\n return ``;\n }\n }}\n`;\n","import styled from 'styled-components';\nimport { Grid } from '@8base/boost';\n\nexport const ColumnInfo = styled(Grid.Box)`\n padding: 12px 0px 12px 24px;\n`;\n\nexport const ColumnName = styled.span`\n font-family: 'Poppins';\n font-size: 13px;\n line-height: 20px;\n font-weight: 600;\n`;\n\nexport const ColumnValue = styled.span`\n font-family: 'Poppins';\n font-size: 13px;\n line-height: 20px;\n`;\n\nexport const RowHeader = styled.div`\n height: 36px;\n color: #9b9b9b;\n font-size: 12px;\n font-weight: bold;\n line-height: 18px;\n font-family: 'Poppins';\n letter-spacing: 0.5px;\n background-color: #fcfcfc;\n border-top: 1px solid #d3d3d3;\n border-bottom: 1px solid #d3d3d3;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n padding-left: 24px;\n`;\n","import { ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport styled from 'styled-components';\n\nexport const Name = styled(ColumnName)`\n ${(props) =>\n props.clickable &&\n `\n color: #3db4aa;\n cursor: pointer;\n &:hover {\n text-decoration: underline;\n }\n `}\n`;\n\nexport const Value = styled(ColumnValue)`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n`;\n","import React from 'react';\nimport { Row, Avatar, Grid, Column } from '@8base/boost';\nimport moment from 'moment';\nimport { MarginLessCol, Layout, Content } from './containers';\nimport { Name, Value } from './interfaces';\nimport { Transition } from 'react-transition-group';\nimport ReactJsonView from 'react-json-view';\nimport { OPERATIONS } from '../leads-history-model';\nimport PropTypes from 'prop-types';\n\n/**\n * Item for a history event on the lead, either create or update\n *\n * @param {object} props - The props object of the component\n * @param {object} props.event - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.difference - JSON changes details\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {object} props.event.lead - The lead associated with the event\n * @param {string} props.event.lead.firstName - First name of the lead\n * @param {string} props.event.lead.lastName - Last name of the lead\n * @param {object} props.event.createdBy - The user that initiated the event\n * @param {string} props.event.createdBy.firstName - First name of the user who initiated the event\n * @param {boolean} props.isFullHistory - Renders the object in a horizontal orientation if true\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n * @param {Function} props.onDetailsClick - Function to handle the update label click\n *\n * @returns {React.FC} The component to render\n */\nfunction LeadHistoryItem({ event, onDetailsClick, isFullHistory, horizontal }) {\n const now = moment().startOf('day');\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n const created = moment(event.createdAt);\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n\n const columns = '35px 100px minmax(200px, 1fr)';\n\n return (\n \n \n {horizontal && (\n \n \n \n )}\n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('MM/DD/YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {horizontal ? (\n <>\n {event.operation === OPERATIONS.CREATE ? (\n Created By\n ) : (\n onDetailsClick(event.difference)}>\n Updated By\n \n )}\n {event.createdBy && (\n \n {event.createdBy.firstName} {event.createdBy.lastName}\n \n )}\n >\n ) : (\n {event.operation === OPERATIONS.CREATE ? 'Created' : 'Updated'}\n )}\n \n \n \n \n {(state) => (\n \n {event.operation === OPERATIONS.UPDATE && (\n \n )}\n \n )}\n \n \n );\n}\n\nLeadHistoryItem.propTypes = {\n event: PropTypes.shape({\n operation: PropTypes.string.isRequired,\n difference: PropTypes.string,\n createdAt: PropTypes.string.isRequired,\n lead: PropTypes.shape({\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }).isRequired,\n createdBy: PropTypes.shape({\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n horizontal: PropTypes.bool,\n isFullHistory: PropTypes.bool,\n onDetailsClick: PropTypes.func.isRequired,\n};\n\nLeadHistoryItem.defaultProps = {\n horizontal: true,\n isFullHistory: false,\n};\n\nexport default LeadHistoryItem;\n","import React from 'react';\nimport moment from 'moment';\nimport { Row, Icon, Grid, Column } from '@8base/boost';\nimport { MarginLessCol, Content, Layout } from './containers';\nimport { Transition } from 'react-transition-group';\nimport FormValues from '../../../../shared/components/forms/FormValues';\nimport { Name, Value } from './interfaces';\nimport PropTypes from 'prop-types';\n\nconst rows = [\n [\n {\n key: 'text',\n type: 'text',\n },\n ],\n];\n\nconst columns = '35px 100px minmax(200px, 1fr)';\n\n/**\n * Item for a history event on the lead, either create or update\n *\n * @param {object} props - The props object of the component\n * @param {object} props.event - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.difference - JSON changes details\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {object} props.event.note - The note object related with the event\n * @param {string} props.event.note.title - The title of the note\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n * @param {boolean} props.isFullHistory - If true, renders all component information\n * @param {Function} props.onNoteClick - Function to pass more information about the note\n * @param {Function} props.onDetailsClick - Function to pass more information on the difference when updated\n *\n * @returns {React.FC} The component to render\n */\nfunction NoteHistoryItem({ event, horizontal, isFullHistory, onNoteClick, onDetailsClick }) {\n const now = moment().startOf('day');\n const created = moment(event.createdAt);\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n\n const data = {\n text: event.note.text,\n };\n\n const handleInfoClick = () => {\n if (horizontal) {\n onNoteClick({\n title: event.note.title,\n data,\n rows,\n });\n }\n };\n\n return (\n \n \n \n \n \n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('MM/DD/YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {horizontal ? (\n <>\n {event.operation === 'CREATE' ? (\n \n New note created\n \n ) : (\n onDetailsClick(event.difference)}>\n Updated Note\n \n )}\n {event.note.title}\n >\n ) : (\n {event.operation === 'CREATE' ? 'Created' : 'Updated'}\n )}\n \n \n \n \n {(state) => (\n \n \n \n )}\n \n \n );\n}\n\nNoteHistoryItem.propTypes = {\n event: PropTypes.shape({\n operation: PropTypes.string.isRequired,\n difference: PropTypes.string,\n createdAt: PropTypes.string.isRequired,\n note: PropTypes.shape({\n title: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n horizontal: PropTypes.bool,\n isFullHistory: PropTypes.bool,\n onNoteClick: PropTypes.func,\n onDetailsClick: PropTypes.func,\n};\n\nNoteHistoryItem.defaultProps = {\n horizontal: true,\n isFullHistory: false,\n onNoteClick: () => {},\n onDetailsClick: () => {},\n};\n\nexport default NoteHistoryItem;\n","import React from 'react';\nimport { Row, Grid, Column } from '@8base/boost';\nimport { IconTasksGreen } from '../../../../shared/components/ui/Icons';\nimport { ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport { MarginLessCol, Layout, Content } from './containers';\nimport FormValues from '../../../../shared/components/forms/FormValues';\nimport { Transition } from 'react-transition-group';\nimport { Name, Value } from './interfaces';\nimport moment from 'moment';\nimport PropTypes from 'prop-types';\n\nconst rows = [\n [\n {\n key: 'description',\n label: 'Description',\n type: 'text',\n },\n ],\n [\n {\n key: 'date',\n label: 'Date',\n type: 'text',\n },\n {\n key: 'priority',\n label: 'Priority',\n type: 'text',\n },\n ],\n [\n {\n key: 'status',\n label: 'Status',\n type: 'text',\n },\n {\n key: 'type',\n label: 'Type',\n type: 'text',\n },\n ],\n];\n\nconst columns = '35px 100px minmax(200px, 1fr)';\n\n/**\n * Email history item component\n *\n * @param {object} props - The component's prop object\n * @param {object} props.event - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.difference - JSON changes details\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {object} props.event.task - The task object related with the event\n * @param {string} props.event.task.title - The title of the task\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n * @param {boolean} props.isFullHistory - If true, renders all component information\n * @param {Function} props.onTaskClick - Function to pass more information about the task\n * @param {Function} props.onDetailsClick - Function to pass more information on the difference when updated\n *\n * @returns {React.FC} The component to render\n */\nfunction TaskHistoryItem({ event, onDetailsClick, onTaskClick, isFullHistory, horizontal }) {\n const now = moment().startOf('day');\n const created = moment(event.createdAt);\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n\n const data = {\n date: moment(event.task.date).format('MM/DD/YYYY'),\n priority: event.task.priority,\n status: event.task.status,\n type: event.task.type.name,\n description: event.task.description,\n };\n\n const handleInfoClick = () => {\n if (horizontal) {\n onTaskClick({\n title: event.task.title,\n data,\n rows,\n });\n }\n };\n\n return (\n \n \n \n \n \n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('MM/DD/YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {event.operation === 'CREATE' ? (\n New Task\n ) : horizontal ? (\n onDetailsClick(event.difference)}>\n Updated Task\n \n ) : (\n Updated Task\n )}\n {horizontal && {event.task.title}}\n \n \n \n \n {(state) => (\n \n \n \n )}\n \n \n );\n}\n\nTaskHistoryItem.propTypes = {\n event: PropTypes.shape({\n operation: PropTypes.string.isRequired,\n difference: PropTypes.string,\n createdAt: PropTypes.string.isRequired,\n task: PropTypes.shape({\n title: PropTypes.string.isRequired,\n date: PropTypes.string.isRequired,\n priority: PropTypes.string.isRequired,\n status: PropTypes.string.isRequired,\n type: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }).isRequired,\n description: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n horizontal: PropTypes.bool,\n isFullHistory: PropTypes.bool,\n onTaskClick: PropTypes.func,\n onDetailsClick: PropTypes.func,\n};\n\nTaskHistoryItem.defaultProps = {\n horizontal: true,\n isFullHistory: false,\n onTaskClick: () => {},\n onDetailsClick: () => {},\n};\n\nexport default TaskHistoryItem;\n","import React from 'react';\nimport { Grid, Row, Column } from '@8base/boost';\nimport { IconInboxGreen } from '../../../../shared/components/ui/Icons';\nimport { ColumnValue } from '../../components/ColumnInfo';\nimport { MarginLessCol, Content, Layout } from './containers';\nimport { Transition } from 'react-transition-group';\nimport { Value, Name } from './interfaces';\nimport FormValues from '../../../../shared/components/forms/FormValues';\nimport moment from 'moment';\nimport PropTypes from 'prop-types';\n\nconst rows = [\n [\n {\n key: 'subject',\n label: 'Subject:',\n type: 'text',\n inline: true,\n },\n ],\n [\n {\n key: 'from',\n label: 'From:',\n type: 'text',\n inline: true,\n },\n ],\n [\n {\n key: 'to',\n label: 'To:',\n type: 'text',\n inline: true,\n },\n ],\n [\n {\n key: 'body',\n label: 'Content',\n type: 'html',\n margin: { top: '10px' },\n },\n ],\n];\n\nconst columns = '35px 100px minmax(200px, 1fr)';\n\n/**\n * Email history item component\n *\n * @param {object} props - The component's prop object\n * @param {object} props.event - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {object} props.event.email - The email object related with the event\n * @param {object} props.event.email.to - The destinatary\n * @param {string} props.event.email.subject - The subject of the email\n * @param {object} props.event.email.thread - Thread related to the email\n * @param {object} props.event.email.thread.lead - The lead related to the conversation\n * @param {object} props.event.email.thread.lead.email - Email of the lead related to the conversation\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n * @param {boolean} props.isFullHistory - If true, renders all component information\n * @param {Function} props.onEmailClick - Function to trigger to pass email info\n *\n * @returns {React.FC} The component to render\n */\nfunction EmailHistoryItem({ event, horizontal, isFullHistory, onEmailClick }) {\n const now = moment().startOf('day');\n const created = moment(event.createdAt);\n const yesterday = now.clone().subtract(1, 'days').startOf('day');\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n const { thread } = event.email;\n\n const data = {\n subject: event.email.subject,\n from: event.email.from,\n to: event.email.to,\n body: event.email.body,\n };\n\n const handleInfoClick = () => {\n if (horizontal) {\n onEmailClick({\n title: `Email ${event.email.to === thread.lead.email ? 'Sent' : 'Reply'}`,\n space: 5,\n data,\n rows,\n });\n }\n };\n\n return (\n \n \n \n \n \n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('MM/DD/YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {thread?.lead ? (\n event.email.to === thread.lead.email ? (\n \n Email Sent\n \n ) : (\n \n Email Reply\n \n )\n ) : event.email.to && thread.email && event.email.to === thread.email ? (\n \n Email Sent\n \n ) : (\n \n Email Reply\n \n )}\n {horizontal && {event.email.subject}}\n \n \n \n \n {(state) => (\n \n \n \n )}\n \n \n );\n}\n\nEmailHistoryItem.propTypes = {\n event: PropTypes.shape({\n operation: PropTypes.string.isRequired,\n createdAt: PropTypes.string.isRequired,\n email: PropTypes.shape({\n to: PropTypes.string.isRequired,\n from: PropTypes.string.isRequired,\n subject: PropTypes.string.isRequired,\n body: PropTypes.string.isRequired,\n thread: PropTypes.shape({\n email: PropTypes.string,\n lead: PropTypes.shape({\n email: PropTypes.string.isRequired,\n }),\n }).isRequired,\n }).isRequired,\n }).isRequired,\n onEmailClick: PropTypes.func,\n isFullHistory: PropTypes.bool,\n horizontal: PropTypes.bool,\n};\n\nEmailHistoryItem.defaultProps = {\n horizontal: true,\n isFullHistory: false,\n onEmailClick: () => {},\n};\n\nexport default EmailHistoryItem;\n","import React from 'react';\nimport moment from 'moment';\nimport { Row, Grid, Column } from '@8base/boost';\nimport { IconCallGreen } from '../../../../shared/components/ui/Icons';\nimport { formatDuration } from '../../../phone-calls/phone-calls-utils';\nimport { Layout, Content, MarginLessCol } from './containers';\nimport { Transition } from 'react-transition-group';\nimport FormValues from '../../../../shared/components/forms/FormValues';\nimport { Name, Value } from './interfaces';\nimport PropTypes from 'prop-types';\n\nconst rows = [\n [\n {\n key: 'carrier',\n label: 'Carrier',\n type: 'text',\n },\n {\n key: 'currentPremium',\n label: 'Current Premium',\n type: 'text',\n },\n {\n key: 'quotedPremium',\n label: 'Quoted Premium',\n type: 'text',\n },\n {\n key: 'status',\n label: 'Status',\n type: 'text',\n },\n ],\n [\n {\n key: 'insurance',\n label: 'Insurance',\n type: 'text',\n },\n {\n key: 'expirationDate',\n label: 'Expiration Date',\n type: 'text',\n },\n ],\n [\n {\n key: 'score',\n label: 'Score',\n type: 'text',\n },\n {\n key: 'createdAt',\n label: 'Dispositon created at',\n type: 'text',\n },\n ],\n [\n {\n key: 'createdBy',\n label: 'Created By',\n type: 'text',\n },\n ],\n];\n\nconst columns = '35px 100px minmax(200px, 1fr)';\n\n/**\n * Item for a history event on the lead, either create or update\n *\n * @param {object} props - The props object of the component\n * @param {object} props.event - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {object} props.event.call - The call object related with the event\n * @param {string} props.event.call.duration - The duration of the call\n * @param {string} props.event.call.status - The status of the call\n * @param {object} props.event.phoneCallDispositionRelation - The disposition related with this call\n * @param {string} props.event.phoneCallDispositionRelation.carrier - The carrier info\n * @param {object} props.event.phoneCallDispositionRelation.status - The status assigned to the lead while calling\n * @param {string} props.event.phoneCallDispositionRelation.status.name - The name of status\n * @param {string} props.event.phoneCallDispositionRelation.expirationDate - The expiration date info\n * @param {string} props.event.phoneCallDispositionRelation.insurance - The insuance info\n * @param {string} props.event.phoneCallDispositionRelation.notes - A note for the call\n * @param {string} props.event.phoneCallDispositionRelation.score - The score info\n * @param {boolean} props.onDispositionClick - Function to trigger to pass disposition info\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n * @param {boolean} props.isFullHistory - If true, renders all component information\n *\n * @returns {React.FC} The component to render\n */\nfunction CallHistoryItem({ event, horizontal, isFullHistory, onDispositionClick }) {\n const now = moment().startOf('day');\n const created = moment(event.createdAt);\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n const durationLabel = formatDuration(event.call.duration);\n\n const { phoneCallDispositionRelation: disposition } = event.call;\n\n const data = disposition\n ? {\n carrier: disposition.carrier,\n currentPremium: disposition.currentPremium,\n quotedPremium: disposition.quotedPremium,\n status: disposition?.status?.name,\n expirationDate: disposition?.expirationDate\n ? moment(disposition?.expirationDate).format('MM/DD/YYYY')\n : '',\n insurance: disposition?.insurance,\n notes: disposition.notes,\n ifsScore: '',\n createdAt: moment(disposition.createdAt).format('MM/DD/YYYY'),\n createdBy: `${disposition.createdBy.firstName} ${disposition.createdBy.lastName} (${disposition.createdBy.email})`,\n }\n : null;\n\n const handleInfoClick = () => onDispositionClick({ title: 'Disposition', data, rows });\n\n return (\n \n \n \n \n \n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('DD/MM-YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {horizontal ? (\n data ? (\n \n Disposition\n \n ) : (\n {event.call.status}\n )\n ) : (\n {event.call.status}\n )}\n {horizontal && Duration: {durationLabel}}\n \n \n \n \n {(state) => (\n \n {data !== null && }\n \n )}\n \n \n );\n}\n\nCallHistoryItem.propTypes = {\n event: PropTypes.shape({\n operation: PropTypes.string.isRequired,\n createdAt: PropTypes.string.isRequired,\n call: PropTypes.shape({\n duration: PropTypes.number.isRequired,\n status: PropTypes.string.isRequired,\n phoneCallDispositionRelation: PropTypes.shape({\n carrier: PropTypes.string.isRequired,\n currentPremium: PropTypes.string.isRequired,\n quotedPremium: PropTypes.string.isRequired,\n status: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }).isRequired,\n expirationDate: PropTypes.string.isRequired,\n insurance: PropTypes.string.isRequired,\n notes: PropTypes.string.isRequired,\n score: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }).isRequired,\n }),\n }).isRequired,\n }).isRequired,\n horizontal: PropTypes.bool,\n isFullHistory: PropTypes.bool,\n onDispositionClick: PropTypes.func,\n};\n\nCallHistoryItem.defaultProps = {\n onDispositionClick: () => {},\n horizontal: true,\n isFullHistory: false,\n};\n\nexport default CallHistoryItem;\n","import React from 'react';\nimport moment from 'moment';\nimport styled from 'styled-components';\nimport { FaArrowUp, FaArrowDown } from 'react-icons/fa';\nimport { Row, Grid, Column } from '@8base/boost';\nimport { IconChatGreen } from '../../../../shared/components/ui/Icons';\nimport { MarginLessCol, Content, Layout } from './containers';\nimport { Name, Value } from './interfaces';\nimport { Transition } from 'react-transition-group';\nimport FormValues from '../../../../shared/components/forms/FormValues';\nimport PropTypes from 'prop-types';\n\nconst IconContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst ArrowContainer = styled.div`\n padding-top: 5px;\n margin-left: 5px;\n`;\n\nconst rows = [\n [\n {\n key: 'from',\n label: 'From:',\n type: 'text',\n inline: true,\n },\n ],\n [\n {\n key: 'to',\n label: 'To:',\n type: 'text',\n inline: true,\n },\n ],\n [\n {\n key: 'text',\n label: 'Text',\n type: 'text',\n margin: {\n top: '10px',\n },\n },\n ],\n];\n\nconst columns = '35px 100px minmax(200px, 1fr)';\n\n/**\n * Item for a history event on the lead, either create or update\n *\n * @param {object} props - The props object of the component\n * @param {object} props.event - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {object} props.event.sms - The sms object related with the event\n * @param {string} props.event.sms.text - The text of the sms\n * @param {object} props.event.sms.createdBy - The user that initially sent the message\n * @param {string} props.event.sms.createdBy.firstName - The author's first name\n * @param {string} props.event.sms.createdBy.lastName - The author's last name\n * @param {string} props.event.sms.lead.firstName - The author's first name\n * @param {string} props.event.sms.lead.lastName - The author's last name\n * @param {boolean} props.onSmsClick - Function to trigger to pass sms info\n * @param {boolean} props.isFullHistory - Renders the object in a horizontal orientation if true\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n *\n * @returns {React.FC} The component to render\n */\nfunction SmsHistoryItem({ event, horizontal, isFullHistory, onSmsClick }) {\n const now = moment().startOf('day');\n const created = moment(event.createdAt);\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n const from = event.sms.createdBy\n ? `${event.sms.createdBy.firstName} ${event.sms.createdBy.lastName}`\n : '';\n\n const data = {\n from,\n to: `(${event.sms.phoneNumber})`,\n text: event.sms.text,\n };\n\n const handleInfoClick = () => {\n if (horizontal) {\n onSmsClick({\n title: 'Message sent',\n space: 5,\n data,\n rows,\n });\n }\n };\n\n const arrowIcon =\n event.sms?.type === 'INCOMING' ? (\n \n ) : (\n \n );\n\n return (\n \n \n \n \n \n \n {arrowIcon}\n \n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('DD/MM-YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {event.sms?.type === 'INCOMING' ? (\n \n Message received\n \n ) : (\n \n Message sent\n \n )}\n\n {horizontal && {event.sms.text}}\n \n \n \n \n {(state) => (\n \n \n \n )}\n \n \n );\n}\n\nSmsHistoryItem.propTypes = {\n event: PropTypes.shape({\n operation: PropTypes.string.isRequired,\n createdAt: PropTypes.string.isRequired,\n sms: PropTypes.shape({\n text: PropTypes.string.isRequired,\n phoneNumber: PropTypes.string.isRequired,\n lead: PropTypes.shape({\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }).isRequired,\n createdBy: PropTypes.shape({\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }),\n type: PropTypes.string,\n }).isRequired,\n }).isRequired,\n onSmsClick: PropTypes.func,\n isFullHistory: PropTypes.bool,\n horizontal: PropTypes.bool,\n};\n\nSmsHistoryItem.defaultProps = {\n onSmsClick: () => {},\n isFullHistory: false,\n horizontal: true,\n};\n\nexport default SmsHistoryItem;\n","import React from 'react';\nimport { Row, Icon, Grid } from '@8base/boost';\nimport { ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport { MarginLessCol, Layout } from './containers';\nimport { Value } from './interfaces';\nimport moment from 'moment';\nimport PropTypes from 'prop-types';\n\nconst columns = '35px 100px minmax(200px, 1fr)';\n\n/**\n * Stage history item component\n *\n * @param {event} props - The component's prop object\n * @param {object} props.event - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {object} props.event.stage - The stage object related with the event\n * @param {string} props.event.stage.name - The name of the stage\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n * @param {boolean} props.isFullHistory - If true, renders all component information\n *\n * @returns {React.FC} The component to render\n */\nfunction StageHistoryItem({ event, horizontal, isFullHistory }) {\n const now = moment().startOf('day');\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n const created = moment(event.createdAt);\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n\n return (\n \n \n \n \n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('MM/DD/YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {horizontal ? (\n <>\n Status changed to\n {event.stage.name}\n >\n ) : (\n {event.stage.name}\n )}\n \n \n \n );\n}\n\nStageHistoryItem.propTypes = {\n event: PropTypes.shape({\n operation: PropTypes.string.isRequired,\n createdAt: PropTypes.string.isRequired,\n stage: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n horizontal: PropTypes.bool,\n isFullHistory: PropTypes.bool,\n};\n\nStageHistoryItem.defaultProps = {\n horizontal: true,\n isFullHistory: false,\n};\n\nexport default StageHistoryItem;\n","import React from 'react';\nimport { Row, Grid } from '@8base/boost';\nimport { ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport { MarginLessCol, Layout } from './containers';\nimport { Name } from './interfaces';\nimport moment from 'moment';\nimport PropTypes from 'prop-types';\nimport {\n IconCallGreen,\n IconInboxGreen,\n IconChatGreen,\n IconTasksGreen,\n} from '../../../../shared/components/ui/Icons';\nimport { ENTITIES } from '../leads-history-model';\nimport { Avatar, Icon } from '@8base/boost';\n\nconst columns = '35px 100px minmax(200px, 1fr)';\n\n/**\n * Item rendered when entity is deleted\n *\n * @param {object} props - The component's prop object\n * @param {object} props.event - The object defining the event\n * @param {object} props.event.entity - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {boolean} props.isFullHistory - If true, renders all component information\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n *\n * @returns {React.FC} The component to render\n */\nfunction DeletedHistoryItem({ event, horizontal, isFullHistory }) {\n const now = moment().startOf('day');\n const created = moment(event.createdAt);\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n let icon = null;\n\n switch (event.entity) {\n case ENTITIES.LEAD:\n icon = ;\n break;\n case ENTITIES.NOTE:\n icon = (\n \n );\n break;\n case ENTITIES.TASK:\n icon = ;\n break;\n case ENTITIES.EMAIL:\n icon = ;\n break;\n case ENTITIES.CALL:\n icon = ;\n break;\n case ENTITIES.SMS:\n icon = ;\n break;\n case ENTITIES.STAGE:\n icon = ;\n break;\n default:\n icon = null;\n }\n\n return (\n \n {icon}\n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('MM/DD/YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {event.operation === 'CREATE' ? (\n New {event.entity.toLowerCase()}\n ) : (\n Updated {event.entity.toLowerCase()}\n )}\n \n \n \n );\n}\n\nDeletedHistoryItem.propTypes = {\n event: PropTypes.shape({\n entity: PropTypes.string.isRequired,\n lead: PropTypes.shape({\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }).isRequired,\n operation: PropTypes.string.isRequired,\n createdAt: PropTypes.string.isRequired,\n }).isRequired,\n horizontal: PropTypes.bool,\n isFullHistory: PropTypes.bool,\n};\n\nDeletedHistoryItem.defaultProps = {\n horizontal: true,\n isFullHistory: false,\n};\n\nexport default DeletedHistoryItem;\n","import React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\nimport { usePhoneCallComponent } from '../phone-calls-hooks';\nimport { Button, Loader } from '@8base/boost';\nimport * as toast from '../../../shared/components/toast/Toast';\n\n/**\n * @param {object} props Props.\n * @param {object} props.children Children element.\n * @param {string} props.tel Phone number as tel prop.\n * @param {string} props.data Lead data for get lead name oand other info\n * @returns {object} React Element\n */\nexport const PhoneNumber = ({ children, tel, name, lead }) => {\n const phoneUtil = PhoneNumberUtil.getInstance();\n\n const { makeCall, ready, startingCall } = usePhoneCallComponent() || {};\n\n const call = useCallback(() => {\n if (tel) {\n const isValidNumber = phoneUtil.isValidNumberForRegion(phoneUtil.parse(tel, 'US'), 'US');\n\n if (isValidNumber) {\n makeCall(tel, name, lead);\n } else {\n toast.error('Invalid phone number!');\n }\n } else {\n toast.error('You must register a phone number for this lead');\n }\n }, [makeCall, tel, name, lead, phoneUtil]);\n\n return (\n \n {startingCall ? : children}\n \n );\n};\n\nPhoneNumber.defaultProps = {\n name: 'Unknown',\n lead: undefined,\n};\n\nPhoneNumber.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n tel: PropTypes.string.isRequired,\n name: PropTypes.string,\n lead: PropTypes.string,\n};\n","import gql from 'graphql-tag';\n\nexport const LEAD_STAGE_FRAGMENT = gql`\n fragment leadStageFragment on LeadStage {\n id\n name\n createdAt\n }\n`;\n\nexport const QUERY_LEADS_STAGES = gql`\n query FetchLeadStages {\n leadStagesList {\n items {\n ...leadStageFragment\n }\n }\n }\n ${LEAD_STAGE_FRAGMENT}\n`;\n\nexport const CREATE_LEAD_STAGE_HISTORY = gql`\n mutation CreateLeadStage($data: LeadStageHistoryCreateInput!, $stage: ID!, $lead: ID!) {\n leadStageHistoryCreate(data: $data) {\n stage {\n ...leadStageFragment\n }\n }\n leadUpdate(filter: { id: $lead }, data: { stage: { connect: { id: $stage } } }) {\n id\n }\n }\n ${LEAD_STAGE_FRAGMENT}\n`;\n\nexport const ASSING_LEAD_STAGE = gql`\n mutation AssignLeadStage($stage: ID!, $lead: ID!) {\n leadUpdate(filter: { id: $lead }, data: { stage: { connect: { id: $stage } } }) {\n id\n }\n }\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchLeadStages = createEvent();\n\nexport const OnFetchLeadStagesError = createEvent();\n\nexport const OnSetLeadStage = createEvent();\n\nexport const OnSetLeadStageError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { createAction } from '@cobuildlab/react-simple-state';\nimport {\n QUERY_LEADS_STAGES,\n CREATE_LEAD_STAGE_HISTORY,\n ASSING_LEAD_STAGE as ASSING_LEAD_STAGE_MUTATION,\n} from './leads-stage-queries';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport {\n OnFetchLeadStages,\n OnFetchLeadStagesError,\n OnSetLeadStage,\n OnSetLeadStageError,\n} from './leads-stage-store';\n\n/**\n * Fetch lead stages\n *\n * @returns {Promise}\n */\nexport const fetchLeadStages = createAction(OnFetchLeadStages, OnFetchLeadStagesError, async () => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: QUERY_LEADS_STAGES,\n });\n\n return response.data;\n});\n\n/**\n * Assigns the provided stage to the provided lead\n *\n * @param {number} lead - The lead id\n * @param {number} stage - The stage id\n *\n * @returns {Promise} result function\n */\nexport const assignLeadStage = createAction(\n OnSetLeadStage,\n OnSetLeadStageError,\n async (lead, stage) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: CREATE_LEAD_STAGE_HISTORY,\n variables: {\n data: {\n lead: { connect: { id: lead } },\n stage: { connect: { id: stage } },\n },\n lead,\n stage,\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Assigns the provided stage to the provided lead\n * without creating leadStageHistory\n *\n * @param {number} leadId - Lead id\n * @param {number} stageId - Stage id\n *\n * @returns {Promise} The function's result function.\n */\nexport const assignLeadToStage = async (leadId, stageId) => {\n const client = OnApolloClient.get();\n\n try {\n const { data } = await client.mutate({\n mutation: ASSING_LEAD_STAGE_MUTATION,\n variables: { lead: leadId, stage: stageId },\n });\n\n log('assignLeadStage without creating leadStageHistory', data);\n\n return data;\n } catch (e) {\n error('assignLeadStage', e);\n }\n};\n","import React from 'react';\nimport { Table } from '@8base/boost';\nimport styled from 'styled-components';\nimport { useHistory } from 'react-router-dom';\nimport {\n priorityMap,\n findPriority,\n canAssignAgents,\n getLeadFullName,\n getLeadPhoneNumbers,\n} from '../leads-utils';\nimport { updateLeadPriority, updateLeadUsers } from '../leads-actions';\nimport {\n DropdownWithCheck,\n TextContact,\n DateBox,\n SelectInput,\n SimpleDropdown,\n} from 'shared/components';\nimport { getAssignedUsersLabel, mapUserToDropdownWithCheck } from '../../users/user-utils';\nimport { getActionItem } from '../leads-history/leads-history-utils';\n\nimport { PRIORITY_OPTIONS } from '../../../shared/constants';\nimport { PropTypes } from 'prop-types';\nimport { PhoneNumber } from '../../phone-calls/Components/PhoneNumber';\nimport { formatPhoneNumber, parseListToSelectOptions } from '../../phone-calls/phone-calls-utils';\nimport { assignLeadToStage } from '../leads-stage/leads-stage-action';\n\nconst TableBodyCell = styled(Table.BodyCell)`\n word-break: break-word !important;\n`;\n\nconst TextContactContainer = styled.div`\n & span p {\n text-align: start !important;\n }\n`;\n\nconst LeadCell = ({ columnName, lead, users, user, agency, stages }) => {\n const [stagesList] = stages;\n const stagesOptions = parseListToSelectOptions(stagesList);\n const history = useHistory();\n let cell;\n\n switch (columnName) {\n case 'ID':\n cell = (\n \n ID\n \n );\n break;\n case 'Received':\n cell = (\n \n \n \n );\n break;\n case 'Contact': {\n const phones = getLeadPhoneNumbers(lead);\n const contact = (\n \n \n history.push(`/leads/${lead.id}`)}\n style={{ color: '#3DB4AA' }}>\n {lead.firstName} {lead.lastName}\n \n {phones && phones.length > 0 && (\n \n {formatPhoneNumber(phones[0].phone.number)}\n \n )}\n \n \n );\n\n cell = {contact};\n break;\n }\n case 'Stage':\n cell = (\n \n {\n assignLeadToStage(lead.id, value);\n }}\n // TODO: remove optional operator when all the lead has a default stage\n value={lead?.stage?.id}\n options={stagesOptions}\n placeholder={''}\n />\n \n );\n break;\n case 'IFS Score':\n cell = (\n \n {lead.ifsScore}\n \n );\n break;\n case 'Assigned To':\n if (users) {\n if (canAssignAgents(user, agency)) {\n cell = (\n \n updateLeadUsers(lead.id, values)}\n />\n \n );\n } else {\n cell = (\n \n ({\n id: u.id,\n label: `${u.firstName} ${u.lastName}`,\n value: u.id,\n }))}\n header={getAssignedUsersLabel(lead.assignees.items)}\n />\n \n );\n }\n } else {\n cell = ;\n }\n break;\n case 'Campaign':\n cell = (\n \n {lead.campaign ? lead.campaign.name : ''}\n \n );\n break;\n case 'Last Action':\n cell = (\n \n {lead.lastHistoryActionType &&\n getActionItem(lead.lastHistoryActionType, lead.lastHistoryActionData)}\n \n );\n break;\n case 'Priority':\n cell = (\n \n updateLeadPriority(lead.id, findPriority(value))}\n value={findPriority(lead.priority)}\n options={priorityMap(PRIORITY_OPTIONS)}\n placeholder={''}\n />\n \n );\n break;\n default:\n cell = (\n \n default\n \n );\n }\n return cell;\n};\n\nLeadCell.propTypes = {\n lead: PropTypes.object.isRequired,\n user: PropTypes.object.isRequired,\n agency: PropTypes.object.isRequired,\n columnName: PropTypes.string.isRequired,\n stages: PropTypes.array.isRequired,\n};\n\nexport default LeadCell;\n","import React from 'react';\nimport { ENTITIES } from './leads-history-model';\nimport LeadHistoryItem from './components/LeadHistoryItem';\nimport NoteHistoryItem from './components/NoteHistoryItem';\nimport TaskHistoryItem from './components/TaskHistoryItem';\nimport EmailHistoryItem from './components/EmailHistoryItem';\nimport CallHistoryItem from './components/CallHistoryItem';\nimport SmsHistoryItem from './components/SmsHistoryItem';\nimport StageHistoryItem from './components/StageHistoryItem';\nimport DeletedHistoryItem from './components/DeletedHistoryItem';\n\n/**\n * Chooses the right component for the given history event\n *\n * @param {string} lastHistoryActionType - Type of action.\n * @param {string} lastHistoryActionData - Data.\n * @param {boolean} horizontal - Tiny version of the component.\n * @param {boolean} fullHistory - If true, every item would be rendered with all of its information\n * @param {Function} onDetailsClick - Function to trigger when a difference button in an update event item is clicked\n \n * @param {Function} onInfoClick - Function to trigger when the item wants to pass some information\n * @returns {React.FC} Component to render\n */\nexport const getActionItem = (\n lastHistoryActionType,\n lastHistoryActionData,\n horizontal = false,\n fullHistory = false,\n onDetailsClick = () => {},\n onInfoClick = () => {},\n) => {\n const action = JSON.parse(lastHistoryActionData);\n\n if (!action.entity) {\n return (\n \n );\n }\n\n switch (lastHistoryActionType) {\n case ENTITIES.LEAD:\n return (\n \n );\n case ENTITIES.NOTE:\n return (\n \n );\n case ENTITIES.TASK:\n return (\n \n );\n case ENTITIES.EMAIL:\n return (\n \n );\n case ENTITIES.CALL:\n return (\n \n );\n case ENTITIES.SMS:\n return (\n \n );\n case ENTITIES.STAGE:\n return (\n \n );\n default:\n return null;\n }\n};\n/**\n * Chooses the right component for the given history event\n *\n * @param {object} event - A history item object\n * @param {boolean} horizontal - Tiny version of the component\n * @param {boolean} fullHistory - If true, every item would be rendered with all of its information\n * @param {Function} onDetailsClick - Function to trigger when a difference button in an update event item is clicked\n * @param {Function} onInfoClick - Function to trigger when the item wants to pass some information\n * @returns {React.FC} Component to render\n */\nexport const getHistoryItem = (\n event,\n horizontal = true,\n fullHistory = false,\n onDetailsClick = () => {},\n onInfoClick = () => {},\n) => {\n if (event[event.entity.toLowerCase()] === null) {\n return (\n \n );\n }\n\n switch (event.entity) {\n case ENTITIES.LEAD:\n return (\n \n );\n case ENTITIES.NOTE:\n return (\n \n );\n case ENTITIES.TASK:\n return (\n \n );\n case ENTITIES.EMAIL:\n return (\n \n );\n case ENTITIES.CALL:\n return (\n \n );\n case ENTITIES.SMS:\n return (\n \n );\n case ENTITIES.STAGE:\n return (\n \n );\n default:\n return null;\n }\n};\n\n/**\n * Returns if an event is related with the specified search string\n *\n * @param {string} search - The search string\n * @param {object} event - The event object\n *\n * @returns {boolean} Is item related or not with the search term\n */\nexport const filterItem = (search, event) => {\n const regexp = new RegExp(`${search}`, 'i');\n const name = `${event.lead.firstName} ${event.lead.middleName} ${event.lead.lastName}`;\n\n if (regexp.test(event.operation)) return true;\n\n if (regexp.test(name)) return true;\n\n switch (event.entity) {\n case ENTITIES.NOTE:\n return event.note && (regexp.test(event.note.title) || regexp.test(event.note.title));\n case ENTITIES.TASK:\n return (\n event.task &&\n (regexp.test(event.task.title) ||\n regexp.test(event.task.type) ||\n regexp.test(event.task.priority) ||\n regexp.test(event.task.description))\n );\n case ENTITIES.EMAIL:\n return (\n event.email &&\n (regexp.test(event.email.thread.identifier) ||\n regexp.test(event.email.subject) ||\n regexp.test(event.email.body) ||\n regexp.test(event.email.to) ||\n regexp.test(event.email.from))\n );\n case ENTITIES.CALL:\n return (\n event.call &&\n (regexp.test(event.call.status) ||\n (event.call.phoneCallDispositionRelation &&\n (regexp.test(event.call.phoneCallDispositionRelation.notes) ||\n regexp.test(event.call.phoneCallDispositionRelation.score?.name))))\n );\n case ENTITIES.SMS:\n return event.text && regexp.test(event.sms.text);\n case ENTITIES.STAGE:\n return event.stage && regexp.test(event.stage.name);\n default:\n return false;\n }\n};\n","import React, { useState, useCallback, useEffect, useMemo } from 'react';\nimport { Dropdown } from '@8base/boost';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport { DropdownBodyOnTable, FilterFooter, FilterCategory } from 'shared/components';\nimport filterIconGrey from 'shared/assets/images/filter-grey.svg';\nimport filterIconGreen from 'shared/assets/images/filter-green.svg';\nimport { fetchFilterOptions } from '../leads-actions';\nimport { FILTER_CATEGORIES } from '../leads-model';\nimport { usePromise } from '@cobuildlab/hooks-utils';\nimport moment from 'moment';\n\nconst DropdownBody = styled.div`\n background-color: #fff;\n position: relative;\n z-index: 2000;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n`;\n\nconst FilterBody = styled.div`\n display: grid;\n /* grid-template-rows: repeat(3, min-content); */\n grid-template-columns: repeat(3, [col-start] 1fr [col-end]);\n gap: 12px;\n padding: 12px;\n`;\n\nconst FilterBtn = styled.div`\n display: flex;\n border-radius: 5px;\n border: solid 1px ${({ active }) => (active ? '#3db4aa' : '#d0d7dd')};\n padding: 0px 16px;\n height: 36px;\n box-sizing: border-box;\n align-items: center;\n`;\n\nconst FilterIcon = styled.img`\n width: 2rem;\n height: 2rem;\n`;\n\nconst LeadFilter = (props) => {\n const [filters, setFilters] = useState(props.query);\n const [categories, setCategories] = useState(FILTER_CATEGORIES);\n const [options] = usePromise(() => fetchFilterOptions(props.agency), { initialState: null });\n\n useEffect(() => {\n if (options) {\n const { campaignsList, agencyUsersList } = options;\n\n setCategories((prevCategories) => ({\n ...prevCategories,\n assignedTo: {\n ...prevCategories.assignedTo,\n options: [\n { label: 'Anyone', value: '' },\n { label: 'None', value: 'none' },\n ...agencyUsersList.items.map((agent) => ({\n label: `${agent.user.firstName} ${agent.user.lastName}`,\n value: agent.user.id,\n })),\n ],\n },\n campaign: {\n ...prevCategories.campaign,\n options: [\n { label: 'All Campaigns', value: '' },\n ...campaignsList.items.map((campaign) => ({\n label: campaign.name,\n value: campaign.id,\n })),\n ],\n },\n }));\n }\n }, [options]);\n\n useEffect(() => {\n setFilters(props.query);\n }, [props.query]);\n\n const onChange = useCallback((name, value) => {\n if (name === 'createdAfter' && value) {\n value = moment(value)\n .startOf('day')\n .toISOString();\n }\n\n if (name === 'createdBefore' && value) {\n value = moment(value)\n .endOf('day')\n .toISOString();\n }\n\n setFilters((prevFilters) => ({\n ...prevFilters,\n [name]: value || undefined,\n }));\n }, []);\n\n const onSubmit = useCallback(() => {\n props.onConfirm(filters);\n }, [filters, props]);\n\n const onClose = useCallback(() => {\n setFilters(props.query);\n }, [props.query]);\n\n const fields = useMemo(\n () =>\n Object.entries(categories).map(([identifier, category]) => (\n \n )),\n [categories, filters, onChange],\n );\n\n const active = useMemo(\n () => Object.keys(props.query).some((key) => key !== 'search' && props.query[key]),\n [props.query],\n );\n\n const icon = active ? : ;\n\n return (\n \n \n \n {icon}\n Filters\n \n \n \n {({ closeDropdown }) => (\n \n {fields}\n \n \n )}\n \n \n );\n};\n\nLeadFilter.propTypes = {\n agency: PropTypes.string.isRequired,\n query: PropTypes.object.isRequired,\n onConfirm: PropTypes.func.isRequired,\n onCancel: PropTypes.func,\n};\n\nLeadFilter.defaultProps = {\n onCancel: () => {},\n};\n\nexport default LeadFilter;\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { PropTypes } from 'prop-types';\n\nimport { YesNoDialog } from '../../../shared/components';\n\nconst BoldText = styled.span`\n font-weight: bold;\n`;\n\nconst LeadsDialog = ({ isOpen, onYes, onClose, selectedLead, selectedLeads, isLoading }) => {\n const text = (\n \n \n {`Are you sure you want to delete ${\n selectedLead.length > 0 || selectedLeads.length === 1 ? 'this Lead?' : 'these Leads?'\n } `}\n \n This action can’t be undone.\n \n );\n return (\n 0 || selectedLeads.length === 1 ? 'Lead' : 'Leads'}`}\n text={text}\n isLoading={isLoading}\n />\n );\n};\n\nLeadsDialog.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n isLoading: PropTypes.bool.isRequired,\n onYes: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n selectedLead: PropTypes.string.isRequired,\n selectedLeads: PropTypes.array.isRequired,\n};\n\nexport default React.memo(LeadsDialog);\n","import React, { useState, useEffect, useCallback, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { LeadPhoneType } from '@cobuildlab/lead-volt-share';\nimport { Form, Grid, Select, Row, Label, Icon, Button, Tooltip } from '@8base/boost';\nimport styled from 'styled-components';\nimport {\n GENDER_OPTIONS,\n BIRTHMONTH_OPTIONS,\n BIRTHDAY_OPTIONS,\n BIRTHYEAR_OPTIONS,\n STATES_OPTIONS,\n LEAD_TYPE_OPTIONS,\n} from '../../leads-model';\nimport { Margin, SelectMultipleAgents } from '../../../../shared/components';\nimport { PRIORITY_OPTIONS } from '../../leads-model';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchManagerAndAgents } from '../../../users/user-actions';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport Field from '../../../../shared/components/Field';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\nimport {\n OnFetchManagerAndAgentUsersError,\n OnFetchManagerAndAgentUsersEvent,\n} from 'modules/users/user-events';\n\nconst phoneUtil = PhoneNumberUtil.getInstance();\n\nconst GridBoxFlexEnd = styled(Grid.Box)`\n justify-content: flex-end;\n`;\n\nconst Add = styled(Icon)`\n margin-right: 0px !important;\n`;\n\nconst CenteredIcon = styled(Icon)`\n margin-top: 20px;\n`;\n\n/**\n * Lead form fields\n *\n * @param {object} props component props\n * @param {object} props.lead lead data\n * @param {boolean} props.isUpdate is edit or not\n * @param {Array} props.campaigns campaigns list\n * @param {Array} props.phoneList phones list\n * @param {Function} props.setPhoneList set for list phones\n * @param {string} props.activeAgency ID of active agency\n * @param {Function} props.handleOnChangeInput handle on change\n * @returns {React.ReactElement} component\n */\nconst LeadForm = ({\n lead,\n isUpdate,\n campaigns,\n phoneList,\n setPhoneList,\n activeAgency,\n handleOnChangeInput,\n}) => {\n const [users, setUsers] = useState([]);\n\n useEffect(() => {\n activeAgency && fetchManagerAndAgents(activeAgency.id);\n setPhoneList(lead.phones);\n }, [activeAgency, lead.phones, setPhoneList]);\n\n useEventSubscription(OnFetchManagerAndAgentUsersEvent, ({ usersList }) =>\n setUsers(usersList.items),\n );\n useEventSubscription(OnFetchManagerAndAgentUsersError, (e) =>\n toast.error('There was an error fetching the users, please try again.'),\n );\n\n const handleAddInputPhone = (e) => {\n e.preventDefault();\n setPhoneList([\n ...phoneList,\n {\n phone: {\n code: '1',\n number: '',\n },\n },\n ]);\n };\n\n const handleDeleteInputPhone = useCallback(\n (i) => {\n setPhoneList((prevState) => {\n if (prevState.length === 1) {\n toast.error('At least one phone number is required');\n\n return prevState;\n }\n\n return prevState\n .map((phone, j) => (i === j ? { ...phone, delete: true } : phone))\n .filter((phone) => (phone.delete && !phone.id ? false : true));\n });\n },\n [setPhoneList],\n );\n\n const handleOnChangeNumber = useCallback(\n (value, i) => {\n if (value.length > 1) {\n let phone = null;\n\n try {\n phone = phoneUtil.parse(value, 'US');\n } catch (e) {\n toast.error(`The phone #${i + 1} is not valid`);\n\n return;\n }\n\n setPhoneList((prevState) =>\n prevState.map((state, j) => {\n if (i === j) {\n let isValid = true;\n\n if (\n phoneUtil.isPossibleNumber(phone) === false ||\n phoneUtil.isValidNumber(phone) === false\n ) {\n isValid = false;\n\n toast.error(`The phone #${i + 1} is not valid`);\n }\n\n /**\n * Checks if the number actually changes\n */\n const update =\n state.id && isValid\n ? lead.phones.some((p) => p.id === state.id && p.phone.number !== value)\n : false;\n\n return {\n ...state,\n update,\n phone: {\n ...state.phone,\n number: value,\n },\n };\n }\n\n return state;\n }),\n );\n }\n },\n [lead, setPhoneList],\n );\n\n const handleOnChangeCode = useCallback(\n (value, i) => {\n setPhoneList((prevState) =>\n prevState.map((phone, j) => {\n if (i === j) {\n return {\n ...phone,\n phone: {\n ...phone.phone,\n code: value,\n },\n };\n }\n\n return phone;\n }),\n );\n },\n [setPhoneList],\n );\n\n const handleBlur = useCallback(\n (e) => {\n const {\n target: { value, name },\n } = e;\n\n handleOnChangeInput(value, name);\n },\n [handleOnChangeInput],\n );\n\n const phones = useMemo(\n () =>\n phoneList.map((phone, i) => {\n if (phone.delete) {\n return null;\n }\n\n const label = `Phone Number ${i + 1}`;\n let icon = 'MobilePhoneIcon';\n let tooltip = 'Mobile phone number';\n\n if (phone.type === LeadPhoneType.UNREACHABLE) {\n icon = 'Alert';\n tooltip =\n \"This phone number is probably not valid, it couldn't be reached in previous attempts\";\n }\n\n if (phone.type === LeadPhoneType.LANDLINE) {\n icon = 'LandlineIcon';\n tooltip =\n \"This phone number has been detected as a landline, therefore it can't receive sms messages\";\n }\n\n return (\n \n handleOnChangeCode(value, i)}\n options={[\n {\n label: '+1',\n value: '1',\n },\n ]}\n />\n handleOnChangeNumber(e.target.value, i)}\n />\n \n \n \n handleDeleteInputPhone(i)}\n />\n \n );\n }),\n [phoneList, handleOnChangeCode, handleOnChangeNumber, handleDeleteInputPhone],\n );\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n handleOnChangeInput(value, 'gender')}\n />\n \n \n \n \n \n \n \n \n \n handleOnChangeInput(value || '', 'birthMonth')}\n options={BIRTHMONTH_OPTIONS}\n clearable\n />\n \n \n handleOnChangeInput(value || '', 'birthDay')}\n options={BIRTHDAY_OPTIONS}\n clearable\n />\n \n \n handleOnChangeInput(value || '', 'birthYear')}\n options={BIRTHYEAR_OPTIONS}\n clearable\n />\n \n \n \n \n \n \n handleOnChangeInput(value, 'campaign')}\n options={campaigns.map((campaign) => ({\n label: campaign.name,\n value: campaign.id,\n }))}\n />\n \n \n handleOnChangeInput(value, 'ifsScore')}\n options={\n activeAgency\n ? activeAgency.ifsScore.map((score) => ({\n label: score,\n value: score,\n }))\n : []\n }\n />\n \n \n \n \n \n \n \n ({\n label: `${user.firstName} ${user.lastName}`,\n value: user.id,\n imgUrl: user.avatar\n ? user.avatar.downloadUrl\n : 'https://randomuser.me/api/portraits/women/17.jpg',\n }))}\n placeholder=\"Assign users\"\n onChange={(value) => handleOnChangeInput(value, 'assignees')}\n options={users.map((user) => ({\n label: `${user.firstName} ${user.lastName}`,\n value: user.id,\n imgUrl: user.avatar\n ? user.avatar.downloadUrl\n : 'https://randomuser.me/api/portraits/women/17.jpg',\n }))}\n />\n \n \n {phones}\n \n \n Add New Phone Number\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n handleOnChangeInput(value, 'state')}\n options={STATES_OPTIONS}\n />\n \n {!isUpdate && (\n \n handleOnChangeInput(value, 'leadType')}\n options={LEAD_TYPE_OPTIONS}\n />\n \n )}\n {isUpdate && (\n \n handleOnChangeInput(value, 'amount')}\n />\n \n )}\n \n handleOnChangeInput(value, 'priority')}\n options={PRIORITY_OPTIONS}\n />\n \n \n handleOnChangeInput(value, 'creditScore')}\n />\n \n \n \n \n \n );\n};\n\nLeadForm.propTypes = {\n lead: PropTypes.object.isRequired,\n isUpdate: PropTypes.bool.isRequired,\n activeAgency: PropTypes.object.isRequired,\n phoneList: PropTypes.array.isRequired,\n campaigns: PropTypes.array.isRequired,\n handleOnChangeInput: PropTypes.func.isRequired,\n setPhoneList: PropTypes.func.isRequired,\n};\n\nexport default LeadForm;\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport * as R from 'ramda';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { createLead, updateLead } from '../leads-actions';\nimport LeadForm from './forms/LeadForm';\nimport { LEAD } from '../leads-model';\nimport {\n LEAD_TYPE_AUTO,\n LEAD_TYPE_COMMERCIAL_AUTO,\n LEAD_TYPE_HOME,\n LEAD_TYPE_LIFE,\n LEAD_TYPE_GENERAL_LIABILITY,\n LEAD_TYPE_WORKERS_COMPENSATION,\n LEAD_TYPE_EMPLOYEE_BENEFITS,\n} from '../../../shared/constants';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport * as toast from 'shared/components/toast/Toast';\nimport { getLeadPhoneNumberRelationInput } from '../leads-utils';\nimport { OnLeadCreateEvent, OnLeadsError, OnLeadsUpdateEvent } from '../leads-events';\n\nconst LeadFormDialog = ({\n isOpen,\n onCloseDialog,\n afterSubmit,\n lead,\n isUpdate,\n campaigns,\n activeAgency,\n}) => {\n const [fields, setFields] = useState(lead || R.clone(LEAD));\n const [phoneList, setPhoneList] = useState([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (lead) {\n setFields(lead);\n }\n }, [lead]);\n\n const handleCloseDialog = () => {\n isUpdate ? setFields(lead) : setFields(R.clone(LEAD));\n onCloseDialog();\n };\n\n const handleOnSubmit = () => {\n const {\n firstName,\n middleName,\n lastName,\n gender,\n birthMonth,\n birthDay,\n birthYear,\n campaign,\n email,\n assignees,\n firstAddress,\n secondAddress,\n zipCode,\n city,\n state,\n priority,\n leadType,\n creditScore,\n ifsScore,\n amount,\n } = fields;\n\n console.log({ phoneList });\n\n let leadLeadPhoneNumberRelation = getLeadPhoneNumberRelationInput(phoneList, isUpdate);\n\n console.log({ leadLeadPhoneNumberRelation });\n const dataLead = {\n firstName,\n middleName,\n lastName,\n gender,\n birthMonth,\n birthDay,\n birthYear,\n campaign,\n email,\n assignees: assignees.map((user) => (user.value ? user.value : user.id)),\n leadLeadPhoneNumberRelation,\n address: {\n street1: firstAddress,\n street2: secondAddress,\n zip: zipCode,\n city,\n state,\n },\n creditScore,\n priority,\n ifsScore,\n amount: amount ? amount : '0',\n };\n\n if (!isUpdate) {\n if (leadType === LEAD_TYPE_AUTO) {\n dataLead.leadLeadTypeAutoRelation = { create: {} };\n }\n\n if (leadType === LEAD_TYPE_COMMERCIAL_AUTO) {\n dataLead.leadLeadTypeCommercialAutoRelation = { create: {} };\n }\n\n if (leadType === LEAD_TYPE_HOME) {\n dataLead.leadLeadTypeHomeRelation = { create: {} };\n }\n\n if (leadType === LEAD_TYPE_LIFE) {\n dataLead.leadLeadTypeLifeRelation = { create: {} };\n }\n\n if (leadType === LEAD_TYPE_GENERAL_LIABILITY) {\n dataLead.leadLeadTypeGeneralLiabilityRelation = { create: {} };\n }\n\n if (leadType === LEAD_TYPE_WORKERS_COMPENSATION) {\n dataLead.leadLeadTypeWorkersCompensationRelation = { create: {} };\n }\n\n if (leadType === LEAD_TYPE_EMPLOYEE_BENEFITS) {\n dataLead.leadLeadTypeEmployeeBenefitRelation = { create: {} };\n }\n }\n\n setLoading(true);\n\n if (isUpdate) {\n updateLead(lead.id, {\n ...fields,\n phones: phoneList,\n });\n } else {\n console.log('datalead', dataLead);\n createLead(dataLead);\n }\n };\n\n useEffect(() => {\n if (!lead && campaigns.length > 0) {\n setFields({\n ...R.clone(LEAD),\n campaign: campaigns[0].id,\n });\n }\n }, [lead, campaigns]);\n\n const handleOnChangeInput = (value, name) => {\n const newLead = { ...fields };\n newLead[name] = value;\n\n if (name === 'assignees' && value === null) newLead[name] = [];\n if (name === 'users' && value === null) newLead[name] = [];\n if (name === 'phones' && value === null) newLead[name] = [];\n\n setFields(newLead);\n };\n\n // const handleOnChangePhones = (value, i) => {\n // let aux = [...phoneList];\n // aux[i].number = value;\n // setPhoneList(aux);\n // };\n\n useEventSubscription(OnLeadCreateEvent, () => {\n setLoading(false);\n setFields(R.clone(LEAD)); // set default values.\n onCloseDialog();\n afterSubmit(); // after create function from parent component.\n });\n\n useEventSubscription(OnLeadsError, (err) => {\n if (err) {\n setLoading(false);\n\n onErrorMixinFC(err);\n }\n });\n\n useEventSubscription(OnLeadsUpdateEvent, () => {\n onCloseDialog();\n setLoading(false);\n afterSubmit();\n\n toast.success('Lead Management', 'Lead Successfully Updated');\n });\n\n return (\n \n \n \n );\n};\n\nLeadFormDialog.propTypes = {\n lead: PropTypes.object,\n isUpdate: PropTypes.bool,\n afterSubmit: PropTypes.func,\n isOpen: PropTypes.bool.isRequired,\n campaigns: PropTypes.array.isRequired,\n activeAgency: PropTypes.object.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadFormDialog.defaultProps = {\n lead: null,\n isUpdate: false,\n afterSubmit: () => {},\n};\n\nexport default LeadFormDialog;\n","import styled from 'styled-components';\nimport { Card, Table } from '@8base/boost';\n\nconst MainCard = styled(Card)`\n margin: 20px 20px 20px 270px;\n`;\n/**\n * @param {object} props props\n * @param {boolean} props.withPadding if the body has to have padding\n * @returns {object} React component\n */\nconst Body = styled(Card.Body)`\n ${({ withPadding }) => (withPadding ? '' : 'padding: 0 !important;')}\n`;\nconst Footer = styled(Card.Footer)`\n display: flex;\n justify-content: flex-end;\n align-items: center;\n`;\nconst Header = styled(Card.Header)`\n display: flex;\n justify-content: space-between;\n`;\nconst CardTitle = styled.h3`\n font-size: 16px;\n font-weight: bold;\n line-height: 28px;\n`;\nconst PaginationWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n & > div > div > *::before {\n background-color: var(--color-primary);\n transition: all 0.2s;\n }\n\n & > div > span {\n display: inline-block;\n padding: 0.5rem 1.5rem;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n }\n`;\n\nconst TableBody = styled(Table.Body)`\n min-height: ${({ height }) => height};\n`;\nexport { MainCard as Card, Body, Header, CardTitle, PaginationWrapper, TableBody, Footer };\n","import React, { useState, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport { Button, Modal, Card, Icon } from '@8base/boost';\nimport { Header, CardTitle } from '../../my-account/components/Card';\nimport RadioInputField from '../../../shared/components/ui/inputs/RadioInputField';\nimport { PrimaryBtn } from '../../../shared/components/ui/buttons/PrimaryBtn';\n\nconst Body = styled(Card.Body)`\n min-width: 25vw;\n`;\n\nconst ButtonContainer = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst LeadAssignUserDialog = ({ users, isOpen, onClose, onAssignUsersToLeads, loading }) => {\n const [selectedUsers, setSelectedUsers] = useState([]);\n\n const handleSelectedUser = (userId) => {\n if (!loading) {\n if (selectedUsers.includes(userId)) {\n setSelectedUsers((prevSelectedUsers) =>\n prevSelectedUsers.filter((prevUserId) => prevUserId !== userId),\n );\n } else {\n setSelectedUsers((prevSelectedUsers) => [...prevSelectedUsers, userId]);\n }\n }\n };\n\n const handleSave = () => {\n if (selectedUsers.length && !loading) {\n onAssignUsersToLeads(selectedUsers);\n }\n };\n\n const handleClose = () => {\n if (!loading) {\n onClose();\n }\n };\n\n useEffect(() => {\n if (!isOpen) {\n setSelectedUsers([]);\n }\n }, [isOpen]);\n\n return (\n \n \n \n Assign Users\n \n \n \n \n \n {users.map((user) => (\n handleSelectedUser(user.id)}\n />\n ))}\n \n \n \n \n Cancel\n \n \n Save\n \n \n \n \n \n );\n};\n\nLeadAssignUserDialog.propTypes = {\n users: PropTypes.array.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onAssignUsersToLeads: PropTypes.func.isRequired,\n loading: PropTypes.bool.isRequired,\n};\n\nexport default LeadAssignUserDialog;\n","import React, { useMemo } from 'react';\nimport styled from 'styled-components';\nimport moment from 'moment';\nimport { PRIMARY, BLACK } from 'shared/constants/colors';\n\nconst Msg = styled.div`\n display: flex;\n width: 100%;\n flex-direction: column;\n align-items: ${(props) => (props.isLeadUser ? 'flex-start' : 'flex-end')};\n text-align: ${(props) => (props.isLeadUser ? 'flex-start' : 'flex-end')};\n // background-color: teal;\n`;\n\nconst MsgAuthor = styled.div`\n font-size: 0.9em;\n font-weight: bold;\n`;\n\nconst MsgText = styled.div`\n // font-size:1em;\n\n font-weight: 500;\n max-width: 70%;\n padding: 10px 15px;\n background-color: ${({ isLeadUser }) => (isLeadUser ? PRIMARY : BLACK)};\n border-radius: ${({ isLeadUser }) => (isLeadUser ? '15px 15px 15px 0' : '15px 15px 0 15px ')};\n color: #fff;\n`;\n\nconst MsgDate = styled.div`\n font-size: 0.75em;\n color: #aaa;\n margin-top: 5px;\n font-weight: 600;\n`;\n\n/**\n * @param {object} props - Component props.\n * @param {object} props.message - Message object.\n * @param {string} props.message.type - Type of the message.\n * @param {string} props.message.text - Content of the message.\n * @param {string} props.message.createdAt - Date when the message was created.\n * @param {object} props.lead - Lead object.\n * @param {string} props.lead.firstName - First name of the prospect.\n * @returns {React.ReactNode} Message component.\n */\nexport function Message({ message, lead }) {\n const isLeadUser = useMemo(() => {\n return message.type === 'INCOMING' ? true : false;\n }, [message]);\n\n const formattedDate = useMemo(() => {\n return moment(message.createdAt).format('MMM D, YYYY [at] h:mm A');\n }, [message]);\n\n return (\n \n {isLeadUser ? lead.firstName : 'you'}\n {message.text}\n {formattedDate}\n \n );\n}\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { LeadPhoneType } from '@cobuildlab/lead-volt-share';\nimport { useEvent } from '@cobuildlab/react-simple-state';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnLeadMessageCreate, OnLeadMessageCreateError } from '../../leads-store';\nimport { onPhoneNumberList } from '../../../phone-calls/phone-calls-events';\nimport { getBestPhoneNumber } from '../../../phone-calls/phone-calls-utils';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport { SelectField, TextAreaField, Card } from '@8base/boost';\nimport { DialogForm } from '../../../../shared/components';\nimport { getLeadPhoneNumbers } from '../../leads-utils';\nimport { createSms } from '../../leads-actions';\nimport { FileInput } from '@8base-react/file-input';\nimport PlusBtn from '../../../../shared/components/ui/buttons/PlusBtn';\nimport { FaMinusCircle } from 'react-icons/fa';\nimport * as Toast from '../../../../shared/components/toast/Toast';\nimport { useUser } from '../../../../shared/hooks/useUser';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport { OnApolloClient } from 'shared/session/session-events';\nimport gql from 'graphql-tag';\nimport { fetchSession } from 'modules/auth/auth.actions';\nimport { Message } from './Message';\n\nconst MsgContainer = styled.div`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n row-gap: 12px;\n`;\nconst MsgNumber = styled.div`\n grid-column: 1/-1;\n`;\nconst MsgBody = styled.div`\n grid-column: 1/-1;\n & textarea {\n height: 55px;\n }\n`;\n\nconst IconDelete = styled(FaMinusCircle)`\n width: 30px;\n cursor: pointer;\n color: #bababa;\n`;\n\nconst CardMargin = styled(Card)`\n margin: 20px 20px 20px 20px;\n`;\n\nconst Row = styled.div`\n display: flex;\n width: 100%;\n justify-content: space-between;\n margin-bottom: 5px;\n`;\n\nconst RowPhone = styled.div`\n display: flex;\n width: 100%;\n justify-content: space-between;\n`;\n\nconst MsgHistory = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n gap: 1em;\n`;\n\nconst TitleCardHeader = styled.p`\n font-size: 16px;\n line-height: 28px;\n`;\n\nconst TitlePhones = styled.p`\n font-size: 14px;\n line-height: 22px;\n`;\n\nconst TextBody = styled.p`\n font-size: 12px;\n text-aling: center;\n width: 100%;\n`;\n\nconst MsgForm = ({ onClose, isOpen, lead, agencyId, messages = [] }) => {\n // eslint-disable-next-line\n const client = OnApolloClient.get();\n const [msg, setMsg] = useState('');\n const [user] = useUser();\n const [numbers, setNumbers] = useState([]);\n const [selected, setSelected] = useState('');\n const [files, setFiles] = useState([]);\n const [loading, setLoading] = useState(false);\n const phoneNumbers = useEvent(onPhoneNumberList);\n const [userId, setUserId] = useState(null);\n\n const handlePhoneNumbersFrom = () => {\n if (\n user?.selectedAgency?.phoneNumbersRelation?.items &&\n user.selectedAgency.phoneNumbersRelation.items.length > 0\n ) {\n return user.selectedAgency.phoneNumbersRelation.items;\n }\n if (phoneNumbers.length > 0) return phoneNumbers;\n return [];\n };\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n const sessionData = await fetchSession();\n //console.log('session from msgform', sessionData);\n\n // Assuming the sessionData contains the user information\n const user = sessionData.user.id;\n setUserId(user); // Set the user state with the retrieved data\n //console.log('USER ID FROM MSG FORM', userId);\n } catch (error) {\n // Handle errors\n console.log('error fetching user in msg form', error);\n }\n };\n\n fetchData();\n }, []);\n\n useEffect(() => {\n const phones = getLeadPhoneNumbers(lead);\n\n setNumbers(phones);\n\n if (phones && phones.length > 0) {\n setSelected(phones[0].id);\n }\n }, [lead]);\n\n useSubscription(\n OnLeadMessageCreate,\n () => {\n setLoading(false);\n onClose();\n setMsg('');\n setFiles([]);\n },\n [onClose],\n );\n\n useSubscription(\n OnLeadMessageCreateError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n const QUERY_AGENCY_TYPE = gql`\n query FETCH_AGENCY_TYPE($id: ID) {\n user(id: $id) {\n selectedAgency {\n twilioBusinessType\n }\n }\n }\n `;\n\n const onSubmit = async () => {\n const phoneNumbersFrom = handlePhoneNumbersFrom();\n let agencyTypeQuery;\n\n if (phoneNumbersFrom.length === 0) {\n return Toast.error(\n 'This agency does not have any phone number, please buy one to send an sms',\n );\n }\n setLoading(true);\n\n const number = numbers.find((n) => n.id === selected);\n\n try {\n agencyTypeQuery = await client.query({\n query: QUERY_AGENCY_TYPE,\n fetchPolicy: 'no-cache',\n variables: { id: user.id },\n });\n } catch (e) {\n console.error('error on agency types query', e);\n }\n const agencyType = agencyTypeQuery?.data?.user?.selectedAgency?.twilioBusinessType;\n\n const from = getBestPhoneNumber(\n phoneNumbersFrom,\n number.phone.number,\n agencyType === 'Sole Proprietorship', //to determine if number used must be toll-free\n );\n console.log('from msg', from);\n createSms({\n text: msg,\n number: number.phone,\n lead: lead.id,\n user: user.id,\n from: from.id,\n agency: agencyId,\n leadPhoneNumber: number.id,\n files: files,\n });\n };\n\n const addFile = (value) => {\n const aux = [...files];\n aux.push(value);\n setFiles(aux);\n };\n\n const deleteFile = (i) => {\n const aux = files.filter((file) => {\n return file !== files[i];\n });\n\n setFiles(aux);\n };\n\n const fileList = files.map((file, i) => {\n return (\n \n {file.filename}\n deleteFile(i)} />\n \n );\n });\n\n const options = useMemo(\n () =>\n numbers\n .filter(({ type, phone }) => {\n if (!type) return !!phone.code && !!phone.number && phone.__typename === 'SmartPhone';\n return !!phone.code && !!phone.number && type === LeadPhoneType.MOBILE;\n })\n .map((phone) => ({\n label: `+${phone.phone.code} ${phone.phone.number}`,\n value: phone.id,\n })),\n [numbers],\n );\n\n const invalidOptions = useMemo(\n () =>\n numbers\n .filter(({ type, phone }) => {\n if (!type) return !!phone.code && !!phone.number && phone.__typename !== 'SmartPhone';\n return !!phone.code && !!phone.number && type !== LeadPhoneType.MOBILE;\n })\n .map((phone, i) => (\n \n \n +{phone.phone.code} {phone.phone.number}\n \n \n )),\n [numbers],\n );\n\n let invalidPhoneContent;\n if (invalidOptions.length) {\n invalidPhoneContent = (\n \n \n \n \n This numbers are invalid or unreachable\n \n \n {invalidOptions}\n \n \n );\n }\n\n return (\n onSubmit()}\n onCloseDialog={onClose}\n tabs={['Send text message', 'Messages']}>\n \n \n \n \n {invalidPhoneContent}\n \n setMsg(value),\n }}\n />\n \n \n \n Files \n {\n addFile(file);\n }}\n value={'input.value'}\n maxFiles={1}>\n {({ pick }) => pick()} />}\n \n \n \n \n {fileList.length < 1 ? There are no files : fileList}\n \n \n \n \n \n {messages.length > 0\n ? messages.map((message, idx) => {\n return ;\n })\n : 'No messages yet.'}\n \n \n );\n};\n\nMsgForm.defaultProps = {\n messages: [],\n};\n\nMsgForm.propTypes = {\n onClose: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n lead: PropTypes.object.isRequired,\n agencyId: PropTypes.string.isRequired,\n messages: PropTypes.array,\n};\n\nexport default MsgForm;\n","import { ValidationError } from '../../../shared/errors';\nimport { isValidString } from '../../../shared/validators';\n\n/**\n * Validate that the Note has all the fields necessaries with the right format.\n *\n * @param {object} note - the note to be validated\n */\nexport const createNoteValidator = (note) => {\n let errorMessages = [];\n\n if (!isValidString(note.title)) errorMessages.push('The Note must have a valid title.');\n\n if (!isValidString(note.text) || note.text.lenght > 245)\n errorMessages.push('The Note text must be valid, between 1 and 245 characters.');\n\n if (errorMessages.length !== 0) throw new ValidationError(errorMessages);\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const onLeadNoteUpdate = createEvent();\n\nexport const onLeadNoteDelete = createEvent();\n\nexport const OnFetchLeadNotes = createEvent();\n\nexport const OnFetchLeadNotesError = createEvent();\n\nexport const OnNoteCreateEvent = createEvent();\n\nexport const OnNoteError = createEvent();\n","import { createAction } from '@cobuildlab/react-simple-state';\nimport { error, log } from '@cobuildlab/pure-logger';\nimport {\n NOTE_CREATE_MUTATION,\n NOTE_UPDATE_MUTATION,\n NOTE_DELETE_MUTATION,\n FETCH_LEAD_NOTES,\n} from './leads-notes-queries';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport { sanitize8BaseReference } from 'shared/utils';\nimport { createNoteValidator } from './leads-notes-validators';\nimport {\n onLeadNoteUpdate,\n onLeadNoteDelete,\n OnFetchLeadNotes,\n OnFetchLeadNotesError,\n OnNoteCreateEvent,\n OnNoteError,\n} from './leads-notes-events';\n\n/**\n * Creates a lead note\n *\n * @param {object} note lead note\n * @returns {object} response data\n */\nexport const createNote = async (note) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n createNoteValidator(note);\n } catch (e) {\n error('createNote', e);\n return OnNoteError.dispatch(e);\n }\n\n sanitize8BaseReference(note, 'notesLeadRelation');\n\n try {\n response = await client.mutate({\n mutation: NOTE_CREATE_MUTATION,\n variables: { data: note },\n });\n } catch (e) {\n error('createNote', e);\n return OnNoteError.dispatch(e);\n }\n\n log('createNote', response);\n OnNoteCreateEvent.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Update a lead note\n *\n * @param {object} note lead note\n * @returns {object} response data\n */\nexport const updateNote = async (note) => {\n const client = OnApolloClient.get();\n\n let response;\n\n try {\n createNoteValidator(note);\n } catch (e) {\n error('createNote', e);\n return OnNoteError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: NOTE_UPDATE_MUTATION,\n variables: { data: note },\n });\n } catch (e) {\n error('updateNote', e);\n return OnNoteError.dispatch(e);\n }\n\n log('updateNote', response);\n onLeadNoteUpdate.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Delete a lead note\n *\n * @param {string} id lead note\n * @returns {object} response data\n */\nexport const deleteNote = async (id) => {\n const client = OnApolloClient.get();\n\n let response;\n\n try {\n response = await client.mutate({\n mutation: NOTE_DELETE_MUTATION,\n variables: { id },\n });\n } catch (e) {\n error('deleteNote', e);\n return OnNoteError.dispatch(e);\n }\n\n log('deleteNote', response);\n onLeadNoteDelete.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Fetches the notes from the specified lead\n *\n * @param {string} lead - The lead id\n *\n * @returns {Promise} The request result\n */\nexport const fetchLeadNotes = createAction(\n OnFetchLeadNotes,\n OnFetchLeadNotesError,\n async (lead) => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_LEAD_NOTES,\n fetchPolicy: 'network-only',\n variables: {\n filterLeadNotes: {\n notesLeadRelation: {\n id: {\n equals: lead,\n },\n },\n },\n filterDispositionNotes: {\n notes: {\n is_not_empty: true,\n },\n lead: {\n id: {\n equals: lead,\n },\n },\n },\n },\n });\n\n return response.data;\n },\n);\n","import React, { useState, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport { TextAreaField, InputField } from '@8base/boost';\nimport { DialogForm } from '../../../../shared/components';\nimport { createNote, updateNote } from '../../leads-notes/leads-notes-actions';\n\nconst NoteContainer = styled.div`\n display: grid;\n grid-template-columns: 1fr;\n row-gap: 12px;\n column-gap: 15px;\n`;\n\nconst TextAreaContainer = styled.div`\n & textarea {\n height: 85px;\n }\n`;\n\nconst Noteform = ({ isOpen, onClose, leadId, note: selectedNote }) => {\n const [title, setTitle] = useState('');\n const [note, setNote] = useState('');\n const [loading, setLoading] = useState(false);\n const isUpdate = selectedNote;\n\n useEffect(() => {\n if (!selectedNote) return;\n\n setNote(selectedNote.text);\n setTitle(selectedNote.title);\n }, [selectedNote]);\n\n useEffect(() => {\n if (!isOpen) {\n setTitle('');\n setNote('');\n }\n }, [isOpen]);\n\n const noteCreateHandler = async () => {\n const data = {\n text: note,\n title,\n notesLeadRelation: leadId,\n };\n\n setLoading(true);\n\n const result = await createNote(data);\n\n setLoading(false);\n\n if (result) {\n onClose();\n setTitle('');\n setNote('');\n }\n };\n\n const noteUpdateHandler = async () => {\n const data = {\n text: note,\n title,\n id: selectedNote.id,\n };\n setLoading(true);\n\n const result = await updateNote(data);\n\n setLoading(false);\n\n if (result) {\n onClose();\n }\n };\n\n return (\n \n \n setTitle(value),\n }}\n />\n \n setNote(value),\n }}\n />\n \n\n {/* */}\n \n \n );\n};\n\nNoteform.propTypes = {\n leadId: PropTypes.string.isRequired,\n onClose: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n note: PropTypes.object,\n};\nNoteform.defaultProps = {\n note: null,\n};\nexport default Noteform;\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport { useHistory } from 'react-router-dom';\n\nimport { Menu, Icon, Dropdown, Table } from '@8base/boost';\nimport { DropdownBodyOnTable } from 'shared/components';\n\nimport informationIcon from 'shared/assets/images/information.svg';\nimport callIcon from 'shared/assets/images/call-green.svg';\n\nimport MsgForm from './forms/MsgForm';\nimport NoteForm from './forms/NoteForm';\nimport { PhoneNumber } from '../../phone-calls/Components/PhoneNumber';\nimport { getLeadFullName, getLeadPhoneNumbers } from '../leads-utils';\n\nconst ActionsCell = styled(Table.BodyCell)`\n display: flex;\n justify-content: space-around !important;\n`;\n\nconst CustomIcon = styled.img`\n width: 23px;\n height: 23px;\n cursor: pointer;\n min-width: 23px;\n`;\n\nconst MenuItem = styled(Menu.Item)`\n color: ${({ danger }) => (danger ? '#FF0000' : 'rgb(50, 60, 71)')}!important;\n &:hover {\n ${({ danger }) => (danger ? '' : 'color: #3db4aa !important;')}\n }\n`;\n\nconst LeadActions = ({ lead, onDelete, setLeadForTask, canDelete, agencyId }) => {\n const [isNoteModalOpen, setIsNoteModalOpen] = useState(false);\n const [isMsgModalOpen, setIsMsgModalOpen] = useState(false);\n const history = useHistory();\n\n let dropdown = (\n \n \n \n \n \n {({ closeDropdown }) => (\n \n {\n setIsMsgModalOpen((prev) => !prev);\n closeDropdown();\n }}>\n Send Message\n \n {\n setIsNoteModalOpen((prev) => !prev);\n closeDropdown();\n }}>\n Add Note\n \n {\n setLeadForTask(lead.id);\n closeDropdown();\n }}>\n Add Task\n \n \n )}\n \n \n );\n if (canDelete) {\n dropdown = (\n \n \n \n \n \n {({ closeDropdown }) => (\n \n {\n setIsMsgModalOpen((prev) => !prev);\n closeDropdown();\n }}>\n Send Message\n \n {\n setIsNoteModalOpen((prev) => !prev);\n closeDropdown();\n }}>\n Add Note\n \n {\n setLeadForTask(lead.id);\n closeDropdown();\n }}>\n Add Task\n \n {\n onDelete();\n closeDropdown();\n }}>\n Delete Lead\n \n \n )}\n \n \n );\n }\n const phones = getLeadPhoneNumbers(lead);\n return (\n <>\n \n {phones && phones.length > 0 && (\n \n \n \n )}\n history.push(`/leads/${lead.id}`)}\n alt=\"lead detail icon\"\n />\n {dropdown}\n {\n setIsMsgModalOpen(false);\n }}\n />\n {\n setIsNoteModalOpen(false);\n }}>\n \n >\n );\n};\n\nLeadActions.propTypes = {\n agencyId: PropTypes.string.isRequired,\n onDelete: PropTypes.func.isRequired,\n lead: PropTypes.object.isRequired,\n setLeadForTask: PropTypes.any.isRequired,\n canDelete: PropTypes.bool.isRequired,\n};\n\nexport default LeadActions;\n","import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react';\nimport { Card, Table, Dropdown, Menu, Pagination, Paper, Button, Icon } from '@8base/boost';\nimport { useHistory } from 'react-router-dom';\nimport SearchInput from '../email/components/SearchInput';\nimport { useAgencyLeads } from './hooks/useAgencyLeads';\nimport styled from 'styled-components';\nimport * as R from 'ramda';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { OnLeadMessageCreate } from './leads-store';\nimport { deleteLeads, fetchLeadTaskTypes, assignUsersToLeads } from './leads-actions';\nimport LeadCell from './components/LeadCell';\nimport LeadFilter from './components/LeadFilter';\nimport LeadsDialog from './components/LeadsDialog';\nimport LeadFormDialog from './components/LeadFormDialog';\nimport LeadAssignUserDialog from './components/LeadAssignUserDialog';\nimport { SORT_OPTIONS, TABLE_COLUMNS, ACTIVE_COLUMNS } from './leads-model';\nimport { fetchAgents } from '../agents/agents-actions';\nimport sortTableIcon from '../../shared/assets/images/table-sort-grey.svg';\nimport { canSeeBatchActions, canDeleteLeads, getColumnsSizes } from './leads-utils';\nimport TaskForm from './components/forms/TaskForm';\nimport {\n DropdownBodyOnTable,\n ItemFilter,\n RadioInputField,\n ListCardBody as ListCard,\n Loader,\n} from '../../shared/components';\nimport * as toast from '../../shared/components/toast/Toast';\nimport LeadActions from './components/LeadActions';\nimport { fetchCampaignsLight } from '../campaigns/campaigns-actions';\nimport { useLeadStages } from '../phone-calls/phone-calls-hooks';\nimport { useAgency } from '../../shared/hooks/useAgency';\nimport { useUser } from '../../shared/hooks/useUser';\nimport { onLeadDispositionCreate } from '../phone-calls/phone-calls-events';\nimport {\n OnAssignUserstoLeadError,\n OnAssignUserstoLeadEvent,\n OnDeleteLeadsResult,\n OnLeadCreateEvent,\n onTaskCreate,\n} from './leads-events';\nimport { useURLQuery } from '../../shared/hooks/useURLQuery';\nimport { OnCampaignsList } from 'modules/campaigns/campaign-events';\nimport { OnNoteCreateEvent } from './leads-notes/leads-notes-events';\n\nconst SortFilter = styled(ItemFilter)`\n & input {\n max-width: 180px !important;\n min-width: 120px !important;\n }\n`;\n\nconst TableBody = styled(Table.Body)`\n max-height: 50vh;\n height: 50vh;\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst CustomHeader = styled.div`\n width: 100px;\n text-transform: uppercase;\n height: 17px;\n color: #9b9b9b;\n font-family: 'Poppins';\n font-size: 11px;\n font-weight: bold;\n letter-spacing: 0.5px;\n line-height: 18px;\n`;\n\nconst CustomGrid = styled.div`\n display: grid;\n width: ${(props) => props.width};\n grid-template-columns: ${(props) => props.columns};\n column-gap: ${(props) => props.columnGap};\n grid-template-areas: ${(props) => props.areas};\n ${(props) => (props.alignItems ? `align-items:${props.alignItems} ` : '')};\n`;\n\nconst CustomGridCell = styled.div`\n grid-area: ${(props) => props.area};\n display: flex;\n ${(props) =>\n props.area === 'right'\n ? `\n align-items: center;\n justify-content: flex-end;\n > div {\n margin-left: 15px;\n }\n > button {\n margin-left: 15px;\n }\n `\n : `\n align-items: center;\n justify-content: flex-start;\n > div {\n margin-right: 15px;\n }\n `};\n`;\n\nconst PaginationContainer = styled.div`\n display: flex;\n justify-content: center;\n font-size: 1.2rem;\n padding: 0 1rem;\n & > div > div > *::before {\n background-color: var(--color-primary);\n transition: all 0.2s;\n }\n & > div > span {\n display: inline-block;\n padding: 0.5rem 1.5rem;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n }\n`;\n\nconst CustomBtn = styled.button`\n max-width: 200px;\n min-width: 130px;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n border-radius: 5px;\n padding: 8px 0px;\n box-sizing: border-box;\n cursor: pointer;\n border: 1px solid #d0d7dd;\n background-color: #ffffff;\n opacity: 0.9;\n color: #323c47;\n font-family: 'Poppins';\n font-size: 13px;\n line-height: 18px;\n text-align: center;\n font-weight: 400;\n & strong {\n font-weight: 600 !important;\n }\n &:focus {\n outline: none;\n }\n\n ${({ disabled }) => (disabled ? 'cursor: not-allowed;' : '')};\n`;\n\nconst CreateButton = styled(CustomBtn)`\n &:hover {\n box-shadow: 0 2px 4px 0 rgba(50, 50, 93, 0.2);\n }\n &:active {\n box-shadow: inset 0 1px 3px 0 rgba(50, 50, 93, 0.14), inset 0 4px 6px 0 rgba(51, 80, 107, 0.08);\n }\n > span:not(:last-child) {\n margin-right: 5px;\n }\n`;\n\nconst BtnText = styled.span`\n color: #3db4aa;\n font-size: 1.5rem;\n font-weight: 600;\n line-height: 2rem;\n`;\n\nconst ListCardBody = styled(ListCard)`\n padding: 0 !important;\n`;\n\nconst SortTableBtn = styled.div`\n display: flex;\n border-radius: 5px;\n border: solid 1px ${({ active }) => (active ? '#3db4aa' : '#d0d7dd')};\n width: 36px;\n height: 36px;\n box-sizing: border-box;\n justify-content: center;\n align-items: center;\n &::before {\n content: '';\n display: inline-block;\n height: 20px;\n width: 17px;\n background-color: ${({ active }) => (active ? '#3db4aa' : '#aeb7be')};\n -webkit-mask-image: url(${(props) => props.src});\n -webkit-mask-size: cover;\n mask-image: url(${(props) => props.src});\n mask-size: cover;\n }\n &:focus::before {\n background-color: #3db4aa;\n }\n`;\n\nconst SortTableConfirm = styled.div`\n border-top: 1px solid #d0d7dd;\n padding: 10px 15px;\n display: flex;\n align-items: center;\n justify-content: space-around;\n`;\nconst SortTableConfirmOptions = styled.span`\n color: ${(props) => (props.active ? '#3db4aa' : '#384A59')};\n cursor: pointer;\n`;\n\nconst SortTableMenu = styled(Menu)`\n padding-bottom: 0 !important;\n`;\n\nconst MenuItem = styled(Menu.Item)`\n color: #323c47 !important;\n padding: 0 !important;\n height: auto !important;\n`;\n\nconst RadioButton = styled.span`\n height: 22px;\n width: 22px;\n border: 1px solid #d0d7dd;\n border-radius: 4px;\n display: inline-block;\n position: absolute;\n left: 15px;\n &::after {\n height: 10px;\n width: 10px;\n content: '';\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: #3db4aa;\n opacity: 0;\n }\n`;\n\nconst RadioInput = styled.input`\n display: none;\n &:checked ~ label span::after {\n opacity: 1;\n }\n`;\n\nconst RadioLabel = styled.label`\n padding: 10px 30px 10px 50px;\n display: flex;\n align-items: center;\n width: 100%;\n cursor: pointer;\n`;\n\nconst HeaderCellContainer = styled.div`\n display: flex;\n align-items: center;\n font-weight: bold;\n`;\n\nconst BatchHeader = styled(CustomHeader)`\n height: auto;\n margin-left: 0 !important;\n`;\n\nconst TableRow = styled(Table.BodyRow)`\n ${(props) => (props.active ? `background-color: #fcfcfc !important` : '')};\n`;\n\nconst StyledHeaderCell = styled(Table.HeaderCell)`\n padding-left: 24px !important;\n`;\n\nconst StyledTableHeader = styled(Table.Header)`\n height: 36px !important;\n`;\n\nconst CardHeader = styled(Card.Header)`\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n`;\n\nconst LeadsView = () => {\n const history = useHistory();\n const agency = useAgency();\n const [sort, setSort] = useState('newest');\n const [assignUsersLoading, setAssignUsersLoading] = useState(false);\n const [deletingLead, setDeletingLead] = useState(false);\n const [selectedLeads, setSelectedLeads] = useState([]);\n const [selectedLead, setSelectedLead] = useState('');\n const [leadForTask, setLeadForTask] = useState();\n const [isOpenDelete, setIsOpenDelete] = useState(false);\n const [isOpenAssignUser, setIsOpenAssignUser] = useState(false);\n const [sortTableActive, setSortTableActive] = useState(false);\n const [tableColumns, setTableColumns] = useState(() => R.clone(TABLE_COLUMNS));\n const [activeColumns, setActiveColumns] = useState(() => R.clone(ACTIVE_COLUMNS));\n const [agents, setAgents] = useState([]);\n const [users, setUsers] = useState([]);\n const [isOpenForm, setIsOpenForm] = useState(false);\n const [isTaskModalOpen, setIsTaskModalOpen] = useState(false);\n // eslint-disable-next-line\n const [leadTaskTypeList, setLeadTaskTypeList] = useState([]);\n const [user] = useUser();\n const paginationCtnRef = useRef();\n const [campaigns, setCampaigns] = useState([]);\n const [query, setQuery] = useURLQuery();\n\n const { items, count, loading, error, page, setPage, refresh } = useAgencyLeads(\n agency.id,\n sort,\n query || {},\n );\n\n const onSubmitSearch = useCallback(\n (value) => {\n setQuery('/leads', {\n ...query,\n search: value || undefined,\n });\n },\n [query, setQuery],\n );\n\n const onSubmitFilters = useCallback(\n (filters) => {\n setQuery('/leads', {\n ...query,\n ...filters,\n });\n },\n [query, setQuery],\n );\n\n const onClearFilters = useCallback(() => {\n setQuery('/leads', {\n search: query.search || undefined,\n });\n }, [query.search, setQuery]);\n\n useEffect(() => {\n setSelectedLeads([]);\n }, [page]);\n\n useEffect(() => {\n if (error) {\n toast.error(error.message);\n }\n }, [error]);\n\n useEventSubscription(OnLeadCreateEvent, (data) => {\n if (data) {\n toast.success('Lead Management', 'Lead Successfully Created');\n }\n });\n\n useEventSubscription(OnDeleteLeadsResult, (data) => {\n if (data) {\n setDeletingLead(false);\n refresh();\n setIsOpenDelete(false);\n\n if (data) {\n const { success, errors } = data;\n\n if (errors) {\n toast.warn(`${errors} lead${errors > 1 ? 's' : ''} could not be deleted`);\n }\n\n if (success) {\n toast.success('Success', `${success} lead${success > 1 ? 's' : ''} successfully deleted`);\n }\n }\n }\n });\n\n useEventSubscription(OnAssignUserstoLeadEvent, ({ success }) => {\n setAssignUsersLoading(false);\n setIsOpenAssignUser(false);\n setSelectedLeads([]);\n refresh();\n toast.success('Lead Management', `Users assigned to lead${success > 1 ? 's' : ''}`);\n });\n\n useEventSubscription(OnAssignUserstoLeadError, ({ success, errors }) => {\n setAssignUsersLoading(false);\n setIsOpenAssignUser(false);\n setSelectedLeads([]);\n refresh();\n\n if (errors) {\n toast.warn(`${errors} lead${errors > 1 ? 's' : ''} could not assign users`);\n }\n\n if (success) {\n toast.success('Success', `${success} lead${success > 1 ? 's' : ''} successfully assigned`);\n }\n });\n\n useEventSubscription(OnNoteCreateEvent, () => {\n toast.success('Lead Management', 'Note Created!');\n refresh();\n });\n\n useEventSubscription(OnCampaignsList, (data) => {\n if (data) {\n setCampaigns(data?.campaignsList?.items || []);\n }\n });\n\n useEventSubscription(\n onTaskCreate,\n () => {\n toast.success('Lead Management', 'Task Created!');\n refresh();\n },\n [refresh],\n );\n\n useEventSubscription(\n OnLeadMessageCreate,\n (data) => {\n if (data !== null) {\n toast.success('Lead Management', 'Message sent successfully!');\n }\n refresh();\n },\n [refresh],\n );\n\n useEventSubscription(\n onLeadDispositionCreate,\n () => {\n refresh();\n },\n [refresh],\n );\n\n const handleOpenForm = () => setIsOpenForm(true);\n\n const handleCloseForm = () => setIsOpenForm(false);\n\n const leadCheckboxChangeHandler = (id) => {\n setSelectedLeads((oldSelectedList) => {\n let newSelectedList;\n if (oldSelectedList.includes(id)) {\n newSelectedList = oldSelectedList.filter((oldId) => oldId !== id);\n } else {\n newSelectedList = oldSelectedList.concat([id]);\n }\n return newSelectedList;\n });\n };\n\n const headerCheckboxHandler = useCallback(() => {\n setSelectedLeads((oldSelectedLeads) => {\n let newSelectedLeads;\n if (oldSelectedLeads.length === items.length) {\n newSelectedLeads = [];\n } else {\n newSelectedLeads = items.map((lead) => lead.id);\n }\n return newSelectedLeads;\n });\n }, [items]);\n\n const tableSortHandler = useCallback(\n (sortIdentifier) => {\n const newColumnList = { ...tableColumns };\n newColumnList[sortIdentifier] = { ...tableColumns[sortIdentifier] };\n newColumnList[sortIdentifier].active = !newColumnList[sortIdentifier].active;\n setTableColumns(newColumnList);\n },\n [tableColumns],\n );\n const confirmSortTableHandler = (closeDropdown) => {\n const newActiveList = [];\n for (const key in tableColumns) {\n const columnClone = { ...tableColumns[key] };\n if (columnClone.active) {\n newActiveList.push(columnClone.value);\n }\n }\n setActiveColumns(newActiveList);\n setSortTableActive(false);\n closeDropdown();\n };\n const cancelSortTableHandler = (closeDropdown) => {\n const newLeadsColumns = { ...tableColumns };\n for (const key in newLeadsColumns) {\n newLeadsColumns[key] = { ...tableColumns[key] };\n if (activeColumns.includes(newLeadsColumns[key].value)) {\n newLeadsColumns[key].active = true;\n }\n }\n setTableColumns(newLeadsColumns);\n setSortTableActive(false);\n closeDropdown();\n };\n\n const deleteLeadsHandler = (leads) => {\n setDeletingLead(true);\n\n let leadsToDelete;\n if (typeof leads === 'string') {\n leadsToDelete = [leads];\n setSelectedLead('');\n if (selectedLeads.includes(leads)) {\n setSelectedLeads((prevValue) => {\n return prevValue.filter((l) => l !== leads);\n });\n }\n } else {\n leadsToDelete = [...selectedLeads];\n setSelectedLeads([]);\n }\n\n deleteLeads(leadsToDelete);\n };\n const onDeleteLeads = useCallback(\n (leadId) => {\n if (leadId || selectedLeads.length > 0) {\n if (leadId) {\n setSelectedLead(leadId);\n }\n setIsOpenDelete(true);\n }\n },\n [selectedLeads],\n );\n\n const onAssignUsersLeads = useCallback(\n (leadId) => {\n if (leadId || selectedLeads.length > 0) {\n if (leadId) {\n setSelectedLead(leadId);\n }\n setIsOpenAssignUser(true);\n }\n },\n [selectedLeads],\n );\n\n const handleOnAssingUserClose = () => {\n if (selectedLead.length > 0) {\n setSelectedLead('');\n }\n\n setIsOpenAssignUser(false);\n };\n\n const handleAssingUsersToLeads = useCallback(\n async (selectedUsers) => {\n const filteredLeads = items.filter((lead) => selectedLeads.includes(lead.id));\n\n if (filteredLeads.length) {\n setAssignUsersLoading(true);\n assignUsersToLeads(filteredLeads, selectedUsers);\n }\n },\n [items, selectedLeads],\n );\n\n const handleOnYes = () => {\n if (selectedLead.length > 0) {\n deleteLeadsHandler(selectedLead);\n } else {\n deleteLeadsHandler(selectedLeads);\n }\n };\n const handleOnNo = () => {\n if (selectedLead.length > 0) {\n setSelectedLead('');\n }\n setIsOpenDelete(false);\n };\n\n const handleOnClickBtnCsv = () => {\n if (campaigns.length === 0) {\n toast.error('This operation is not possible without campaigns');\n } else {\n history.push('/leads/upload', {\n params: {\n previousPath: '/leads/upload',\n campaigns,\n agency,\n },\n });\n }\n };\n\n useEffect(() => {\n fetchLeadTaskTypes().then((data) => {\n setLeadTaskTypeList(data.leadTaskTypesList.items);\n });\n\n paginationCtnRef.current.children[0].children[3].childNodes[5].textContent = ' leads';\n }, [agency.id]);\n\n useEffect(() => {\n fetchCampaignsLight({\n filterData: { agency: agency.id },\n });\n\n fetchAgents({ agency: agency.id }).then((data) => {\n if (data.agentsList) {\n setAgents(data.agentsList.items.map((item) => item.user));\n setUsers(data.agentsList.items.map((item) => item.user));\n }\n });\n }, [agency.id]);\n\n const leadStages = useLeadStages();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const columnsSize = useMemo(() => getColumnsSizes(tableColumns), [activeColumns]);\n\n const headerCols = useMemo(\n () =>\n activeColumns.map((col) => {\n let icon;\n\n return (\n \n \n {col}\n {icon}\n \n \n );\n }),\n [activeColumns],\n );\n\n const tableHeader = useMemo(\n () => (\n \n \n {items && (\n \n )}\n \n {headerCols}\n Actions\n \n ),\n [columnsSize, headerCheckboxHandler, headerCols, items, selectedLeads.length],\n );\n\n const sortColumns = useMemo(\n () =>\n Object.entries(tableColumns).map(([identifier, column]) => {\n return (\n {}}>\n \n tableSortHandler(identifier)}>\n \n {column.value}\n \n \n );\n }),\n [tableColumns, tableSortHandler],\n );\n\n const batchActions = canSeeBatchActions(user, agency) && (\n <>\n Batch Actions\n \n Assign to Leads\n \n \n Delete Leads\n \n {/* Assign to agent */}\n >\n );\n\n const setTaskModal = useCallback((lead) => {\n setIsTaskModalOpen(true);\n setLeadForTask(lead);\n }, []);\n\n //console.log('selected leads', selectedLeads);\n return (\n \n \n \n \n \n \n \n \n \n \n {batchActions}\n \n \n setSortTableActive(!sortTableActive)}\n />\n \n \n {({ closeDropdown }) => (\n \n {sortColumns}\n \n {\n confirmSortTableHandler(closeDropdown);\n }}>\n Accept\n \n {\n cancelSortTableHandler(closeDropdown);\n }}>\n Cancel\n \n \n \n )}\n \n \n <>\n \n Upload CSV\n \n \n \n Create Lead\n \n >\n \n \n \n \n \n {tableHeader}\n {loading ? (\n \n ) : (\n {}} data={items}>\n {(lead, index) => {\n // const isLast = index === leadsList.length - 1;\n // const pageLoader = isLast && loadingPage ? : null;\n const columnList = activeColumns.map((columnName) => (\n \n ));\n return (\n <>\n \n \n {\n leadCheckboxChangeHandler(lead.id);\n }}\n />\n \n {columnList}\n {\n onDeleteLeads(lead.id);\n }}\n lead={lead}\n />\n \n >\n );\n }}\n \n )}\n {isTaskModalOpen && (\n {\n setLeadForTask();\n setIsTaskModalOpen(false);\n }}\n onClose={() => {\n setIsTaskModalOpen(false);\n setLeadForTask();\n }}\n />\n )}\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default LeadsView;\n","import React from 'react';\nimport { Text } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport Field from '../../../shared/components/Field';\nimport { getFieldProps } from '../leads-utils';\nimport PropTypes from 'prop-types';\n\nexport class CsvPreviewCell extends React.PureComponent {\n render() {\n const { rowIndex, columnIndex, style, data } = this.props;\n\n if (rowIndex === 0) {\n const content = columnIndex === 0 ? '' : data.headers[columnIndex - 1];\n\n return (\n \n \n {content}\n \n \n );\n } else if (columnIndex === 0) {\n return (\n \n \n {rowIndex}\n \n \n );\n }\n\n const value = data.rows[rowIndex - 1][columnIndex - 1];\n const header = data.headers[columnIndex - 1];\n const fieldProps = getFieldProps(header, data.campaignOptions, data.ifsOptions);\n\n const onChange = (val) =>\n data.onChange(rowIndex - 1, columnIndex - 1, { target: { value: val } });\n\n return (\n \n \n data.onChange(rowIndex - 1, columnIndex - 1, e)}\n onChange={fieldProps.type === 'select' || fieldProps.type === 'date' ? onChange : null}\n {...fieldProps}\n />\n \n \n );\n }\n}\n\nCsvPreviewCell.propTypes = {\n rowIndex: PropTypes.number.isRequired,\n columnIndex: PropTypes.number.isRequired,\n style: PropTypes.object.isRequired,\n data: PropTypes.shape({\n headers: PropTypes.arrayOf(PropTypes.string).isRequired,\n rows: PropTypes.arrayOf(PropTypes.string).isRequired,\n campaignOptions: PropTypes.array.isRequired,\n ifsOptions: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n }).isRequired,\n};\n","import React, { useEffect, useState, useCallback, useRef } from 'react';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport PropTypes from 'prop-types';\nimport { Modal, Row, SelectField, Heading, Column, Button, Icon, Text } from '@8base/boost';\nimport { VariableSizeGrid } from 'react-window';\nimport { PrimaryBtn } from 'shared/components';\nimport { LEAD_CSV_FORMATS } from '../../../shared/constants';\nimport { LEAD_TYPE_OPTIONS } from '../leads-model';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { Box } from '../../../shared/components/Box';\nimport { CsvPreviewCell } from './CsvPreviewCell';\nimport { OnLeadsError } from '../leads-events';\n\nconst { RICOCHET } = LEAD_CSV_FORMATS;\n\n/**\n * Leads Csv data preview in dialog\n *\n * @param {object} props props component\n * @param {boolean} props.isOpen bool value for dialog\n * @param {Function} props.onClose handle for close the dialog\n * @param {Array} props.csvData array of data\n * @param {boolean} props.loading loading for PrimaryBtn\n * @param {Array} props.csvColumns columns for table header\n * @param {Function} props.onBlurInput handle on blur for each field\n * @param {Function} props.onUploadCsv handle for upload the CSV\n * @param {Array} props.campaignOptions campaigns options for select\n * @param {Array} props.ifsScoresOptions ifs scores of the agency\n * @returns {React.ReactElement} component\n */\nconst LeadsCsvPreviewDialog = ({\n isOpen,\n onClose,\n csvData,\n loading,\n csvColumns,\n csvFormat,\n onBlurInput,\n onUploadCsv,\n campaignOptions,\n ifsScoresOptions,\n}) => {\n const [campaign, setCampaign] = useState(null);\n const [leadsType, setLeadsType] = useState(LEAD_TYPE_OPTIONS[0].value);\n const [uploading, setUploading] = useState(false);\n const [isMassiveUpload, setMassiveUpload] = useState(false);\n const [height, setHeight] = useState(0);\n const [width, setWidth] = useState(0);\n const worker = useRef(null);\n const ref = useRef(null);\n\n useEventSubscription(OnLeadsError, () => {\n setUploading(false);\n });\n\n useEffect(() => {\n if (isOpen && ref.current) {\n setWidth(ref.current.clientWidth);\n setHeight(ref.current.clientHeight);\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (ref && ref.current) {\n let timeout = '';\n\n const onResize = () => {\n clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n setWidth(ref.current.clientWidth);\n setHeight(ref.current.clientHeight);\n }, 500);\n };\n\n window.addEventListener('resize', onResize);\n\n return () => {\n window.removeEventListener('resize', onResize);\n };\n }\n });\n\n useEffect(() => {\n if (window.Worker) {\n worker.current = new Worker('/workers/csv-validation.js');\n\n worker.current.addEventListener('message', ({ data }) => {\n setUploading(false);\n\n if (data.errors) {\n console.log('window.Worker data.errors', data.errors);\n const errors = [\n 'This may be because you selected a wrong format for the csv.',\n\n ...(data.errors?.arr || []),\n ];\n if (data.errors?.message) {\n errors.push(data.errors?.message);\n }\n\n return onErrorMixinFC({ arr: errors });\n }\n\n onUploadCsv(campaign, leadsType, data.leads);\n });\n\n return () => worker.current.terminate();\n }\n }, [campaign, leadsType, onUploadCsv]);\n\n useEffect(() => {\n if (!isOpen) {\n setUploading(false);\n }\n }, [isOpen]);\n\n useEffect(() => {\n setMassiveUpload(csvData.length > 2500);\n }, [csvData]);\n\n useEffect(() => {\n if (campaign === null && campaignOptions.length > 0) {\n setCampaign(campaignOptions[0].value);\n }\n }, [campaign, campaignOptions]);\n\n const onContinue = useCallback(() => {\n setUploading(true);\n\n if (worker.current) {\n worker.current.postMessage({\n headers: csvColumns,\n body: csvData,\n format: csvFormat,\n campaign,\n leadsType,\n });\n } else {\n setTimeout(() => onUploadCsv(campaign, leadsType, []), 1000);\n }\n }, [csvColumns, csvData, csvFormat, campaign, leadsType, onUploadCsv]);\n\n if (!isOpen) {\n return null;\n }\n\n const content = isMassiveUpload ? (\n \n \n Ready for uploading\n \n \n \n ) : (\n (index === 0 ? 50 : 250)}\n rowCount={csvData.length + 1}\n rowHeight={() => 50}\n height={height}\n width={width}\n itemData={{\n headers: csvColumns,\n rows: csvData,\n ifsOptions: ifsScoresOptions,\n campaignOptions: campaignOptions,\n onChange: onBlurInput,\n }}>\n {CsvPreviewCell}\n \n );\n\n return (\n \n \n \n Add Leads - Data Preview\n \n \n \n setCampaign(value),\n }}\n options={campaignOptions}\n />\n {csvFormat === RICOCHET && (\n \n )}\n \n \n {content}\n \n \n \n \n Cancel\n \n \n Upload CSV\n \n \n \n \n );\n};\n\nLeadsCsvPreviewDialog.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n csvData: PropTypes.array.isRequired,\n loading: PropTypes.bool.isRequired,\n csvColumns: PropTypes.array.isRequired,\n csvFormat: PropTypes.string.isRequired,\n onBlurInput: PropTypes.func.isRequired,\n onUploadCsv: PropTypes.func.isRequired,\n campaignOptions: PropTypes.array.isRequired,\n ifsScoresOptions: PropTypes.array.isRequired,\n};\n\nexport default LeadsCsvPreviewDialog;\n","import React, { useCallback, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDropzone } from 'react-dropzone';\nimport styled from 'styled-components';\nimport { fileToBase64 } from '../../shared/utils';\nimport { Text } from '@8base/boost';\nimport { Loader } from 'shared/components';\nimport { IconClose } from './ui/Icons';\n\nconst Dropzone = styled.div`\n width: 100%;\n padding: 30px;\n height: 100px;\n display: flex;\n cursor: pointer;\n position: relative;\n border-radius: 5px;\n align-items: center;\n box-sizing: border-box;\n justify-content: center;\n background-color: #ffffff;\n border: 1px dashed #d0d7dd;\n`;\n\nconst Label = styled.p`\n color: #878c93;\n font-size: 12px;\n line-height: 16px;\n margin-bottom: 5px;\n font-family: 'Poppins';\n`;\n\nconst TextDanger = styled(Text)`\n margin-top: 5px;\n`;\n\nconst TextDropzone = styled(Text)`\n color: #323c47;\n font-family: 'Poppins';\n font-size: 13px;\n letter-spacing: 0;\n line-height: 20px;\n font-weight: 600 !important;\n text-align: center;\n`;\n\nconst FileName = styled.span`\n margin-left: 6px;\n font-size: 16px;\n`;\n\nconst FileUpload = ({ text, label, accept, maxFiles, onChange, onClickRemoveFile }) => {\n const [files, setFiles] = useState([]);\n const [message, setMessage] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const onDrop = useCallback((acceptedFiles) => {\n // eslint-disable-next-line\n if (acceptedFiles.length <= maxFiles) {\n const newFiles = [];\n\n setIsLoading(true);\n acceptedFiles.forEach(async (file) => {\n const base64 = await fileToBase64(file);\n\n newFiles.push({\n ...file,\n preview: base64,\n });\n });\n\n setMessage('');\n setFiles(newFiles);\n onChange(acceptedFiles);\n } else {\n setMessage(`Only accept ${maxFiles} file${maxFiles > 1 ? 's' : ''}`);\n }\n // eslint-disable-next-line\n }, []);\n const handleOnClickClose = useCallback(\n (file) => {\n onClickRemoveFile();\n setIsLoading(false);\n setFiles(files.filter((_file) => file.preview !== _file.preview));\n },\n [files, onClickRemoveFile],\n );\n const { getRootProps, getInputProps } = useDropzone({ onDrop, accept });\n\n return (\n <>\n {label}\n {files.length ? (\n \n {files.map((file, key) => {\n return (\n \n handleOnClickClose(file)} />\n {file.path}\n \n );\n })}\n \n ) : (\n \n \n {isLoading ? : {text}}\n \n )}\n {message !== '' && {message}}\n >\n );\n};\n\nFileUpload.propTypes = {\n text: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n accept: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n maxFiles: PropTypes.number.isRequired,\n onClickRemoveFile: PropTypes.func.isRequired,\n};\n\nexport default FileUpload;\n","import React, { useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { PrimaryBtn } from 'shared/components';\nimport { Dialog, Button, Heading, Column, SelectField, Link } from '@8base/boost';\nimport FileUpload from '../../../shared/components/FileUpload';\nimport { LEAD_CSV_FORMATS, LEAD_CSV_FORMAT_OPTIONS } from '../../../shared/constants';\n\nimport leads from '../../../shared/assets/documents/csv/leads.csv';\nimport leads_drivers from '../../../shared/assets/documents/csv/leads_drivers.csv';\nimport leads_auto from '../../../shared/assets/documents/csv/leads_auto.csv';\nimport leads_auto_with_drivers from '../../../shared/assets/documents/csv/leads_auto_with_drivers.csv';\nimport leads_commercial_auto from '../../../shared/assets/documents/csv/leads_commercial_auto.csv';\nimport leads_commercial_auto_with_drivers from '../../../shared/assets/documents/csv/leads_commercial_auto_with_drivers.csv';\nimport leads_home from '../../../shared/assets/documents/csv/leads_home.csv';\nimport leads_home_with_drivers from '../../../shared/assets/documents/csv/leads_home_with_drivers.csv';\nimport leads_life from '../../../shared/assets/documents/csv/leads_life.csv';\nimport leads_life_with_drivers from '../../../shared/assets/documents/csv/leads_life_with_drivers.csv';\nimport leads_employee_benefits from '../../../shared/assets/documents/csv/leads_employee_benefits.csv';\nimport leads_employee_benefits_with_drivers from '../../../shared/assets/documents/csv/leads_employee_benefits_with_drivers.csv';\nimport leads_general_liability from '../../../shared/assets/documents/csv/leads_general_liability.csv';\nimport leads_general_liability_with_drivers from '../../../shared/assets/documents/csv/leads_general_liability_with_drivers.csv';\nimport leads_workers_compensation from '../../../shared/assets/documents/csv/leads_workers_compensation.csv';\nimport leads_workers_compensation_with_drivers from '../../../shared/assets/documents/csv/leads_workers_compensation_with_drivers.csv';\nimport leads_ricochet from '../../../shared/assets/documents/csv/leads_ricochet.csv';\n\nconst links = {\n [LEAD_CSV_FORMATS.STANDARD]: [\n {\n name: 'Leads',\n file: 'leads.csv',\n url: leads,\n },\n {\n name: 'Leads with Drivers',\n file: 'leads_drivers.csv',\n url: leads_drivers,\n },\n {\n name: 'Leads Type Auto',\n file: 'leads_auto.csv',\n url: leads_auto,\n },\n {\n name: 'Leads Type Auto with Drivers',\n file: 'leads_auto_with_drivers.csv',\n url: leads_auto_with_drivers,\n },\n {\n name: 'Leads Type Commercial Auto',\n file: 'leads_commercial_auto.csv',\n url: leads_commercial_auto,\n },\n {\n name: 'Leads Type Commercial Auto with Drivers',\n file: 'leads_commercial_auto_with_drivers.csv',\n url: leads_commercial_auto_with_drivers,\n },\n {\n name: 'Leads Type Home',\n file: 'leads_home.csv',\n url: leads_home,\n },\n {\n name: 'Leads Type Home with Drivers',\n file: 'leads_home_with_drivers.csv',\n url: leads_home_with_drivers,\n },\n {\n name: 'Leads Type Life',\n file: 'leads_life.csv',\n url: leads_life,\n },\n {\n name: 'Leads Type Life with Drivers',\n file: 'leads_life_with_drivers.csv',\n url: leads_life_with_drivers,\n },\n {\n name: 'Leads Type Employee Benefits',\n file: 'leads_employee_benefits.csv',\n url: leads_employee_benefits,\n },\n {\n name: 'Leads Type Employee Benefits with Drivers',\n file: 'leads_employee_benefits_with_drivers.csv',\n url: leads_employee_benefits_with_drivers,\n },\n {\n name: 'Leads Type General Liability',\n file: 'leads_general_liability.csv',\n url: leads_general_liability,\n },\n {\n name: 'Leads Type General Liability with Drivers',\n file: 'leads_general_liability_with_drivers.csv',\n url: leads_general_liability_with_drivers,\n },\n {\n name: 'Leads Type Workers Compensation',\n file: 'leads_workers_compensation.csv',\n url: leads_workers_compensation,\n },\n {\n name: 'Leads Type Workers Compensation with Drivers',\n file: 'leads_workers_compensation_with_drivers.csv',\n url: leads_workers_compensation_with_drivers,\n },\n ],\n [LEAD_CSV_FORMATS.RICOCHET]: [\n {\n name: 'Leads',\n file: 'leads_ricochet.csv',\n url: leads_ricochet,\n },\n ],\n};\n\n/**\n * Leads Csv upload in dialog\n *\n * @param {object} props props component\n * @param {boolean} props.isOpen bool value for dialog\n * @param {Function} props.onClose handle for close the dialog\n * @param {boolean} props.loading loading for PrimaryBtn\n * @param {Function} props.onClickContinue handle on click for btn continue\n * @param {Function} props.onChangeFileUpload handle on change for file upload\n * @param {Function} props.onClickRemoveFile handle on remove for file upload\n * @param {boolean} props.hasData bool value for check if has data CSV\n *\n * @returns {React.FC} The component to render\n */\nconst LeadsCsvUploadDialog = ({\n isOpen,\n onClose,\n loading,\n onClickContinue,\n onChangeFileUpload,\n onClickRemoveFile,\n hasData,\n}) => {\n const [format, setFormat] = useState(LEAD_CSV_FORMATS.STANDARD);\n\n const handleContinue = useCallback(() => {\n onClickContinue(format);\n }, [format, onClickContinue]);\n\n return (\n \n \n \n \n \n \n CSV Examples\n \n {links[format].map((link, key) => (\n \n {link.name}\n \n ))}\n \n \n \n \n \n Cancel\n \n \n Continue\n \n \n \n );\n};\n\nLeadsCsvUploadDialog.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n loading: PropTypes.bool.isRequired,\n onClickContinue: PropTypes.func.isRequired,\n onChangeFileUpload: PropTypes.func.isRequired,\n onClickRemoveFile: PropTypes.func.isRequired,\n hasData: PropTypes.bool.isRequired,\n};\n\nexport default LeadsCsvUploadDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Dialog, Progress } from '@8base/boost';\n\nconst LeadsCsvStatusUploadDialog = ({ isOpen, accumulatorLeads, totalLeads }) => {\n return (\n <>\n \n \n Uploading leads...\n Total completed: \n \n \n \n >\n );\n};\n\nLeadsCsvStatusUploadDialog.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n accumulatorLeads: PropTypes.number.isRequired,\n totalLeads: PropTypes.number.isRequired,\n};\n\nexport default LeadsCsvStatusUploadDialog;\n","import React, { useCallback, useState, useEffect } from 'react';\nimport { Row, Loader } from '@8base/boost';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport Papa from 'papaparse';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { createLeads, createLeadsFromRicochet } from '../leads-actions';\nimport { preprocessDataFromCsv } from '../leads-utils';\nimport { useSubscription as useSub } from '@cobuildlab/react-simple-state';\nimport LeadsCsvPreviewDialog from './LeadsCsvPreviewDialog';\nimport LeadsCsvUploadDialog from './LeadsCsvUploadDialog';\nimport LeadsCsvStatusUploadDialog from './LeadsCsvStatusUploadDialog';\nimport { onErrorMixinFC } from 'shared/mixins';\nimport * as toast from 'shared/components/toast/Toast';\nimport { LEAD_CSV_FORMATS } from '../../../shared/constants';\nimport {\n OnCsvUploadFinised,\n OnLeadsChunkBulkCreateEvent,\n OnLeadsError,\n OnValidatedLeadDataForUploadEvent,\n} from '../leads-events';\n\nconst { STANDARD, RICOCHET } = LEAD_CSV_FORMATS;\n\n/**\n * Leads CSV button with dialog upload and data preview.\n *\n * @param {object} props - Component props\n *\n * @returns {React.FC} Component to render\n */\nconst LeadsCsvDialogs = (props) => {\n // Dependencies\n const history = useHistory();\n const location = useLocation();\n // Data\n const [csvData, setCsvData] = useState([]);\n const [csvColumns, setCsvColumns] = useState([]);\n const [csvFormat, setCsvFormat] = useState(STANDARD);\n const [accumulatorLeads, setAccumulatorLeads] = useState(0);\n const [totalLeads, setTotalLeads] = useState(0);\n // Controls\n const [isOpenLoaderCSVDialog, setIsOpenLoaderCSVDialog] = useState(true);\n const [isOpenPreviewDialog, setIsOpenPreviewDialog] = useState(false);\n const [isOpenStatusUploadDialog, setIsOpenStatusUploadDialog] = useState(false);\n const [isLoadingPreview, setIsLoadingPreview] = useState(false);\n const [hasData, setHasData] = useState(false);\n const [loading, setLoading] = useState(true);\n\n // Verifies that data is obtained from the lead management\n // If don't, go to leads\n useEffect(() => {\n if (!location.state?.params) {\n history.replace('/leads');\n } else {\n setLoading(false);\n }\n }, [history, location]);\n\n const handleOnChangeFileUpload = useCallback(\n (files) => {\n const file = files[0];\n setIsLoadingPreview(true);\n Papa.parse(file, {\n complete: async (results) => {\n const columns = [...results.data[0]];\n\n // remove the rows with all the empty fields\n const data = [...results.data.slice(1).filter((row) => !row.every((e) => !e))];\n\n // const [newColumns, newData] = await getDataFromCsv(columns, data);\n\n setCsvData(data);\n setCsvColumns(columns);\n setHasData(true);\n },\n skipEmptyLines: true,\n });\n setIsLoadingPreview(false);\n },\n [setIsLoadingPreview],\n );\n\n const handleOnClickRemoveFile = useCallback(() => {\n setCsvData([]);\n setCsvColumns([]);\n setHasData(false);\n }, []);\n\n const handleOnBlurInput = useCallback(\n (rowIndex, keyIndex, event) => {\n const value = event.target.value;\n csvData[rowIndex][keyIndex] = value;\n },\n [csvData],\n );\n\n const handleOnUploadCsv = useCallback(\n (campaign, leadsType, leads) => {\n if (csvFormat === STANDARD) {\n createLeads(csvColumns, csvData, campaign, leads);\n } else if (csvFormat === RICOCHET) {\n createLeadsFromRicochet(csvColumns, csvData, campaign, leadsType, leads);\n }\n },\n [csvColumns, csvData, csvFormat],\n );\n\n const handleOnClosePreview = useCallback(() => {\n setIsOpenPreviewDialog(false);\n setCsvData([]);\n setCsvColumns([]);\n setHasData(false);\n setIsOpenLoaderCSVDialog(true);\n }, []);\n\n const handleOnClickContinue = useCallback(\n async (format) => {\n const { campaigns } = location.state?.params;\n\n if (csvData.length === 0) {\n toast.error('The file is empty');\n } else if (campaigns.length === 0) {\n toast.error('This operation is not possible without campaigns');\n } else {\n setIsLoadingPreview(true);\n const [csvNewColumns, csvNewData] = await preprocessDataFromCsv(csvColumns, csvData);\n setCsvData(csvNewData);\n setCsvColumns(csvNewColumns);\n setCsvFormat(format);\n setTimeout(() => {\n setIsLoadingPreview(false);\n setIsOpenLoaderCSVDialog(false);\n setIsOpenPreviewDialog(true);\n }, 1000);\n }\n },\n [location.state, csvData, csvColumns],\n );\n useSub(OnCsvUploadFinised, () => {\n setTimeout(() => {\n toast.success('Lead Management', `Leads created successfully!`);\n history.goBack();\n }, 2000);\n });\n\n useEventSubscription(OnLeadsChunkBulkCreateEvent, (response) => {\n if (response) {\n setAccumulatorLeads(accumulatorLeads + response.totalChunk);\n }\n });\n\n useEventSubscription(OnLeadsError, (err) => {\n if (err) {\n onErrorMixinFC(err);\n }\n });\n\n useEventSubscription(OnValidatedLeadDataForUploadEvent, () => {\n setTotalLeads(csvData.length);\n setIsOpenPreviewDialog(false);\n setIsOpenStatusUploadDialog(true);\n });\n\n if (loading) {\n return (\n \n \n \n );\n }\n\n const CAMPAIGNS_OPTIONS = location.state.params.campaigns.map((campaign) => ({\n label: campaign.name,\n value: campaign.id,\n }));\n\n return (\n <>\n \n ({\n label: score,\n value: score,\n }))\n : []\n }\n />\n \n >\n );\n};\n\nexport default LeadsCsvDialogs;\n","import { TASKS_INITIAL_STATUS, TASK_STATUS_CLOSED } from '../../shared/constants';\r\n\r\nexport default {\r\n id: null,\r\n title: '',\r\n description: '',\r\n leads: [],\r\n date: null,\r\n priority: null,\r\n agents: [],\r\n types: [],\r\n status: TASKS_INITIAL_STATUS,\r\n};\r\n\r\nexport const PRIORITIES = [\r\n { value: 1, label: 'LOW' },\r\n { value: 2, label: 'NORMAL' },\r\n { value: 3, label: 'HIGH' },\r\n { value: 4, label: 'VERY HIGH' },\r\n];\r\n\r\nexport const TABLE_COLUMNS = {\r\n TaskTitle: { active: true, value: 'Task Title', property: '' },\r\n Lead: { active: true, value: 'Lead', property: '' },\r\n Date: { active: true, value: 'Date', property: '' },\r\n Type: { active: true, value: 'Type', property: '' },\r\n Priority: { active: true, value: 'Priority', property: '' },\r\n AssignedTo: { active: true, value: 'Assigned To', property: '' },\r\n Description: { active: true, value: 'Description', property: '' },\r\n};\r\n\r\nexport const ACTIVE_COLUMNS = [\r\n 'Task Title',\r\n 'Lead',\r\n 'Date',\r\n 'Type',\r\n 'Priority',\r\n 'Assigned To',\r\n 'Description',\r\n];\r\n\r\nexport const FILTER_DATA = {\r\n assignedTo: '',\r\n onDate: '',\r\n onStatus: '',\r\n};\r\n\r\nexport const FILTER_CATEGORIES = {\r\n assignedTo: {\r\n title: 'Assigned to',\r\n placeholher: 'Select',\r\n identifier: 'assignedTo',\r\n options: [],\r\n },\r\n};\r\n\r\nexport const SORT_OPTIONS = [\r\n { label: 'Priority: Top First', value: 'top' },\r\n { label: 'Priority: Low First', value: 'low' },\r\n { label: 'Date: Newest First', value: 'newest' },\r\n { label: 'Date: Oldest First', value: 'oldest' },\r\n];\r\n\r\nexport const CALENDAR_EVENT_RENDER = (event) => {\r\n if (event.event._def.extendedProps.status === TASK_STATUS_CLOSED) {\r\n event.el.classList.add('fc-status-closed');\r\n }\r\n};\r\n\r\nexport const CALENDAR_EVENT_TIME_FORMAT = {\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n meridiem: false,\r\n hour12: false,\r\n};\r\n\r\nexport const CALENDAR_HEADER = {\r\n left: 'today prev,next',\r\n center: 'title',\r\n right: 'dayGridMonth,timeGridWeek createTask, toTasksList',\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Table } from '@8base/boost';\r\nimport { RadioInputField } from 'shared/components';\r\nimport styled from 'styled-components';\r\n\r\nconst StyledTableHeader = styled(Table.Header)`\r\n display: flex;\r\n`;\r\n\r\nconst HeaderCellContainer = styled.div`\r\n display: flex;\r\n align-items: center;\r\n`;\r\n\r\nconst TableHeader = (props) => {\r\n const { data, headers, columns, selectedTasks, headerCheckboxHandler } = props;\r\n\r\n const headerCols = headers.map((col) => {\r\n let icon;\r\n return (\r\n \r\n \r\n {col}\r\n {icon}\r\n \r\n \r\n );\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {headerCols}\r\n Actions\r\n \r\n );\r\n};\r\n\r\nTableHeader.propTypes = {\r\n headers: PropTypes.array.isRequired,\r\n columns: PropTypes.string.isRequired,\r\n selectedTasks: PropTypes.array.isRequired,\r\n data: PropTypes.array.isRequired,\r\n headerCheckboxHandler: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default TableHeader;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Dropdown, Menu, Icon } from '@8base/boost';\r\nimport { DropdownBodyOnTable } from 'shared/components';\r\nimport { IconInfo, IconCheck } from 'shared/components/ui/Icons';\r\nimport styled from 'styled-components';\r\n\r\nconst StyledIconInfo = styled(IconInfo)`\r\n width: 24px;\r\n height: 24px;\r\n cursor: pointer;\r\n min-width: 24px;\r\n`;\r\n\r\nconst StyledIconCheck = styled(IconCheck)`\r\n width: 24px;\r\n height: 24px;\r\n cursor: pointer;\r\n min-width: 24px;\r\n`;\r\n\r\nconst MenuItem = styled(Menu.Item)`\r\n color: ${({ danger }) => (danger ? '#FF0000' : 'rgb(50, 60, 71)')}!important;\r\n &:hover {\r\n ${({ danger }) => (danger ? '' : 'color: #3db4aa !important;')}\r\n }\r\n`;\r\n\r\nconst RowActions = ({ task, handleOnDeleteTask, handleInfoModal, handleOnChangeStatus }) => {\r\n const dropdown = (\r\n \r\n \r\n \r\n \r\n \r\n {({ closeDropdown }) => (\r\n \r\n {\r\n handleOnDeleteTask(task);\r\n closeDropdown();\r\n }}>\r\n Delete\r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n\r\n return (\r\n <>\r\n {\r\n handleInfoModal(task.id);\r\n }}\r\n />\r\n {\r\n handleOnChangeStatus(task);\r\n }}\r\n />\r\n {dropdown}\r\n >\r\n );\r\n};\r\n\r\nRowActions.propTypes = {\r\n task: PropTypes.object.isRequired,\r\n handleOnDeleteTask: PropTypes.func.isRequired,\r\n handleInfoModal: PropTypes.func.isRequired,\r\n handleOnChangeStatus: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default RowActions;\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Dropdown } from 'shared/components';\r\nimport { PRIORITIES } from '../lead-task-model';\r\nimport styled from 'styled-components';\r\nimport { updateLeadTask } from '../lead-task-actions';\r\n\r\nconst DropdownOption = styled.div`\r\n padding: 0px ${(props) => (props.isHead ? '0px' : '16px')};\r\n`;\r\nconst component = (priority) => (props) => {priority};\r\n\r\nconst PriorityCell = ({ rowData, value }) => {\r\n const [priority, setPriority] = useState(value);\r\n const handleOnChange = (value) => {\r\n setPriority(value);\r\n updateLeadTask({ id: rowData.id, priority: value.toString() });\r\n };\r\n\r\n return (\r\n {\r\n return {\r\n value: value,\r\n Component: component(label),\r\n };\r\n })}\r\n onChange={handleOnChange}\r\n />\r\n );\r\n};\r\n\r\nPriorityCell.propTypes = {\r\n value: PropTypes.string.isRequired,\r\n rowData: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PriorityCell;\r\n","import React from 'react';\r\nimport { PropTypes } from 'prop-types';\r\nimport { Table, Text, Link } from '@8base/boost';\r\nimport styled from 'styled-components';\r\nimport PriorityCell from '../PriorityCell';\r\n\r\nconst TableBodyCell = styled(Table.BodyCell)`\r\n word-break: break-word !important;\r\n`;\r\n\r\nconst TableTextEllipsis = styled(Text)`\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n max-width: 200px;\r\n`;\r\n\r\nconst LeadCell = ({ columnName, task }) => {\r\n let cell;\r\n switch (columnName) {\r\n case 'ID':\r\n cell = (\r\n \r\n ID\r\n \r\n );\r\n break;\r\n case 'Task Title':\r\n cell = (\r\n \r\n {task.title}\r\n \r\n );\r\n break;\r\n case 'Lead': {\r\n const { lead } = task;\r\n\r\n cell = (\r\n \r\n {lead && (\r\n \r\n {`${lead.firstName} ${lead.lastName}`}\r\n \r\n )}\r\n \r\n );\r\n\r\n break;\r\n }\r\n case 'Date': {\r\n cell = {task.date};\r\n break;\r\n }\r\n case 'Type':\r\n cell = {task.type};\r\n break;\r\n case 'Priority':\r\n cell = (\r\n \r\n \r\n \r\n );\r\n break;\r\n case 'Assigned To':\r\n cell = {task.agentsFormat};\r\n break;\r\n case 'Description':\r\n cell = (\r\n \r\n \r\n {task.description}\r\n \r\n \r\n );\r\n break;\r\n default:\r\n cell = (\r\n \r\n default\r\n \r\n );\r\n }\r\n return cell;\r\n};\r\n\r\nLeadCell.PropTypes = {\r\n lead: PropTypes.object.isRequired,\r\n columnName: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default LeadCell;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Table } from '@8base/boost';\r\nimport { RadioInputField } from 'shared/components';\r\nimport RowActions from './RowActions';\r\nimport styled from 'styled-components';\r\nimport RowCell from './RowCell';\r\n\r\nconst TableRow = styled(Table.BodyRow)`\r\n ${(props) => (props.active ? `background-color: #fcfcfc !important` : '')};\r\n`;\r\n\r\nconst TableRows = (props) => {\r\n const {\r\n task,\r\n columns,\r\n selectedTasks,\r\n activeColumns,\r\n handleInfoModal,\r\n handleOnChangeStatus,\r\n handleOnDeleteTask,\r\n taskCheckboxChangeHandler,\r\n } = props;\r\n\r\n const Row = () => {\r\n const columnList = activeColumns.map((columnName) => (\r\n \r\n ));\r\n return (\r\n \r\n \r\n {\r\n taskCheckboxChangeHandler(task.id);\r\n }}\r\n />\r\n \r\n {columnList}\r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n return ;\r\n};\r\n\r\nTableRows.propTypes = {\r\n task: PropTypes.object.isRequired,\r\n columns: PropTypes.string.isRequired,\r\n selectedTasks: PropTypes.isRequired,\r\n activeColumns: PropTypes.array.isRequired,\r\n taskCheckboxChangeHandler: PropTypes.func.isRequired,\r\n handleInfoModal: PropTypes.func.isRequired,\r\n handleOnChangeStatus: PropTypes.func.isRequired,\r\n handleOnDeleteTask: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default TableRows;\r\n","import React from 'react';\r\nimport { Dialog, Grid, Button, Text, Paragraph, Heading, Link } from '@8base/boost';\r\nimport PropTypes from 'prop-types';\r\nimport PriorityCell from '../PriorityCell';\r\nimport moment from 'moment';\r\n\r\nconst InfoModal = ({\r\n task,\r\n updating,\r\n onClose,\r\n dialogTitle,\r\n isOpenInfoModal,\r\n updateTask,\r\n handleOnChangeStatus,\r\n}) => {\r\n const { lead } = task;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {task.title}\r\n \r\n \r\n Lead\r\n {lead && (\r\n \r\n {lead.firstName} {lead.lastName}\r\n \r\n )}\r\n \r\n \r\n Date\r\n \r\n \r\n \r\n Priority\r\n \r\n \r\n \r\n Task Type\r\n \r\n \r\n \r\n Assigned To\r\n \r\n \r\n \r\n Description\r\n \r\n \r\n \r\n \r\n \r\n \r\n {task.status === 'Closed' ? 'OPEN' : 'COMPLETE'}\r\n \r\n \r\n Close\r\n \r\n \r\n Update Task\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nInfoModal.propTypes = {\r\n updating: PropTypes.bool,\r\n onClose: PropTypes.func.isRequired,\r\n dialogTitle: PropTypes.string.isRequired,\r\n task: PropTypes.object,\r\n updateTask: PropTypes.func.isRequired,\r\n handleOnChangeStatus: PropTypes.func.isRequired,\r\n isOpenInfoModal: PropTypes.string.isRequired,\r\n};\r\n\r\nInfoModal.defaultProps = {\r\n updating: false,\r\n task: {},\r\n};\r\n\r\nexport default InfoModal;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Table } from '@8base/boost';\r\nimport Loader from '../../../../shared/components/ui/Loader';\r\nimport TaskForm from '../../../leads/components/forms/TaskForm';\r\nimport TableRows from './TableRows';\r\nimport InfoModal from './InfoModal';\r\nimport styled from 'styled-components';\r\n\r\nconst Body = styled(Table.Body)`\r\n min-height: 400px;\r\n`;\r\n\r\nconst TableBody = (props) => {\r\n const {\r\n users,\r\n leads,\r\n data,\r\n tasks,\r\n loading,\r\n taskFormIsOpen,\r\n columns,\r\n selectedTasks,\r\n handleInfoModal,\r\n activeColumns,\r\n taskCheckboxChangeHandler,\r\n handleOnChangeStatus,\r\n isOpenInfoModal,\r\n handleOnDeleteTask,\r\n onCloseInfoModal,\r\n openTaskFormDialog,\r\n closeTaskFormDialog,\r\n refetchTasks,\r\n } = props;\r\n\r\n return (\r\n <>\r\n {loading ? (\r\n \r\n ) : (\r\n \r\n {(task) => (\r\n <>\r\n \r\n \r\n {taskFormIsOpen && (\r\n task.id === t.id)}\r\n onSuccess={refetchTasks}\r\n isOpen={taskFormIsOpen}\r\n onClose={closeTaskFormDialog}\r\n />\r\n )}\r\n >\r\n )}\r\n \r\n )}\r\n >\r\n );\r\n};\r\n\r\nTableBody.propTypes = {\r\n users: PropTypes.array.isRequired,\r\n leads: PropTypes.object.isRequired,\r\n data: PropTypes.array.isRequired,\r\n tasks: PropTypes.array.isRequired,\r\n loading: PropTypes.bool.isRequired,\r\n taskFormIsOpen: PropTypes.bool.isRequired,\r\n columns: PropTypes.string.isRequired,\r\n selectedTasks: PropTypes.array.isRequired,\r\n activeColumns: PropTypes.array.isRequired,\r\n isOpenInfoModal: PropTypes.array.isRequired,\r\n taskCheckboxChangeHandler: PropTypes.func.isRequired,\r\n onCloseInfoModal: PropTypes.func.isRequired,\r\n handleInfoModal: PropTypes.func.isRequired,\r\n openTaskFormDialog: PropTypes.func.isRequired,\r\n closeTaskFormDialog: PropTypes.func.isRequired,\r\n handleOnChangeStatus: PropTypes.func.isRequired,\r\n handleOnDeleteTask: PropTypes.func.isRequired,\r\n refetchTasks: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default TableBody;\r\n","import React from 'react';\r\nimport { Table, Pagination } from '@8base/boost';\r\nimport PropTypes from 'prop-types';\r\nimport styled from 'styled-components';\r\n\r\nconst PaginationContainer = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n font-size: 1.2rem;\r\n padding: 0 1rem;\r\n\r\n & > div > div > *::before {\r\n background-color: var(--color-primary);\r\n transition: all 0.2s;\r\n }\r\n\r\n & > div > span {\r\n display: inline-block;\r\n padding: 0.5rem 1.5rem;\r\n border: solid 1px #d0d7dd;\r\n border-radius: 5px;\r\n }\r\n`;\r\n\r\nconst TableFooter = (props) => {\r\n const { data, page, handlePageChange } = props;\r\n\r\n return (\r\n \r\n \r\n {\r\n handlePageChange(page);\r\n }}\r\n defaultPage={1}\r\n total={data.length}\r\n page={page}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nTableFooter.propTypes = {\r\n data: PropTypes.array.isRequired,\r\n page: PropTypes.string.isRequired,\r\n handlePageChange: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default TableFooter;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Dropdown, Menu } from '@8base/boost';\r\nimport { DropdownBodyOnTable } from 'shared/components';\r\nimport sortTableIcon from '../../../../shared/assets/images/table-sort-grey.svg';\r\nimport styled from 'styled-components';\r\n\r\nconst CustomGridCell = styled.div`\r\n grid-area: ${(props) => props.area};\r\n ${(props) => (props.justifySelf ? `justify-self:${props.justifySelf} ` : '')};\r\n`;\r\n\r\nconst SortTableMenu = styled(Menu)`\r\n padding-bottom: 0 !important;\r\n`;\r\n\r\nconst SortTableBtn = styled.div`\r\n display: flex;\r\n border-radius: 5px;\r\n border: solid 1px ${({ active }) => (active ? '#3db4aa' : '#d0d7dd')};\r\n padding: 0.5rem 1rem;\r\n box-sizing: border-box;\r\n &::before {\r\n content: '';\r\n display: inline-block;\r\n height: 2.5rem;\r\n width: 2rem;\r\n\r\n background-color: ${({ active }) => (active ? '#3db4aa' : '#aeb7be')};\r\n -webkit-mask-image: url(${(props) => props.src});\r\n -webkit-mask-size: cover;\r\n mask-image: url(${(props) => props.src});\r\n mask-size: cover;\r\n }\r\n\r\n &:focus::before {\r\n background-color: #3db4aa;\r\n }\r\n`;\r\n\r\nconst SortTableConfirm = styled.div`\r\n border-top: 1px solid #d0d7dd;\r\n padding: 10px 15px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-around;\r\n`;\r\n\r\nconst SortTableConfirmOptions = styled.span`\r\n color: ${(props) => (props.active ? '#3db4aa' : '#384A59')};\r\n cursor: pointer;\r\n`;\r\n\r\nconst StyledDropdownBodyOnTable = styled(DropdownBodyOnTable)`\r\n transform: translate3d(1720px, 167px, 0px) !important;\r\n`;\r\n\r\nconst MenuItem = styled(Menu.Item)`\r\n color: #323c47 !important;\r\n padding: 0 !important;\r\n height: auto !important;\r\n`;\r\n\r\nconst RadioButton = styled.span`\r\n height: 22px;\r\n width: 22px;\r\n border: 1px solid #d0d7dd;\r\n border-radius: 4px;\r\n display: inline-block;\r\n position: absolute;\r\n left: 15px;\r\n\r\n &::after {\r\n height: 10px;\r\n width: 10px;\r\n content: '';\r\n display: block;\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n background-color: #3db4aa;\r\n opacity: 0;\r\n }\r\n`;\r\n\r\nconst RadioInput = styled.input`\r\n display: none;\r\n &:checked ~ label span::after {\r\n opacity: 1;\r\n }\r\n`;\r\n\r\nconst RadioLabel = styled.label`\r\n padding: 10px 30px 10px 50px;\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n cursor: pointer;\r\n`;\r\n\r\nconst OnTopHideShowColumns = (props) => {\r\n const {\r\n headers,\r\n hideShowColumns,\r\n tableSortHandler,\r\n handleHideShowColumns,\r\n confirmSortTableHandler,\r\n cancelSortTableHandler,\r\n } = props;\r\n\r\n const sortColumns = Object.entries(headers).map(([identifier, column]) => {\r\n return (\r\n {}}>\r\n \r\n tableSortHandler(identifier)}>\r\n \r\n {column.value}\r\n \r\n \r\n );\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ closeDropdown }) => (\r\n \r\n {sortColumns}\r\n \r\n {\r\n confirmSortTableHandler(closeDropdown);\r\n }}>\r\n Accept\r\n \r\n {\r\n cancelSortTableHandler(closeDropdown);\r\n }}>\r\n Cancel\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nOnTopHideShowColumns.propTypes = {\r\n headers: PropTypes.array.isRequired,\r\n hideShowColumns: PropTypes.bool.isRequired,\r\n tableSortHandler: PropTypes.func.isRequired,\r\n handleHideShowColumns: PropTypes.func.isRequired,\r\n confirmSortTableHandler: PropTypes.func.isRequired,\r\n cancelSortTableHandler: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default OnTopHideShowColumns;\r\n","import React from 'react';\r\nimport { YesNoDialog } from 'shared/components';\r\n\r\nconst DialogDeleteLeadTask = (props) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default DialogDeleteLeadTask;\r\n","import React from 'react';\r\nimport { YesNoDialog } from 'shared/components';\r\n\r\nconst DialogUpdateLeadTaskStatus = (props) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default DialogUpdateLeadTaskStatus;\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { Paper, Grid, SelectField, Table } from '@8base/boost';\r\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\r\nimport { onErrorMixinFC } from '../../shared/mixins';\r\nimport { SORT_OPTIONS, TABLE_COLUMNS, ACTIVE_COLUMNS } from './lead-task-model';\r\nimport * as R from 'ramda';\r\nimport { useAgency } from 'shared/hooks/useAgency';\r\nimport { useUser } from 'shared/hooks/useUser';\r\nimport TableHeader from './components/LeadTasksListTable/TableHeader';\r\nimport TableBody from './components/LeadTasksListTable/TableBody';\r\nimport TableFooter from './components/LeadTasksListTable/TableFooter';\r\nimport OnTopHideShowColumns from './components/LeadTasksListTable/OnTopHideShowColumns';\r\nimport { leadTaskMap, leadTaskMapTable } from './lead-task-utils';\r\nimport { fetchLeadTask, updateLeadTask, deleteLeadTask } from './lead-task-actions';\r\nimport { fetchLeadTaskTypes } from '../leads/leads-actions';\r\nimport { fetchLeads } from '../leads/leads-actions';\r\nimport { fetchManagerAndAgents } from '../users/user-actions';\r\nimport { fetchAgents } from '../agents/agents-actions';\r\nimport { SearchInput, Margin } from 'shared/components';\r\nimport { FILTER_DATA as FILTER_DATA_LEADS } from '../leads/leads-model';\r\nimport { FILTER_DATA, FILTER_CATEGORIES } from './lead-task-model';\r\nimport { TASKS_INITIAL_STATUS, TASK_STATUS_CLOSED } from '../../shared/constants';\r\nimport DialogDeleteLeadTask from './components/DialogDeleteLeadTask';\r\nimport DialogUpdateLeadTaskStatus from './components/DialogUpdateLeadTaskStatus';\r\nimport { getActiveAgency } from '../../shared/utils/agency-utils';\r\nimport * as toast from '../../shared/components/toast/Toast';\r\nimport { Link } from 'react-router-dom';\r\nimport styled from 'styled-components';\r\nimport { OnFetchManagerAndAgentUsersEvent } from 'modules/users/user-events';\r\nimport { OnLeadsListEvent } from 'modules/leads/leads-events';\r\nimport {\r\n OnLeadTaskDelete,\r\n OnLeadTaskError,\r\n OnLeadTaskList,\r\n OnLeadTaskUpdate,\r\n} from './lead-task-events';\r\nimport { OnAgentsError, OnAgentsListEvent } from 'modules/agents/agents-events';\r\n\r\nconst StyledLayout = styled(Grid.Layout)`\r\n padding: 16px;\r\n`;\r\n\r\nconst StyledBox = styled(Grid.Box)`\r\n display: grid;\r\n align-items: flex-end;\r\n justify-content: flex-end;\r\n flex-direction: row !important;\r\n`;\r\n\r\nconst ButtonLink = styled(Link)`\r\n display: flex;\r\n border-radius: 4px;\r\n border: solid 1px #d0d7dd;\r\n padding: 0.6rem 1rem;\r\n box-sizing: border-box;\r\n text-decoration: none;\r\n color: #2c3e50;\r\n`;\r\n\r\nconst columnsSize =\r\n '80px minmax(150px, 1fr) minmax(150px, 1fr) 125px 125px 125px 150px minmax(150px, 1fr) 150px';\r\n\r\nexport const LeadTaskView = () => {\r\n const agency = useAgency();\r\n const [user] = useUser();\r\n const [users, setUsers] = useState([]);\r\n const [leads, setLeads] = useState([]);\r\n const [page, setPage] = useState('');\r\n const [sort, setSort] = useState('');\r\n // eslint-disable-next-line no-unused-vars\r\n const [agents, setAgents] = useState([]);\r\n const [leadTasks, setLeadTasks] = useState([]);\r\n const [leadTaskForUpdateOrDelete, setLeadTaskForUpdateOrDelete] = useState(null);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [taskFormIsOpen, setTaskFormIsOpen] = useState(false);\r\n const [selectedTasks, setSelectedTasks] = useState([]);\r\n const [isOpenInfoModal, setIsOpenInfoModal] = useState([]);\r\n const [sortTableActive, setSortTableActive] = useState(false);\r\n const [statusDialogOpen, setStatusDialogOpen] = useState(false);\r\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\r\n const [tableColumns, setTableColumns] = useState(R.clone(TABLE_COLUMNS));\r\n const [activeColumns, setActiveColumns] = useState(R.clone(ACTIVE_COLUMNS));\r\n const [filterCategories, setFilterCategories] = useState(R.clone(FILTER_CATEGORIES));\r\n const [filters, setFilters] = useState({\r\n search: '',\r\n ...R.clone(FILTER_DATA),\r\n });\r\n\r\n const getTasks = useCallback(() => {\r\n const filterData = user.id\r\n ? {\r\n assignedTo: user.id,\r\n onStatus: TASKS_INITIAL_STATUS,\r\n agency: getActiveAgency().id,\r\n }\r\n : {};\r\n setIsLoading(true);\r\n fetchLeadTask({ filterData });\r\n }, [user.id]);\r\n\r\n const handleOnClickBtnSearch = () => {\r\n setIsLoading(true);\r\n const filterData = user.id\r\n ? {\r\n assignedTo: user.id,\r\n }\r\n : {};\r\n\r\n fetchLeadTask({ search: filters.search, filterData });\r\n };\r\n\r\n const handleExecuteSearch = (value) => {\r\n setSort(value);\r\n setIsLoading(true);\r\n fetchLeadTask({\r\n search: filters.search,\r\n sortData: sort,\r\n filterData: { ...R.clone(FILTER_DATA), assignedTo: user.id },\r\n });\r\n };\r\n\r\n const handleOnChange = (value) => {\r\n handleExecuteSearch(value);\r\n };\r\n\r\n const handlePageChange = (pageNum) => {\r\n const filterData = user.id\r\n ? {\r\n assignedTo: user.id,\r\n }\r\n : {};\r\n setIsLoading(true);\r\n setPage(pageNum);\r\n fetchLeadTask({ page: pageNum, filterData });\r\n setSelectedTasks([]);\r\n };\r\n const handleHideShowColumns = () => setSortTableActive(!sortTableActive);\r\n\r\n const taskCheckboxChangeHandler = (id) => {\r\n let newList;\r\n\r\n if (selectedTasks.includes(id)) {\r\n newList = selectedTasks.filter((oldId) => oldId !== id);\r\n } else {\r\n newList = [...selectedTasks, id];\r\n }\r\n setSelectedTasks(newList);\r\n };\r\n\r\n const headerCheckboxHandler = () => {\r\n let allTasks;\r\n\r\n if (selectedTasks.length === leadTasks.length) {\r\n allTasks = [];\r\n } else {\r\n allTasks = leadTasks.map((lead) => lead.id);\r\n }\r\n setSelectedTasks(allTasks);\r\n };\r\n const tableSortHandler = (sortIdentifier) => {\r\n const newColumnList = { ...tableColumns };\r\n newColumnList[sortIdentifier] = { ...tableColumns[sortIdentifier] };\r\n newColumnList[sortIdentifier].active = !newColumnList[sortIdentifier].active;\r\n setTableColumns(newColumnList);\r\n };\r\n\r\n const confirmSortTableHandler = (closeDropdown) => {\r\n const newActiveList = [];\r\n for (const key in tableColumns) {\r\n const columnClone = { ...tableColumns[key] };\r\n if (columnClone.active) {\r\n newActiveList.push(columnClone.value);\r\n }\r\n }\r\n setActiveColumns(newActiveList);\r\n setSortTableActive(false);\r\n closeDropdown();\r\n };\r\n\r\n const cancelSortTableHandler = (closeDropdown) => {\r\n const newLeadsColumns = { ...tableColumns };\r\n for (const key in newLeadsColumns) {\r\n newLeadsColumns[key] = { ...tableColumns[key] };\r\n if (activeColumns.includes(newLeadsColumns[key].value)) {\r\n newLeadsColumns[key].active = true;\r\n }\r\n }\r\n\r\n setTableColumns(newLeadsColumns);\r\n setSortTableActive(false);\r\n closeDropdown();\r\n };\r\n\r\n const handleInfoModal = (id) => {\r\n setLeadTaskForUpdateOrDelete(leadTasks.find((t) => id === t.id));\r\n setIsOpenInfoModal([...isOpenInfoModal, id]);\r\n };\r\n\r\n const openTaskFormDialog = () => {\r\n setTaskFormIsOpen(true);\r\n setIsOpenInfoModal([]);\r\n };\r\n\r\n const closeTaskFormDialog = () => {\r\n setTaskFormIsOpen(false);\r\n setIsOpenInfoModal([]);\r\n };\r\n\r\n const onCloseInfoModal = () => {\r\n setIsOpenInfoModal([]);\r\n };\r\n\r\n /**\r\n * Change the Task Status\r\n */\r\n\r\n const handleOnChangeStatus = (task) => {\r\n setLeadTaskForUpdateOrDelete(task);\r\n setStatusDialogOpen(!statusDialogOpen);\r\n };\r\n\r\n const handleChangeStatusYes = () => {\r\n handleChangeStatus(leadTaskForUpdateOrDelete);\r\n };\r\n\r\n const handleChangeStatusNo = () => {\r\n handleOnChangeStatus();\r\n };\r\n const handleChangeStatus = (leadTaskForUpdate) => {\r\n updateLeadTask({ id: leadTaskForUpdate.id, status: TASK_STATUS_CLOSED });\r\n handleChangeStatusNo();\r\n };\r\n\r\n /**\r\n * Delete the Task\r\n */\r\n\r\n const handleOnDeleteTask = (leadTaskForDelete = null) => {\r\n setDeleteDialogOpen(!deleteDialogOpen);\r\n if (leadTaskForDelete) setLeadTaskForUpdateOrDelete(leadTaskForDelete);\r\n };\r\n\r\n const handleDeleteTaskYes = () => {\r\n handleDeleteTask(leadTaskForUpdateOrDelete);\r\n };\r\n const handleDeleteTaskNo = () => {\r\n handleOnDeleteTask();\r\n };\r\n\r\n const handleDeleteTask = (leadTaskForDelete) => {\r\n deleteLeadTask(leadTaskForDelete.id);\r\n handleDeleteTaskNo();\r\n };\r\n\r\n const handleOnChangeFilter = (name, value) => {\r\n setFilters({\r\n ...filters,\r\n [name]: value,\r\n });\r\n };\r\n\r\n useSimpleSubscription(OnFetchManagerAndAgentUsersEvent, (data) => {\r\n if (data) {\r\n setUsers(data.usersList.items);\r\n setIsLoading(false);\r\n }\r\n });\r\n\r\n useSimpleSubscription(OnLeadsListEvent, (data) => {\r\n if (data) {\r\n setLeads(data.leadsList);\r\n setIsLoading(false);\r\n }\r\n });\r\n\r\n useSimpleSubscription(OnLeadTaskError, (err) => {\r\n if (err) {\r\n onErrorMixinFC(err);\r\n setIsLoading(false);\r\n }\r\n });\r\n\r\n useSimpleSubscription(OnLeadTaskList, (data) => {\r\n if (data) {\r\n setIsLoading(false);\r\n setLeadTasks(data.leadTasksList.items.map(leadTaskMap));\r\n }\r\n });\r\n\r\n useSimpleSubscription(OnLeadTaskUpdate, (data) => {\r\n if (data) {\r\n const updatedLeadTask = data.leadTaskUpdate;\r\n toast.success(`Task \"${updatedLeadTask.title}\" Updated!`);\r\n\r\n if (updatedLeadTask.status === TASK_STATUS_CLOSED) {\r\n setLeadTaskForUpdateOrDelete(null);\r\n }\r\n setIsLoading(true);\r\n getTasks();\r\n }\r\n });\r\n\r\n useSimpleSubscription(OnLeadTaskDelete, (data) => {\r\n if (data.leadTaskDelete.success) {\r\n setIsLoading(false);\r\n setLeadTaskForUpdateOrDelete(null);\r\n getTasks();\r\n toast.success('Task Deleted!');\r\n } else {\r\n setIsLoading(false);\r\n }\r\n });\r\n\r\n useSimpleSubscription(OnAgentsError, (err) => {\r\n if (err) {\r\n onErrorMixinFC(err);\r\n setIsLoading(false);\r\n }\r\n });\r\n\r\n useSimpleSubscription(OnAgentsListEvent, (data) => {\r\n if (data) {\r\n const filterCategoriesClone = R.clone(filterCategories);\r\n\r\n filterCategoriesClone.assignedTo.options = data.agentsList.items.map((agent) => ({\r\n label: `${agent.user.firstName} ${agent.user.lastName}`,\r\n value: agent.id,\r\n }));\r\n setFilterCategories(filterCategoriesClone);\r\n setAgents(\r\n data.agentsList.items.filter((agent) => {\r\n return agent.agency.id === agency.id;\r\n }),\r\n );\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n fetchManagerAndAgents(agency.id);\r\n fetchLeads(1, {\r\n ...R.clone(FILTER_DATA_LEADS),\r\n agency: agency.id,\r\n });\r\n setPage(1);\r\n }, [agency.id]);\r\n\r\n useEffect(() => {\r\n setIsLoading(true);\r\n fetchLeadTaskTypes();\r\n fetchAgents();\r\n }, [agency.id]);\r\n\r\n useEffect(() => {\r\n getTasks();\r\n }, [getTasks]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n handleOnChangeFilter('search', value)}\r\n placeholder=\"Search tasks\"\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n handleOnChange(value);\r\n },\r\n }}\r\n placeholder=\"Sort tasks by\"\r\n options={SORT_OPTIONS}\r\n />\r\n \r\n Tasks Calendar\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import React, { useState } from 'react';\nimport { OnSessionFetch } from '../session/session-events';\nimport { getUserAgencyRoles } from '../utils/agency-utils';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\n\n/**\n * High order component for pass by props all the user\n * data stored in the session.\n *\n * @param {React.Component} WrappedComponent component to add session data\n *\n * @returns {React.Component} wrapped component with the session data\n */\nconst withSession = (WrappedComponent) => (props) => {\n const {\n user: { selectedAgency },\n } = OnSessionFetch.get();\n const [agencyId, setAgencyId] = useState(selectedAgency && selectedAgency.id);\n const [userAgencyRoles, setUserAgencyRol] = useState(getUserAgencyRoles());\n const session = OnSessionFetch.get();\n\n useSubscription(\n OnSessionFetch,\n ({ user: { selectedAgency } }) => {\n const userAgencyRoles = getUserAgencyRoles();\n\n if (selectedAgency) {\n setAgencyId(selectedAgency.id);\n }\n\n if (userAgencyRoles) {\n setUserAgencyRol(userAgencyRoles);\n }\n },\n [],\n );\n\n return (\n \n );\n};\n\nexport default withSession;\n","import React from 'react';\r\nimport { Paragraph } from '@8base/boost';\r\nimport styled from 'styled-components';\r\nimport { PropTypes } from 'prop-types';\r\nimport { YesNoDialog } from '../../../../shared/components';\r\n\r\nconst BoldText = styled.span`\r\n font-weight: bold;\r\n`;\r\n\r\n/**\r\n * This Component is a Dialog to select yes or not\r\n * change the task status\r\n *\r\n * @param {boolean} isOpen - a boolean, could be true or false, true Open this dialog\r\n * @param {Function} onYes - Function To Proceed to the status change\r\n * @param {Function} onClose - Function To close this Dialog changing the isOpen Value\r\n */\r\n\r\nconst ChangeTaskStatus = ({ isOpen, onYes, onClose }) => {\r\n const text = (\r\n \r\n {`Are you sure you want to Change the Status of this Task?`}\r\n You can Change this later.\r\n \r\n );\r\n return (\r\n \r\n );\r\n};\r\n\r\nChangeTaskStatus.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onYes: PropTypes.func.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default React.memo(ChangeTaskStatus);\r\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Paper } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { useHistory } from 'react-router-dom';\nimport FullCalendar from '@fullcalendar/react';\nimport dayGridPlugin from '@fullcalendar/daygrid';\nimport interactionPlugin from '@fullcalendar/interaction';\nimport timeGridPlugin from '@fullcalendar/timegrid';\nimport { FILTER_DATA } from '../leads/leads-model';\nimport {\n CALENDAR_EVENT_RENDER,\n CALENDAR_EVENT_TIME_FORMAT,\n CALENDAR_HEADER,\n} from '../lead-task/lead-task-model';\nimport { fetchLeads } from '../leads/leads-actions';\nimport { fetchLeadTask, updateLeadTask, fetchLeadTaskDetail } from '../lead-task/lead-task-actions';\nimport { fetchManagerAndAgents } from '../users/user-actions';\nimport { TASK_STATUS_CLOSED, TASKS_INITIAL_STATUS } from '../../shared/constants';\nimport { leadTaskMapTable } from '../lead-task/lead-task-utils';\nimport withSession from '../../shared/hoc/withSession';\nimport Loader from '../../shared/components/ui/Loader';\nimport TaskForm from '../leads/components/forms/TaskForm';\nimport ChangeTaskStatus from './components/dialogs/ChangeTaskStatus';\nimport InfoModal from '../lead-task/components/LeadTasksListTable/InfoModal';\nimport '@fullcalendar/core/main.css';\nimport '@fullcalendar/daygrid/main.css';\nimport '@fullcalendar/timegrid/main.css';\nimport styled from 'styled-components';\nimport * as toast from '../../shared/components/toast/Toast';\nimport * as R from 'ramda';\nimport {\n OnLeadTaskDetails,\n OnLeadTaskList,\n OnLeadTaskUpdate,\n} from 'modules/lead-task/lead-task-events';\nimport { OnFetchManagerAndAgentUsersEvent } from 'modules/users/user-events';\nimport { OnLeadsListEvent } from 'modules/leads/leads-events';\n\nconst StyledPaper = styled(Paper)`\n margin: 25px;\n > .fc {\n z-index: 0;\n & .fc-event {\n cursor: pointer;\n }\n /* Calendar Header Sytles */\n > .fc-header-toolbar {\n padding: 25px 25px 0;\n & button.fc-button-primary {\n color: #fff;\n background-color: #fff;\n border-color: #cfd7de;\n color: #2c3e50;\n padding: 9px 15px;\n text-transform: capitalize;\n &.fc-button-active {\n background-color: #efefef;\n }\n }\n }\n & .fc-widget-header {\n background: #f4f7f9;\n border-color: #e8eff5;\n border-right: 0;\n border-left: 0;\n > table > thead > tr {\n color: #7d828c;\n font-size: 1.2rem;\n line-height: 1.6rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n > th {\n vertical-align: middle;\n height: 35px;\n }\n }\n }\n /** Week View Styles */\n & .fc-timeGridWeek-view > table {\n > tbody.fc-body {\n > tr > .fc-widget-content > .fc-day-grid > .fc-row.fc-week.fc-widget-content .fc-today {\n background: #e7eeed99;\n }\n & .fc-scroller.fc-time-grid-container > .fc-time-grid {\n & .fc-content-skeleton .fc-event {\n font-size: 0.95em;\n padding: 3px;\n border: 1px solid #3db4aa;\n background-color: #3db4aa;\n &.fc-status-closed {\n border: 1px solid lightgray;\n background-color: lightgray;\n > .fc-content > .fc-title {\n color: gray;\n }\n }\n }\n & td.fc-today {\n background: #e7eeed99;\n }\n & .fc-minor td {\n border-top-style: none;\n }\n }\n }\n }\n /** Month View Styles */\n & .fc-dayGridMonth-view > table {\n > thead.fc-head {\n border: 0;\n }\n > tbody.fc-body {\n & .fc-scroller.fc-day-grid-container {\n height: auto !important;\n & .fc-content-skeleton .fc-event {\n font-size: 1em;\n border: none;\n background: transparent;\n &.fc-status-closed > .fc-content > .fc-title {\n color: lightgray;\n }\n & .fc-time {\n font-weight: normal;\n color: #999;\n &:before {\n content: '';\n width: 10px;\n height: 10px;\n border-radius: 100%;\n background: #3db4aa;\n display: inline-block;\n margin-right: 5px;\n }\n &:after {\n content: ' :';\n }\n }\n & .fc-title {\n color: #333;\n }\n }\n }\n & .fc-day-grid {\n border-bottom: 0;\n > .fc-row.fc-week.fc-widget-content {\n max-height: 170px;\n }\n }\n & td {\n border-color: #e8eff5;\n &.fc-day-top {\n padding: 5px;\n > .fc-day-number {\n height: 22px;\n width: 23px;\n border-radius: 100%;\n margin: 0 auto;\n float: inherit;\n display: flex;\n justify-content: center;\n }\n }\n &.fc-today {\n background: #fff;\n > span.fc-day-number {\n background: #3db4aa;\n color: #fff;\n }\n }\n }\n }\n }\n }\n`;\n\n/**\n * This component Show a Calendar with all the Tasks in the system\n * could be open tasks or closed.\n *\n * @param {object} props - This Object come from the User Session from the HOC withSession\n */\n\nconst CalendarView = (props) => {\n const history = useHistory();\n const [tasks, setTasks] = useState([]);\n const [leads, setLeads] = useState([]);\n const [users, setUsers] = useState([]);\n const [loading, setLoading] = useState(true);\n const [modalData, setModalData] = useState();\n const [selectedTask, setSelectedTask] = useState();\n const [selectedDate, setSelectedDate] = useState();\n const [isOpenInfoModal, setIsOpenInfoModal] = useState([]);\n const [taskFormIsOpen, setTaskFormIsOpen] = useState(false);\n const [isOpenChangeTaskStatus, setIsOpenChangeTaskStatus] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [currentFilter] = useState({\n ...R.clone(FILTER_DATA),\n agency: props.activeAgencyId,\n });\n\n useEventSubscription(OnLeadTaskList, (data) => {\n setTasks(data.leadTasksList.items);\n setLoading(false);\n });\n\n useEventSubscription(OnLeadTaskDetails, (data) => {\n setModalData(leadTaskMapTable(data.leadTask));\n setSelectedTask(data.leadTask);\n handleInfoModal(data.leadTask.id);\n setLoading(false);\n });\n\n useEventSubscription(OnFetchManagerAndAgentUsersEvent, (data) => {\n setUsers(data.usersList.items);\n setLoading(false);\n });\n\n useEventSubscription(OnLeadsListEvent, (data) => {\n setLeads(data.leadsList);\n setLoading(false);\n });\n\n useEventSubscription(OnLeadTaskUpdate, (data) => {\n onCloseInfoModal();\n getTasks();\n toast.success('Success', 'Task successfully updated');\n setLoading(false);\n setUpdating(false);\n });\n\n /**\n * this constant is here because use a function from this component\n */\n const customButtons = {\n toTasksList: {\n text: 'Tasks List',\n click: () => {\n history.push('/tasks/list');\n },\n },\n createTask: {\n text: 'Create Task',\n click: () => {\n setSelectedDate();\n openTaskForm();\n },\n },\n };\n\n /**\n * Method for get the Tasks by the logged user\n */\n const getTasks = () => {\n const {\n user: { id },\n } = props.session;\n const filterData = id\n ? {\n assignedTo: id,\n }\n : {};\n\n fetchLeadTask({ filterData });\n };\n\n /**\n * This method obtain the\n */\n const getLeads = () => {\n const page = 1;\n fetchLeads(page, currentFilter);\n };\n\n /**\n * This Method Open the Task Form Dialog and Close the Info Modal\n */\n const openTaskFormDialog = () => {\n setIsOpenInfoModal([]);\n setTaskFormIsOpen(true);\n };\n\n /**\n * This Method Close Task Form Dialog and Clear the Selected Task\n */\n const closeTaskFormDialog = () => {\n onCloseInfoModal();\n setSelectedTask();\n setTaskFormIsOpen(false);\n };\n\n /**\n * This Method Assign the Id to he State to Open the Info Modal\n *\n * @param {string} id - The Task ID\n */\n const handleInfoModal = (id) => {\n setIsOpenInfoModal((state) => [...state, id]);\n };\n\n /**\n * This Method Close The Info Modal ans Clear the Selected Task\n */\n const onCloseInfoModal = () => {\n setSelectedTask();\n setIsOpenInfoModal([]);\n };\n\n /**\n * This method put the date data in the state\n *\n * @param {object} event - refer to the event click\n */\n const dateClick = (event) => {\n setSelectedDate(event);\n openTaskForm();\n };\n\n /**\n * This method get the task id from the event click\n * and make a call to the api to obtain the selected Task.\n *\n * @param {object} event - refer to the event click.\n */\n const eventClick = (event) => {\n fetchLeadTaskDetail(event.event._def.publicId);\n };\n\n /**\n * This method open the Task Form\n */\n const openTaskForm = () => {\n openTaskFormDialog();\n };\n\n /**\n * This method get the users belong to the current agency\n */\n const getTasksUsers = () => {\n fetchManagerAndAgents(props.activeAgencyId);\n };\n\n /**\n * Method to Open the Yes or No Change Status Dialog\n */\n const handleOnChangeStatus = () => {\n setIsOpenChangeTaskStatus(!isOpenChangeTaskStatus);\n };\n\n /**\n * On Yes Change Status Action\n */\n const handleChangeStatusYes = () => {\n setUpdating(true);\n handleChangeStatus(selectedTask);\n };\n\n /**\n * On No Change Status Action\n */\n const handleChangeStatusNo = () => {\n handleOnChangeStatus();\n };\n\n /**\n * This Method Change the State of the Task\n *\n * @param {object} task - the selected Task Object\n */\n const handleChangeStatus = (task) => {\n if (task.status === TASKS_INITIAL_STATUS) {\n updateLeadTask({ id: task.id, status: TASK_STATUS_CLOSED });\n } else {\n updateLeadTask({ id: task.id, status: TASKS_INITIAL_STATUS });\n }\n handleChangeStatusNo();\n };\n\n useEffect(() => {\n if (loading) {\n getTasks();\n getTasksUsers();\n getLeads();\n }\n });\n\n return (\n \n {loading ? (\n \n ) : (\n \n )}\n {taskFormIsOpen && (\n \n )}\n \n \n \n );\n};\n\nCalendarView.propTypes = {\n activeAgencyId: PropTypes.string.isRequired,\n session: PropTypes.object.isRequired,\n user: PropTypes.object.isRequired,\n id: PropTypes.string.isRequired,\n};\n\nexport default withSession(CalendarView);\n","import React, { useCallback, useRef } from 'react';\nimport SearchInput from '../../../email/components/SearchInput';\nimport { Transition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n transition-property: width, opacity;\n transition-duration: 0.7s;\n transition-timing-function: ease-out;\n ${({ state }) => {\n switch (state) {\n case 'entering':\n case 'entered':\n return `\n width: 315px;\n opacity: 1;\n `;\n case 'exiting':\n case 'exited':\n return `\n width: 0px;\n opacity: 0;\n `;\n default:\n break;\n }\n }}\n`;\n\n/**\n * Search input component customized for lead history parent\n *\n * @param {object} props - React component's prop object\n * @param {boolean} props.active - Makes the component appear or disappear\n * @param {Function} props.onSearch - Function to call when the search button is pressed\n *\n * @returns {React.FC} The component to render\n */\nfunction LeadHistorySearch({ active, onSearch }) {\n const timeoutRef = useRef(null);\n\n const handleChange = useCallback(\n (value) => {\n clearTimeout(timeoutRef.current);\n\n timeoutRef.current = setTimeout(() => onSearch(value), 500);\n },\n [onSearch],\n );\n\n return (\n \n {(state) => (\n \n \n \n )}\n \n );\n}\n\nLeadHistorySearch.propTypes = {\n active: PropTypes.bool,\n onSearch: PropTypes.func.isRequired,\n};\n\nLeadHistorySearch.defaultProps = {\n active: false,\n};\n\nexport default LeadHistorySearch;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchleadHistoryEvent = createEvent();\n\nexport const OnFetchleadHistoryError = createEvent();\n\nexport const OnFetchFullLeadhistoryEvent = createEvent();\n\nexport const OnFetchFullLeadhistoryError = createEvent();\n","import { FETCH_LEAD_HISTORY_QUERY_RESOLVER } from './leads-history-queries';\nimport { error, log } from '@cobuildlab/pure-logger';\nimport { RESULTS_PER_PAGE } from './leads-history-model';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport {\n OnFetchFullLeadhistoryError,\n OnFetchFullLeadhistoryEvent,\n OnFetchleadHistoryError,\n OnFetchleadHistoryEvent,\n} from './leads-history-events';\n\n/**\n * Fetches the lead history items\n *\n * @param {string} leadId - Id of the lead\n * @param {string} userId - Id of the user\n * @param {string} agencyId - Id of the agency\n * @param {string} type - Type filter for the history items\n * @param {number} page - Page to fetch the history items\n *\n * @returns {Promise} The request result\n */\nexport const fetchLeadHistory = async (leadId, userId, agencyId, type, page = 1) => {\n const client = OnApolloClient.get();\n const first = RESULTS_PER_PAGE;\n const skip = (page - 1) * first;\n const orderBy = 'createdAt_DESC';\n\n const filter = { lead: { id: { equals: leadId } } };\n\n if (type) {\n filter.entity = { equals: type };\n }\n\n try {\n const response = await client.query({\n query: FETCH_LEAD_HISTORY_QUERY_RESOLVER,\n fetchPolicy: 'network-only',\n variables: { filter, user: userId, agency: agencyId, first, skip, orderBy },\n });\n log('fetchLeadHistory', response.data);\n OnFetchleadHistoryEvent.dispatch(response.data);\n\n return response.data;\n } catch (err) {\n error('fetchLeadHistory', err);\n OnFetchleadHistoryError.dispatch(err);\n }\n};\n\n/**\n * Fetches the all lead history\n *\n * @param {string} leadId - The id of the lead\n * @param {string} userId - Id of the user\n * @param {string} agencyId - Id of the agency\n * @param {string} type - Type of history items to filter\n * @returns {Promise} The request result\n */\nexport const fetchFullLeadHistory = async (leadId, userId, agencyId, type) => {\n const client = OnApolloClient.get();\n let response = null;\n const orderBy = 'createdAt_DESC';\n const filter = { lead: { id: { equals: leadId } } };\n\n if (type) {\n filter.entity = { equals: type };\n }\n\n try {\n response = await client.query({\n query: FETCH_LEAD_HISTORY_QUERY_RESOLVER,\n variables: { filter, user: userId, agency: agencyId, orderBy },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchFullLeadHistory');\n return OnFetchFullLeadhistoryError.dispatch(e);\n }\n\n log('fetchFullLeadHistory', response.data);\n return OnFetchFullLeadhistoryEvent.dispatch(response.data);\n};\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport styled, { keyframes, css } from 'styled-components';\nimport { Transition } from 'react-transition-group';\nimport {\n Card,\n Row,\n Loader,\n Column,\n Dialog,\n Icon,\n SelectField,\n Grid,\n Switch,\n useModal,\n Pagination,\n} from '@8base/boost';\nimport LeadHistorySearch from './LeadHistorySearch';\nimport { Title } from '../../../../shared/components';\nimport PropTypes from 'prop-types';\nimport { ENTITY_SELECTOR_OPTIONS } from '../leads-history-model';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchLeadHistory, fetchFullLeadHistory } from '../leads-history-action';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport { getHistoryItem, filterItem } from '../leads-history-utils';\nimport FormValues from '../../../../shared/components/forms/FormValues';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport ReactJsonView from 'react-json-view';\nimport { customScrollBar } from '../../../../shared/css/mixins';\nimport { useParams } from 'react-router';\nimport {\n OnFetchFullLeadhistoryError,\n OnFetchFullLeadhistoryEvent,\n OnFetchleadHistoryError,\n OnFetchleadHistoryEvent,\n} from '../leads-history-events';\n\nconst Body = styled(Card.Body)`\n padding: 24px 0px !important;\n height: 100%;\n max-height: 100%;\n ${customScrollBar}\n display: flex;\n flex-direction: column;\n`;\n\nconst Container = styled.div`\n height: ${({ gap }) => (gap ? `calc(100vh - ${gap}px)` : 'auto')};\n max-height: ${({ gap }) => (gap ? `calc(100vh - ${gap}px)` : 'auto')};\n`;\n\nconst slideIn = keyframes`\n 0% {\n transform: translateX(100%);\n }\n 100% {\n transform: translateX(0);\n }\n`;\n\nconst slideOut = keyframes`\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(100%);\n }\n`;\n\nconst CustomColumn = styled(Column)`\n ${(props) =>\n props.mb &&\n `\n & > *:not(:last-child) {\n margin-bottom: ${props.mb}px !important;\n }\n `}\n`;\n\nconst animate = css`\n animation: 0.3s\n ${({ state }) => {\n switch (state) {\n case 'entering':\n return slideIn;\n case 'exiting':\n return slideOut;\n default:\n return '';\n }\n }}\n ease-in-out;\n`;\n\nconst SideBar = styled.div`\n position: fixed;\n background-color: #fff;\n width: 500px;\n max-width: 640px;\n top: 0;\n right: 0;\n height: 100vh;\n box-shadow: 0 0px 3px 3px rgba(50, 50, 93, 0.14);\n transition: width 1s;\n z-index: 2;\n ${(props) =>\n props.fullHistory &&\n `\n width: 640px;\n `}\n\n ${animate}\n`;\n\n/* const TouchableText = styled(Text)`\n font-family: Poppins !important;\n font-size: 13px !important;\n line-height: 20px !important;\n color: #3db4aa !important;\n font-weight: 400 !important;\n cursor: pointer !important;\n\n &:first-letter {\n text-transform: capitalize !important;\n }\n`;\n\n*/\n\nconst Section = styled(Card.Section)`\n padding: 12px 12px !important;\n`;\n\nconst PaginationContainer = styled.div`\n display: flex;\n justify-content: center;\n font-size: 1.2rem;\n padding: 0 1rem;\n margin-top: auto;\n width: 100%;\n & > div > div > *::before {\n background-color: var(--color-primary);\n transition: all 0.2s;\n }\n & > div > span {\n display: inline-block;\n padding: 0.5rem 1.5rem;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n }\n`;\n\nexport const modalId = 'lead-history-modal';\n\nexport const LeadHistory = (props) => {\n const { isOpen, args, closeModal } = useModal(modalId);\n const [items, setItems] = useState({ items: [], filtered: [] });\n const [loading, setLoading] = useState(true);\n const [fullHistory, setFullHistory] = useState(false);\n const [page, setPage] = useState(1);\n // const [load, setLoad] = useState({ completed: false });\n const [difference, setDifference] = useState(null);\n const [info, setInfo] = useState(null);\n const [type, setType] = useState('');\n const [gap, setGap] = useState(0);\n const [count, setCount] = useState(0);\n const bodyRef = useRef(null);\n const { id } = useParams();\n /**\n * Function called when the component is unmounted or\n * the close transition is completed\n */\n const onExited = () => {\n setType('');\n setItems({ items: [], filtered: [] });\n setPage(1);\n setCount(0);\n };\n\n /**\n * Fetches the paginated lead history based on\n * the actual id, page and type parameters\n */\n const fetch = useCallback(() => {\n if (isOpen) {\n if (args) {\n const { user, agency } = args;\n setLoading(true);\n fetchLeadHistory(id, user, agency, type, page);\n }\n }\n }, [args, page, type, isOpen, id]);\n\n /**\n * Effect that triggers everytime the id, page, or type\n * properties change\n */\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n /**\n * Effect that triggers when the full history state changes to true,\n * fetches all of the lead history items of the lead, filtered by the type of entity\n */\n useEffect(() => {\n if (fullHistory) {\n setItems({ items: [], filtered: [] });\n setLoading(true);\n const { lead, user, agency } = args;\n fetchFullLeadHistory(lead, user, agency, type);\n }\n }, [args, fullHistory, type]);\n\n /**\n * Effect that triggers when the component opens, makes the sidebar\n * take the available vertical space on screen\n */\n useEffect(() => {\n if (isOpen) {\n const { top } = bodyRef.current.getBoundingClientRect();\n setGap(top);\n }\n }, [isOpen]);\n\n // Subscriptions for handling data flow\n useEventSubscription(OnFetchleadHistoryEvent, ({ leadHistoriesResolver }) => {\n setItems((items) => ({\n items: [...leadHistoriesResolver.items],\n filtered: [...leadHistoriesResolver.items],\n }));\n setCount(leadHistoriesResolver.count);\n setLoading(false);\n });\n\n useEventSubscription(OnFetchleadHistoryError, () => {\n toast.error('Something happened while getting lead history');\n });\n\n useEventSubscription(OnFetchFullLeadhistoryEvent, ({ leadHistoriesResolver }) => {\n setItems({ items: leadHistoriesResolver.items, filtered: leadHistoriesResolver.items });\n setLoading(false);\n });\n\n useEventSubscription(OnFetchFullLeadhistoryError, (err) => {\n if (err) onErrorMixinFC(err);\n });\n\n /**\n * Filters the items already loaded by a search value parameter given\n */\n const handleSearch = useCallback(\n (value) => {\n setItems((state) => ({\n ...state,\n filtered: state.items.filter((item) => filterItem(value, item)),\n }));\n },\n [setItems],\n );\n\n /**\n * Enables/Disables the full history functionality and takes\n * actions based on that\n */\n const handleChange = useCallback(\n (value) => {\n setFullHistory(value);\n\n if (!value) {\n setItems({ items: [], filtered: [] });\n if (page === 1) {\n fetch();\n } else {\n setPage(1);\n }\n }\n },\n [fetch, page, setItems],\n );\n\n /**\n * Changes the entity type filter, and takes actions based on it\n */\n const handleTypeChange = useCallback(\n (type) => {\n if (!fullHistory) {\n setItems({ items: [], filtered: [] });\n setPage(1);\n }\n setType(type);\n },\n [fullHistory],\n );\n\n const history = items.filtered.map((item) =>\n getHistoryItem(item, true, fullHistory, setDifference, setInfo),\n );\n\n const columns = fullHistory ? 'minmax(35%, 1fr) 25% 130px' : '0px minmax(25%, 1fr) 130px';\n\n const paginationCtnRef = useRef(null);\n\n return (\n \n {(state) => (\n \n \n \n \n Lead History\n {\n closeModal(modalId);\n setFullHistory(false);\n }}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {!loading && history}\n {loading && (\n \n \n \n )}\n\n {\n // {!loading && !load.completed && (\n // \n // setPage(page + 1)}>Load more\n // \n //)\n }\n \n \n \n \n \n \n {difference !== null && (\n \n setDifference(null)} />\n \n \n \n \n )}\n {info !== null && (\n \n setInfo(null)} />\n \n \n \n \n )}\n \n )}\n \n );\n};\n\nLeadHistory.propTypes = {\n id: PropTypes.string.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { fetchLeadRecordings } from 'modules/leads/leads-actions';\nimport { LeadRecording } from '../types';\n\nconst initialState = {\n /**@type {LeadRecording[]}*/\n items: [],\n count: 0,\n loading: true,\n /**@type {Error | null}*/\n error: null,\n};\n\n/**\n * @param {string} leadId - Lead id to fetch recordings to.\n * @returns {{\n refresh: () => Promise;\n items: LeadRecording[];\n count: number;\n loading: boolean;\n error: Error | null;\n page: number;\n setPage: React.Dispatch>;\n}} - Logic to handle lead recordings pagination. */\nexport function useLeadRecordings(leadId) {\n const [page, setPage] = useState(1);\n const [queryState, setQueryState] = useState(initialState);\n\n const fetchLeadRecordingsData = useCallback(async () => {\n setQueryState((prevState) => ({ ...prevState, loading: true }));\n\n const leadRecordingsData = await fetchLeadRecordings(leadId, page);\n\n if (!leadRecordingsData?.phoneCallRecordingsList) {\n setQueryState((prevState) => ({\n ...prevState,\n error: new Error('Could not fetch lead recordings data'),\n }));\n return;\n }\n\n setQueryState((prevState) => ({\n ...prevState,\n items: leadRecordingsData.phoneCallRecordingsList.items,\n count: leadRecordingsData.phoneCallRecordingsList.count,\n loading: false,\n error: null,\n }));\n }, [leadId, page]);\n\n useEffect(() => {\n fetchLeadRecordingsData();\n }, [fetchLeadRecordingsData]);\n\n return { page, setPage, ...queryState, refresh: fetchLeadRecordingsData };\n}\n","import styled from 'styled-components';\n\nexport const PaginationContainer = styled.div`\n display: flex;\n justify-content: center;\n font-size: 1.2rem;\n`;\n","import React, { useMemo } from 'react';\nimport { Table } from '@8base/boost';\nimport styled from 'styled-components';\nimport moment from 'moment';\nimport AudioPlayer from 'react-h5-audio-player';\nimport { ColumnName, ColumnValue } from 'modules/leads/components/ColumnInfo';\nimport { formatPhoneNumber } from 'modules/phone-calls/phone-calls-utils';\nimport { CALL_TYPES } from 'modules/phone-calls/phone-calls-model';\n\nconst RecordingPlayerCell = styled(Table.BodyCell)`\n padding-left: 0px !important;\n`;\n\nconst DateContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n`;\n\nconst StyledText = styled.text`\n word-break: auto-phrase;\n`;\n\n/**\n * @param {object} props - Component props.\n * @param {LeadRecording} props.leadRecording - Component props.\n * @param {string} props.tableCols - Number of columns of the table.\n * @returns {React.ReactNode} Recording Item component.\n */\nexport function RecordingItem({ leadRecording, tableCols }) {\n const callType = useMemo(() => (leadRecording.call ? CALL_TYPES.OUTBOUND : CALL_TYPES.INBOUND), [\n leadRecording,\n ]);\n\n const call = useMemo(() => {\n return callType === CALL_TYPES.OUTBOUND ? leadRecording.call : leadRecording.inboundCall;\n }, [leadRecording, callType]);\n\n const recordingDate = useMemo(() => {\n const now = moment().startOf('day');\n const created = moment(call.createdAt);\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n\n if (created.isSame(now, 'day')) return 'Today';\n if (created.isSame(yesterday, 'day')) return 'Yesterday';\n return created.format('DD-MM-YYYY');\n }, [call]);\n\n const recordingTime = useMemo(() => {\n return moment(call.createdAt).format('LT');\n }, [call]);\n\n const from = useMemo(() => {\n return callType === CALL_TYPES.OUTBOUND\n ? `${call.user.firstName} ${call.user.lastName} ${formatPhoneNumber(\n `+${call.from.number.code}${call.from.number.number}`,\n )}`\n : formatPhoneNumber(call.from);\n }, [call, callType]);\n\n const to = useMemo(() => {\n return callType === CALL_TYPES.OUTBOUND\n ? call.lead\n ? `${call.lead.firstName} ${call.lead.lastName} ${formatPhoneNumber(call.to)}`\n : formatPhoneNumber(call.to)\n : formatPhoneNumber(`+${call.to.number.code}${call.to.number.number}`);\n }, [call, callType]);\n\n return (\n \n \n \n {recordingDate}\n {recordingTime}\n \n \n \n {from}\n \n \n {to}\n \n\n \n \n \n \n );\n}\n","import styled, { css, keyframes } from 'styled-components';\n\nconst slideIn = keyframes`\n 0% {\n transform: translateX(100%);\n }\n 100% {\n transform: translateX(0);\n }\n`;\n\nconst slideOut = keyframes`\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(100%);\n }\n`;\n\nconst animate = css`\n animation: 0.3s\n ${({ state }) => {\n switch (state) {\n case 'entering':\n return slideIn;\n case 'exiting':\n return slideOut;\n default:\n return '';\n }\n }}\n ease-in-out;\n`;\n\nexport const SideBar = styled.div`\n display: flex;\n gap: 0.5em;\n flex-direction: column;\n position: fixed;\n background-color: #fff;\n height: 100%;\n width: 800px;\n max-width: 940px;\n top: 0;\n right: 0;\n height: 100vh;\n box-shadow: 0 0px 3px 3px rgba(50, 50, 93, 0.14);\n transition: width 1s;\n z-index: 2;\n ${animate}\n`;\n","import React, { useEffect, useMemo, useRef } from 'react';\nimport { Transition } from 'react-transition-group';\nimport { Card, Row, Column, Icon, Table, Pagination, useModal } from '@8base/boost';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { Title } from 'shared/components';\nimport { error as toastError } from 'shared/components/toast/Toast';\nimport { onErrorMixinFC } from 'shared/mixins';\nimport { OnFetchLeadRecordingsError } from '../leads-store';\nimport { useLeadRecordings } from './hooks/useLeadRecordings';\nimport { PaginationContainer } from './components/PaginationContainer';\nimport { RecordingItem } from './components/RecordingItem';\nimport { SideBar } from './components/SideBar';\n\nexport const leadRecordingsModalId = 'lead-recordings-modal';\n\n/**\n * @param {object} props - Component props.\n * @param {string} props.leadId - Lead id to fetch recordings for.\n * @returns {React.ReactNode} LeadRecordingsDrawer component\n */\nexport function LeadRecordingsDrawer({ leadId }) {\n const nodeRef = useRef(null);\n const { isOpen, closeModal } = useModal(leadRecordingsModalId);\n const {\n items: leadRecordings,\n loading: isLoadingLeadRecordings,\n count,\n page,\n setPage,\n error,\n } = useLeadRecordings(leadId);\n\n const tableCols = useMemo(() => '1fr 1fr 1fr 2fr', []);\n\n useSubscription(OnFetchLeadRecordingsError, (e) => {\n onErrorMixinFC(e);\n });\n\n useEffect(() => {\n if (!error) return;\n toastError(error.message);\n }, [error]);\n\n return (\n \n {(state) => (\n \n \n \n \n Lead Recordings\n {\n closeModal(leadRecordingsModalId);\n }}\n />\n \n \n \n\n \n \n Date\n From\n To\n Play\n \n\n \n {(leadRecording) => (\n \n )}\n \n\n \n \n \n \n \n \n \n )}\n \n );\n}\n","import React, { useState, useContext, useCallback, useEffect } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport {\n Row,\n Button,\n Text,\n Icon,\n Dropdown,\n Menu,\n Heading as BoostHeading,\n styled,\n useModal,\n} from '@8base/boost';\nimport { modalId as decisionModalId } from '../../../shared/components/dialog/DecisionDialog';\nimport { modalId } from '../leads-history/components/LeadHistory';\nimport {\n LeadRecordingsDrawer,\n leadRecordingsModalId,\n} from '../leads-recordings/LeadRecordingsDrawer';\nimport { PhoneNumber } from '../../phone-calls/Components/PhoneNumber';\nimport { formatPhoneNumber } from '../../phone-calls/phone-calls-utils';\nimport { Box } from '../../../shared/components/Box';\nimport { ComposeEmailContext } from '../../email/components/ComposeEmailProvider';\nimport { deleteLead } from '../leads-actions';\nimport { OnFetchLeadMessages, OnFetchLeadMessagesError, OnLeadMessageCreate } from '../leads-store';\nimport { fetchLeadMessages } from '../leads-actions';\nimport MsgForm from './forms/MsgForm';\nimport {\n IconCallGreen,\n IconChatGreen,\n IconComposeEmailGreen,\n IconRecordingGreen,\n} from '../../../shared/components/ui/Icons';\nimport PropTypes from 'prop-types';\nimport { useHistory } from 'react-router';\nimport * as toast from '../../../shared/components/toast/Toast';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { useUser } from 'shared/hooks/useUser';\nimport { OnDeleteLeadEvent } from '../leads-events';\n\nconst Heading = styled(BoostHeading)`\n opacity: 0.9;\n color: #323c47 !important;\n font-family: 'Poppins';\n display: inline-block;\n font-size: 22px !important;\n line-height: 24px !important;\n font-weight: 600 !important;\n white-space: nowrap;\n`;\n\nconst NavBar = styled(Row)`\n width: 100%;\n\n @media screen and (max-width: 1200px) {\n width: 100%;\n flex-wrap: wrap !important;\n }\n`;\n\nconst NavInfo = styled.div`\n width: 30%;\n display: flex;\n\n & > *:not(:last-child) {\n margin-right: 8px;\n }\n\n @media screen and (max-width: 1200px) {\n width: 100%;\n }\n`;\n\nconst NavActions = styled(Row)`\n width: 70%;\n\n @media screen and (max-width: 1200px) {\n width: 100%;\n justify-content: center !important;\n padding-bottom: 16px;\n }\n\n @media screen and (max-width: 870px) {\n flex-wrap: wrap !important;\n }\n`;\n\nconst NavItem = styled.div`\n padding: 0 10px;\n\n @media screen and (max-width: 870px) {\n width: 100%;\n padding: 10px 0px;\n }\n`;\n\nexport const LeadDetailsHeader = ({ lead }) => {\n const { onCompose } = useContext(ComposeEmailContext);\n const { openModal, closeModal } = useModal(modalId);\n const [messages, setMessages] = useState([]);\n const [loadingMessages, setLoadingLeadMessages] = useState(true);\n const [isOpen, setOpen] = useState(false);\n const agency = useAgency();\n const user = useUser();\n const history = useHistory();\n useEffect(() => {\n setLoadingLeadMessages(true);\n\n fetchLeadMessages(lead.id);\n }, [lead]);\n\n useSubscription(OnDeleteLeadEvent, () => {\n closeModal(decisionModalId);\n\n toast.success('Success', 'Lead deleted successfully');\n\n history.replace('/leads');\n });\n\n useSubscription(\n OnFetchLeadMessages,\n ({ sMSMessagesList }) => {\n setLoadingLeadMessages(false);\n setMessages(sMSMessagesList.items);\n },\n [],\n );\n\n useSubscription(\n OnFetchLeadMessagesError,\n (e) => {\n onErrorMixinFC(e);\n\n setMessages([]);\n\n setLoadingLeadMessages(false);\n },\n [],\n );\n\n useSubscription(\n OnLeadMessageCreate,\n () => {\n toast.success('Success', 'Message sent successfully');\n\n setLoadingLeadMessages(true);\n\n fetchLeadMessages(lead.id);\n },\n [lead],\n );\n\n const onDelete = useCallback(\n (callback) => {\n openModal(decisionModalId, {\n title: 'Delete Lead',\n text: 'Are you sure you want to delete this lead ?',\n confirmText: 'Yes, Delete',\n cancelText: 'Cancel',\n onClose: () => closeModal(decisionModalId),\n onCancel: () => closeModal(decisionModalId),\n onConfirm: () => deleteLead(lead.id),\n });\n\n callback();\n },\n [lead, openModal, closeModal],\n );\n\n const name = `${lead.firstName} ${lead.lastName}`;\n const [phone] = lead.leadLeadPhoneNumberRelation.items;\n\n return (\n \n \n \n {name}\n {phone && (\n \n {formatPhoneNumber(phone.phone.number)}\n \n )}\n \n \n \n openModal(leadRecordingsModalId, { customArg: 1 })}>\n {' '}\n Recordings\n \n \n {phone && (\n \n \n {' '}\n Call\n \n \n )}\n \n setOpen(true)}>\n {' '}\n Text\n \n \n \n \n onCompose({\n id: lead.id,\n to: lead.email,\n })\n }\n color=\"neutral\"\n variant=\"link\">\n {' '}\n Email\n \n \n \n \n openModal(modalId, {\n user: user[0].id,\n agency: agency.id,\n })\n }>\n {' '}\n History\n \n \n \n \n \n \n \n \n {({ closeDropdown: close }) => (\n \n onDelete(close)}>\n Delete Lead\n \n \n )}\n \n \n \n \n \n \n setOpen(false)}\n />\n \n );\n};\n\nLeadDetailsHeader.propTypes = {\n lead: PropTypes.shape({\n id: PropTypes.string.isRequired,\n email: PropTypes.string.isRequired,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n leadLeadPhoneNumberRelation: PropTypes.shape({\n items: PropTypes.arrayOf(PropTypes.object.isRequired),\n }),\n }).isRequired,\n};\n","import React, { useState, useEffect } from 'react';\nimport { Column, Input, Text } from '@8base/boost';\nimport { updateLeadAmount } from '../../leads-actions';\nimport { Box } from '../../../../shared/components/Box';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnUpdateLeadAmount, OnUpdateLeadAmountError } from '../../leads-store';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport PropTypes from 'prop-types';\n\n/**\n * LeadAmountForm - Component for handling the lead amount form.\n *\n * @param {object} props - The properties passed to the component.\n * @param {string} props.id - The identifier for the lead.\n * @param {string} [props.amount = '0'] - The amount associated with the lead.\n * @param {boolean} props.refresh - Indicates whether the form should refresh after an action.\n *\n * @returns {React.ReactNode} The form for managing the lead amount.\n */\nexport const LeadAmountForm = ({ id, amount = '0', refresh }) => {\n const [value, setValue] = useState(0);\n\n useEffect(() => {\n if (amount) {\n setValue(parseFloat(amount));\n }\n }, [amount]);\n\n useSubscription(\n OnUpdateLeadAmount,\n () => {\n toast.success('Success', 'Amount updated successfully');\n\n refresh();\n },\n [refresh],\n );\n\n useSubscription(\n OnUpdateLeadAmountError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n const handleUpdate = () => {\n const prev = amount ? parseFloat(amount) : 0;\n const next = value ? value : 0;\n\n if(next === prev) return;\n\n updateLeadAmount(id, String(next));\n };\n\n return (\n \n \n Amount\n \n \n \n );\n};\n\nLeadAmountForm.propTypes = {\n id: PropTypes.string.isRequired,\n amount: PropTypes.string,\n refresh: PropTypes.func.isRequired,\n};\n\nLeadAmountForm.defaultProps = {\n amount: '0',\n};\n","import React, { useState, useMemo, useCallback, useEffect } from 'react';\nimport { Column, Select, Text } from '@8base/boost';\nimport { Box } from '../../../../shared/components/Box';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport {\n OnFetchLeadStages,\n OnFetchLeadStagesError,\n OnSetLeadStage,\n OnSetLeadStageError,\n} from '../../leads-stage/leads-stage-store';\nimport { fetchLeadStages, assignLeadStage } from '../../leads-stage/leads-stage-action';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\n\nexport const LeadStageForm = ({ id, stage, refresh }) => {\n const [stages, setStages] = useState([]);\n const [value, setValue] = useState(stage);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n fetchLeadStages();\n }, []);\n\n const onChange = useCallback(\n (selected) => {\n setLoading(true);\n setValue(selected);\n\n assignLeadStage(id, selected);\n },\n [id],\n );\n\n useSubscription(\n OnFetchLeadStages,\n ({ leadStagesList }) => {\n setStages(leadStagesList.items);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchLeadStagesError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnSetLeadStage,\n () => {\n setLoading(false);\n refresh();\n\n toast.success('Success', 'Lead stage updated successfuly');\n },\n [refresh],\n );\n\n useSubscription(\n OnSetLeadStageError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const options = useMemo(\n () =>\n stages.map((stage) => ({\n label: stage.name,\n value: stage.id,\n })),\n [stages],\n );\n\n return (\n \n \n Stage\n \n \n \n );\n};\n\nLeadStageForm.propTypes = {\n id: PropTypes.string.isRequired,\n stage: PropTypes.string,\n refresh: PropTypes.func.isRequired,\n};\n\nLeadStageForm.defaultProps = {\n stage: '',\n};\n","import React, { useState, useMemo, useCallback, useEffect } from 'react';\nimport { Column, Select, Text } from '@8base/boost';\nimport { Box } from '../../../../shared/components/Box';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnUpdateLeadCampaign, OnUpdateLeadCampaignError } from '../../leads-store';\nimport { updateLeadCampaign } from '../../leads-actions';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\n\nexport const LeadCampaignForm = ({ id, campaign, campaigns, refresh }) => {\n const [value, setValue] = useState(campaign);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n setLoading(false);\n }, [campaign]);\n\n const onChange = useCallback(\n (selected) => {\n setLoading(true);\n setValue(selected);\n\n updateLeadCampaign(id, selected);\n },\n [id],\n );\n\n useSubscription(\n OnUpdateLeadCampaign,\n () => {\n setLoading(false);\n refresh();\n\n toast.success('Success', 'Lead campaign updated successfuly');\n },\n [refresh],\n );\n\n useSubscription(\n OnUpdateLeadCampaignError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const options = useMemo(\n () =>\n campaigns.map((stage) => ({\n label: stage.name,\n value: stage.id,\n })),\n [campaigns],\n );\n\n return (\n \n \n Campaign\n \n \n \n );\n};\n\nLeadCampaignForm.propTypes = {\n id: PropTypes.string.isRequired,\n campaign: PropTypes.string.isRequired,\n campaigns: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n name: PropTypes.string,\n }),\n ).isRequired,\n refresh: PropTypes.func.isRequired,\n};\n","import React, { useState, useCallback, useMemo, useEffect } from 'react';\nimport { Column, Input, Text, Icon, Dropdown, Menu, Checkbox, Button } from '@8base/boost';\nimport { getAssignedUsersLabel } from '../../../users/user-utils';\nimport { Box } from '../../../../shared/components/Box';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnUpdateLeadAssignees, OnUpdateLeadAssigneesError } from '../../leads-store';\nimport { updateLeadAssignees } from '../../leads-actions';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\n\nexport const LeadAssigneesForm = ({ id, assignees, users, refresh }) => {\n const [selected, setSelected] = useState(assignees);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n setSelected(assignees);\n }, [assignees]);\n\n const onSelect = useCallback((user, checked) => {\n if (checked) {\n setSelected((prevState) => [...prevState, user]);\n } else {\n setSelected((prevState) => prevState.filter((u) => u.id !== user.id));\n }\n }, []);\n\n const onAccept = (callback) => {\n setLoading(true);\n\n updateLeadAssignees(\n id,\n selected.map((user) => user.id),\n );\n\n callback();\n };\n\n useSubscription(\n OnUpdateLeadAssignees,\n () => {\n setLoading(false);\n\n toast.success('Success', 'Users assigned correctly to lead');\n\n refresh();\n },\n [refresh],\n );\n\n useSubscription(\n OnUpdateLeadAssigneesError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const value = getAssignedUsersLabel(assignees);\n\n const options = useMemo(\n () =>\n users.map((user) => (\n \n sel.id === user.id)}\n onChange={(value) => onSelect(user, value)}\n />\n \n )),\n [users, selected, onSelect],\n );\n\n return (\n \n \n Assigned To\n \n \n }\n />\n \n \n {({ closeDropdown: close }) => (\n \n \n {options}\n \n \n onAccept(close)}>\n Accept\n \n \n Cancel\n \n \n \n )}\n \n \n \n \n );\n};\n\nLeadAssigneesForm.propTypes = {\n id: PropTypes.string.isRequired,\n assignees: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n firstName: PropTypes.string,\n lastName: PropTypes.string,\n }),\n ).isRequired,\n users: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n firstName: PropTypes.string,\n lastName: PropTypes.string,\n }),\n ).isRequired,\n refresh: PropTypes.func.isRequired,\n};\n","import React, { useState, useMemo, useContext } from 'react';\nimport { Row, Heading, Grid, Text, Button } from '@8base/boost';\nimport { Box } from '../../../../shared/components/Box';\nimport { ColumnInfo } from '../ColumnInfo';\nimport { formatContactData, leadDetailMap } from '../../lead-details-utils';\nimport LeadFormDialog from '../LeadFormDialog';\nimport { ComposeEmailContext } from '../../../email/components/ComposeEmailProvider';\nimport { useAgency } from '../../../../shared/hooks/useAgency';\nimport PropTypes from 'prop-types';\n\nexport const LeadInfoCard = ({ lead, users, campaigns, refresh }) => {\n const { onCompose } = useContext(ComposeEmailContext);\n const [isOpen, setOpen] = useState(false);\n const agency = useAgency();\n\n const data = useMemo(\n () =>\n formatContactData(lead).map((row, i) => (\n \n \n {row.map((column, j) => (\n \n {column.label}\n {column.isTextContact ? (\n column.label === 'Email' ? (\n onCompose(lead)}>\n {column.value}\n \n ) : (\n {column.value}\n )\n ) : (\n column.value\n )}\n \n ))}\n \n \n )),\n [lead, onCompose],\n );\n\n return (\n \n \n \n Contact Information\n setOpen(true)}>\n Update Lead Info\n \n \n \n \n \n {data}\n \n \n setOpen(false)}\n />\n \n );\n};\n\nLeadInfoCard.propTypes = {\n lead: PropTypes.object.isRequired,\n users: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n }),\n ).isRequired,\n campaigns: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n }),\n ).isRequired,\n refresh: PropTypes.func.isRequired,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Form,\n Grid,\n InputField,\n styled,\n SelectField,\n CheckboxField,\n DateInputField,\n} from '@8base/boost';\nimport { Margin } from 'shared/components';\n\nconst GridBoxFlexEnd = styled(Grid.Box)`\n justify-content: flex-end;\n`;\n\n/**\n * Form with fields\n *\n * @param {object} props component props\n * @param {object} props.data data\n * @param {object} props.rows rows with fields\n * @param {Function} props.onChangeInput handle for onChange input\n * @returns {React.Component} - Input Component\n */\nconst FormFields = ({ data, rows, onChangeInput }) => {\n return (\n \n \n \n {rows.map((row, rowIndex) => {\n const columnSize = (100 / row.length).toFixed(2);\n const gapSize = 16 * (row.length - 1);\n const columns = `repeat(${row.length -\n 1}, ${columnSize}%) calc(${columnSize}% - ${gapSize}px)`;\n\n return (\n \n {row.map((field, fieldIndex) => {\n let inputFiled;\n\n if (field.type === 'text') {\n inputFiled = (\n onChangeInput(value, field.key),\n }}\n />\n );\n }\n\n if (field.type === 'number') {\n inputFiled = (\n onChangeInput(value, field.key),\n }}\n />\n );\n }\n\n if (field.type === 'date') {\n inputFiled = (\n onChangeInput(value, field.key),\n }}\n />\n );\n }\n\n if (field.type === 'datetime') {\n inputFiled = (\n onChangeInput(value, field.key),\n }}\n withTime\n />\n );\n }\n\n if (field.type === 'select') {\n inputFiled = (\n onChangeInput(value, field.key),\n }}\n options={field.options}\n />\n );\n }\n\n if (field.type === 'checkbox') {\n inputFiled = (\n \n onChangeInput(value, field.key),\n }}\n />\n \n );\n }\n\n return {inputFiled};\n })}\n \n );\n })}\n \n \n \n );\n};\n\nFormFields.propTypes = {\n rows: PropTypes.array.isRequired,\n data: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n};\n\nexport default FormFields;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport FormFields from '../../../../shared/components/forms/FormFields';\n\nconst LeadTypeAutoForm = ({ leadTypeData, onChangeInput }) => {\n const rows = [\n [\n {\n key: 'alternate',\n label: 'Alternate',\n type: 'text',\n },\n {\n key: 'otherInfo',\n label: 'Other Info',\n type: 'text',\n },\n ],\n [\n {\n key: 'currentBodilyInjuryCoverages',\n label: 'Current Bodily Injury Coverages',\n type: 'text',\n },\n {\n key: 'currentPropertyDamageCoverages',\n label: 'Current Property Damage Coverages',\n type: 'text',\n },\n ],\n ];\n\n return ;\n};\n\nLeadTypeAutoForm.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n};\n\nexport default LeadTypeAutoForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadTypeAutoForm from './LeadTypeAutoForm';\n\nconst LeadTypeAutoFormDialog = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadTypeData,\n onCloseDialog,\n onChangeInput,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadTypeAutoFormDialog.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadTypeAutoFormDialog.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadTypeAutoFormDialog;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnleadsAutoUpdateEvent = createEvent();\n\nexport const OnleadsAutoError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport { LEAD_TYPE_AUTO_UPDATE_MUTATION } from './leads-type-auto-queries';\nimport { leadAutoValidations } from './leads-type-auto-utils';\nimport { OnleadsAutoError, OnleadsAutoUpdateEvent } from './leads-type-auto-events';\n\n/**\n * Update a lead type auto\n *\n * @param {object} leadAuto lead type auto\n * @returns {object} response data\n */\nexport const updateLeadAuto = async (leadAuto) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadAutoValidations(leadAuto);\n } catch (e) {\n error('updateLeadAuto', e);\n\n return OnleadsAutoError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEAD_TYPE_AUTO_UPDATE_MUTATION,\n variables: { data: leadAuto },\n });\n } catch (e) {\n error('updateLeadAuto', e);\n\n return OnleadsAutoError.dispatch(e);\n }\n\n log('updateLeadAuto', response);\n OnleadsAutoUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport { Card, Row, Loader } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport { Title, ButtonWithoutIcon } from 'shared/components';\n\nconst Body = styled(Card.Body)`\n max-height: 576px;\n\n &::-webkit-scrollbar {\n width: 8px; /* Tamaño del scroll en vertical */\n height: 8px; /* Tamaño del scroll en horizontal */\n }\n &::-webkit-scrollbar-thumb,\n &::-webkit-scrollbar-track {\n transition: all 1s ease-in-out;\n }\n &::-webkit-scrollbar-thumb {\n background: #ccc;\n border-radius: 4px;\n }\n &:hover::-webkit-scrollbar-thumb:hover {\n background: #b3b3b3;\n box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.2);\n }\n &::-webkit-scrollbar-thumb:active {\n background-color: #999999;\n }\n &::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 4px;\n }\n &::-webkit-scrollbar-track:hover,\n &::-webkit-scrollbar-track:active {\n background: #d4d4d4;\n }\n`;\n\nconst PaperInfo = ({ title, loading, btnText, children, onClickBtn }) => {\n const content = loading ? (\n \n \n \n ) : (\n children\n );\n\n return (\n \n \n \n {title}\n \n \n \n {content}\n \n );\n};\n\nPaperInfo.propTypes = {\n title: PropTypes.string.isRequired,\n loading: PropTypes.bool,\n btnText: PropTypes.string.isRequired,\n onClickBtn: PropTypes.func.isRequired,\n children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]).isRequired,\n};\n\nPaperInfo.defaultProps = {\n loading: false,\n};\n\nexport default PaperInfo;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as R from 'ramda';\nimport LeadTypeAutoFormDialog from './LeadTypeAutoDialogForm';\nimport { updateLeadAuto } from '../leads-type-auto-actions';\nimport { onErrorMixinFC, onChangeDataHookMixin } from '../../../../shared/mixins';\nimport { formatData, leadAutoMap, leadAutoCreateMap } from '../leads-type-auto-utils';\nimport { ColumnInfo, ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport PaperInfo from '../../components/PaperInfo';\nimport { OnleadsAutoError, OnleadsAutoUpdateEvent } from '../leads-type-auto-events';\n\nconst LeadTypeAutoInfo = ({ leadTypeData }) => {\n const [loading, setLoading] = useState(false);\n const [leadTypeInfo, setLeadTypeInfo] = useState(R.clone(leadTypeData));\n const [leadTypeFields, setLeadTypeFields] = useState(leadAutoMap(R.clone(leadTypeData)));\n const [isOpenForm, setIsOpenForm] = useState(false);\n const handleOnSubmitForm = () => {\n const leadAutoToUpdate = {\n id: leadTypeFields.id,\n ...leadAutoCreateMap(leadTypeFields),\n };\n\n setLoading(true);\n updateLeadAuto(leadAutoToUpdate);\n };\n const handleOnChangeInput = (value, key) => {\n onChangeDataHookMixin(leadTypeFields, setLeadTypeFields, key, value);\n };\n\n useEventSubscription(OnleadsAutoUpdateEvent, (data) => {\n if (data) {\n setLoading(false);\n setIsOpenForm(false);\n setLeadTypeInfo(data.leadTypeAutoUpdate);\n }\n });\n\n useEventSubscription(OnleadsAutoError, (err) => {\n if (err) {\n setLoading(false);\n onErrorMixinFC(err);\n }\n });\n\n return (\n <>\n setIsOpenForm(true)}>\n \n {leadTypeInfo &&\n formatData(leadTypeInfo).map((row, i) => {\n return (\n \n \n {row.map((column, j) => {\n return (\n \n {column.label}\n {column.value}\n \n );\n })}\n \n \n );\n })}\n \n \n setIsOpenForm(false)}\n />\n >\n );\n};\n\nLeadTypeAutoInfo.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n};\n\nexport default LeadTypeAutoInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport FormFields from '../../../../shared/components/forms/FormFields';\n\n/**\n * Lead type commercial auto form\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n * @param {Function} props.onChangeInput handle for onChange input\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeCommercialAutoForm = ({ leadTypeData, onChangeInput }) => {\n const rows = [\n [\n {\n key: 'businessName',\n label: 'Company Name',\n type: 'text',\n },\n {\n key: 'name',\n label: 'Name',\n type: 'text',\n },\n ],\n [\n {\n key: 'yearsInBusiness',\n label: 'Years in Business',\n type: 'number',\n },\n {\n key: 'numberOfEmployees',\n label: 'Number Of Employees',\n type: 'number',\n },\n ],\n [\n {\n key: 'businessType',\n label: 'Business Type',\n type: 'text',\n },\n {\n key: 'coverageAmount',\n label: 'Coverage Amount',\n type: 'number',\n },\n ],\n [\n {\n key: 'payroll',\n label: 'Payroll',\n type: 'text',\n },\n {\n key: 'sales',\n label: 'Sales',\n type: 'text',\n },\n ],\n [\n {\n key: 'numberOfVehicles',\n label: 'Number Of Vehicles',\n type: 'number',\n },\n {\n key: 'numberOfDrivers',\n label: 'Number Of Drivers',\n type: 'number',\n },\n ],\n ];\n\n return ;\n};\n\nLeadTypeCommercialAutoForm.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n};\n\nexport default LeadTypeCommercialAutoForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadTypeCommercialAutoForm from './LeadTypeCommercialAutoForm';\n\nconst LeadTypeCommercialAutoFormDialog = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadTypeData,\n onCloseDialog,\n onChangeInput,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadTypeCommercialAutoFormDialog.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadTypeCommercialAutoFormDialog.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadTypeCommercialAutoFormDialog;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnLeadsCommercialAutoUpdateEvent = createEvent();\n\nexport const OnLeadsCommercialAutoError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport {\n OnLeadsCommercialAutoError,\n OnLeadsCommercialAutoUpdateEvent,\n} from './leads-type-commercial-auto-events';\nimport { LEADS_TYPE_COMMERCIAL_AUTO_UPDATE_MUTATION } from './leads-type-commercial-auto-queries';\nimport { leadCommercialAutoValidations } from './leads-type-commercial-auto-utils';\n\n/**\n * Update a lead type commercial auto\n *\n * @param {object} leadCommercialAuto lead type commercial auto\n * @returns {object} response data\n */\nexport const updateLeadCommercialAuto = async (leadCommercialAuto) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadCommercialAutoValidations(leadCommercialAuto);\n } catch (e) {\n error('updateLeadCommercialAuto', e);\n\n return OnLeadsCommercialAutoError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEADS_TYPE_COMMERCIAL_AUTO_UPDATE_MUTATION,\n variables: { data: leadCommercialAuto },\n });\n } catch (e) {\n error('updateLeadCommercialAuto', e);\n\n return OnLeadsCommercialAutoError.dispatch(e);\n }\n\n log('updateLeadCommercialAuto', response);\n OnLeadsCommercialAutoUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as R from 'ramda';\nimport LeadTypeCommercialAutoFormDialog from './LeadTypeCommercialAutoDialogForm';\nimport { updateLeadCommercialAuto } from '../leads-type-commercial-auto-actions';\nimport { onErrorMixinFC, onChangeDataHookMixin } from '../../../../shared/mixins';\nimport {\n formatData,\n leadCommercialAutoMap,\n leadCommercialAutoCreateMap,\n} from '../leads-type-commercial-auto-utils';\nimport { ColumnInfo, ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport PaperInfo from '../../components/PaperInfo';\nimport {\n OnLeadsCommercialAutoError,\n OnLeadsCommercialAutoUpdateEvent,\n} from '../leads-type-commercial-auto-events';\n\nconst LeadTypeCommercialAutoInfo = ({ leadTypeData }) => {\n const [loading, setLoading] = useState(false);\n const [leadTypeInfo, setLeadTypeInfo] = useState(R.clone(leadTypeData));\n const [leadTypeFields, setLeadTypeFields] = useState(\n leadCommercialAutoMap(R.clone(leadTypeData)),\n );\n const [isOpenForm, setIsOpenForm] = useState(false);\n const handleOnSubmitForm = () => {\n const leadCommercialAutoToUpdate = {\n id: leadTypeFields.id,\n ...leadCommercialAutoCreateMap(leadTypeFields),\n };\n\n setLoading(true);\n updateLeadCommercialAuto(leadCommercialAutoToUpdate);\n };\n const handleOnChangeInput = (value, key) => {\n onChangeDataHookMixin(leadTypeFields, setLeadTypeFields, key, value);\n };\n\n useEventSubscription(OnLeadsCommercialAutoUpdateEvent, (data) => {\n setLoading(false);\n setIsOpenForm(false);\n setLeadTypeInfo(data.leadTypeCommercialAutoUpdate);\n });\n\n useEventSubscription(OnLeadsCommercialAutoError, (err) => {\n setLoading(false);\n onErrorMixinFC(err);\n });\n\n return (\n <>\n setIsOpenForm(true)}>\n \n {leadTypeInfo &&\n formatData(leadTypeInfo).map((row, i) => {\n return (\n \n \n {row.map((column, j) => {\n return (\n \n {column.label}\n {column.value}\n \n );\n })}\n \n \n );\n })}\n \n \n setIsOpenForm(false)}\n />\n >\n );\n};\n\nLeadTypeCommercialAutoInfo.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n};\n\nexport default LeadTypeCommercialAutoInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Grid, InputField, DateInputField } from '@8base/boost';\n\n/**\n * Lead type form\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n * @param {Function} props.onChangeInput handle for onChange input\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeGeneralLiabilityForm = ({ leadTypeData, onChangeInput }) => {\n return (\n \n \n \n \n \n onChangeInput(value, 'natureOfBusiness'),\n }}\n />\n \n \n onChangeInput(value, 'companyName'),\n }}\n />\n \n \n \n \n onChangeInput(value, 'grossSales'),\n }}\n />\n \n \n onChangeInput(value, 'numberOfEmployees'),\n }}\n />\n \n \n \n \n onChangeInput(value, 'payroll'),\n }}\n />\n \n \n onChangeInput(value, 'policyExpirationDate'),\n }}\n />\n \n \n \n \n \n );\n};\n\nLeadTypeGeneralLiabilityForm.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n};\n\nexport default LeadTypeGeneralLiabilityForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadTypeGeneralLiabilityForm from './LeadTypeGeneralLiabilityForm';\n\n/**\n * Lead type dialog that contains the form\n *\n * @param {object} props component props\n * @param {boolean} props.isOpen dialog open value\n * @param {boolean} props.isUpdate bool for change the title of the dialog\n * @param {boolean} props.loading bool for indicates if the request is loading\n * @param {Function} props.onSubmit handle for on submit form\n * @param {object} props.leadTypeData lead type data\n * @param {Function} props.onCloseDialog handle for close the dialog\n * @param {Function} props.onChangeInput handle on change for the fields\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeGeneralLiabilityFormDialog = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadTypeData,\n onCloseDialog,\n onChangeInput,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadTypeGeneralLiabilityFormDialog.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadTypeGeneralLiabilityFormDialog.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadTypeGeneralLiabilityFormDialog;\n","import { ValidationError } from '../../../shared/errors';\nimport { isValidString, isValidNumber } from '../../../shared/validators';\n\nconst leadGeneralLiabilityMessage = 'The lead type must have a ';\nconst leadGeneralLiabilityMessageValid = `${leadGeneralLiabilityMessage} valid`;\nconst messages = {\n natureOfBusiness: leadGeneralLiabilityMessageValid + ' nature of business',\n companyName: leadGeneralLiabilityMessageValid + ' company name',\n grossSales: leadGeneralLiabilityMessageValid + ' gross sales',\n numberOfEmployees: leadGeneralLiabilityMessageValid + ' number of employees',\n payroll: leadGeneralLiabilityMessageValid + ' payroll',\n};\n\n/**\n * Validate that the lead type has all the fields necessaries with the right format.\n *\n * @param {object} leadGeneralLiability - the lead type type to be validated\n */\nexport const updateLeadGeneralLiabilityValidator = (leadGeneralLiability) => {\n let errorMessages = [];\n\n if (!isValidString(leadGeneralLiability.natureOfBusiness))\n errorMessages.push(messages.natureOfBusiness);\n\n if (!isValidString(leadGeneralLiability.companyName)) errorMessages.push(messages.companyName);\n\n if (!isValidNumber(leadGeneralLiability.grossSales)) errorMessages.push(messages.grossSales);\n\n if (!isValidNumber(leadGeneralLiability.numberOfEmployees))\n errorMessages.push(messages.numberOfEmployees);\n\n if (errorMessages.length !== 0) throw new ValidationError(errorMessages);\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnLeadsGeneralLiabilityUpdateEvent = createEvent();\n\nexport const OnLeadsGeneralLiabilityError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from 'shared/session/session-events';\nimport { LEAD_TYPE_GENERAL_LIABILITY_UPDATE_MUTATION } from './leads-type-general-liability-queries';\nimport { updateLeadGeneralLiabilityValidator } from './leads-type-general-liability-validators';\nimport {\n OnLeadsGeneralLiabilityError,\n OnLeadsGeneralLiabilityUpdateEvent,\n} from './leads-type-general-liability-events';\n\n/**\n * Update a lead type\n *\n * @param {object} leadGeneralLiability lead type\n * @returns {object} response data\n */\nexport const updateLeadGeneralLiability = async (leadGeneralLiability) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n updateLeadGeneralLiabilityValidator(leadGeneralLiability);\n } catch (e) {\n error('updateGeneralLiability', e);\n\n return OnLeadsGeneralLiabilityError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEAD_TYPE_GENERAL_LIABILITY_UPDATE_MUTATION,\n variables: { data: leadGeneralLiability },\n });\n } catch (e) {\n error('updateGeneralLiability', e);\n\n return OnLeadsGeneralLiabilityError.dispatch(e);\n }\n\n log('updateGeneralLiability', response);\n OnLeadsGeneralLiabilityUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid } from '@8base/boost';\nimport * as R from 'ramda';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport LeadTypeGeneralLiabilityFormDialog from './LeadTypeGeneralLiabilityDialogForm';\nimport { updateLeadGeneralLiability } from '../leads-type-general-liability-actions';\nimport { onErrorMixinFC, onChangeDataHookMixin } from '../../../../shared/mixins';\nimport {\n formatData,\n leadGeneralLiabilityMap,\n leadGeneralLiabilityCreateMap,\n} from '../leads-type-general-liability-utils';\nimport { ColumnInfo, ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport PaperInfo from '../../components/PaperInfo';\nimport {\n OnLeadsGeneralLiabilityError,\n OnLeadsGeneralLiabilityUpdateEvent,\n} from '../leads-type-general-liability-events';\n\n/**\n * Lead type table info component\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeGeneralLiabilityInfo = ({ leadTypeData }) => {\n const [loading, setLoading] = useState(false);\n const [leadTypeInfo, setLeadTypeInfo] = useState(R.clone(leadTypeData));\n const [leadTypeFields, setLeadTypeFields] = useState(\n leadGeneralLiabilityMap(R.clone(leadTypeData)),\n );\n const [isOpenForm, setIsOpenForm] = useState(false);\n const handleOnSubmitForm = () => {\n const leadTypeToUpdate = {\n id: leadTypeFields.id,\n ...leadGeneralLiabilityCreateMap(leadTypeFields),\n };\n\n setLoading(true);\n updateLeadGeneralLiability(leadTypeToUpdate);\n };\n const handleOnChangeInput = (value, key) => {\n onChangeDataHookMixin(leadTypeFields, setLeadTypeFields, key, value);\n };\n\n useEventSubscription(OnLeadsGeneralLiabilityUpdateEvent, (data) => {\n setLoading(false);\n setIsOpenForm(false);\n setLeadTypeInfo(data.leadTypeGeneralLiabilityUpdate);\n });\n\n useEventSubscription(OnLeadsGeneralLiabilityError, (err) => {\n setLoading(false);\n onErrorMixinFC(err);\n });\n\n return (\n <>\n setIsOpenForm(true)}>\n \n {leadTypeInfo &&\n formatData(leadTypeInfo).map((row, i) => {\n return (\n \n \n {row.map((column, j) => {\n return (\n \n {column.label}\n {column.value}\n \n );\n })}\n \n \n );\n })}\n \n \n setIsOpenForm(false)}\n />\n >\n );\n};\n\nLeadTypeGeneralLiabilityInfo.propTypes = {\n leadTypeData: PropTypes.array.isRequired,\n};\n\nexport default LeadTypeGeneralLiabilityInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { BIRTHDAY_OPTIONS, BIRTHYEAR_OPTIONS, BIRTHMONTH_OPTIONS } from '../../leads-model';\nimport FormFields from '../../../../shared/components/forms/FormFields';\n\n/**\n * Lead type life form\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n * @param {Function} props.onChangeInput handle for onChange input\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeLifeForm = ({ leadTypeData, onChangeInput }) => {\n const rows = [\n [\n {\n key: 'lifeInsuranceInformation',\n label: 'Life Insurance Information',\n type: 'text',\n },\n {\n key: 'policyType',\n label: 'Policy Type',\n type: 'text',\n },\n ],\n [\n {\n key: 'birthMonth',\n label: 'Date of Birth',\n type: 'select',\n options: BIRTHMONTH_OPTIONS,\n },\n {\n key: 'birthDay',\n label: '',\n type: 'select',\n options: BIRTHDAY_OPTIONS,\n },\n {\n key: 'birthYear',\n label: '',\n type: 'select',\n options: BIRTHYEAR_OPTIONS,\n },\n ],\n [\n {\n key: 'heightFeet',\n label: 'Height Feet',\n type: 'text',\n },\n {\n key: 'heightInches',\n label: 'Height Inches',\n type: 'text',\n },\n ],\n [\n {\n key: 'age',\n label: 'Age',\n type: 'text',\n },\n {\n key: 'weight',\n label: 'Weight',\n type: 'text',\n },\n ],\n [\n {\n key: 'term',\n label: 'Term',\n type: 'text',\n },\n {\n key: 'faceAmount',\n label: 'Face Amount',\n type: 'text',\n },\n ],\n [\n {\n key: 'telemarketerName',\n label: 'Telemarketer Name',\n type: 'text',\n },\n {\n key: 'callbackTime',\n label: 'Callback Time',\n type: 'text',\n },\n ],\n [\n {\n key: 'beneficiary',\n label: 'Beneficiary',\n type: 'text',\n },\n {\n key: 'callbackTime',\n label: 'Callback Time',\n type: 'text',\n },\n ],\n [\n {\n key: 'spouse',\n label: 'Spouse',\n type: 'checkbox',\n },\n {\n key: 'spouseAge',\n label: 'Spouse Age',\n type: 'text',\n },\n ],\n [\n {\n key: 'code',\n label: 'Code',\n type: 'text',\n },\n {\n key: 'driveRecording',\n label: 'Drive Recording',\n type: 'text',\n },\n ],\n [\n {\n key: 'knownMedicalCondition',\n label: 'Known Medical Condition',\n type: 'checkbox',\n },\n {\n key: 'smoke',\n label: 'Smoke',\n type: 'checkbox',\n },\n ],\n [\n {\n key: 'bankAccount',\n label: 'Bank Account',\n type: 'checkbox',\n },\n ],\n ];\n\n return ;\n};\n\nLeadTypeLifeForm.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n};\n\nexport default LeadTypeLifeForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadTypeLifeForm from './LeadTypeLifeForm';\n\n/**\n * Lead type life dialog that contains the form\n *\n * @param {object} props component props\n * @param {boolean} props.isOpen dialog open value\n * @param {boolean} props.isUpdate bool for change the title of the dialog\n * @param {boolean} props.loading bool for indicates if the request is loading\n * @param {Function} props.onSubmit handle for on submit form\n * @param {object} props.leadTypeData lead type life data\n * @param {Function} props.onCloseDialog handle for close the dialog\n * @param {Function} props.onChangeInput handle on change for the fields\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeLifeFormDialog = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadTypeData,\n onCloseDialog,\n onChangeInput,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadTypeLifeFormDialog.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadTypeLifeFormDialog.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadTypeLifeFormDialog;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnLeadsLifeUpdateEvent = createEvent();\n\nexport const OnLeadsLifeError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from 'shared/session/session-events';\nimport { LEAD_TYPE_LIFE_UPDATE_MUTATION } from './leads-type-life-queries';\nimport { leadLifeValidations } from './leads-type-life-utils';\nimport { OnLeadsLifeError, OnLeadsLifeUpdateEvent } from './leads-type-life-events';\n\n/**\n * Update a lead type life\n *\n * @param {object} leadLife lead type life\n * @returns {object} response data\n */\nexport const updateLeadLife = async (leadLife) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadLifeValidations(leadLife);\n } catch (e) {\n error('updateLeadLife', e);\n\n return OnLeadsLifeError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEAD_TYPE_LIFE_UPDATE_MUTATION,\n variables: { data: leadLife },\n });\n } catch (e) {\n error('updateLeadLife', e);\n\n return OnLeadsLifeError.dispatch(e);\n }\n\n log('updateLeadLife', response);\n OnLeadsLifeUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as R from 'ramda';\nimport LeadTypeLifeFormDialog from './LeadTypeLifeDialogForm';\nimport { updateLeadLife } from '../leads-type-life-actions';\nimport { onErrorMixinFC, onChangeDataHookMixin } from '../../../../shared/mixins';\nimport { formatData, leadLifeMap, leadLifeCreateMap } from '../leads-type-life-utils';\nimport { ColumnInfo, ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport PaperInfo from '../../components/PaperInfo';\nimport { OnLeadsLifeError, OnLeadsLifeUpdateEvent } from '../leads-type-life-events';\n\n/**\n * Lead type life table info component\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeLifeInfo = ({ leadTypeData }) => {\n const [loading, setLoading] = useState(false);\n const [leadTypeInfo, setLeadTypeInfo] = useState(R.clone(leadTypeData));\n const [leadTypeFields, setLeadTypeFields] = useState(leadLifeMap(R.clone(leadTypeData)));\n const [isOpenForm, setIsOpenForm] = useState(false);\n const handleOnSubmitForm = () => {\n const leadLifeToUpdate = {\n id: leadTypeFields.id,\n ...leadLifeCreateMap(leadTypeFields),\n };\n\n setLoading(true);\n updateLeadLife(leadLifeToUpdate);\n };\n const handleOnChangeInput = (value, key) => {\n onChangeDataHookMixin(leadTypeFields, setLeadTypeFields, key, value);\n };\n\n useEventSubscription(OnLeadsLifeUpdateEvent, (data) => {\n setLoading(false);\n setIsOpenForm(false);\n setLeadTypeInfo(data.leadTypeLifeUpdate);\n });\n\n useEventSubscription(OnLeadsLifeError, (err) => {\n setLoading(false);\n onErrorMixinFC(err);\n });\n\n return (\n <>\n setIsOpenForm(true)}>\n \n {leadTypeInfo &&\n formatData(leadTypeInfo).map((row, i) => {\n return (\n \n \n {row.map((column, j) => {\n return (\n \n {column.label}\n {column.value}\n \n );\n })}\n \n \n );\n })}\n \n \n setIsOpenForm(false)}\n />\n >\n );\n};\n\nLeadTypeLifeInfo.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n};\n\nexport default LeadTypeLifeInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport FormFields from '../../../../shared/components/forms/FormFields';\nimport { STATES_OPTIONS, YES_OR_NOT } from '../../leads-model';\nimport { Grid, styled, InputField, DateInputField } from '@8base/boost';\nimport { Margin } from 'shared/components';\n\nconst BtnAdd = styled.button`\n margin-top: 10px;\n display: flex;\n align-items: center;\n background: transparent;\n outline: none;\n cursor: pointer;\n`;\n\nconst BtnPlusChar = styled.p`\n box-sizing: border-box;\n height: 16px;\n width: 16px;\n border: 0.67px solid #3db4aa;\n border-radius: 100px;\n color: #3db4aa;\n font-size: 16px;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-right: 8px;\n`;\n\nconst BtnText = styled.p`\n color: #3db4aa;\n font-family: Poppins;\n font-size: 12px;\n letter-spacing: 0.18px;\n line-height: 20px;\n`;\n\nconst BtnDelete = styled.button`\n margin-top: 28px;\n height: 20px;\n width: 20px;\n border: 1px solid #eb4235;\n border-radius: 100px;\n background: transparent;\n outline: none;\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst BtnLess = styled.p`\n margin-left: 2px;\n height: 20px;\n width: 20px;\n color: #eb4235;\n font-size: 18px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst ClaimRow = ({ index, claim, onChangeClaim, onDeleteClaim }) => {\n return (\n <>\n \n onChangeClaim('type', index, value),\n }}\n />\n \n \n onChangeClaim('date', index, value),\n }}\n />\n \n \n onChangeClaim('amount', index, value),\n }}\n />\n \n \n onDeleteClaim(index)}>\n -\n \n \n >\n );\n};\n\nClaimRow.propTypes = {\n index: PropTypes.number.isRequired,\n claim: PropTypes.object.isRequired,\n onChangeClaim: PropTypes.func.isRequired,\n onDeleteClaim: PropTypes.func.isRequired,\n};\n\n/**\n * Lead type home form\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n * @param {Function} props.onChangeInput handle for onChange input\n * @returns {React.Component} - Form Component\n */\nconst LeadTypeHomeForm = ({\n leadTypeData,\n onChangeInput,\n onAddNewClaim,\n onChangeClaim,\n onDeleteClaim,\n}) => {\n const rows = [\n [\n {\n key: 'bestTimeToContact',\n label: 'Best Time To Contact',\n type: 'datetime',\n },\n {\n key: 'dob',\n label: 'DOB',\n type: 'date',\n },\n {\n key: 'otherInfo',\n label: 'Other Info',\n type: 'text',\n },\n ],\n [\n {\n key: 'timeAtCurrentResidence',\n label: 'Time At Current Residence',\n type: 'text',\n },\n {\n key: 'timeAtPreviousResidence',\n label: 'Time At Previous Residence',\n type: 'text',\n },\n {\n key: 'sauna',\n label: 'Sauna',\n type: 'text',\n },\n ],\n [\n {\n key: 'woodBurningStove',\n label: 'Wood Burning Stove',\n type: 'text',\n },\n {\n key: 'smokerInHousehold',\n label: 'Smoker in Household',\n type: 'text',\n },\n {\n key: 'sumpPump',\n label: 'Sump Pump',\n type: 'text',\n },\n ],\n [\n {\n key: 'copperWaterPipes',\n label: 'Copper Water Pipes',\n type: 'text',\n },\n {\n key: 'brushHazardWithin500Feet',\n label: 'Brush Hazard Within 500 Feet',\n type: 'text',\n },\n {\n key: 'homeValue',\n label: 'Home Value',\n type: 'text',\n },\n ],\n [\n {\n key: 'comments',\n label: 'Comments',\n type: 'text',\n },\n {\n key: 'burglarAlarm',\n label: 'Burglar Alarm',\n type: 'text',\n },\n {\n key: 'deadBolts',\n label: 'Deadbolts',\n type: 'text',\n },\n ],\n [\n {\n key: 'fireAlarm',\n label: 'Fire Alarm',\n type: 'text',\n },\n {\n key: 'fireExtinguishers',\n label: 'Fire Extinguishers',\n type: 'text',\n },\n {\n key: 'mannedSecurityStation',\n label: 'Manned Security Station',\n type: 'text',\n },\n ],\n [\n {\n key: 'monitoredBurglarAlarm',\n label: 'Monitored Burglar Alarm',\n type: 'text',\n },\n {\n key: 'smokeDetectors',\n label: 'Smoke Detectors',\n type: 'text',\n },\n {\n key: 'tennisCourts',\n label: 'Tennis Courts',\n type: 'text',\n },\n ],\n [\n {\n key: 'centralHeatingAir',\n label: 'Central Heating Air',\n type: 'text',\n },\n {\n key: 'cathedralVaultedCeilings',\n label: 'Cathedral Vaulted Ceilings',\n type: 'text',\n },\n {\n key: 'hardwoodFloors',\n label: 'Hardwood Floors',\n type: 'text',\n },\n ],\n [\n {\n key: 'enclosedPorchPatio',\n label: 'Enclosed Porch Patio',\n type: 'text',\n },\n {\n key: 'swimmingPool',\n label: 'Swimming Pool',\n type: 'text',\n },\n {\n key: 'fencedInPool',\n label: 'Fenced In Pool',\n type: 'text',\n },\n ],\n [\n {\n key: 'hotTub',\n label: 'Hot Tub',\n type: 'text',\n },\n {\n key: 'indoorSprinklers',\n label: 'Indoor Sprinklers',\n type: 'text',\n },\n {\n key: 'coverageNeededOnHouse',\n label: 'Coverage Needed On House',\n type: 'text',\n },\n ],\n [\n {\n key: 'coverageNeededOnContents',\n label: 'Coverage Needed On Contents',\n type: 'text',\n },\n {\n key: 'requestedLiability',\n label: 'Requested Liability',\n type: 'text',\n },\n {\n key: 'requestedDeductible',\n label: 'Requested Deductible',\n type: 'text',\n },\n ],\n [\n {\n key: 'credit',\n label: 'Credit',\n type: 'text',\n },\n {\n key: 'numberOfClaims',\n label: 'Number Of Claims',\n type: 'number',\n },\n {\n key: 'frequencyOfPayment',\n label: 'Frequency Of Payment',\n type: 'text',\n },\n ],\n [\n {\n key: 'premium',\n label: 'Premium',\n type: 'text',\n },\n {\n key: 'currentInsuranceCompany',\n label: 'Current Insurance Company',\n type: 'text',\n },\n {\n key: 'insuredSince',\n label: 'Insured Since',\n type: 'date',\n },\n ],\n [\n {\n key: 'policyExpiration',\n label: 'Policy Expiration',\n type: 'date',\n },\n {\n key: 'continuouslyInsured',\n label: 'Continuously Insured',\n type: 'select',\n options: YES_OR_NOT,\n },\n {\n key: 'timeWithCurrentCompany',\n label: 'Time With Current Company',\n type: 'text',\n },\n ],\n [\n {\n key: 'countyToBeInsured',\n label: 'County To Be Insured',\n type: 'text',\n },\n {\n key: 'servicePanelType',\n label: 'Service Panel Type',\n type: 'text',\n },\n {\n key: 'wiringType',\n label: 'Wiring Type',\n type: 'text',\n },\n ],\n [\n {\n key: 'ageOfRoof',\n label: 'Age Of Roof',\n type: 'text',\n },\n {\n key: 'floodPlain',\n label: 'Flood Plain',\n type: 'text',\n },\n {\n key: 'businessConductedOnPremises',\n label: 'Business Conducted On Premises',\n type: 'text',\n },\n ],\n [\n {\n key: 'heatType',\n label: 'Heat Type',\n type: 'text',\n },\n {\n key: 'fireplaces',\n label: 'Fireplaces',\n type: 'text',\n },\n {\n key: 'garageType',\n label: 'Garage Type',\n type: 'text',\n },\n ],\n [\n {\n key: 'roofing',\n label: 'Roofing',\n type: 'text',\n },\n {\n key: 'foundationType',\n label: 'Foundation Type',\n type: 'text',\n },\n {\n key: 'fireStationProximity',\n label: 'Fire Station Proximity',\n type: 'text',\n },\n ],\n [\n {\n key: 'fireHydrantProximity',\n label: 'Fire Hydrant Proximity',\n type: 'text',\n },\n {\n key: 'homeUpgrades',\n label: 'Home Upgrades',\n type: 'select',\n options: YES_OR_NOT,\n },\n {\n key: 'homeUpgradesDescribed',\n label: 'Home Upgrades Described',\n type: 'text',\n },\n ],\n [\n {\n key: 'dwellingType',\n label: 'Dwelling Type',\n type: 'text',\n },\n {\n key: 'occupancyStatus',\n label: 'Occupancy Status',\n type: 'text',\n },\n {\n key: 'dogType',\n label: 'Dog Type',\n type: 'text',\n },\n ],\n [\n {\n key: 'squareFootage',\n label: 'Square Footage',\n type: 'text',\n },\n {\n key: 'stories',\n label: 'Stories',\n type: 'text',\n },\n {\n key: 'bedrooms',\n label: 'Bedrooms',\n type: 'text',\n },\n ],\n [\n {\n key: 'porches',\n label: 'Porches',\n type: 'text',\n },\n {\n key: 'constructionType',\n label: 'Construction Type',\n type: 'text',\n },\n {\n key: 'bathrooms',\n label: 'Bathrooms',\n type: 'text',\n },\n {\n key: 'yearBuilt',\n label: 'Year Built',\n type: 'text',\n },\n ],\n [\n {\n key: 'addressLineToBeInsured',\n label: 'Address To Be Insured',\n type: 'text',\n },\n {\n key: 'cityToBeInsured',\n label: 'City To Be Insured',\n type: 'text',\n },\n {\n key: 'stateToBeInsured',\n label: 'State To Be Insured',\n type: 'select',\n options: STATES_OPTIONS,\n },\n {\n key: 'zipToBeInsured',\n label: 'Zip To Be Insured',\n type: 'text',\n },\n ],\n [\n {\n key: 'newPurchase',\n label: 'New Purchase',\n type: 'checkbox',\n },\n {\n key: 'currentlyInsured',\n label: 'Currently Insured',\n type: 'checkbox',\n },\n ],\n ];\n\n return (\n <>\n \n \n \n {leadTypeData.claims.map((claim, claimIndex) => {\n return (\n \n );\n })}\n \n \n +\n Add Claim\n \n \n \n \n >\n );\n};\n\nLeadTypeHomeForm.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onAddNewClaim: PropTypes.func.isRequired,\n onChangeClaim: PropTypes.func.isRequired,\n onDeleteClaim: PropTypes.func.isRequired,\n};\n\nexport default LeadTypeHomeForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadTypeHomeForm from './LeadTypeHomeForm';\n\n/**\n * Lead type home dialog that contains the form\n *\n * @param {object} props component props\n * @param {boolean} props.isOpen dialog open value\n * @param {boolean} props.isUpdate bool for change the title of the dialog\n * @param {boolean} props.loading bool for indicates if the request is loading\n * @param {Function} props.onSubmit handle for on submit form\n * @param {object} props.leadTypeData lead type home data\n * @param {Function} props.onCloseDialog handle for close the dialog\n * @param {Function} props.onChangeInput handle on change for the fields\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeHomeFormDialog = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadTypeData,\n onCloseDialog,\n onChangeInput,\n onAddNewClaim,\n onChangeClaim,\n onDeleteClaim,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadTypeHomeFormDialog.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n onAddNewClaim: PropTypes.func.isRequired,\n onChangeClaim: PropTypes.func.isRequired,\n onDeleteClaim: PropTypes.func.isRequired,\n};\n\nLeadTypeHomeFormDialog.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadTypeHomeFormDialog;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnLeadsHomeUpdateEvent = createEvent();\n\nexport const OnLeadsHomeError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from 'shared/session/session-events';\nimport { OnLeadsHomeError, OnLeadsHomeUpdateEvent } from './leads-type-home-events';\nimport { LEAD_TYPE_HOME_UPDATE_MUTATION } from './leads-type-home-queries';\nimport { leadHomeValidations } from './leads-type-home-utils';\n\n/**\n * Update a lead type home\n *\n * @param {object} leadHome lead type home\n * @returns {object} response data\n */\nexport const updateLeadHome = async (leadHome) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadHomeValidations(leadHome);\n } catch (e) {\n error('updateLeadHome', e);\n\n return OnLeadsHomeError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEAD_TYPE_HOME_UPDATE_MUTATION,\n variables: { data: leadHome },\n });\n } catch (e) {\n error('updateLeadHome', e);\n\n return OnLeadsHomeError.dispatch(e);\n }\n\n log('updateLeadHome', response);\n OnLeadsHomeUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as R from 'ramda';\nimport LeadTypeHomeFormDialog from './LeadTypeHomeDialogForm';\nimport { updateLeadHome } from '../leads-type-home-actions';\nimport { onErrorMixinFC, onChangeDataHookMixin } from '../../../../shared/mixins';\nimport { formatData, leadHomeMap, leadHomeCreateMap } from '../leads-type-home-utils';\nimport { ColumnInfo, ColumnName, ColumnValue, RowHeader } from '../../components/ColumnInfo';\nimport PaperInfo from '../../components/PaperInfo';\nimport { capitalize } from '../../../../shared/utils';\nimport { OnLeadsHomeError, OnLeadsHomeUpdateEvent } from '../leads-type-home-events';\n\n/**\n * Lead type home table info component\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeHomeInfo = ({ leadTypeData }) => {\n const [loading, setLoading] = useState(false);\n const [leadTypeInfo, setLeadTypeInfo] = useState(R.clone(leadTypeData));\n const [leadTypeFields, setLeadTypeFields] = useState(leadHomeMap(R.clone(leadTypeData)));\n const [isOpenForm, setIsOpenForm] = useState(false);\n\n const handleOnSubmitForm = () => {\n const leadHomeToUpdate = {\n id: leadTypeFields.id,\n ...leadHomeCreateMap(leadTypeFields),\n };\n\n setLoading(true);\n updateLeadHome(leadHomeToUpdate);\n };\n\n const handleOnChangeInput = (value, key) => {\n onChangeDataHookMixin(leadTypeFields, setLeadTypeFields, key, value);\n };\n\n const handleOnAddNewClaim = () => {\n const newClaim = { type: '', date: '', amount: '' };\n const newLeadHomeData = R.clone(leadTypeFields);\n\n newLeadHomeData.claims.push(newClaim);\n\n setLeadTypeFields(newLeadHomeData);\n };\n\n const handleOnChangeClaim = (key, index, value) => {\n const newClaims = R.clone(leadTypeFields.claims);\n\n newClaims[index - 1][key] = value;\n\n setLeadTypeFields({\n ...leadTypeFields,\n claims: newClaims,\n });\n };\n const handleOnDeleteClaim = (index) => {\n let newClaims = R.clone(leadTypeFields.claims);\n\n newClaims = newClaims.filter((claim, claimIndex) => claimIndex !== index - 1);\n\n setLeadTypeFields({\n ...leadTypeFields,\n claims: newClaims,\n });\n };\n\n useEventSubscription(OnLeadsHomeUpdateEvent, (data) => {\n setLoading(false);\n setIsOpenForm(false);\n setLeadTypeInfo(data.leadTypeHomeUpdate);\n });\n\n useEventSubscription(OnLeadsHomeError, (err) => {\n setLoading(false);\n onErrorMixinFC(err);\n });\n\n return (\n <>\n setIsOpenForm(true)}>\n \n {leadTypeInfo &&\n formatData(leadTypeInfo).map((row, i) => {\n return (\n \n \n {row.map((column, j) => {\n return (\n \n {column.label}\n {column.value}\n \n );\n })}\n \n \n );\n })}\n \n {leadTypeFields.claims.map((claim, claimIndex) => {\n return (\n <>\n Claim #{claimIndex + 1}\n \n {Object.keys(claim).map((key) => {\n return (\n \n {capitalize(key)}\n {claim[key]}\n \n );\n })}\n \n >\n );\n })}\n \n setIsOpenForm(false)}\n />\n >\n );\n};\n\nLeadTypeHomeInfo.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n};\n\nexport default LeadTypeHomeInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport FormFields from '../../../../shared/components/forms/FormFields';\n\n/**\n * Lead type workers compensation form\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n * @param {Function} props.onChangeInput handle for onChange input\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeWorkersCompensationForm = ({ leadTypeData, onChangeInput }) => {\n const rows = [\n [\n {\n key: 'annualPayroll',\n label: 'Annual Payroll',\n type: 'number',\n },\n {\n key: 'companyName',\n label: 'Company Name',\n type: 'text',\n },\n ],\n [\n {\n key: 'natureOfBusiness',\n label: 'Nature Of Business',\n type: 'text',\n },\n {\n key: 'numberOfEmployees',\n label: 'Number Of Employees',\n type: 'number',\n },\n ],\n [\n {\n key: 'policyExpirationDate',\n label: 'Policy Expiration Date',\n type: 'date',\n },\n ],\n ];\n\n return ;\n};\n\nLeadTypeWorkersCompensationForm.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n};\n\nexport default LeadTypeWorkersCompensationForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadTypeWorkersCompensationForm from './LeadTypeWorkersCompensationForm';\n\n/**\n * Lead type workers compensation dialog that contains the form\n *\n * @param {object} props component props\n * @param {boolean} props.isOpen dialog open value\n * @param {boolean} props.isUpdate bool for change the title of the dialog\n * @param {boolean} props.loading bool for indicates if the request is loading\n * @param {Function} props.onSubmit handle for on submit form\n * @param {object} props.leadTypeData lead type workers compensation data\n * @param {Function} props.onCloseDialog handle for close the dialog\n * @param {Function} props.onChangeInput handle on change for the fields\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeWorkersCompensationFormDialog = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadTypeData,\n onCloseDialog,\n onChangeInput,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadTypeWorkersCompensationFormDialog.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadTypeWorkersCompensationFormDialog.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadTypeWorkersCompensationFormDialog;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnLeadsWorkersCompensationUpdateEvent = createEvent();\n\nexport const OnLeadsWorkersCompensationError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from 'shared/session/session-events';\nimport { LEAD_TYPE_WORKERS_COMPENSATION_UPDATE_MUTATION } from './leads-type-workers-compensation-queries';\nimport { leadWorkersCompensationValidations } from './leads-type-workers-compensation-utils';\nimport {\n OnLeadsWorkersCompensationError,\n OnLeadsWorkersCompensationUpdateEvent,\n} from './leads-type-workers-compensation-events';\n\n/**\n * Update a lead type workers compensation\n *\n * @param {object} leadWorkersCompensation lead type workers compensation\n * @returns {object} response data\n */\nexport const updateLeadWorkersCompensation = async (leadWorkersCompensation) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadWorkersCompensationValidations(leadWorkersCompensation);\n } catch (e) {\n error('updateWorkersCompensation', e);\n\n return OnLeadsWorkersCompensationError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEAD_TYPE_WORKERS_COMPENSATION_UPDATE_MUTATION,\n variables: { data: leadWorkersCompensation },\n });\n } catch (e) {\n error('updateWorkersCompensation', e);\n\n return OnLeadsWorkersCompensationError.dispatch(e);\n }\n\n log('updateWorkersCompensation', response);\n OnLeadsWorkersCompensationUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as R from 'ramda';\nimport LeadTypeWorkersCompensationFormDialog from './LeadTypeWorkersCompensationDialogForm';\nimport { updateLeadWorkersCompensation } from '../leads-type-workers-compensation-actions';\nimport { onErrorMixinFC, onChangeDataHookMixin } from '../../../../shared/mixins';\nimport {\n formatData,\n leadWorkersCompensationMap,\n leadWorkersCompensationCreateMap,\n} from '../leads-type-workers-compensation-utils';\nimport { ColumnInfo, ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport PaperInfo from '../../components/PaperInfo';\nimport {\n OnLeadsWorkersCompensationError,\n OnLeadsWorkersCompensationUpdateEvent,\n} from '../leads-type-workers-compensation-events';\n\n/**\n * Lead type workers compensation table info component\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeWorkersCompensationInfo = ({ leadTypeData }) => {\n const [loading, setLoading] = useState(false);\n const [leadTypeInfo, setLeadTypeInfo] = useState(R.clone(leadTypeData));\n const [leadTypeFields, setLeadTypeFields] = useState(\n leadWorkersCompensationMap(R.clone(leadTypeData)),\n );\n const [isOpenForm, setIsOpenForm] = useState(false);\n const handleOnSubmitForm = () => {\n const leadWorkersCompensationToUpdate = {\n id: leadTypeFields.id,\n ...leadWorkersCompensationCreateMap(leadTypeFields),\n };\n\n setLoading(true);\n updateLeadWorkersCompensation(leadWorkersCompensationToUpdate);\n };\n const handleOnChangeInput = (value, key) => {\n onChangeDataHookMixin(leadTypeFields, setLeadTypeFields, key, value);\n };\n\n useEventSubscription(OnLeadsWorkersCompensationUpdateEvent, (data) => {\n setLoading(false);\n setIsOpenForm(false);\n setLeadTypeInfo(data.leadTypeWorkersCompensationUpdate);\n });\n\n useEventSubscription(OnLeadsWorkersCompensationError, (err) => {\n setLoading(false);\n onErrorMixinFC(err);\n });\n\n return (\n <>\n setIsOpenForm(true)}>\n \n {leadTypeInfo &&\n formatData(leadTypeInfo).map((row, i) => {\n return (\n \n \n {row.map((column, j) => {\n return (\n \n {column.label}\n {column.value}\n \n );\n })}\n \n \n );\n })}\n \n \n setIsOpenForm(false)}\n />\n >\n );\n};\n\nLeadTypeWorkersCompensationInfo.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n};\n\nexport default LeadTypeWorkersCompensationInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport FormFields from '../../../../shared/components/forms/FormFields';\n\nconst LeadTypeEmployeeBenefitsForm = ({ leadTypeData, onChangeInput }) => {\n const rows = [\n [\n {\n key: 'annualPayroll',\n label: 'Annual Payroll',\n type: 'text',\n },\n {\n key: 'companyName',\n label: 'Company Name',\n type: 'text',\n },\n ],\n [\n {\n key: 'natureOfBusiness',\n label: 'Nature Of Business',\n type: 'text',\n },\n {\n key: 'numberOfEmployees',\n label: 'Number Of Employees',\n type: 'text',\n },\n ],\n ];\n\n return ;\n};\n\nLeadTypeEmployeeBenefitsForm.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n};\n\nexport default LeadTypeEmployeeBenefitsForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadTypeEmployeeBenefitsForm from './LeadTypeEmployeeBenefitsForm';\n\n/**\n * Lead type employee benefits dialog that contains the form\n *\n * @param {object} props component props\n * @param {boolean} props.isOpen dialog open value\n * @param {boolean} props.isUpdate bool for change the title of the dialog\n * @param {boolean} props.loading bool for indicates if the request is loading\n * @param {Function} props.onSubmit handle for on submit form\n * @param {object} props.leadTypeData lead type employee benefits data\n * @param {Function} props.onCloseDialog handle for close the dialog\n * @param {Function} props.onChangeInput handle on change for the fields\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeEmployeeBenefitsFormDialog = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadTypeData,\n onCloseDialog,\n onChangeInput,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadTypeEmployeeBenefitsFormDialog.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadTypeEmployeeBenefitsFormDialog.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadTypeEmployeeBenefitsFormDialog;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnLeadsEmployeeBenefitsUpdateEvent = createEvent();\n\nexport const OnLeadsEmployeeBenefitsError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from 'shared/session/session-events';\nimport { LEAD_TYPE_EMPLOYEE_BENEFITS_UPDATE_MUTATION } from './leads-type-employee-benefits-queries';\nimport { leadEmployeeBenefitsValidations } from './leads-type-employee-benefits-utils';\nimport {\n OnLeadsEmployeeBenefitsError,\n OnLeadsEmployeeBenefitsUpdateEvent,\n} from './leads-type-employee-benefits-events';\n\n/**\n * Update a lead type employee benefits\n *\n * @param {object} leadEmployeeBenefits lead type employee benefits\n * @returns {object} response data\n */\nexport const updateLeadEmployeeBenefits = async (leadEmployeeBenefits) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadEmployeeBenefitsValidations(leadEmployeeBenefits);\n } catch (e) {\n error('updateEmployeeBenefits', e);\n\n return OnLeadsEmployeeBenefitsError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEAD_TYPE_EMPLOYEE_BENEFITS_UPDATE_MUTATION,\n variables: { data: leadEmployeeBenefits },\n });\n } catch (e) {\n error('updateEmployeeBenefits', e);\n\n return OnLeadsEmployeeBenefitsError.dispatch(e);\n }\n\n log('updateEmployeeBenefits', response);\n OnLeadsEmployeeBenefitsUpdateEvent.dispatch(response.data);\n return response.data;\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as R from 'ramda';\nimport LeadTypeEmployeeBenefitsFormDialog from './LeadTypeEmployeeBenefitsDialogForm';\nimport { updateLeadEmployeeBenefits } from '../leads-type-employee-benefits-actions';\nimport { onErrorMixinFC, onChangeDataHookMixin } from '../../../../shared/mixins';\nimport {\n formatData,\n leadEmployeeBenefitsMap,\n leadEmployeeBenefitsCreateMap,\n} from '../leads-type-employee-benefits-utils';\nimport { ColumnInfo, ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport PaperInfo from '../../components/PaperInfo';\nimport {\n OnLeadsEmployeeBenefitsError,\n OnLeadsEmployeeBenefitsUpdateEvent,\n} from '../leads-type-employee-benefits-events';\n\n/**\n * Lead type employee benefits table info component\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeEmployeeBenefitsInfo = ({ leadTypeData }) => {\n const [loading, setLoading] = useState(false);\n const [leadTypeInfo, setLeadTypeInfo] = useState(R.clone(leadTypeData));\n const [leadTypeFields, setLeadTypeFields] = useState(\n leadEmployeeBenefitsMap(R.clone(leadTypeData)),\n );\n const [isOpenForm, setIsOpenForm] = useState(false);\n const handleOnSubmitForm = () => {\n const leadEmployeeBenefitsToUpdate = {\n id: leadTypeFields.id,\n ...leadEmployeeBenefitsCreateMap(leadTypeFields),\n };\n\n setLoading(true);\n updateLeadEmployeeBenefits(leadEmployeeBenefitsToUpdate);\n };\n const handleOnChangeInput = (value, key) => {\n onChangeDataHookMixin(leadTypeFields, setLeadTypeFields, key, value);\n };\n\n useEventSubscription(OnLeadsEmployeeBenefitsUpdateEvent, (data) => {\n setLoading(false);\n setIsOpenForm(false);\n setLeadTypeInfo(data.leadTypeEmployeeBenefitUpdate);\n });\n\n useEventSubscription(OnLeadsEmployeeBenefitsError, (err) => {\n setLoading(false);\n onErrorMixinFC(err);\n });\n\n return (\n <>\n setIsOpenForm(true)}>\n \n {leadTypeInfo &&\n formatData(leadTypeInfo).map((row, i) => {\n return (\n \n \n {row.map((column, j) => {\n return (\n \n {column.label}\n {column.value}\n \n );\n })}\n \n \n );\n })}\n \n \n setIsOpenForm(false)}\n />\n >\n );\n};\n\nLeadTypeEmployeeBenefitsInfo.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n};\n\nexport default LeadTypeEmployeeBenefitsInfo;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport {} from '@8base/boost';\nimport { TextContact, PriorityBadge, OptionsDropdown } from '../../../shared/components';\nimport moment from 'moment';\nimport { TextContactHeader } from 'shared/components/ui/text/TextContact';\n\nconst MiniCardContainer = styled.div`\n padding: 8px 16px;\n`;\n\nconst MiniCardHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst MiniCardTitle = styled.span`\n & span {\n font-weight: 600 !important;\n }\n`;\n\nconst MiniCardFooter = styled.div`\n display: flex;\n margin-top: 20px;\n`;\n\nconst TypeBox = styled.div`\n margin-right: auto;\n color: #9b9b9b;\n border-radius: 5px;\n padding: 2px 10px;\n font-size: 11px;\n background-color: #f4f5f6;\n display: flex;\n align-items: center;\n`;\n\nconst MiniCard = ({ data, options, canSeeOptions }) => {\n const { createdAt, title, priority, description, type, notes, createdBy } = data;\n const formatedDate = moment(createdAt).format('MM/DD/YYYY, hh:mm a');\n const firstName = createdBy?.firstName || '';\n const lastName = createdBy?.lastName || '';\n\n let typeBox;\n if (type) {\n typeBox = {type.name};\n }\n\n let priorityBadge;\n if (priority) {\n priorityBadge = ;\n }\n\n let optionsDropdown;\n if (canSeeOptions) {\n optionsDropdown = ;\n }\n\n return (\n \n \n \n {`${notes ? 'Disposition Note' : 'Lead Note'}`}\n \n {`${title || notes}`}\n \n {`${firstName} ${lastName} ${formatedDate}`}\n \n \n {optionsDropdown}\n \n {description}\n \n {typeBox}\n {priorityBadge}\n \n \n );\n};\n\nMiniCard.defaultProps = {\n canSeeOptions: false,\n};\n\nMiniCard.propTypes = {\n data: PropTypes.object.isRequired,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n danger: PropTypes.bool,\n }),\n ).isRequired,\n canSeeOptions: PropTypes.bool,\n};\n\nexport default MiniCard;\n","import React, { useEffect, useMemo, useState, useCallback } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport PropTypes from 'prop-types';\nimport { Row, Heading, Icon, Loader, useModal } from '@8base/boost';\nimport NoteForm from './forms/NoteForm';\nimport { modalId } from '../../../shared/components/dialog/DecisionDialog';\nimport { fetchLeadNotes, deleteNote } from '../leads-notes/leads-notes-actions';\nimport { canSeeTaskAndNotesOptions } from '../lead-details-utils';\nimport {\n OnFetchLeadNotes,\n OnFetchLeadNotesError,\n onLeadNoteUpdate,\n onLeadNoteDelete,\n OnNoteCreateEvent,\n OnNoteError,\n} from '../leads-notes/leads-notes-events';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { Box } from '../../../shared/components/Box';\nimport NoteItem from './MiniCardNotes';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport * as toast from '../../../shared/components/toast/Toast';\n\nconst LeadNotes = ({ id }) => {\n const [notes, setNotes] = useState([]);\n const [loading, setLoading] = useState(true);\n const [selected, setSelected] = useState(null);\n const [isOpen, setOpen] = useState(false);\n const { openModal, closeModal } = useModal(modalId);\n const [user] = useUser();\n const agency = useAgency();\n\n useEffect(() => {\n setLoading(true);\n\n fetchLeadNotes(id);\n }, [id]);\n\n const onCreate = useCallback(() => {\n setSelected(null);\n setOpen(true);\n }, []);\n\n const onUpdate = useCallback((note) => {\n setSelected(note);\n setOpen(true);\n }, []);\n\n const onDelete = useCallback(\n (note) => {\n openModal(modalId, {\n title: 'Delete note',\n text: 'Are you sure you want to delete this note ?',\n confirmText: 'Yes, Delete',\n cancelText: 'Cancel',\n onCancel: () => closeModal(modalId),\n onClose: () => closeModal(modalId),\n onConfirm: () => deleteNote(note.id),\n });\n },\n [openModal, closeModal],\n );\n\n const onClose = useCallback(() => {\n setOpen(false);\n setSelected(null);\n }, []);\n\n useSubscription(\n OnFetchLeadNotes,\n ({ leadNotesList, leadDispositionsList }) => {\n setNotes([...leadNotesList.items, ...leadDispositionsList.items]);\n\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchLeadNotesError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(OnNoteCreateEvent, () => {\n toast.success('Success', 'Note created successfully');\n\n setLoading(true);\n\n fetchLeadNotes(id);\n });\n\n useSubscription(\n onLeadNoteUpdate,\n () => {\n toast.success('Success', 'Note updated successfully');\n\n setLoading(true);\n\n fetchLeadNotes(id);\n },\n [],\n );\n\n useSubscription(\n onLeadNoteDelete,\n () => {\n toast.success('Success', 'Note deleted successfully');\n\n closeModal(modalId);\n\n setLoading(true);\n\n fetchLeadNotes(id);\n },\n [closeModal],\n );\n\n useSubscription(OnNoteError, (err) => {\n onErrorMixinFC(err);\n });\n\n const items = useMemo(\n () =>\n notes.map((note) => (\n onUpdate(note),\n },\n {\n label: 'Delete',\n onClick: () => onDelete(note),\n danger: true,\n },\n ]}\n canSeeOptions={canSeeTaskAndNotesOptions(user, agency)}\n data={note}\n />\n )),\n [notes, user, agency, onUpdate, onDelete],\n );\n\n const content = loading ? (\n \n \n \n ) : (\n items\n );\n\n return (\n \n \n \n Notes\n \n \n \n \n {content}\n \n \n \n );\n};\n\nLeadNotes.propTypes = {\n id: PropTypes.string.isRequired,\n};\n\nexport default LeadNotes;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport {} from '@8base/boost';\nimport { TextContact, PriorityBadge, OptionsDropdown } from '../../../shared/components';\nimport moment from 'moment';\n\nconst MiniCardContainer = styled.div`\n padding: 8px 16px;\n`;\n\nconst MiniCardHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst MiniCardTitle = styled.span`\n & span {\n font-weight: 600 !important;\n }\n`;\n\nconst MiniCardFooter = styled.div`\n display: flex;\n margin-top: 20px;\n`;\n\nconst TypeBox = styled.div`\n margin-right: auto;\n color: #9b9b9b;\n border-radius: 5px;\n padding: 2px 10px;\n font-size: 11px;\n background-color: #f4f5f6;\n display: flex;\n align-items: center;\n`;\n\nconst MiniCard = ({ data, options, canSeeOptions }) => {\n const { date, title, priority, description, type } = data;\n const formatedDate = moment(date).format('MM/DD/YYYY');\n\n let typeBox;\n if (type) {\n typeBox = {type.name};\n }\n\n let priorityBadge;\n if (priority) {\n priorityBadge = ;\n }\n\n let optionsDropdown;\n if (canSeeOptions) {\n optionsDropdown = ;\n }\n\n return (\n \n \n \n {`${title} - ${formatedDate}`}\n \n {optionsDropdown}\n \n {description}\n \n {typeBox}\n {priorityBadge}\n \n \n );\n};\n\nMiniCard.defaultProps = {\n canSeeOptions: false,\n};\n\nMiniCard.propTypes = {\n data: PropTypes.object.isRequired,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n danger: PropTypes.bool,\n }),\n ).isRequired,\n canSeeOptions: PropTypes.bool,\n};\n\nexport default MiniCard;\n","import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { Heading, Row, Icon, Loader, useModal } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport TaskForm from './forms/TaskForm';\nimport { fetchLeadTasks } from '../leads-actions';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnFetchLeadTasks, OnFetchLeadTasksError } from '../leads-store';\nimport { canSeeTaskAndNotesOptions } from '../lead-details-utils';\nimport { deleteLeadTask } from '../../lead-task/lead-task-actions';\nimport TaskItem from './MiniCard';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { modalId } from '../../../shared/components/dialog/DecisionDialog';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport { onTaskCreate, onTaskUpdateEvent } from '../leads-events';\nimport { OnLeadTaskDelete } from 'modules/lead-task/lead-task-events';\n\nconst LeadTasks = ({ id, users }) => {\n const [tasks, setTasks] = useState([]);\n const [loading, setLoading] = useState(true);\n const [isOpen, setOpen] = useState(false);\n const [selected, setSelected] = useState(null);\n const { openModal, closeModal } = useModal(modalId);\n const [user] = useUser();\n const agency = useAgency();\n\n useEffect(() => {\n setLoading(true);\n\n fetchLeadTasks(id);\n }, [id]);\n\n const onCreate = useCallback(() => {\n setSelected(null);\n setOpen(true);\n }, []);\n\n const onUpdate = useCallback((task) => {\n setSelected(task);\n setOpen(true);\n }, []);\n\n const onDelete = useCallback(\n (task) => {\n openModal(modalId, {\n title: 'Delete Task',\n text: 'Are you sure you want to delete this task ?',\n confirmText: 'Yes, Delete',\n cancelText: 'Cancel',\n onClose: () => closeModal(modalId),\n onCancel: () => closeModal(modalId),\n onConfirm: () => deleteLeadTask(task.id),\n });\n },\n [openModal, closeModal],\n );\n\n const onClose = useCallback(() => {\n setOpen(false);\n setSelected(null);\n }, []);\n\n useSubscription(\n OnFetchLeadTasks,\n ({ leadTasksList }) => {\n setTasks(leadTasksList.items);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchLeadTasksError,\n (e) => {\n setLoading(false);\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(onTaskCreate, () => {\n setLoading(true);\n\n fetchLeadTasks(id);\n });\n\n useSubscription(onTaskUpdateEvent, () => {\n setLoading(true);\n\n fetchLeadTasks(id);\n });\n\n useSubscription(OnLeadTaskDelete, () => {\n setLoading(true);\n\n fetchLeadTasks(id);\n\n closeModal(modalId);\n });\n\n const items = useMemo(\n () =>\n tasks.map((task) => (\n onUpdate(task),\n },\n {\n label: 'Delete',\n onClick: () => onDelete(task),\n danger: true,\n },\n ]}\n canSeeOptions={canSeeTaskAndNotesOptions(user, agency)}\n key={task.id}\n data={task}\n />\n )),\n [tasks, user, agency, onUpdate, onDelete],\n );\n\n const content = loading ? (\n \n \n \n ) : (\n items\n );\n\n return (\n \n \n \n Tasks\n \n \n \n \n {content}\n \n {isOpen && (\n \n )}\n \n );\n};\n\nLeadTasks.propTypes = {\n id: PropTypes.string.isRequired,\n users: PropTypes.arrayOf(PropTypes.object).isRequired,\n};\n\nexport default LeadTasks;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Grid } from '@8base/boost';\nimport { GENDER_OPTIONS, STATES_OPTIONS } from '../../leads-model';\nimport Field from '../../../../shared/components/Field';\n\nconst sections = [\n {\n title: 'Personal Data',\n rows: [\n [\n {\n label: 'First Name',\n type: 'text',\n key: 'firstName',\n },\n {\n label: 'Last Name',\n type: 'text',\n key: 'lastName',\n },\n {\n label: 'Email',\n type: 'text',\n key: 'email',\n },\n ],\n [\n {\n label: 'Birth Date',\n type: 'date',\n key: 'birthDate',\n },\n {\n label: 'Gender',\n type: 'select',\n key: 'gender',\n options: GENDER_OPTIONS,\n },\n {\n label: 'Marital Status',\n type: 'select',\n key: 'maritalStatus',\n options: [\n { label: 'WIDOW', value: 'WIDOW' },\n { label: 'SINGLE', value: 'SINGLE' },\n { label: 'MARRIED', value: 'MARRIED' },\n ],\n },\n ],\n [\n {\n label: 'Age First Licensed',\n type: 'date',\n key: 'ageFirstLicensed',\n },\n {\n label: 'Licensed State',\n type: 'select',\n key: 'licensedState',\n options: STATES_OPTIONS,\n },\n {\n label: 'Licensed Status',\n type: 'text',\n key: 'licenseStatus',\n },\n ],\n [\n {\n label: 'Fulltime Student',\n type: 'checkbox',\n key: 'fullTimeStudent',\n },\n {\n label: 'Education',\n type: 'text',\n key: 'education',\n },\n {\n label: 'Occupation',\n type: 'text',\n key: 'occupation',\n },\n ],\n [\n {\n label: 'Relationship To Applicant',\n type: 'text',\n key: 'relationshipToApplicant',\n },\n {\n label: 'Credit Rating',\n type: 'text',\n key: 'creditRating',\n },\n ],\n ],\n },\n {\n title: 'Contact Data',\n rows: [\n [\n {\n label: 'Cell Phone',\n type: 'text',\n key: 'cellPhone',\n },\n {\n label: 'Daytime Phone',\n type: 'text',\n key: 'daytimePhone',\n },\n {\n label: 'Evening Phone',\n type: 'text',\n key: 'eveningPhone',\n },\n ],\n [\n {\n label: 'Preferred Contact Number',\n type: 'text',\n key: 'preferredContactNumber',\n },\n {\n label: 'Preferred Contact Time',\n type: 'date',\n key: 'preferredContactTime',\n },\n ],\n ],\n },\n {\n title: 'Vehicle Data',\n rows: [\n [\n {\n label: 'Make Of Vehicle',\n type: 'text',\n key: 'makeOfVehicle',\n },\n {\n label: 'Model Of Vehicle',\n type: 'text',\n key: 'modelOfVehicle',\n },\n {\n label: 'Year Of Vehicle',\n type: 'text',\n key: 'yearOfVehicle',\n },\n ],\n [\n {\n label: 'Trim',\n type: 'text',\n key: 'trim',\n },\n {\n label: 'Style',\n type: 'text',\n key: 'style',\n },\n {\n label: 'Ownership',\n type: 'text',\n key: 'ownership',\n },\n ],\n [\n {\n label: 'Primary Use',\n type: 'text',\n key: 'primaryUse',\n },\n {\n label: 'Average One Way Mileage',\n type: 'text',\n key: 'averageOneWayMileage',\n },\n {\n label: 'Annual Mileage',\n type: 'text',\n key: 'annualMileage',\n },\n ],\n [\n {\n label: 'Vehicle Parking',\n type: 'text',\n key: 'vehicleParking',\n },\n {\n label: 'Anti Lock Breaks',\n type: 'text',\n key: 'antiLockBreaks',\n },\n {\n label: 'Security System',\n type: 'text',\n key: 'securitySystem',\n },\n ],\n [\n {\n label: 'salvagedVehicle',\n type: 'text',\n key: 'salvagedVehicle',\n },\n ],\n ],\n },\n {\n title: 'Residence Data',\n rows: [\n [\n {\n label: 'Years At Current Residence',\n type: 'text',\n key: 'yearsAtCurrentResidence',\n },\n {\n label: 'City',\n type: 'text',\n key: 'city',\n },\n {\n label: 'State',\n type: 'text',\n key: 'state',\n },\n ],\n [\n {\n label: 'Address Line 1',\n type: 'text',\n key: 'street1',\n },\n {\n label: 'Address Line 2',\n type: 'text',\n key: 'street2',\n },\n {\n label: 'zip',\n type: 'text',\n key: 'zip',\n },\n ],\n ],\n },\n {\n title: 'Insurance Data',\n rows: [\n [\n {\n label: 'Insurance Company',\n type: 'text',\n key: 'insuranceCompany',\n },\n {\n label: 'Continuously Insured Years',\n type: 'text',\n key: 'continuouslyInsuredYears',\n },\n {\n label: 'Continuously Insured Months',\n type: 'text',\n key: 'continuouslyInsuredMonths',\n },\n ],\n [\n {\n label: 'Current Insurance Company Years',\n type: 'text',\n key: 'currentInsuranceCompanyYears',\n },\n {\n label: 'Current Insurance Company Months',\n type: 'text',\n key: 'currentInsuranceCompanyMonths',\n },\n {\n label: 'Insured In The Past 30 Days',\n type: 'checkbox',\n key: 'insuredPast30Days',\n },\n ],\n ],\n },\n {\n title: 'Other Data',\n rows: [\n [\n {\n label: 'Years In Field',\n type: 'text',\n key: 'yearsInField',\n },\n {\n label: 'Policy Expiration Date',\n type: 'text',\n key: 'policyExpirationDate',\n },\n {\n label: 'How Many Incidents Past 5 Years',\n type: 'text',\n key: 'howManyIncidentsInThePast5Years',\n },\n ],\n [\n {\n label: 'Incidents Past 5 Years',\n type: 'text',\n key: 'incidentsPast5Years',\n },\n {\n label: 'Violations Past 5 Years',\n type: 'text',\n key: 'violationsPast5Years',\n },\n {\n label: 'Activity Past 5 Years',\n type: 'text',\n key: 'activityPast5Years',\n },\n ],\n [\n {\n label: 'Vin',\n type: 'text',\n key: 'vin',\n },\n {\n label: 'Tickets Accidents Claims Past 3 Years',\n type: 'checkbox',\n key: 'ticketsAccidentsClaimsPast3Years',\n },\n {\n label: 'Additional Drivers',\n type: 'checkbox',\n key: 'additionalDrivers',\n },\n ],\n [\n {\n label: 'Additional Vehicles',\n type: 'checkbox',\n key: 'additionalVehicles',\n },\n {\n label: 'Completed Behind The Wheel',\n type: 'checkbox',\n key: 'completedBehindTheWheel',\n },\n {\n label: 'Current Bodily Injury Coverages',\n type: 'text',\n key: 'currentBodilyInjuryCoverages',\n },\n ],\n [\n {\n label: 'Current Property Damage Coverages',\n type: 'text',\n key: 'currentPropertyDamageCoverages',\n },\n {\n label: 'Current Coverage Level',\n type: 'text',\n key: 'currentCoverageLevel',\n },\n {\n label: 'Coverage Level',\n type: 'text',\n key: 'coverageLevel',\n },\n ],\n [\n {\n label: 'Current Comprehensive Deductible',\n type: 'text',\n key: 'currentComprehensiveDeductible',\n },\n {\n label: 'Current Collision Deductible',\n type: 'text',\n key: 'currentCollisionDeductible',\n },\n {\n label: 'Filling Required',\n type: 'text',\n key: 'fillingRequired',\n },\n ],\n [\n {\n label: 'Bankruptcy In Past 5 Years',\n type: 'checkbox',\n key: 'bankruptcyInPast5Years',\n },\n {\n label: 'Multiple Policy Discount',\n type: 'text',\n key: 'multiplePolicyDiscount',\n },\n {\n label: 'eNewsletter',\n type: 'text',\n key: 'eNewsletter',\n },\n ],\n [\n {\n label: 'Suspended Or Revoked In The Past 5 Years',\n type: 'checkbox',\n key: 'suspendedOrRevokedInThePast5Years',\n },\n {\n label: 'DUIDWI In The Past 5 Years',\n type: 'date',\n key: 'dUIDWIInThePast5Years',\n },\n {\n label: 'Date Of DUIDWI',\n type: 'date',\n key: 'dateOfDUIDWI',\n },\n ],\n [\n {\n label: 'Desired Collision Coverage',\n type: 'text',\n key: 'desiredCollisionCoverage',\n },\n {\n label: 'Desired Comprehensive Coverage',\n type: 'text',\n key: 'desiredComprehensiveCoverage',\n },\n {\n label: 'Average Days Per Week Used',\n type: 'text',\n key: 'averageDaysPerWeekUsed',\n },\n ],\n [\n {\n label: 'Primary Driver',\n type: 'text',\n key: 'primaryDriver',\n },\n ],\n ],\n },\n];\n\n/**\n * Lead driver form\n *\n * @param {object} props component props\n * @param {object} props.leadDriver lead driver data\n * @param {Function} props.onBlurInput handle on blur for the fields\n * @returns {React.ReactElement} component\n */\nconst LeadDriverForm = ({ leadDriver, onBlurInput }) => {\n return (\n \n {sections.map((section, i) => {\n return (\n \n {section.title}\n \n {section.rows.map((row, j) => {\n return (\n \n {row.map((field, k) => {\n return (\n \n {\n onBlurInput(field.key, { target: { value } });\n },\n }\n : {})}\n />\n \n );\n })}\n \n );\n })}\n \n \n );\n })}\n \n );\n};\n\nLeadDriverForm.propTypes = {\n leadDriver: PropTypes.object.isRequired,\n onBlurInput: PropTypes.func.isRequired,\n};\n\nexport default LeadDriverForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadDriverForm from './LeadDriverForm';\n\n/**\n * Lead driver dialog that contains the form\n *\n * @param {object} props component props\n * @param {boolean} props.isOpen dialog open value\n * @param {boolean} props.isUpdate bool for change the title of the dialog\n * @param {boolean} props.loading bool for indicates if the request is loading\n * @param {Function} props.onSubmit handle for on submit form\n * @param {object} props.leadDriver lead driver data\n * @param {Function} props.onCloseDialog handle for close the dialog\n * @param {Function} props.onBlurInput handle on change for the fields\n * @returns {React.ReactElement} component\n */\nconst LeadDriverDialogForm = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadDriver,\n onCloseDialog,\n onBlurInput,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadDriverDialogForm.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadDriver: PropTypes.object.isRequired,\n onBlurInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadDriverDialogForm.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadDriverDialogForm;\n","import moment from 'moment';\n\nexport const LEAD_DRIVER = {\n // Personal Data\n firstName: '',\n lastName: '',\n email: '',\n birthDate: moment().format('YYYY-MM-DD'),\n gender: '',\n maritalStatus: '',\n ageFirstLicensed: moment().format('YYYY-MM-DD'),\n licensedState: '',\n licenseStatus: '',\n fullTimeStudent: false,\n education: '',\n occupation: '',\n creditRating: 0,\n relationshipToApplicant: '',\n // Contact Data\n cellPhone: '',\n daytimePhone: '',\n eveningPhone: '',\n preferredContactNumber: '',\n preferredContactTime: moment().format('YYYY-MM-DD'),\n // Vehicle Data\n makeOfVehicle: '',\n modelOfVehicle: '',\n yearOfVehicle: 0,\n trim: '',\n style: '',\n ownership: '',\n primaryUse: '',\n averageOneWayMileage: 0,\n annualMileage: 0,\n vehicleParking: '',\n antiLockBreaks: '',\n securitySystem: '',\n salvagedVehicle: '',\n // Residence Data\n yearsAtCurrentResidence: 0,\n city: '',\n state: '',\n street1: '',\n street2: '',\n zip: '',\n // Insurance Data\n insuranceCompany: '',\n continuouslyInsuredYears: 0,\n continuouslyInsuredMonths: 0,\n currentInsuranceCompanyYears: 0,\n currentInsuranceCompanyMonths: 0,\n insuredPast30Days: false,\n // Other Data\n yearsInField: 0,\n policyExpirationDate: moment().format('YYYY-MM-DD'),\n howManyIncidentsInThePast5Years: 0,\n incidentsPast5Years: '',\n violationsPast5Years: '',\n activityPast5Years: '',\n vin: '',\n ticketsAccidentsClaimsPast3Years: true,\n additionalDrivers: false,\n additionalVehicles: false,\n completedBehindTheWheel: false,\n currentBodilyInjuryCoverages: '',\n currentPropertyDamageCoverages: '',\n currentCoverageLevel: '',\n coverageLevel: '',\n currentComprehensiveDeductible: 0,\n currentCollisionDeductible: '',\n fillingRequired: '',\n bankruptcyInPast5Years: false,\n multiplePolicyDiscount: '',\n eNewsletter: 0,\n suspendedOrRevokedInThePast5Years: false,\n dUIDWIInThePast5Years: moment().format('YYYY-MM-DD'),\n dateOfDUIDWI: moment().format('YYYY-MM-DD'),\n desiredCollisionCoverage: 0,\n desiredComprehensiveCoverage: 0,\n averageDaysPerWeekUsed: 0,\n primaryDriver: '',\n};\n","import Flux from '@cobuildlab/flux-state';\nimport { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchLeadDrivers = createEvent();\n\nexport const OnFetchLeadDriversError = createEvent();\n\n/**\n * Event that triggers an error.\n *\n * @type {string}\n */\nexport const LEAD_DRIVER_ERROR_EVENT = 'onLeadDriverError';\n\n/**\n * Event that triggers a Lead Driver create event.\n *\n * @type {string}\n */\nexport const LEAD_DRIVER_CREATE_EVENT = 'onLeadDriverCreate';\n\n/**\n * Event that triggers a Lead Driver update event.\n *\n * @type {string}\n */\nexport const LEAD_DRIVER_UPDATE_EVENT = 'onLeadDriverUpdate';\n\n/**\n * Event that triggers a Lead Driver delete event.\n *\n * @type {string}\n */\nexport const LEAD_DRIVER_DELETE_EVENT = 'onLeadDriverDelete';\n\nclass LeadDriverStore extends Flux.DashStore {\n constructor() {\n super();\n this.addEvent(LEAD_DRIVER_ERROR_EVENT);\n this.addEvent(LEAD_DRIVER_UPDATE_EVENT);\n this.addEvent(LEAD_DRIVER_CREATE_EVENT);\n this.addEvent(LEAD_DRIVER_DELETE_EVENT);\n }\n}\n\nexport default new LeadDriverStore();\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnLeadDriverCreateEvent = createEvent();\n\nexport const OnLeadDriverCreateError = createEvent();\n\nexport const OnLeadDriverUpdateEvent = createEvent();\n\nexport const OnLeadDriverDeleteEvent = createEvent();\n\nexport const OnLeadDriverError = createEvent();\n","import { createAction } from '@cobuildlab/react-simple-state';\nimport { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport {\n LEAD_DRIVER_UPDATE_MUTATION,\n LEAD_DRIVER_CREATE_MUTATION,\n LEAD_DRIVER_DELETE_MUTATION,\n FETCH_LEAD_DRIVERS,\n} from './leads-drivers-queries';\nimport { OnFetchLeadDrivers, OnFetchLeadDriversError } from './leads-drivers-store';\nimport { sanitize8BaseReference } from '../../../shared/utils';\nimport { leadDriverValidations } from './leads-drivers-utils';\nimport {\n OnLeadDriverCreateError,\n OnLeadDriverCreateEvent,\n OnLeadDriverDeleteEvent,\n OnLeadDriverError,\n OnLeadDriverUpdateEvent,\n} from './leads-driver-events';\n\n/**\n * Fetches the drivers for the specified lead\n *\n * @param {string} id - The lead id\n *\n * @returns {Promise} The request result\n */\nexport const fetchLeadDrivers = createAction(\n OnFetchLeadDrivers,\n OnFetchLeadDriversError,\n async (id) => {\n const client = OnApolloClient.get();\n\n const { data } = await client.query({\n query: FETCH_LEAD_DRIVERS,\n fetchPolicy: 'network-only',\n variables: {\n id,\n },\n });\n\n return {\n leadDriversList: {\n items: data.lead.drivers.items,\n },\n };\n },\n);\n\n/**\n * Creates a lead driver\n *\n * @param {object} leadDriver lead driver to create\n * @returns {object} response data\n */\nexport const createLeadDriver = async (leadDriver) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadDriverValidations(leadDriver);\n } catch (e) {\n error('createLeadDriver', e);\n\n return OnLeadDriverError.dispatch(e);\n }\n\n sanitize8BaseReference(leadDriver, 'driversLeadRelation');\n\n try {\n response = await client.mutate({\n mutation: LEAD_DRIVER_CREATE_MUTATION,\n variables: { data: leadDriver },\n });\n } catch (e) {\n error('createLeadDriver', e);\n\n return OnLeadDriverCreateError.dispatch(response.data);\n }\n\n log('createLeadDriver', response);\n OnLeadDriverCreateEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Update a lead driver\n *\n * @param {object} leadDriver lead driver to update\n * @returns {object} response data\n */\nexport const updateLeadDriver = async (leadDriver) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadDriverValidations(leadDriver);\n } catch (e) {\n error('updateLeadDriver', e);\n\n return OnLeadDriverError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEAD_DRIVER_UPDATE_MUTATION,\n variables: { data: leadDriver },\n });\n } catch (e) {\n error('updateLeadDriver', e);\n\n return OnLeadDriverError.dispatch(e);\n }\n\n log('updateLeadDriver', response);\n OnLeadDriverUpdateEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Delete a lead driver\n *\n * @param {string} leadDriverId lead driver id to delete\n * @returns {object} response data\n */\nexport const deleteLeadDriver = async (leadDriverId) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n response = await client.mutate({\n mutation: LEAD_DRIVER_DELETE_MUTATION,\n variables: { data: { id: leadDriverId } },\n });\n } catch (e) {\n error('deleteLeadDriver', e);\n\n return OnLeadDriverError.dispatch(e);\n }\n\n log('deleteLeadDriver', response);\n OnLeadDriverDeleteEvent.dispatch(response.data);\n\n return response.data;\n};\n","import React, { useEffect, useState } from 'react';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport PropTypes from 'prop-types';\nimport PaperInfo from '../../components/PaperInfo';\nimport { styled, Grid } from '@8base/boost';\nimport { RowHeader, ColumnInfo, ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport { IconTrash, IconUpdate } from '../../../../shared/components/ui/Icons';\nimport { TextContact, YesNoDialog } from '../../../../shared/components';\nimport * as R from 'ramda';\nimport LeadDriverDialogForm from './LeadDriverDialogForm';\nimport { formatDriversData, driverMap, driverCreateMap } from '../leads-drivers-utils';\nimport { LEAD_DRIVER } from '../leads-drivers-model';\nimport {\n fetchLeadDrivers,\n updateLeadDriver,\n createLeadDriver,\n deleteLeadDriver,\n} from '../leads-drivers-actions';\nimport { OnFetchLeadDrivers, OnFetchLeadDriversError } from '../leads-drivers-store';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport * as toast from 'shared/components/toast/Toast';\nimport {\n OnLeadDriverCreateEvent,\n OnLeadDriverDeleteEvent,\n OnLeadDriverError,\n OnLeadDriverUpdateEvent,\n} from '../leads-driver-events';\n\nconst DriverHeader = styled(RowHeader)`\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n`;\n\nconst StyledMargin = styled.div`\n display: flex;\n justify-content: flex-end;\n margin: 0 6px;\n\n > img {\n margin: 0 5px;\n }\n`;\n\nconst LeadDriverInfo = ({ id }) => {\n const [drivers, setDrivers] = useState([]);\n const [loading, setLoading] = useState(true);\n const [leadDriver, setLeadDriver] = useState(R.clone(LEAD_DRIVER));\n const [isOpenLeadDriverForm, setIsOpenLeadDriverForm] = useState(false);\n const [loadingLeadDriver, setLoadingLeadDriver] = useState(false);\n const [loadingDeleteDriver, setLoadingDeleteDriver] = useState(false);\n const [isUpdateLeadDriver, setIsUpdateLeadDriver] = useState(false);\n const [isOpenLeadDriverDelete, setIsOpenLeadDriverDelete] = useState(false);\n\n useEffect(() => {\n setLoading(true);\n\n fetchLeadDrivers(id);\n }, [id]);\n\n useEventSubscription(\n OnFetchLeadDrivers,\n ({ leadDriversList }) => {\n setDrivers(leadDriversList.items);\n setLoading(false);\n },\n [],\n );\n\n useEventSubscription(\n OnFetchLeadDriversError,\n (e) => {\n onErrorMixinFC(e);\n setLoading(false);\n },\n [],\n );\n\n const handleOnBlur = (key, event) => {\n leadDriver[key] = event.target.value;\n };\n\n const handleOnSubmitLeadDriver = () => {\n const dataLeadDriver = driverCreateMap(leadDriver);\n\n setLoadingLeadDriver(true);\n\n if (isUpdateLeadDriver) {\n dataLeadDriver.id = leadDriver.id;\n\n updateLeadDriver(dataLeadDriver);\n } else {\n dataLeadDriver.driversLeadRelation = id;\n\n createLeadDriver(dataLeadDriver);\n }\n };\n const handleOnYesLeadDriverDelete = () => {\n setLoadingDeleteDriver(true);\n deleteLeadDriver(leadDriver.id);\n };\n const handleOnNoLeadDriverDelete = () => {\n setLeadDriver(R.clone(LEAD_DRIVER));\n setIsOpenLeadDriverDelete(false);\n };\n\n useEventSubscription(OnLeadDriverCreateEvent, () => {\n setLoadingLeadDriver(false);\n setIsOpenLeadDriverForm(false);\n\n setLoading(true);\n\n fetchLeadDrivers(id);\n\n toast.success('Lead Management', 'Lead Driver Successfully Created');\n });\n\n useEventSubscription(OnLeadDriverUpdateEvent, () => {\n setLoadingLeadDriver(false);\n setIsOpenLeadDriverForm(false);\n setIsUpdateLeadDriver(false);\n setLeadDriver(R.clone(LEAD_DRIVER));\n\n setLoading(true);\n\n fetchLeadDrivers(id);\n\n toast.success('Lead Management', 'Lead Driver Successfully Updated');\n });\n\n useEventSubscription(OnLeadDriverError, (err) => {\n onErrorMixinFC(err);\n setLoadingLeadDriver(false);\n });\n\n useEventSubscription(OnLeadDriverDeleteEvent, (err) => {\n setLeadDriver(R.clone(LEAD_DRIVER));\n setIsOpenLeadDriverDelete(false);\n setLoadingDeleteDriver(false);\n\n setLoading(true);\n\n fetchLeadDrivers(id);\n\n toast.success('Lead Management', 'Lead Driver Successfully Delete');\n });\n\n return (\n <>\n setIsOpenLeadDriverForm(true)}>\n {formatDriversData(drivers).map((driver, driverIndex) => {\n const driverData = drivers[driverIndex];\n const driverMapped = driverMap(driverData);\n\n return (\n \n \n {driver.header}\n \n {\n setLeadDriver(driverMapped);\n setIsOpenLeadDriverDelete(true);\n }}\n />\n {\n setLeadDriver(driverMapped);\n setIsUpdateLeadDriver(true);\n setIsOpenLeadDriverForm(true);\n }}\n />\n \n \n \n {driver.rows.map((row, rowIndex) => {\n return (\n \n \n {row.map((column, columnIndex) => {\n return (\n \n {column.label}\n \n {column.isTextContact ? (\n {column.value}\n ) : (\n column.value\n )}\n \n \n );\n })}\n \n \n );\n })}\n \n \n );\n })}\n \n {\n setIsOpenLeadDriverForm(false);\n setIsUpdateLeadDriver(false);\n setLeadDriver(R.clone(LEAD_DRIVER));\n }}\n />\n \n >\n );\n};\n\nLeadDriverInfo.propTypes = {\n id: PropTypes.string.isRequired,\n};\n\nexport default LeadDriverInfo;\n","import React, { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport { Box } from '../../shared/components/Box';\nimport { useHistory, useLocation, useParams } from 'react-router-dom';\nimport { Loader, Row, Text } from '@8base/boost';\nimport { LeadDetailsHeader } from './components/LeadDetailsHeader';\nimport { LeadAmountForm } from './components/forms/LeadAmountForm';\nimport { LeadStageForm } from './components/forms/LeadStageForm';\nimport { LeadCampaignForm } from './components/forms/LeadCampaignForm';\nimport { LeadAssigneesForm } from './components/forms/LeadAssigneesForm';\nimport { LeadInfoCard } from './components/forms/LeadInfoCard';\nimport LeadTypeAutoInfo from './leads-type-auto/components/LeadTypeAutoInfo';\nimport LeadTypeCommercialAutoInfo from './leads-type-commercial-auto/components/LeadTypeCommercialAutoInfo';\nimport LeadTypeGeneralLiabilityInfo from './leads-type-general-liability/components/LeadTypeGeneralLiabilityInfo';\nimport LeadTypeLifeInfo from './leads-type-life/components/LeadTypeLifeInfo';\nimport LeadTypeHomeInfo from './leads-type-home/components/LeadTypeHomeInfo';\nimport LeadTypeWorkersCompensationInfo from './leads-type-workers-compensation/components/LeadTypeWorkersCompensationInfo';\nimport LeadTypeEmployeeBenefitsInfo from './leads-type-employee-benefits/components/LeadTypeEmployeeBenefitsInfo';\nimport DecisionDialog from '../../shared/components/dialog/DecisionDialog';\nimport {\n OnFetchLeadEvent,\n OnFetchLeadEventError,\n OnFetchCampaigns,\n OnFetchCampaignsError,\n} from './leads-store';\nimport { fetchLeadDetails, fetchAgencyCampaigns } from './leads-actions';\nimport { fetchAgencyAgents } from './../users/user-actions';\nimport { onErrorMixinFC } from '../../shared/mixins';\nimport * as toast from 'shared/components/toast/Toast';\nimport LeadNotes from './components/LeadNotes';\nimport LeadTasks from './components/LeadTasks';\nimport LeadDriverInfo from './leads-drivers/components/LeadDriverInfo';\nimport { LeadHistory } from './leads-history/components/LeadHistory';\nimport { useAgency } from '../../shared/hooks/useAgency';\nimport { OnFetchAgents, OnFetchAgentsError } from '../users/user-events';\nimport moment from 'moment';\n\nconst LeadDetailsView = () => {\n const { id } = useParams();\n const agency = useAgency();\n const [lead, setLead] = useState(null);\n const [loading, setLoading] = useState(true);\n const [campaigns, setCampaigns] = useState([]);\n const [users, setUsers] = useState([]);\n const history = useHistory();\n\n const fetch = useCallback(() => {\n fetchLeadDetails(id);\n }, [id]);\n\n const leadLastCalled = useMemo(() => {\n return lead?.callCadence?.lastCalled\n ? moment(lead.callCadence.lastCalled).format('MM-DD-YYYY - LT')\n : 'Lead has not been called yet';\n }, [lead]);\n\n useEffect(() => {\n setLoading(true);\n\n fetch();\n }, [fetch]);\n\n useEffect(() => {\n fetchAgencyCampaigns(agency.id);\n fetchAgencyAgents(agency.id);\n }, [agency]);\n\n useSimpleSubscription(\n OnFetchLeadEvent,\n (data) => {\n if (data.lead) {\n setLead(data.lead);\n setLoading(false);\n } else {\n toast.warn('The lead you tried to reach does not exist');\n\n history.replace('/dashboard');\n }\n },\n [],\n );\n\n useSimpleSubscription(\n OnFetchLeadEventError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSimpleSubscription(\n OnFetchCampaigns,\n ({ campaignsList }) => {\n setCampaigns(campaignsList.items);\n },\n [],\n );\n\n useSimpleSubscription(\n OnFetchCampaignsError,\n (e) => {\n toast.error('Could not get campaigns: ' + e.message);\n },\n [],\n );\n\n useSimpleSubscription(\n OnFetchAgents,\n ({ usersList }) => {\n setUsers(usersList.items);\n },\n [],\n );\n\n useSimpleSubscription(\n OnFetchAgentsError,\n (e) => {\n toast.error('Could not get users in agency: ' + e.message);\n },\n [],\n );\n\n if (loading) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n \n \n \n \n \n \n Created: \n {moment(lead.createdAt).format('MM-DD-YYYY - LT')}\n \n \n Last Update: \n {moment(lead.updatedAt).format('MM-DD-YYYY - LT')}\n \n \n Last Called: \n {leadLastCalled}\n \n \n \n \n \n \n \n {/* LEAD TYPES */}\n {lead.leadLeadTypeAutoRelation && (\n \n )}\n {lead.leadLeadTypeCommercialAutoRelation && (\n \n )}\n {lead.leadLeadTypeGeneralLiabilityRelation && (\n \n )}\n {lead.leadLeadTypeLifeRelation && (\n \n )}\n {lead.leadLeadTypeHomeRelation && (\n \n )}\n {lead.leadLeadTypeWorkersCompensationRelation && (\n \n )}\n {lead.leadLeadTypeEmployeeBenefitRelation && (\n \n )}\n \n \n \n \n \n );\n};\n\nexport default LeadDetailsView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport StyledBadge from '../../../../shared/components/ui/StyledBadge';\n\nexport const Status = ({ status }) => {\n let priority;\n if (status === 'APPROVED') {\n priority = 1;\n } else if (status === 'PENDING') {\n priority = 2;\n } else if (status === 'EXPIRED') {\n priority = 3;\n } else if (status === 'REJECTED') {\n priority = 4;\n }\n return {status};\n};\nStatus.propTypes = {\n status: PropTypes.string.isRequired,\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnCreateInvitationCompanyEvent = createEvent();\n\nexport const OnCreateInvitationCompanyError = createEvent();\n\nexport const OnDeleteinvitationEvent = createEvent();\n\nexport const OnDeleteinvitationError = createEvent();\n\nexport const OnResendInvitationEvent = createEvent();\n\nexport const OnResendInvitationError = createEvent();\n\nexport const OnInvitationListEvent = createEvent();\n\nexport const OnInvitationListError = createEvent();\n\nexport const OnCreateInvitationEvent = createEvent();\n\nexport const OnCreateInvitationError = createEvent();\n","import { OnApolloClient, OnSessionFetch } from '../../../shared/session/session-events';\nimport { error, log } from '@cobuildlab/pure-logger';\nimport {\n QUERY_INVITATIONS,\n CREATE_INVITATION,\n RESEND_INVITATION,\n DELETE_INVITATION,\n CREATE_INVITATION_COMPANY,\n} from './invitations-queries';\nimport {\n createAgencyInvitationValidator,\n createCompanyInvitationValidator,\n} from '@cobuildlab/lead-volt-share';\nimport { normalize8baseReferenceConnect } from '@cobuildlab/8base-utils';\nimport {\n OnCreateInvitationCompanyError,\n OnCreateInvitationCompanyEvent,\n OnCreateInvitationError,\n OnCreateInvitationEvent,\n OnDeleteinvitationError,\n OnDeleteinvitationEvent,\n OnInvitationListError,\n OnInvitationListEvent,\n OnResendInvitationError,\n OnResendInvitationEvent,\n} from './invitation-events';\n\nexport const fetchInvitationList = async (agencyId, pageSize, queryOffset) => {\n const client = OnApolloClient.get();\n const variables = { agencyId: agencyId, limit: pageSize, offset: queryOffset };\n try {\n const response = await client.query({\n query: QUERY_INVITATIONS,\n fetchPolicy: 'network-only',\n variables,\n });\n OnInvitationListEvent.dispatch(response.data);\n return response.data;\n } catch (e) {\n return OnInvitationListError.dispatch(e);\n }\n};\n\nexport const createInvitation = async (data) => {\n const client = OnApolloClient.get();\n const { user } = OnSessionFetch.get();\n let response = null;\n\n try {\n createAgencyInvitationValidator(user, data);\n } catch (e) {\n error('createInvitation', e);\n\n return OnCreateInvitationError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: CREATE_INVITATION,\n variables: { data },\n });\n } catch (e) {\n error('createInvitation', e);\n\n return OnCreateInvitationError.dispatch(e);\n }\n\n log('createInvitation', response.data);\n OnCreateInvitationEvent.dispatch(response.data);\n\n return response.data;\n};\n\nexport const deleteInvitation = async (invitationId) => {\n const client = OnApolloClient.get();\n try {\n const response = await client.mutate({\n mutation: DELETE_INVITATION,\n variables: { id: invitationId },\n });\n OnDeleteinvitationEvent.dispatch(response.data);\n return response.data;\n } catch (e) {\n return OnDeleteinvitationError.dispatch(e);\n }\n};\nexport const resendInvitation = async (invitationId, resend) => {\n const client = OnApolloClient.get();\n try {\n const response = await client.mutate({\n mutation: RESEND_INVITATION,\n variables: { id: invitationId, resend },\n });\n OnResendInvitationEvent.dispatch(response.data);\n return response.data;\n } catch (e) {\n return OnResendInvitationError.dispatch(e);\n }\n};\n\nexport const createInvitationCompany = async (data) => {\n const client = OnApolloClient.get();\n const { user } = OnSessionFetch.get();\n let response = null;\n\n try {\n createCompanyInvitationValidator(user, data);\n } catch (e) {\n error('createInvitationCompany', e);\n return OnCreateInvitationCompanyError.dispatch(response.data);\n }\n\n normalize8baseReferenceConnect(data, 'company');\n\n try {\n response = await client.mutate({\n mutation: CREATE_INVITATION_COMPANY,\n variables: { data },\n });\n } catch (e) {\n error('companyInvitationCompany', e);\n return OnCreateInvitationCompanyError.dispatch(response.data);\n }\n\n OnCreateInvitationCompanyEvent.dispatch(response.data);\n return response.data;\n};\n","import React, { useState, useCallback } from 'react';\nimport moment from 'moment';\nimport { Dropdown, Pagination, Icon, Table, Menu, Dialog, Paragraph, Button } from '@8base/boost';\nimport * as toast from 'shared/components/toast/Toast';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport { Status } from './Status';\nimport { deleteInvitation, resendInvitation } from '../invitations-actions';\nimport { deleteCompanyInvitation } from '../../../company-invitation/company-invitation-actions';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport {\n OnDeleteinvitationError,\n OnDeleteinvitationEvent,\n OnResendInvitationError,\n OnResendInvitationEvent,\n} from '../invitation-events';\nimport {\n OnDeleteCompanyInvitationError,\n OnDeleteCompanyInvitationEvent,\n} from 'modules/company/campany-events';\n\nconst tableColumns = '80px minmax(250px,1fr) 150px 200px 100px';\n\nconst PaginationWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n & > div > div > *::before {\n background-color: var(--color-primary);\n transition: all 0.2s;\n }\n\n & > div > span {\n display: inline-block;\n padding: 0.5rem 1.5rem;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n }\n`;\n\nconst TableBody = styled(Table.Body)`\n min-height: ${({ height }) => height};\n`;\n\nexport const InvitationsList = ({\n loading,\n page,\n pageSize,\n total,\n handleChange,\n offset,\n invitations,\n refetch,\n CompanyInvitationList,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [menuOpen, setMenuOpen] = useState('');\n const [invitation, setInvitation] = useState('');\n const [loadingDelete, setLoadingDelete] = useState(false);\n const [loadingResend, setLoadingResend] = useState(false);\n const deleteModal = useCallback((id) => {\n setInvitation(id);\n setIsOpen(true);\n }, []);\n\n useEventSubscription(OnDeleteinvitationEvent, () => {\n setInvitation('');\n setIsOpen(false);\n refetch('network-only');\n toast.success('Invitation deleted successfully');\n setLoadingDelete(false);\n });\n\n useEventSubscription(OnDeleteinvitationError, (err) => {\n toast.error(`${JSON.stringify(err)}`);\n setLoadingDelete(false);\n });\n\n useEventSubscription(OnDeleteCompanyInvitationEvent, () => {\n setInvitation('');\n setIsOpen(false);\n refetch('network-only');\n toast.success('Invitation deleted successfully');\n setLoadingDelete(false);\n });\n\n useEventSubscription(OnDeleteCompanyInvitationError, (error) => {\n toast.error(`${JSON.stringify(error)}`);\n setLoadingDelete(false);\n });\n\n useEventSubscription(OnResendInvitationEvent, () => {\n toast.success('Invitation was resend successfully');\n setMenuOpen('');\n setLoadingDelete(false);\n });\n\n useEventSubscription(OnResendInvitationError, (error) => {\n toast.error(`${JSON.stringify(error)}`);\n setLoadingDelete(false);\n });\n\n const deleteInvitationAction = useCallback(() => {\n setLoadingDelete(true);\n if (CompanyInvitationList) {\n deleteCompanyInvitation(invitation);\n } else {\n deleteInvitation(invitation);\n }\n }, [invitation, CompanyInvitationList]);\n\n const resendInvitationAction = useCallback((invitation) => {\n setLoadingResend(true);\n resendInvitation(invitation, moment().format('x'));\n }, []);\n\n const height = `${pageSize * 47}px`;\n\n return (\n <>\n \n \n #\n Email\n Status\n Updated At\n Actions\n \n \n {(item, i) => (\n \n {i + 1 + offset}\n {item.email}\n \n \n \n {moment(item.updatedAt).format('MM/DD/YYYY HH:mm')}\n \n {item.status === 'APPROVED' || item.status === 'REJECTED' ? (\n '-'\n ) : (\n setMenuOpen((id) => (id === item.id ? '' : item.id))}>\n \n \n \n \n \n deleteModal(item.id)}>Delete\n {!CompanyInvitationList ? (\n resendInvitationAction(item.id)}\n loading={loadingResend}>\n Resend\n \n ) : (\n ''\n )}\n \n \n \n )}\n \n \n )}\n \n \n \n \n \n \n \n \n setIsOpen(false)} />\n \n Are you sure about delete this invitation\n \n \n setIsOpen(false)}>\n Cancel\n \n \n Delete\n \n \n \n >\n );\n};\n\nInvitationsList.propTypes = {\n loading: PropTypes.bool.isRequired,\n page: PropTypes.number.isRequired,\n pageSize: PropTypes.number.isRequired,\n total: PropTypes.number.isRequired,\n handleChange: PropTypes.func.isRequired,\n offset: PropTypes.number.isRequired,\n invitations: PropTypes.arrayOf(PropTypes.object).isRequired,\n refetch: PropTypes.func.isRequired,\n CompanyInvitationList: PropTypes.bool,\n};\n\nInvitationsList.defaultProps = {\n CompanyInvitationList: false,\n};\n","export const USER_INVITATION_TYPES = [\n { value: 'MANAGER', label: 'Manager' },\n { value: 'AGENT', label: 'Agent' },\n];\n\nexport const PAGE_SIZE = 10;\n","import React, { useState, useCallback } from 'react';\nimport * as toast from 'shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\nimport { Button, Form, SelectField, InputField, Dialog } from '@8base/boost';\nimport { hasError } from 'apollo-client/core/ObservableQuery';\nimport { createInvitation } from '../invitations-actions';\nimport { USER_INVITATION_TYPES } from '../invitations-model';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport { OnCreateInvitationError, OnCreateInvitationEvent } from '../invitation-events';\n\nexport const Invitation = ({ close, isOpen, agencyId, agencyName, refetch }) => {\n const formDefault = {\n type: '',\n email: '',\n };\n const [form, setForm] = useState(formDefault);\n const [formErrors, setFormErrors] = useState({\n type: {},\n email: {},\n });\n const [loading, setLoading] = useState(false);\n const handleChange = useCallback(({ target }) => {\n const { value, name } = target;\n setFormErrors((state) => ({ ...state, [name]: {} }));\n setForm((state) => ({ ...state, [name]: value }));\n }, []);\n\n const handleSelectChange = useCallback((type) => {\n setFormErrors((state) => ({ ...state, type: {} }));\n setForm((state) => ({ ...state, type }));\n }, []);\n\n useEventSubscription(OnCreateInvitationEvent, () => {\n refetch('network-only');\n setForm(formDefault);\n close();\n toast.success('Success', 'Invitation send successfully');\n setLoading(false);\n });\n\n useEventSubscription(OnCreateInvitationError, (error) => {\n onErrorMixinFC(error);\n setLoading(false);\n });\n\n const saveInvitation = useCallback(() => {\n const data = {\n ...form,\n agency: {\n connect: {\n id: agencyId,\n },\n },\n };\n\n setLoading(true);\n createInvitation(data);\n }, [form, agencyId]);\n\n const disabledSubmit = hasError(formErrors);\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n Cancel\n \n \n Send\n \n \n \n >\n );\n};\nInvitation.propTypes = {\n close: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n agencyId: PropTypes.string.isRequired,\n agencyName: PropTypes.string.isRequired,\n refetch: PropTypes.func.isRequired,\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport * as toast from 'shared/components/toast/Toast';\nimport { useHistory } from 'react-router-dom';\nimport { Card, Loader, Row } from '@8base/boost';\nimport { OnSessionFetch } from '../../../shared/session/session-events';\nimport { InvitationsList } from './components/InvitationsList';\nimport { Invitation } from './components/Invitation';\nimport { fetchInvitationList } from './invitations-actions';\nimport { PAGE_SIZE } from './invitations-model';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { Box } from '../../../shared/components/Box';\nimport { CreateButton } from 'shared/components';\nimport { OnInvitationListError, OnInvitationListEvent } from './invitation-events';\n\nexport const InvitationsView = () => {\n const [user, setUser] = useState(null);\n const [page, setPage] = useState(1);\n const [modal, setModal] = useState(false);\n const [loadingUser, setLoadingUser] = useState(true);\n const history = useHistory();\n const [invitations, setInvitations] = useState([]);\n const [loading, setLoading] = useState(false);\n const [total, setTotal] = useState(0);\n const agency = useAgency();\n\n useEffect(() => {\n const user = OnSessionFetch.get().user;\n const validUser = user?.userAdminRelation.count > 0;\n const userRole = user.userAgencyUserRelation.items[0].roles[0];\n\n if (!validUser && userRole !== 'MANAGER') {\n history.goBack();\n } else {\n setLoadingUser(false);\n setUser(user);\n }\n }, [history]);\n\n const userId = user?.id;\n\n const queryOffset = (page - 1) * PAGE_SIZE;\n\n useEventSubscription(OnInvitationListEvent, (data) => {\n const {\n agencyInvitationsList: { count, items },\n } = data;\n setInvitations(items);\n setTotal(count);\n setLoading(false);\n });\n useEventSubscription(OnInvitationListError, (data) => {\n toast.error(JSON.stringify(data));\n setLoading(false);\n });\n const fetchInviations = useCallback(() => {\n setLoading((state) => !state);\n fetchInvitationList(agency.id, PAGE_SIZE, queryOffset);\n }, [agency, queryOffset]);\n\n useEffect(() => {\n if (!userId) {\n return;\n }\n fetchInviations();\n }, [userId, fetchInviations]);\n\n const handlePageChange = useCallback((value) => {\n setPage(value);\n }, []);\n\n const closeModal = useCallback(() => {\n setModal(false);\n }, []);\n\n const refetch = fetchInviations;\n\n if (loadingUser) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n \n setModal((modal) => !modal)}\n text=\"Create Invitation\"\n />\n \n \n \n \n \n \n \n \n );\n};\n","import React, { useCallback } from 'react';\nimport { Table, Dropdown, Menu, Icon, Tag as BoostTag } from '@8base/boost';\nimport { DropdownBodyOnTable } from '../../../../shared/components';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst MenuItem = styled(Menu.Item)`\n color: ${({ danger }) => (danger ? '#FF0000' : 'rgb(50, 60, 71)')}!important;\n &:hover {\n ${({ danger }) => (danger ? '' : 'color: #3db4aa !important;')}\n }\n`;\n\nconst Tag = styled(BoostTag)`\n ${(props) => {\n switch (props.status) {\n case 'active':\n return `\n color: #3DB4AA !important;\n background-color: rgba(61, 180, 170, .1) !important;\n border-color: rgba(61, 180, 170, .4) !important;\n `;\n case 'invited':\n return `\n color: #62ABFE !important;\n background-color: rgba(98, 171, 254, .1) !important;\n border-color: rgba(98, 171, 254, .4) !important;\n `;\n case 'inactive':\n return `\n color: #FF0606 !important;\n background-color: rgba(255, 6, 6, .1) !important;\n border-color: rgba(255, 6, 6, .4) !important;\n `;\n default:\n return `\n color: #3DB4AA !important;\n background-color: rgba(61, 180, 170, .1) !important;\n border-color: rgba(61, 180, 170, .4) !important;\n `;\n }\n }}\n`;\n\n/**\n * Admin table row compnent\n *\n * @param {object} props - The component's prop object\n * @param {number} props.index - The number of the row in the table\n * @param {object} props.admin - The user object to display the data from\n * @param {Function} props.onDelete - Callback that is triggered when the delete button is clicked\n *\n * @returns {React.FC} The component to render\n */\nconst AdminsTableRow = ({ index, admin, onDelete }) => {\n const handleDelete = useCallback(\n (callback) => {\n onDelete(admin);\n callback();\n },\n [admin, onDelete],\n );\n\n return (\n <>\n {index}\n \n {admin.user.firstName} {admin.user.lastName}\n \n {admin.user.email}\n \n {admin.user.status}\n \n \n \n \n \n \n \n {({ closeDropdown }) => (\n \n handleDelete(closeDropdown)}>\n Delete\n \n \n )}\n \n \n \n >\n );\n};\n\nAdminsTableRow.propTypes = {\n index: PropTypes.number.isRequired,\n admin: PropTypes.shape({\n user: PropTypes.shape({\n id: PropTypes.string.isRequired,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n email: PropTypes.string.isRequired,\n status: PropTypes.array.isRequired,\n }).isRequired,\n __typename: PropTypes.string.isRequired,\n }).isRequired,\n onDelete: PropTypes.func.isRequired,\n};\n\nexport default AdminsTableRow;\n","import React, { useState, useCallback } from 'react';\nimport { Table } from '@8base/boost';\nimport AdminsTableRow from './AdminsTableRow';\nimport PropTypes from 'prop-types';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport YesNoDialog from '../../../../shared/components/YesNoDialog';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport { fetchCompany } from '../../../company/company-actions';\nimport { removeAdminFromCompany } from '../../../users/user-actions';\nimport styled from 'styled-components';\nimport { OnAdminDeletedError, OnAdminDeletedEvent } from 'modules/users/user-events';\n\nconst Body = styled(Table.Body)`\n min-height: 335px;\n`;\n\nconst columns = '68px repeat(3 , 1fr) 105px';\n\nconst AdminsTable = ({ user, companyId, admins, page, onUsersCount, setLoaderUpdate }) => {\n const [deleteModal, setDeleteModal] = useState({ open: false, selected: {}, loading: false });\n\n useEventSubscription(OnAdminDeletedError, (err) => {\n setDeleteModal((state) => ({ ...state, open: false, loading: false }));\n onErrorMixinFC(err);\n });\n\n useEventSubscription(OnAdminDeletedEvent, () => {\n setDeleteModal({ open: false, selected: {}, loading: false });\n setLoaderUpdate(true);\n fetchCompany(companyId, user.id);\n });\n\n const handleDeleteClick = useCallback(\n (admin) =>\n setDeleteModal({\n open: true,\n selected: admin,\n }),\n [],\n );\n\n const handleDelete = useCallback(async () => {\n const admin = deleteModal.selected;\n setDeleteModal((state) => ({ ...state, loading: true }));\n removeAdminFromCompany(admin);\n }, [deleteModal]);\n\n return (\n \n \n #\n NAME\n EMAIL\n STATUS\n ACTIONS\n \n \n {(admin, i) => (\n \n \n \n )}\n \n setDeleteModal((state) => ({ ...state, open: false }))}\n onYes={handleDelete}\n onNo={() => setDeleteModal((state) => ({ ...state, open: false }))}\n isLoading={deleteModal.loading}\n />\n \n );\n};\n\nAdminsTable.propTypes = {\n user: PropTypes.object.isRequired,\n companyId: PropTypes.string.isRequired,\n admins: PropTypes.array.isRequired,\n page: PropTypes.number.isRequired,\n onUsersCount: PropTypes.func.isRequired,\n setLoaderUpdate: PropTypes.func.isRequired,\n};\n\nexport default AdminsTable;\n","import React, { useState, useCallback } from 'react';\nimport * as toast from 'shared/components/toast/Toast';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { Button, Form, InputField, Dialog } from '@8base/boost';\nimport { hasError } from 'apollo-client/core/ObservableQuery';\nimport PropTypes from 'prop-types';\nimport { createInvitationCompany } from './../../invitations/invitations-actions';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport {\n OnCreateInvitationCompanyError,\n OnCreateInvitationCompanyEvent,\n} from 'modules/my-account/invitations/invitation-events';\n\nexport const Invitation = ({ onClose, isOpen, companyId, companyName }) => {\n const formDefault = {\n email: '',\n };\n const [form, setForm] = useState(formDefault);\n const [formErrors, setFormErrors] = useState({\n email: {},\n });\n const [loading, setLoading] = useState(false);\n const handleChange = useCallback(({ target }) => {\n const { value, name } = target;\n setFormErrors((state) => ({ ...state, [name]: {} }));\n setForm((state) => ({ ...state, [name]: value }));\n }, []);\n\n useEventSubscription(OnCreateInvitationCompanyEvent, () => {\n setForm(formDefault);\n onClose();\n toast.success('Success', 'Invitation send successfully');\n setLoading(false);\n });\n\n useEventSubscription(OnCreateInvitationCompanyError, (err) => {\n onErrorMixinFC(err);\n setLoading(false);\n });\n\n const saveInvitation = useCallback(() => {\n const data = {\n ...form,\n company: companyId,\n };\n\n setLoading(true);\n createInvitationCompany(data);\n }, [form, companyId]);\n\n const disabledSubmit = hasError(formErrors);\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n Cancel\n \n \n Send\n \n \n \n >\n );\n};\nInvitation.propTypes = {\n onClose: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n companyId: PropTypes.string.isRequired,\n companyName: PropTypes.string.isRequired,\n};\n","import React, { useCallback, useState, useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport {\n Button,\n Card,\n Column,\n Dialog,\n Grid,\n Form,\n InputField,\n Pagination,\n Paragraph,\n Row,\n SelectField,\n Loader,\n} from '@8base/boost';\nimport { fetchCompanies, updateCompany } from '../../company/company-actions';\nimport AdminsTable from './components/AdminsTable';\nimport { Invitation } from './components/Invitation';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { OnSessionFetch } from '../../../shared/session/session-events';\nimport { CreateButton, PrimaryBtn } from '../../../shared/components';\nimport { Box } from '../../../shared/components/Box';\nimport * as toast from 'shared/components/toast/Toast';\nimport styled from 'styled-components';\nimport {\n OnCompanyfetched,\n OnCompanyUpdated,\n OnfetchCompanyList,\n} from 'modules/company/campany-events';\n\nconst CardHeaderWithButton = styled(Card.Header)`\n display: flex;\n justify-content: flex-end;\n`;\n\nconst CardTitle = styled.h3`\n font-size: 16px;\n font-weight: bold;\n line-height: 28px;\n margin-right: 20px !important;\n`;\n\nconst CardBody = styled(Card.Body)`\n padding: 0 !important;\n`;\n\nconst ColumnLeft = styled(Grid.Box)`\n padding-right: 10px !important;\n`;\n\nconst ColumnRight = styled(Grid.Box)`\n padding-left: 10px !important;\n`;\n//for updating companies in settings\nconst CompanyView = () => {\n const defaultPageSize = 10;\n const agency = useAgency();\n const [user, setUser] = useState(null);\n const [isOpenUpdate, setIsOpenUpdate] = useState(false);\n const [loaderUpdate, setLoaderUpdate] = useState(false);\n const [isInviteModalOpen, setisInviteModalOpen] = useState(false);\n const [data, setData] = useState({\n company: null,\n companies: [],\n options: [],\n total: 0,\n page: 1,\n loading: true,\n });\n // Form\n const [companyId, setCompanyId] = useState('');\n const [companyName, setCompanyName] = useState('');\n const history = useHistory();\n\n const handleOpenUpdate = () => setIsOpenUpdate(true);\n const handleCloseUpdate = () => setIsOpenUpdate(false);\n\n const handleSubmit = () => {\n setLoaderUpdate(true);\n\n const companyData = {\n id: companyId,\n name: companyName,\n };\n\n updateCompany(companyData, user.id);\n };\n\n const initOptionsSelectCompany = (companies) => {\n return companies.map((company) => {\n return { label: company.name, value: company.id };\n });\n };\n\n useEffect(() => {\n const user = OnSessionFetch.get().user;\n const validUser = user?.userAdminRelation.count > 0;\n if (!validUser) {\n history.goBack();\n } else {\n setUser(user);\n const companyIds = user.userAdminRelation.items.map((companyData) => companyData.company.id);\n fetchCompanies({ companyIds }, user.id);\n }\n }, [history, data.page, setUser]);\n\n useEventSubscription(OnfetchCompanyList, ({ companiesList }) => {\n const options = initOptionsSelectCompany(companiesList.items);\n let company = null;\n let total = 0;\n\n if (options.length === 1) {\n setCompanyId(options[0].value);\n setCompanyName(options[0].label);\n company = companiesList.items[0];\n total = company.adminCompanyRelation.count;\n } else if (options.length > 1) {\n const companyOfActiveAgency = companiesList.items.find(\n (company) => company.id === agency.company.id,\n );\n setCompanyId(companyOfActiveAgency.id);\n setCompanyName(companyOfActiveAgency.name);\n company = companyOfActiveAgency;\n total = companyOfActiveAgency.adminCompanyRelation.count;\n }\n\n setData((state) => ({\n ...state,\n companies: companiesList.items,\n loading: false,\n company,\n total,\n options,\n }));\n });\n\n useEventSubscription(OnCompanyfetched, ({ company }) => {\n setLoaderUpdate(false);\n setData((state) => {\n const companies = state.companies.map((currentCompany) =>\n currentCompany.id === company.id ? company : currentCompany,\n );\n return {\n ...state,\n companies: companies,\n options: initOptionsSelectCompany(companies),\n company: company,\n total: company.adminCompanyRelation.count,\n page: 1,\n };\n });\n toast.success('Company', 'Admin successfully removed from company');\n });\n\n useEventSubscription(OnCompanyUpdated, ({ companyUpdate }) => {\n setLoaderUpdate(false);\n handleCloseUpdate();\n toast.success('Company', 'Updated Successfully!');\n setData((state) => {\n const companiesWithCompanyUpdated = state.companies.map((company) =>\n company.id === companyUpdate.id ? companyUpdate : company,\n );\n return {\n ...state,\n companies: companiesWithCompanyUpdated,\n options: initOptionsSelectCompany(companiesWithCompanyUpdated),\n company: companyUpdate,\n total: companyUpdate.adminCompanyRelation.count,\n page: 1,\n };\n });\n });\n\n const handlePageChange = useCallback((page) => {\n setData((state) => ({ ...state, page }));\n }, []);\n\n const handleTotalChange = useCallback((total) => {\n setData((state) => ({ ...state, total: total }));\n }, []);\n\n const handleSelectChange = useCallback(\n (value) => {\n setCompanyId(value);\n setCompanyName(data.options.find((option) => option.value === value).label);\n setData((state) => {\n const company = state.companies.find((company) => company.id === value);\n return {\n ...state,\n company: company,\n total: company.adminCompanyRelation.count,\n page: 1,\n };\n });\n },\n [data.options],\n );\n\n let admins = data.company ? data.company.adminCompanyRelation.items : [];\n\n if (admins.length > 0 && data.total > 0) {\n admins = admins.slice((data.page - 1) * defaultPageSize, data.page * defaultPageSize);\n }\n\n let renderInputCompany = null;\n if (data.options.length === 1) {\n renderInputCompany = (\n \n );\n } else {\n renderInputCompany = (\n \n );\n }\n\n if (data.loading) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n \n Company\n {renderInputCompany}\n \n \n \n \n \n \n \n setCompanyName(e.target.value)}\n input={{\n name: 'companyName',\n type: 'text',\n value: companyName,\n }}\n />\n \n \n \n \n \n \n \n \n \n \n Save Changes\n \n \n \n \n \n \n setisInviteModalOpen(true)}\n text=\"Create Company's Admin\"\n disabled={data.company ? false : true}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n Are you sure update the changes?\n \n \n \n Cancel\n \n \n Update\n \n \n \n setisInviteModalOpen(false)}\n companyId={data.company ? data.company.id : null}\n companyName={data.company ? data.company.name : ''}\n />\n \n \n );\n};\n\nexport default CompanyView;\n","import React, { useState, useCallback } from 'react';\r\nimport * as toast from 'shared/components/toast/Toast';\r\nimport PropTypes from 'prop-types';\r\nimport { Button, Form, SelectField, InputField, Dialog } from '@8base/boost';\r\nimport { hasError } from 'apollo-client/core/ObservableQuery';\r\nimport { createCompanyInvitation } from '../../../company-invitation/company-invitation-actions';\r\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\r\nimport { onErrorMixinFC } from '../../../../shared/mixins';\r\nimport {\r\n OnCreateCompanyInvitationError,\r\n OnCreateCompanyInvitationEvent,\r\n} from 'modules/company/campany-events';\r\n\r\nconst formDefault = {\r\n company: '',\r\n email: '',\r\n};\r\n\r\nexport const Invitation = ({ close, companies, isOpen, refetch }) => {\r\n const [form, setForm] = useState(formDefault);\r\n const [formErrors, setFormErrors] = useState({\r\n company: {},\r\n email: '',\r\n });\r\n const [loading, setLoading] = useState(false);\r\n const handleChange = useCallback(({ target }) => {\r\n const { value, name } = target;\r\n setFormErrors((state) => ({ ...state, [name]: {} }));\r\n setForm((state) => ({ ...state, [name]: value }));\r\n }, []);\r\n\r\n const companyOptions = companies.map((item) => {\r\n return { value: item.company.id, label: item.company.name };\r\n });\r\n\r\n const handleSelectChange = useCallback((company) => {\r\n setFormErrors((state) => ({ ...state, company: {} }));\r\n setForm((state) => ({ ...state, company }));\r\n }, []);\r\n\r\n useEventSubscription(OnCreateCompanyInvitationEvent, () => {\r\n refetch('network-only');\r\n setForm(formDefault);\r\n close();\r\n toast.success('Invitation Management', 'Invitation send successfully');\r\n setLoading(false);\r\n });\r\n\r\n useEventSubscription(OnCreateCompanyInvitationError, (err) => {\r\n onErrorMixinFC(err);\r\n setLoading(false);\r\n });\r\n\r\n const saveInvitation = useCallback(() => {\r\n setLoading(true);\r\n createCompanyInvitation(form);\r\n }, [form]);\r\n\r\n const disabledSubmit = hasError(formErrors);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Cancel\r\n \r\n \r\n Send\r\n \r\n \r\n \r\n >\r\n );\r\n};\r\n\r\nInvitation.propTypes = {\r\n close: PropTypes.func.isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n companies: PropTypes.array.isRequired,\r\n refetch: PropTypes.func.isRequired,\r\n};\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport * as toast from 'shared/components/toast/Toast';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { Card, Row, Loader } from '@8base/boost';\r\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\r\nimport { OnSessionFetch } from '../../../shared/session/session-events';\r\nimport { InvitationsList } from '../invitations/components/InvitationsList';\r\nimport { Invitation } from './components/Invitation';\r\nimport { fetchCompanyInvitationList } from '../../company-invitation/company-invitation-actions';\r\nimport { PAGE_SIZE } from '../invitations/invitations-model';\r\nimport { CreateButton } from 'shared/components';\r\nimport { Box } from '../../../shared/components/Box';\r\nimport styled from 'styled-components';\r\nimport {\r\n OnCompanyinvitationError,\r\n OnCompanyinvitationListEvent,\r\n} from 'modules/company-invitation/company-invitation-events';\r\n\r\nconst CardTitle = styled.h3`\r\n font-size: 16px;\r\n font-weight: bold;\r\n line-height: 28px;\r\n`;\r\n\r\nconst CompanyInvitationsView = () => {\r\n const [user, setUser] = useState(null);\r\n const [page, setPage] = useState(1);\r\n const [modal, setModal] = useState(false);\r\n const [companies, setCompanies] = useState('');\r\n const [loadingUser, setLoadingUser] = useState(true);\r\n const history = useHistory();\r\n const [invitations, setInvitations] = useState([]);\r\n const [loading, setLoading] = useState(false);\r\n const [total, setTotal] = useState(0);\r\n useEffect(() => {\r\n const user = OnSessionFetch.get().user;\r\n const validUser = user?.userAdminRelation.count > 0;\r\n if (!validUser) {\r\n history.goBack();\r\n } else {\r\n setLoadingUser(false);\r\n setUser(user);\r\n setCompanies(user.userAdminRelation.items);\r\n }\r\n }, [history]);\r\n\r\n const userId = user?.id;\r\n\r\n const queryOffset = (page - 1) * PAGE_SIZE;\r\n\r\n useEventSubscription(OnCompanyinvitationListEvent, (data) => {\r\n const {\r\n companyInvitationsList: { count, items },\r\n } = data;\r\n setInvitations(items);\r\n setTotal(count);\r\n setLoading(false);\r\n });\r\n\r\n useEventSubscription(OnCompanyinvitationError, (err) => {\r\n toast.error(JSON.stringify(err));\r\n setLoading(false);\r\n });\r\n\r\n const fetchCompanyInvitations = useCallback(\r\n (fetchPolicy = 'cache-first') => {\r\n setLoading((state) => !state);\r\n fetchCompanyInvitationList(userId, PAGE_SIZE, queryOffset, fetchPolicy);\r\n },\r\n [userId, queryOffset],\r\n );\r\n useEffect(() => {\r\n if (!userId) {\r\n return;\r\n }\r\n fetchCompanyInvitations();\r\n // eslint-disable-next-line\r\n }, [userId]);\r\n const handlePageChange = useCallback(\r\n (value) => {\r\n setPage(value);\r\n setLoading((state) => !state);\r\n fetchCompanyInvitationList(userId, PAGE_SIZE, (value - 1) * PAGE_SIZE, 'no-cache');\r\n },\r\n [userId],\r\n );\r\n\r\n const closeModal = useCallback(() => {\r\n setModal(false);\r\n }, []);\r\n\r\n const refetch = fetchCompanyInvitations;\r\n\r\n if (loadingUser) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Company Invitations\r\n setModal((modal) => !modal)}\r\n text=\"Create Invitation\"\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CompanyInvitationsView;\r\n","export const TABLE_COLUMNS = [{ name: 'Name' }, { name: 'Campaigns' }];\n\nexport const VENDOR = {\n name: '',\n};\n","import { Table, styled } from '@8base/boost';\n\nexport const StyledHeaderCell = styled(Table.HeaderCell)`\n padding-left: 16px !important;\n padding-right: 6px !important;\n`;\n\nexport const StyledTableBody = styled(Table.Body)`\n max-height: 50vh;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nexport const StyledCell = styled(Table.BodyCell)`\n padding: 8px 16px !important;\n`;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, InputField, Grid } from '@8base/boost';\n\n/**\n * Vendor form\n *\n * @param {object} props component props\n * @param {object} props.vendor data\n * @param {Function} props.onChangeInput handle for onChange input\n * @param {Function} props.onSubmit handle on submit\n * @returns {React.ReactElement} component\n */\nconst VendorForm = ({ vendor, onChangeInput, onSubmit }) => {\n return (\n {\n event.preventDefault();\n onSubmit();\n }}>\n \n \n \n onChangeInput('name', value),\n }}\n />\n \n \n \n \n );\n};\n\nVendorForm.propTypes = {\n vendor: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n};\n\nexport default VendorForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport DialogForm from '../../../shared/components/dialog/DialogForm';\nimport VendorForm from './VendorForm';\n\nconst VendorFormDialog = ({\n vendor,\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n campaigns,\n onChangeInput,\n onCloseDialog,\n}) => {\n return (\n \n \n \n );\n};\n\nVendorFormDialog.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n isUpdate: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n vendor: PropTypes.object.isRequired,\n campaigns: PropTypes.array.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nexport default VendorFormDialog;\n","/**\n * Map for the form fields.\n *\n * @param {object} vendor data\n * @returns {object} vendor mapped\n */\nexport const vendorMap = (vendor) => {\n return {\n ...vendor,\n campaigns: vendor.vendorCampaignRelation.items.map((campaign) => ({\n value: campaign.id,\n label: campaign.name,\n })),\n };\n};\n\n/**\n * Map for table\n *\n * @param {Array} vendors data\n * @returns {Array} mapped vendors\n */\nexport const vendorsMap = (vendors) => {\n return vendors.map((vendor) => ({\n id: vendor.id,\n name: vendor.name,\n campaigns: vendor.vendorCampaignRelation.count,\n }));\n};\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Paper, Grid, Row, styled, Table } from '@8base/boost';\nimport { SearchInput, Loader, TextEllipsis } from 'shared/components';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport { onChangeDataHookMixin, onErrorMixinFC } from '../../shared/mixins';\nimport { TABLE_COLUMNS, VENDOR } from './vendors-model';\nimport { fetchVendors, createVendor, updateVendor, deleteVendor } from './vendors-actions';\nimport { IconTrash, IconUpdate } from '../../shared/components/ui/Icons';\nimport {\n StyledHeaderCell,\n StyledTableBody,\n StyledCell,\n} from '../../shared/components/tables/CustomTable';\nimport VendorFormDialog from './components/VendorFormDialog';\nimport * as R from 'ramda';\nimport withSession from '../../shared/hoc/withSession';\nimport { vendorMap, vendorsMap } from './vendors-utils';\nimport YesNoDialog from '../../shared/components/YesNoDialog';\nimport { CreateButton } from 'shared/components';\nimport { Box } from '../../shared/components/Box';\nimport {\n OnVendorCreateEvent,\n OnVendorDeleteEvent,\n OnVendorsError,\n OnVendorsEvent,\n OnVendorUpdateEvent,\n} from './vendors-events';\n\nconst StyledLayout = styled(Grid.Layout)`\n padding: 16px;\n`;\n\n/**\n * Vendors view\n *\n * @param {object} props components props\n * @param {string} props.activeAgencyId active agency ID\n *\n * @returns {React.FC} The react component\n */\nconst VendorsView = ({ activeAgencyId }) => {\n const [filters, setFilters] = useState({ search: '', agency: activeAgencyId });\n const [loading, setLoading] = useState(false);\n const [loadingForm, setLoadingForm] = useState(false);\n const [vendors, setVendors] = useState([]);\n const [isOpenForm, setIsOpenForm] = useState(false);\n const [isUpdateForm, setIsUpdateForm] = useState(false);\n const [vendor, setVendor] = useState(R.clone(VENDOR));\n const [isOpenDelete, setIsOpenDelete] = useState(false);\n const handleOnClickBtnSearch = () => {\n setLoading(true);\n fetchVendors(filters);\n };\n const handleOnSubmitForm = () => {\n setLoadingForm(true);\n\n if (isUpdateForm) {\n updateVendor({\n id: vendor.id,\n name: vendor.name,\n });\n } else {\n createVendor(vendor);\n }\n };\n const handleOnChangeInput = (key, value) => {\n onChangeDataHookMixin(vendor, setVendor, key, value);\n };\n const handleOnYesDelete = () => {\n setLoading(true);\n setIsOpenDelete(false);\n deleteVendor(vendor.id);\n };\n const handleOnNoDelete = () => {\n setVendor(R.clone(VENDOR));\n setIsOpenDelete(false);\n };\n const handleVendorEvent = () => {\n setIsOpenForm(false);\n setLoadingForm(false);\n setLoading(true);\n fetchVendors(filters);\n setVendor(R.clone(VENDOR));\n };\n const columnsSize = '45% 45% 10%';\n const ignoreColumns = ['id'];\n\n useEffect(() => {\n setLoading(true);\n fetchVendors(filters);\n }, []);\n\n useSimpleSubscription(OnVendorsEvent, (data) => {\n if (data) {\n setLoading(false);\n setVendors(data.vendorsList.items);\n }\n });\n\n useSimpleSubscription(OnVendorsError, (e) => {\n if (e) {\n setLoading(false);\n setLoadingForm(false);\n onErrorMixinFC(e);\n }\n });\n\n useSimpleSubscription(OnVendorCreateEvent, (data) => {\n if (data) handleVendorEvent();\n });\n\n useSimpleSubscription(OnVendorUpdateEvent, (data) => {\n if (data) {\n handleVendorEvent();\n setIsUpdateForm(false);\n }\n });\n\n useSimpleSubscription(OnVendorDeleteEvent, () => {\n fetchVendors(filters);\n setVendor(R.clone(VENDOR));\n });\n\n return (\n \n \n \n \n onChangeDataHookMixin(filters, setFilters, 'search', value)}\n placeholder=\"Search Vendors\"\n />\n \n \n setIsOpenForm(true)}\n text=\"Create Vendor\"\n />\n \n \n \n \n {TABLE_COLUMNS.map((column, index) => {\n return {column.name};\n })}\n Actions\n \n {loading ? (\n \n ) : (\n \n {(row, index) => (\n \n {Object.keys(row)\n .filter((key) => ignoreColumns.indexOf(key) === -1)\n .map((key, index) => {\n if (\n TABLE_COLUMNS[index] &&\n TABLE_COLUMNS[index].customBodyRender !== undefined\n ) {\n const { customBodyRender } = TABLE_COLUMNS[index];\n const CustomCellValue = customBodyRender(row, row[key]);\n\n return (\n \n \n \n );\n }\n\n return (\n \n {row[key]}\n \n );\n })}\n \n {\n setIsUpdateForm(true);\n setIsOpenForm(true);\n setVendor(vendorMap(vendors[index]));\n }}\n />\n {\n setVendor(row);\n setIsOpenDelete(true);\n }}\n />\n \n \n )}\n \n )}\n \n {\n setIsOpenForm(false);\n setIsUpdateForm(false);\n setVendor(R.clone(VENDOR));\n }}\n />\n \n \n \n );\n};\n\nVendorsView.propTypes = {\n activeAgencyId: PropTypes.string.isRequired,\n};\n\nexport default withSession(VendorsView);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport StyledBadge from '../../../../shared/components/ui/StyledBadge';\n\n/**\n * @param {object} props Props\n * @param {boolean} props.status status boolean\n * @returns {object} react component\n */\nexport function PhoneStatus({ status }) {\n const priority = status ? 1 : 4;\n const text = status ? 'ACTIVE' : 'INACTIVE';\n\n return {text};\n}\nPhoneStatus.propTypes = {\n status: PropTypes.bool.isRequired,\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Dialog, Button, Paragraph } from '@8base/boost';\nimport { deletePhoneNumber } from '../phone-numbers-actions';\n\n/**\n * @param {object} props Props\n * @param {boolean} props.isOpen To show or not\n * @param {Function} props.close Close callback\n * @param {string} props.id Id to delete\n * @returns {object} React componet\n *\n */\nfunction DeleteNumberModal({ isOpen, close, id }) {\n const [loading, setLoading] = useState(false);\n return (\n \n \n \n Are you sure about deleting this number?\n This action can't be undone.\n \n \n \n Cancel\n \n {\n deletePhoneNumber(id);\n setLoading(true);\n }}\n loading={loading}>\n Delete\n \n \n \n );\n}\n\nDeleteNumberModal.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n id: PropTypes.string.isRequired,\n};\n\nexport default DeleteNumberModal;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Icon, Loader } from '@8base/boost';\nimport styled from 'styled-components';\nimport { updatePhoneNumber } from '../phone-numbers-actions';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { OnPhoneNumberUpdateError, OnPhoneNumberUpdateEvent } from '../phone-numbers-events';\n\nconst Span = styled.span`\n display: flex;\n justify-content: center;\n align-items: center;\n min-width: 20px;\n`;\n/**\n *\n * @typedef {object} PhoneNumber\n * @property {{code:string,number:string}} number\n * @property {number} priority\n * @property {string} id\n */\n/**\n * @param {object} props Props\n * @param {PhoneNumber} props.number Props\n * @returns {object} React Component\n */\nfunction PhoneNumberPriority({ number }) {\n const [loading, setLoading] = useState(false);\n const { priority, id, number: phoneNumber } = number;\n const canBeUp = priority > 1;\n const canBeDown = priority < 10;\n const priorityUp = priority - 1;\n const priorityDown = priority + 1;\n\n useEventSubscription(OnPhoneNumberUpdateEvent, () => {\n setLoading(false);\n });\n useEventSubscription(OnPhoneNumberUpdateError, () => {\n setLoading(false);\n });\n if (loading) {\n return ;\n }\n return (\n <>\n {canBeDown ? (\n {\n setLoading(true);\n updatePhoneNumber(id, {\n priority: priorityDown,\n number: phoneNumber,\n });\n }}>\n \n \n ) : (\n \n )}\n {priority}\n {canBeUp ? (\n {\n setLoading(true);\n updatePhoneNumber(number.id, {\n priority: priorityUp,\n number: phoneNumber,\n });\n }}>\n \n \n ) : (\n \n )}\n >\n );\n}\n\nPhoneNumberPriority.propTypes = {\n number: PropTypes.object.isRequired,\n};\n\nexport default PhoneNumberPriority;\n","import React, { useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { Pagination, Table, Dropdown, Icon, Menu } from '@8base/boost';\nimport { usePhoneNumbersList } from '../phone-numbers-hooks';\nimport { formatPhoneNumber } from '../../../phone-calls/phone-calls-utils';\nimport { PhoneStatus } from './PhoneStatus';\nimport { TableBody, PaginationWrapper } from '../../components/Card';\nimport styled from 'styled-components';\nimport { updatePhoneNumber } from '../phone-numbers-actions';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as toast from 'shared/components/toast/Toast';\nimport DeleteNumberModal from './DeleteNumberModal';\nimport PhoneNumberPriority from './PhoneNumberPriority';\nimport {\n OnPhoneNumberDeleteError,\n OnPhoneNumberDeleteEvent,\n OnPhoneNumberUpdateError,\n OnPhoneNumberUpdateEvent,\n OnPurchasedPhoneNumbersEvent,\n} from '../phone-numbers-events';\nconst tableColumns = '80px minmax(150px,1fr) minmax(250px,1fr) minmax(150px,1fr) minmax(150px,1fr)';\nconst PAGE_SIZE = 10;\n\nconst BodyCell = styled(Table.BodyCell)`\n justify-content: center !important;\n`;\nconst HeaderCell = styled(Table.HeaderCell)`\n justify-content: center !important;\n`;\n/**\n * @param {object} props Props\n * @param {string} props.agency Agency id\n * @returns {object} React Component\n */\nfunction PhoneNumbersList({ agency }) {\n const [page, setPage] = useState(1);\n const [deleteModal, setDeleteModal] = useState('');\n const queryOffset = (page - 1) * PAGE_SIZE;\n const [menuOpen, setMenuOpen] = useState('');\n const [numbers, loading, total, refetch] = usePhoneNumbersList(agency, PAGE_SIZE, queryOffset);\n\n // to pass up in the tree the refecth function so the list can be updated when an phone number is added\n\n const openMenu = useCallback((itemId) => {\n setMenuOpen((id) => (id === itemId ? '' : itemId));\n }, []);\n\n const closeDeleteModal = useCallback(() => {\n setDeleteModal('');\n }, []);\n\n useEventSubscription(OnPurchasedPhoneNumbersEvent, (numbers) => {\n refetch();\n });\n useEventSubscription(OnPhoneNumberUpdateEvent, () => {\n toast.success('Updated successfully');\n refetch();\n });\n useEventSubscription(OnPhoneNumberUpdateError, (e) => {\n toast.error(`Failed to update ${JSON.stringify(e)}`);\n });\n\n useEventSubscription(OnPhoneNumberDeleteEvent, () => {\n toast.success('Delete successfully');\n refetch();\n closeDeleteModal();\n });\n\n useEventSubscription(OnPhoneNumberDeleteError, (e) => {\n toast.error(`Failed to delete ${JSON.stringify(e)}`);\n closeDeleteModal();\n });\n\n const shouldShowDeleteModal = deleteModal !== '';\n\n return (\n <>\n \n \n #\n Number\n Status\n Priority\n Actions\n \n \n {(item, i) => (\n \n {i + 1 + queryOffset}\n {formatPhoneNumber(`${item.number.code}${item.number.number}`)}\n \n \n \n \n \n \n \n openMenu(item.id)}>\n \n \n \n \n \n \n updatePhoneNumber(item.id, {\n status: !item.status,\n number: item.number,\n })\n }>\n {item.status ? 'Deactivate' : 'Activate'}\n \n setDeleteModal(item.id)}>Delete\n \n \n \n \n \n )}\n \n \n \n \n \n \n \n {shouldShowDeleteModal && (\n \n )}\n >\n );\n}\n\nPhoneNumbersList.defaultProps = {\n setRefetch: () => null,\n};\nPhoneNumbersList.propTypes = {\n agency: PropTypes.string.isRequired,\n};\n\nexport default PhoneNumbersList;\n","import { useState, useEffect, useCallback } from 'react';\nimport { fetchPhoneNumbersList, fetchTwilioPhoneNumbersList } from './phone-numbers-actions';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as toast from 'shared/components/toast/Toast';\nimport { fetchSession } from '../../auth/auth.actions';\nimport {\n OnPhoneNumbersListError,\n OnPhoneNumbersListEvent,\n OnTwilioPhonenumbersListError,\n OnTwilioPhonenumbersListEvent,\n} from './phone-numbers-events';\n\n/**\n * @typedef {object} PhoneNumber\n * @property {object.<{number:string,code:string}>} number Phone number object with code and number properties\n * @property {number} priority priority of the phone number\n * @property {boolean} status status active/inactive\n * @property {string} id Id of the phone\n */\n/**\n * @typedef {[Array., boolean,number]} HookState array\n * @param {string} agency Agency Id\n * @param {number} pageSize Page size\n * @param {number} queryOffset Offset\n * @returns {HookState} Hook array\n */\nexport function usePhoneNumbersList(agency, pageSize, queryOffset) {\n const [numbers, setNumbers] = useState([]);\n const [count, setCount] = useState(0);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n if (!agency) {\n return;\n }\n fetchPhoneNumbersList(agency, pageSize, queryOffset);\n }, [agency, pageSize, queryOffset]);\n const refetch = useCallback(\n (fetchPolicy = 'network-only') => {\n fetchPhoneNumbersList(agency, pageSize, queryOffset, fetchPolicy);\n fetchSession();\n },\n [agency, pageSize, queryOffset],\n );\n useEventSubscription(OnPhoneNumbersListEvent, (data) => {\n const {\n phoneNumbersList: { items, count },\n } = data;\n setLoading(false);\n setCount(count);\n setNumbers(items);\n });\n useEventSubscription(OnPhoneNumbersListError, (data) => {\n toast.error(JSON.stringify(data));\n setLoading(false);\n });\n return [numbers, loading, count, refetch];\n}\n/**\n * @typedef {object} TwilioPhoneNumber\n * @property {string} friendlyName Formated phone number (555) 555-5555\n * @property {string} phoneNumber Phone number +15555555555\n * @property {string} region Phone region NJ\n */\n/**\n * @typedef {[Array., boolean,Function]} TwilioHookState array\n * @returns {TwilioHookState} Hook state\n */\nexport function useTwilioPhoneNumbersList(type) {\n const [{ numbers, loading }, setState] = useState({\n numbers: [],\n loading: true,\n });\n\n useEffect(() => {\n console.log('FROM useTwilioPhoneNumbersList', type);\n setState((state) => ({ ...state, loading: true }));\n fetchTwilioPhoneNumbersList(null, type);\n }, [type]);\n\n const refetch = useCallback(\n (search) => {\n setState((state) => ({ ...state, loading: true }));\n fetchTwilioPhoneNumbersList(search, type);\n },\n [type],\n );\n\n useEventSubscription(OnTwilioPhonenumbersListEvent, (phoneNumbers) => {\n setState((state) => ({\n ...state,\n loading: false,\n numbers: phoneNumbers,\n }));\n });\n\n useEventSubscription(OnTwilioPhonenumbersListError, () => {\n toast.error('Error loading phone numbers');\n setState((state) => ({ ...state, loading: false }));\n });\n return [numbers, loading, refetch];\n}\n","import React, { useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, InputField, Row } from '@8base/boost';\n\n/**\n * @param {object} props Props\n * @returns {object} React component\n */\nfunction SearchBarNumbers({ search: searchAction }) {\n const [search, setSearch] = useState('');\n const handleSearchChange = useCallback(({ target }) => {\n const { value } = target;\n setSearch(value);\n }, []);\n\n return (\n \n \n searchAction(search)}>\n Search\n \n \n );\n}\n\nSearchBarNumbers.propTypes = {\n search: PropTypes.func.isRequired,\n};\n\nexport default SearchBarNumbers;\n","import React, { memo } from 'react';\nimport PropTypes from 'prop-types';\nimport { Table, Checkbox } from '@8base/boost';\nimport { ALL_PHONE_NUMBERS } from '../phone-numbers-model';\n\n/**\n * @param {object} props props\n * @param {Function} props.handleChange Handle change\n * @param {Array} props.numbers Numbers array\n * @param {Array} props.selectedNumbers Selacted Numbers array\n * @param {boolean} props.loading Loading state\n * @returns {object} React component\n */\nfunction AvailablePhoneNumberList({ handleChange, numbers, selectedNumbers, loading }) {\n const allSelected = selectedNumbers.length === numbers.length && !loading;\n return (\n \n \n \n handleChange(value, ALL_PHONE_NUMBERS)}\n />\n \n Number\n Friendly Number\n Region\n \n\n \n {(item, i) => (\n \n \n handleChange(value, item.phoneNumber)}\n checked={selectedNumbers.includes(item.phoneNumber)}\n />\n \n {item.phoneNumber}\n {item.friendlyName}\n {item.region}\n \n )}\n \n \n );\n}\nAvailablePhoneNumberList.propTypes = {\n handleChange: PropTypes.func.isRequired,\n numbers: PropTypes.arrayOf(PropTypes.object).isRequired,\n selectedNumbers: PropTypes.arrayOf(PropTypes.string).isRequired,\n loading: PropTypes.bool.isRequired,\n};\nexport default memo(AvailablePhoneNumberList);\n","export const ALL_PHONE_NUMBERS = 'ALL';\n","import gql from 'graphql-tag';\n\nexport const SubscriptionPlanItemFragment = gql`\n fragment SubscriptionPlanItemFragment on SubscriptionPlanItem {\n id\n name\n price\n initialQuantity\n stripePriceId\n description\n }\n`;\n\nexport const FETCH_SUBSCRIPTION_PLAN_ITEMS = gql`\n query FetchSubscriptionPlanItems(\n $filter: SubscriptionPlanItemFilter\n $first: Int\n $skip: Int\n $orderBy: [SubscriptionPlanItemOrderBy]\n ) {\n subscriptionPlanItemsList(filter: $filter, first: $first, skip: $skip, orderBy: $orderBy) {\n items {\n ...SubscriptionPlanItemFragment\n }\n }\n }\n ${SubscriptionPlanItemFragment}\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnSubItemFetchByName = createEvent();\n\nexport const OnSubItemFetchByNameError = createEvent();\n","import { FETCH_SUBSCRIPTION_PLAN_ITEMS } from './subscription-plan-item-queries';\nimport { OnSubItemFetchByName, OnSubItemFetchByNameError } from './subscription-plan-item-events';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport { error, log } from '@cobuildlab/pure-logger';\n\n/**\n * Fetches a subscription item by its name\n *\n * @param {string} name - The subscription item name to search\n *\n * @returns {Promise} The request result\n */\nexport const fetchSubscriptionItemByName = async (name) => {\n const client = OnApolloClient.get();\n const first = 1;\n const skip = 0;\n const filter = { name: { equals: name } };\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_SUBSCRIPTION_PLAN_ITEMS,\n variables: { first, skip, filter },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchSubscriptionItemByName', e);\n\n return OnSubItemFetchByNameError.dispatch(e);\n }\n\n log('fetchSubscriptionItemByName', response.data);\n\n return OnSubItemFetchByName.dispatch(response.data);\n};\n","export const SUBSCRIPTION_ITEMS = {\n PHONE_NUMBER: 'Phone Number',\n};\n","import React, { useCallback, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Row, Modal, Card, Icon } from '@8base/boost';\nimport { useTwilioPhoneNumbersList } from '../phone-numbers-hooks';\nimport { ALL_PHONE_NUMBERS } from '../phone-numbers-model';\nimport SearchBarNumbers from './SearchBarNumbers';\nimport AvailablePhoneNumberList from './AvailablePhoneNumberList';\nimport { parsePhoneNumber, getPhoneNumbersString } from '../phone-numbers-utils';\nimport { purchasePhoneNumbers } from '../phone-numbers-actions';\nimport { useSubscriptionItem } from '../../../subscription-plan/subscription-plan-item/subscription-plan-item-hooks';\nimport { SUBSCRIPTION_ITEMS } from '../../../subscription-plan/subscription-plan-item/subscription-plan-item-model';\nimport * as toast from 'shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { Header, CardTitle } from '../../components/Card';\nimport styled from 'styled-components';\nimport {\n OnPurchasedPhoneNumbersError,\n OnPurchasedPhoneNumbersEvent,\n} from '../phone-numbers-events';\nimport { OnApolloClient } from 'shared/session/session-events';\nimport gql from 'graphql-tag';\n\nconst { PHONE_NUMBER } = SUBSCRIPTION_ITEMS;\n\nconst Body = styled(Card.Body)`\n max-height: 60vh;\n`;\n\nconst AGENCY_STATUS_QUERY = gql`\n query agency_status($id: ID) {\n agency(id: $id) {\n twilioBusinessType\n }\n }\n`;\n/**\n * @param {object} props Props\n * @param {Function} props.close Function to close the modal\n * @param {boolean} props.isOpen Boolean to show or hide the modal\n * @returns {object} React component\n */\nfunction AddPhoneNumbers({ close, isOpen, user, agency, company }) {\n const [selectedNumbers, setSelectedNumbers] = useState([]);\n const [purchasing, setPurchasing] = useState(false);\n const { item, loading: loadingItem, error } = useSubscriptionItem(PHONE_NUMBER);\n const [phoneType, setPhoneType] = useState('Local');\n const [numbers, loading, search] = useTwilioPhoneNumbersList(phoneType);\n\n const changePhoneType = (type) => {\n console.log('PHONE TYPE CHANGED');\n if (type === 'Toll-Free') {\n setPhoneType('Toll-Free');\n } else {\n setPhoneType('Local');\n }\n };\n\n useEffect(() => {\n console.log('phoneType', phoneType);\n }, [phoneType]);\n\n useEffect(() => {\n if (error) {\n onErrorMixinFC(error);\n }\n }, [error]);\n\n const handlePhonesChange = useCallback(\n (value, number) => {\n if (number === ALL_PHONE_NUMBERS) {\n if (value) {\n const allNumbers = numbers.map((item) => item.phoneNumber);\n setSelectedNumbers(allNumbers);\n } else {\n setSelectedNumbers([]);\n }\n } else {\n if (value) {\n setSelectedNumbers((currentNumbers) => [...currentNumbers, number]);\n } else {\n // filter the current array to remove the selected number\n setSelectedNumbers((currentNumbers) => currentNumbers.filter((num) => num !== number));\n }\n }\n },\n [numbers],\n );\n const purchase = useCallback(() => {\n const parsedNumbers = selectedNumbers.map((item) => parsePhoneNumber(item));\n\n setPurchasing(true);\n purchasePhoneNumbers({ user, agency, company, item: item.id }, parsedNumbers);\n }, [selectedNumbers, user, agency, company, item]);\n\n useEventSubscription(OnPurchasedPhoneNumbersEvent, (numbers) => {\n const string = getPhoneNumbersString(numbers);\n\n toast.success(`The numbers ${string} were purchased successfully`);\n\n setPurchasing(false);\n close();\n });\n useEventSubscription(OnPurchasedPhoneNumbersError, (error) => {\n if (Array.isArray(error)) {\n const string = getPhoneNumbersString(error);\n\n toast.error(`The numbers ${string} are not available anymore`);\n } else {\n onErrorMixinFC(error);\n }\n\n setPurchasing(false);\n });\n\n return (\n <>\n \n \n \n Phone Numbers\n \n \n \n \n \n \n \n changePhoneType('Local')}>\n Local Phone Numbers\n \n changePhoneType('Toll-Free')}>\n Toll-Free Phone Numbers\n \n \n \n \n \n \n \n \n \n Cancel\n \n \n Purchase\n \n \n \n \n \n >\n );\n}\n\nAddPhoneNumbers.propTypes = {\n close: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n user: PropTypes.string.isRequired,\n agency: PropTypes.string.isRequired,\n company: PropTypes.string.isRequired,\n};\n\nexport default AddPhoneNumbers;\n","import { useState, useEffect } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchSubscriptionItemByName } from './subscription-plan-item-actions';\nimport { OnSubItemFetchByName, OnSubItemFetchByNameError } from './subscription-plan-item-events';\n\n/**\n * Hook that returns the subscription item by its name\n *\n * @param {string} itemName - The item name\n *\n * @returns {object} The hook state\n */\nexport function useSubscriptionItem(itemName) {\n const [name, setName] = useState(itemName);\n const [state, setState] = useState({\n item: null,\n loading: true,\n error: null,\n setName,\n });\n\n useEffect(() => {\n setState((state) => ({\n ...state,\n loading: true,\n }));\n\n fetchSubscriptionItemByName(name);\n }, [name]);\n\n useSubscription(\n OnSubItemFetchByName,\n ({ subscriptionPlanItemsList }) => {\n const [item] = subscriptionPlanItemsList.items;\n\n setState((state) => ({\n ...state,\n item: item,\n loading: false,\n error: null,\n }));\n },\n [],\n );\n\n useSubscription(\n OnSubItemFetchByNameError,\n (e) => {\n setState((state) => ({\n ...state,\n item: null,\n loading: false,\n error: e,\n }));\n },\n [],\n );\n\n return state;\n}\n","import React, { useState, useCallback } from 'react';\nimport { Card, Row } from '@8base/boost';\nimport { Body } from '../components/Card';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport PhoneNumbersList from './components/PhoneNumbersList';\nimport AddPhoneNumbers from './components/AddPhoneNumbers';\nimport { CreateButton } from 'shared/components';\nimport { Box } from '../../../shared/components/Box';\n\n/**\n * View of the phone numbers management in settings\n *\n * @returns {object} Phone numbers view component\n */\nexport default function PhoneNumberView() {\n const [showModal, setShowModal] = useState(false);\n const agency = useAgency();\n const [user] = useUser();\n\n const closeModal = useCallback(() => {\n setShowModal(false);\n }, []);\n\n const openModal = useCallback(() => {\n setShowModal(true);\n }, []);\n\n return (\n \n \n \n \n \n \n \n \n \n \n {showModal && (\n \n )}\n \n \n );\n}\n","import { ValidationError } from '../../../shared/errors';\nimport { isValidString } from '../../../shared/validators';\n\nexport const updateUserSignatureValidator = (data) => {\n let errorMessages = [];\n if (data.isEnableSignature && !isValidString(data.signature)) {\n errorMessages.push('Signature can not be empty.');\n }\n if (data.signature.length > 2000) {\n errorMessages.push('Very long Signature');\n }\n\n if (errorMessages.length !== 0) throw new ValidationError(errorMessages);\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnUserSignatureUpdateEvent = createEvent();\n\nexport const OnUserSignatureUpdateError = createEvent();\n\nexport const OnTestConnectEvent = createEvent();\n\nexport const OnTestConnectError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { UPDATE_USER } from '../../auth/queries';\nimport { OnApolloClient, OnSessionFetch } from '../../../shared/session/session-events';\nimport { updateUserSignatureValidator } from './email-validators';\nimport {\n OnTestConnectError,\n OnTestConnectEvent,\n OnUserSignatureUpdateError,\n OnUserSignatureUpdateEvent,\n} from './email-events';\n\n/**\n * Update user signature\n *\n * @param {object} data - the fields to update the user signature\n */\nexport const updateUserSignature = async (data) => {\n const client = OnApolloClient.get();\n const user = OnSessionFetch.get().user;\n data.id = user.id;\n let response;\n\n try {\n updateUserSignatureValidator(data);\n } catch (e) {\n error('updateUserSignature', e);\n console.log(e);\n return OnUserSignatureUpdateError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: UPDATE_USER,\n variables: { data },\n });\n } catch (e) {\n error('updateUserSignature', e);\n return OnUserSignatureUpdateError.dispatch(e);\n }\n\n log('updateUserSignature', response);\n OnUserSignatureUpdateEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Tests the connection with the give parameters\n *\n * @param {object} data - Data sent to the endpoint to test the connection\n * @param {string} type - The type of service to be tested\n *\n * @returns {Promise} The request result\n */\nexport const testConnection = async (data, type = 'inbound') => {\n let response = null;\n\n try {\n response = await fetch(\n `${process.env.REACT_APP_WORKSPACE_ENDPOINT}/webhook/email/test/${type}/connection`,\n {\n method: 'POST',\n body: JSON.stringify(data),\n },\n );\n } catch (e) {\n error('testConnection', e);\n\n return OnTestConnectError.dispatch(e);\n }\n\n if (response.status !== 200) {\n error('testConnection');\n\n return OnTestConnectError.dispatch();\n }\n\n log('testConnection');\n OnTestConnectEvent.dispatch();\n};\n","import React, { useState, useCallback } from 'react';\nimport { Button, Icon } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { testConnection } from '../../my-account/email/email-actions';\nimport * as Toast from '../../../shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\nimport { OnTestConnectError, OnTestConnectEvent } from 'modules/my-account/email/email-events';\n\n/**\n * Renders a button used to test SMTP, POP and IMAP connections\n *\n * @param {object} props - The compoment props\n * @param {object} props.data - The connection parameters\n * @param {string} props.type - Type of connection, either \"inbound\" or \"outbound\"\n *\n * @returns {React.FC} The component to render\n */\nfunction TestConnectionButton({ data, type, disabled }) {\n const [loading, setLoading] = useState();\n const [color, setColor] = useState('neutral');\n\n const handleClick = useCallback(() => {\n setLoading(true);\n setColor('neutral');\n\n testConnection(data, type);\n }, [data, type]);\n\n useEventSubscription(OnTestConnectEvent, () => {\n setLoading(false);\n setColor('success');\n\n setTimeout(() => setColor('neutral'), 5000);\n\n Toast.success('Success', `Connected successfully to client`);\n });\n\n useEventSubscription(OnTestConnectError, () => {\n setLoading(false);\n setColor('danger');\n\n setTimeout(() => setColor('neutral'), 5000);\n\n Toast.error(`The connection with the client failed`);\n });\n\n let text = 'Test Connection';\n\n if (color === 'success') {\n text = 'Success';\n } else if (color === 'danger') {\n text = 'Wrong Credentials';\n }\n\n return (\n \n {color === 'success' && }\n {color === 'danger' && }\n {text}\n \n );\n}\n\nTestConnectionButton.propTypes = {\n data: PropTypes.object.isRequired,\n type: PropTypes.string.isRequired,\n disabled: PropTypes.bool,\n};\n\nTestConnectionButton.defaultProps = {\n disabled: false,\n};\n\nexport default TestConnectionButton;\n","import gql from 'graphql-tag';\n\nexport const InboundFragment = gql`\n fragment InboundFragment on EmailInboundService {\n id\n description\n protocol\n server\n port\n connection\n username\n password\n active\n }\n`;\n\nexport const INBOUND_SERVICE_SETTINGS_QUERY = gql`\n query FetchInboundServiceSettings($first: Int, $filter: EmailInboundServiceFilter) {\n emailInboundServicesList(first: $first, filter: $filter) {\n items {\n ...InboundFragment\n }\n }\n }\n ${InboundFragment}\n`;\n\nexport const CREATE_INBOUND_SERVICE_MUTATION = gql`\n mutation CreateEmailInboundService($data: EmailInboundServiceCreateInput!) {\n emailInboundServiceCreate(data: $data) {\n ...InboundFragment\n }\n }\n ${InboundFragment}\n`;\n\nexport const UPDATE_INBOUND_SERVICE_MUTATION = gql`\n mutation UpdateEmailInboundService($data: EmailInboundServiceUpdateInput!) {\n emailInboundServiceUpdate(data: $data) {\n ...InboundFragment\n }\n }\n ${InboundFragment}\n`;\n\nexport const UPDATE_MANY_INBOUND_SERVICES = gql`\n mutation UpdateEmailInboundServices(\n $data: EmailInboundServiceUpdateByFilterInput!\n $filter: EmailInboundServiceFilter!\n ) {\n emailInboundServiceUpdateByFilter(data: $data, filter: $filter) {\n count\n }\n }\n`;\n","import gql from 'graphql-tag';\n\nexport const OutboundFragment = gql`\n fragment OutboundFragment on EmailOutboundService {\n id\n description\n server\n port\n connection\n username\n password\n active\n fallback\n }\n`;\n\nexport const QUERY_OUTBOUND_SERVICE_SETTINGS = gql`\n query FetchOutboundEmailServices($first: Int, $filter: EmailOutboundServiceFilter) {\n emailOutboundServicesList(first: $first, filter: $filter) {\n items {\n ...OutboundFragment\n }\n }\n }\n ${OutboundFragment}\n`;\n\nexport const CREATE_OUTBOUND_SERVICE_MUTATION = gql`\n mutation CreateOutboundEmailService($data: EmailOutboundServiceCreateInput!) {\n emailOutboundServiceCreate(data: $data) {\n ...OutboundFragment\n }\n }\n ${OutboundFragment}\n`;\n\nexport const DISABLE_EMAIL_SERVICES = gql`\n mutation DisableEmailServices($agency: ID!, $user: ID!) {\n emailOutboundServiceUpdateByFilter(\n filter: { user: { id: { equals: $user } }, agency: { id: { equals: $agency } } }\n data: { active: [{ set: false }] }\n ) {\n count\n }\n emailInboundServiceUpdateByFilter(\n filter: { user: { id: { equals: $user } }, agency: { id: { equals: $agency } } }\n data: { active: [{ set: false }] }\n ) {\n count\n }\n gmailServiceUpdateByFilter(\n filter: { user: { id: { equals: $user } }, agency: { id: { equals: $agency } } }\n data: { active: [{ set: false }] }\n ) {\n count\n }\n outlookServiceUpdateByFilter(\n filter: { user: { id: { equals: $user } }, agency: { id: { equals: $agency } } }\n data: { active: [{ set: false }] }\n ) {\n count\n }\n }\n`;\n\nexport const DISABLE_THIRD_PARTY_SERVICES = gql`\n mutation DisableThirdPartyServices($agency: ID!, $user: ID!) {\n gmailServiceUpdateByFilter(\n filter: { user: { id: { equals: $user } }, agency: { id: { equals: $agency } } }\n data: { active: [{ set: false }] }\n ) {\n count\n }\n outlookServiceUpdateByFilter(\n filter: { user: { id: { equals: $user } }, agency: { id: { equals: $agency } } }\n data: { active: [{ set: false }] }\n ) {\n count\n }\n }\n`;\n\nexport const UPDATE_OUTBOUND_SERVICE_MUTATION = gql`\n mutation UpdateOutboundEmailService($data: EmailOutboundServiceUpdateInput!) {\n emailOutboundServiceUpdate(data: $data) {\n ...OutboundFragment\n }\n }\n ${OutboundFragment}\n`;\n\nexport const UPDATE_MANY_OUTBOUND_SERVICES = gql`\n mutation UpdateOuboundEmailServices(\n $data: EmailOutboundServiceUpdateByFilterInput!\n $filter: EmailOutboundServiceFilter!\n ) {\n emailOutboundServiceUpdateByFilter(data: $data, filter: $filter) {\n count\n }\n }\n`;\n\nexport const FETCH_GMAIL_SERVICE = gql`\n query FetchGmailServices(\n $filter: GmailServiceFilter\n $first: Int\n $skip: Int\n $sort: [GmailServiceSort!]\n ) {\n gmailServicesList(filter: $filter, first: $first, skip: $skip, sort: $sort) {\n items {\n id\n active\n profile {\n id\n name\n email\n avatar\n }\n }\n }\n }\n`;\n\nexport const CREATE_GMAIL_SERVICE = gql`\n mutation CreateGmailService($data: GmailServiceCreateInput!) {\n gmailServiceCreate(data: $data) {\n id\n active\n profile {\n id\n name\n email\n avatar\n }\n }\n }\n`;\n\nexport const UPDATE_GMAIL_SERVICE = gql`\n mutation UpdateGmailSerivce(\n $filter: GmailServiceKeyFilter\n $data: GmailServiceUpdateInput!\n $force: Boolean\n ) {\n gmailServiceUpdate(filter: $filter, data: $data, force: $force) {\n id\n active\n profile {\n id\n name\n email\n avatar\n }\n }\n }\n`;\n\nexport const LOGOUT_FROM_GMAIL_SERVICE = gql`\n mutation LogoutFromGmailService($agency: ID!) {\n googleLogout(agency: $agency) {\n id\n active\n profile {\n id\n name\n email\n avatar\n }\n }\n }\n`;\n\nexport const FETCH_GOOGLE_AUTH_URL = gql`\n query FetchGoogleAuthUrl($agency: ID!, $from: AuthFrom!) {\n googleAuthUrl(agency: $agency, from: $from) {\n url\n }\n }\n`;\n\nexport const EXCHANGE_CODE_FOR_TOKENS = gql`\n mutation ExchangeGoogleCodeForToken($agency: ID!, $code: String!, $from: AuthFrom!) {\n googleExchangeTokens(agency: $agency, code: $code, from: $from) {\n id\n active\n name\n email\n avatar\n accessToken\n refreshToken\n }\n }\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchInboundService = createEvent();\n\nexport const OnFetchInboundServiceError = createEvent();\n\nexport const OnUpdateInboundService = createEvent();\n\nexport const OnUpdateInboundServiceError = createEvent();\n\nexport const OnDisableInboundServices = createEvent();\n\nexport const OnDisableInboundServicesError = createEvent();\n","export const CONNECTION_SECURITY_OPTIONS = [\n {\n label: 'None',\n value: 'None',\n },\n {\n label: 'TLS',\n value: 'TLS',\n },\n];\n\nexport const PROTOCOL_OPTIONS = [\n {\n label: 'POP',\n value: 'POP',\n },\n {\n label: 'IMAP',\n value: 'IMAP',\n },\n];\n","import { ValidationError } from '../../../shared/errors';\nimport { isValidString, isValidInteger } from '../../../shared/validators';\nimport { CONNECTION_SECURITY_OPTIONS, PROTOCOL_OPTIONS } from './inbound-model';\n\n/**\n * Validates the input when creating a outbound service\n *\n * @param {object} service - The service object\n * @param {string} service.id - Indicates the identifier of the service to update\n * @param {boolean} service.active - Indicates if the current configuration is active\n * @param {number} service.priority - This email service priority\n * @param {string} service.server - The service smtp server\n * @param {number} service.port - The service smtp port\n * @param {string} service.connection - The service authentication option\n * @param {string} service.username - The authentication username\n * @param {string} service.password - The authentication password\n *\n * @returns {void}\n */\nexport const updateInboundServiceValidation = (service) => {\n const errors = [];\n\n if (!isValidString(service.id)) errors.push('The outbound service identifier is not correct');\n\n if (!service.active) {\n if (errors.length > 0) throw new ValidationError(errors);\n\n return;\n }\n\n if (!isValidString(service.server)) errors.push('The server must be a valid string');\n\n if (!isValidInteger(service.port)) errors.push('The port has to be an integer bigger than zero');\n\n if (CONNECTION_SECURITY_OPTIONS.every((con) => con.value !== service.connection))\n errors.push('The connection must be a valid option');\n\n if (PROTOCOL_OPTIONS.every((con) => con.value !== service.protocol))\n errors.push('The protocol must be a valid option');\n\n if (!isValidString(service.username)) errors.push('The username must be a valid string');\n\n if (!isValidString(service.password)) errors.push('The password must be a valid string');\n\n if (errors.length > 0) throw new ValidationError(errors);\n};\n","import { createAction } from '@cobuildlab/react-simple-state';\nimport {\n INBOUND_SERVICE_SETTINGS_QUERY,\n CREATE_INBOUND_SERVICE_MUTATION,\n UPDATE_INBOUND_SERVICE_MUTATION,\n UPDATE_MANY_INBOUND_SERVICES,\n} from './inbound-queries';\nimport {\n QUERY_OUTBOUND_SERVICE_SETTINGS,\n CREATE_OUTBOUND_SERVICE_MUTATION,\n DISABLE_THIRD_PARTY_SERVICES,\n} from '../outbound/outbound-queries';\nimport {\n OnFetchInboundService,\n OnFetchInboundServiceError,\n OnUpdateInboundService,\n OnUpdateInboundServiceError,\n OnDisableInboundServices,\n OnDisableInboundServicesError,\n} from './inbound-store';\nimport { updateInboundServiceValidation } from './inbound-validation';\nimport { OnApolloClient } from '../../../shared/session/session-events';\n\n/**\n * Fetches an inbound service binded to a agency\n *\n * @param {string} agencyId - The agency id\n * @param {string} userId - The user id\n *\n * @returns {Promise} The action result\n */\nexport const fetchInboundServices = createAction(\n OnFetchInboundService,\n OnFetchInboundServiceError,\n async (agencyId, userId) => {\n const client = OnApolloClient.get();\n const first = 1;\n const filter = {\n agency: { id: { equals: agencyId } },\n user: { id: { equals: userId } },\n };\n\n const {\n data: { emailInboundServicesList },\n } = await client.query({\n query: INBOUND_SERVICE_SETTINGS_QUERY,\n fetchPolicy: 'network-only',\n variables: {\n first,\n filter,\n },\n });\n\n const {\n data: { emailOutboundServicesList },\n } = await client.query({\n query: QUERY_OUTBOUND_SERVICE_SETTINGS,\n fetchPolicy: 'network-only',\n variables: {\n first,\n filter,\n },\n });\n\n let [inbound] = emailInboundServicesList.items;\n let [outbound] = emailOutboundServicesList.items;\n\n if (!outbound) {\n await client.mutate({\n mutation: CREATE_OUTBOUND_SERVICE_MUTATION,\n variables: {\n data: {\n description: 'Example connection configuration',\n server: 'smtp.example.com',\n port: 465,\n connection: 'None',\n active: false,\n agency: { connect: { id: agencyId } },\n user: { connect: { id: userId } },\n },\n },\n });\n }\n\n if (!inbound) {\n const {\n data: { emailInboundServiceCreate },\n } = await client.mutate({\n mutation: CREATE_INBOUND_SERVICE_MUTATION,\n variables: {\n data: {\n active: false,\n description: 'Example connection configuration',\n server: 'imap.example.com',\n protocol: 'IMAP',\n port: 993,\n connection: 'TLS',\n agency: { connect: { id: agencyId } },\n user: { connect: { id: userId } },\n },\n },\n });\n\n inbound = emailInboundServiceCreate;\n }\n\n return { emailInboundService: inbound };\n },\n);\n\n/**\n * Updates the email inbound service configuration\n *\n * @param {object} data - The inbound service object to update\n * @param {string} userId - The user id\n * @param {string} agencyId - The agency id\n *\n * @returns {Promise} - The action result\n */\nexport const updateInboundService = createAction(\n OnUpdateInboundService,\n OnUpdateInboundServiceError,\n async (data, userId, agencyId) => {\n const client = OnApolloClient.get();\n\n updateInboundServiceValidation(data);\n\n await client.mutate({\n mutation: DISABLE_THIRD_PARTY_SERVICES,\n variables: {\n user: userId,\n agency: agencyId,\n },\n });\n\n const response = await client.mutate({\n mutation: UPDATE_INBOUND_SERVICE_MUTATION,\n variables: { data },\n });\n\n return response.data;\n },\n);\n\n/**\n * Disable all inbound services\n *\n * @param {string} userId - The user id\n * @param {string} agencyId - The agency id\n *\n * @returns {Promise} The request result\n */\nexport const disableInboundServices = createAction(\n OnDisableInboundServices,\n OnDisableInboundServicesError,\n async (userId, agencyId) => {\n const client = OnApolloClient.get();\n\n await client.mutate({\n mutation: DISABLE_THIRD_PARTY_SERVICES,\n variables: {\n user: userId,\n agency: agencyId,\n },\n });\n\n await client.mutate({\n mutation: UPDATE_MANY_INBOUND_SERVICES,\n variables: {\n filter: {\n user: { id: { equals: userId } },\n agency: { id: { equals: agencyId } },\n },\n data: {\n active: [{ set: false }],\n },\n },\n });\n },\n);\n","import React, { useState, useEffect } from 'react';\nimport TestConnectionButton from '../../../email/components/TestConnectionButton';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchInboundServices, updateInboundService } from '../inbound-actions';\nimport { PROTOCOL_OPTIONS, CONNECTION_SECURITY_OPTIONS } from '../inbound-model';\nimport { Box } from '../../../../shared/components/Box';\nimport {\n Card as BoostCard,\n Row as BoostRow,\n Grid,\n SelectField,\n Column,\n Form,\n Radio,\n InputField,\n Button,\n styled,\n} from '@8base/boost';\nimport {\n OnFetchInboundService,\n OnFetchInboundServiceError,\n OnUpdateInboundService,\n OnUpdateInboundServiceError,\n} from '../inbound-store';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport { useAgency } from '../../../../shared/hooks/useAgency';\nimport { useUser } from '../../../../shared/hooks/useUser';\nimport PropTypes from 'prop-types';\n\nconst Card = styled(BoostCard)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\nconst Row = styled(BoostRow)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\nconst initialForm = {\n id: null,\n active: false,\n description: '',\n protocol: 'POP',\n server: '',\n port: 0,\n connection: 'None',\n username: '',\n password: '',\n loading: false,\n};\n\nexport const InboundForm = ({ type, setType }) => {\n const [form, setForm] = useState(initialForm);\n const [loading, setLoading] = useState(true);\n const agency = useAgency();\n const [user] = useUser();\n\n useEffect(() => {\n setLoading(true);\n\n fetchInboundServices(agency.id, user.id);\n }, [agency.id, user.id]);\n\n useSubscription(\n OnFetchInboundService,\n ({ emailInboundService }) => {\n setLoading(false);\n\n setForm((prevState) => ({\n ...prevState,\n ...emailInboundService,\n }));\n\n if (emailInboundService.active) {\n setType('CUSTOM');\n }\n },\n [],\n );\n\n useSubscription(\n OnFetchInboundServiceError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnUpdateInboundService,\n ({ emailInboundServiceUpdate }) => {\n setForm((prevState) => ({\n ...prevState,\n ...emailInboundServiceUpdate,\n }));\n\n setLoading(false);\n\n toast.success('Success', 'Email inbound service updated');\n },\n [],\n );\n\n useSubscription(\n OnUpdateInboundServiceError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const handleSubmit = () => {\n setLoading(true);\n\n updateInboundService(\n {\n id: form.id,\n active: true,\n description: form.description,\n protocol: form.protocol,\n server: form.server,\n port: form.port,\n connection: form.connection,\n username: form.username,\n password: form.password,\n },\n user.id,\n agency.id,\n );\n };\n\n const isCustom = type === 'CUSTOM';\n\n return (\n \n \n e.preventDefault()}>\n \n \n \n setType('CUSTOM')} />\n \n \n \n Connection Information\n \n \n setForm({ ...form, protocol: value }),\n }}\n stretch={false}\n />\n setForm({ ...form, description: value }),\n }}\n />\n setForm({ ...form, server: value }),\n }}\n stretch\n />\n setForm({ ...form, port: value }),\n }}\n width={10}\n />\n \n \n \n \n Security and Authentication\n \n \n setForm({ ...form, connection: value }),\n }}\n stretch={false}\n />\n setForm({ ...form, username: value }),\n }}\n stretch\n />\n setForm({ ...form, password: value }),\n }}\n stretch\n />\n \n \n \n \n \n \n \n \n \n \n \n \n Save\n \n \n \n \n );\n};\n\nInboundForm.propTypes = {\n type: PropTypes.string.isRequired,\n setType: PropTypes.func.isRequired,\n};\n","import gql from 'graphql-tag';\n\nexport const FETCH_OUTLOOK_SERVICES = gql`\n query FetchOurlookServices(\n $filter: OutlookServiceFilter\n $first: Int\n $skip: Int\n $sort: [OutlookServiceSort!]\n ) {\n outlookServicesList(filter: $filter, first: $first, skip: $skip, sort: $sort) {\n count\n items {\n id\n active\n profile {\n id\n name\n email\n }\n }\n }\n }\n`;\n\nexport const CREATE_OUTLOOK_SERVICE = gql`\n mutation CreateOulookService($data: OutlookServiceCreateInput!) {\n outlookServiceCreate(data: $data) {\n id\n active\n profile {\n id\n name\n email\n }\n }\n }\n`;\n\nexport const UPDATE_OUTLOOK_SERVICE = gql`\n mutation UpdateOutlookService(\n $data: OutlookServiceUpdateInput!\n $filter: OutlookServiceKeyFilter\n ) {\n outlookServiceUpdate(data: $data, filter: $filter) {\n id\n active\n profile {\n id\n name\n email\n }\n }\n }\n`;\n\nexport const FETCH_AZURE_AUTH_URL = gql`\n query FetchAzureAuthUrl($agency: ID!, $from: AuthFrom!) {\n azureAuthUrl(agency: $agency, from: $from) {\n url\n }\n }\n`;\n\nexport const EXCHANGE_CODE_FOR_TOKENS = gql`\n mutation ExchangeOutlookCodeForTokens($agency: ID!, $code: String!, $from: AuthFrom!) {\n azureExchangeTokens(agency: $agency, code: $code, from: $from) {\n id\n active\n profile {\n id\n name\n email\n }\n }\n }\n`;\n\nexport const LOGOUT_FROM_AZURE = gql`\n mutation LogoutFromAzure($agency: ID!) {\n azureLogout(agency: $agency) {\n id\n active\n profile {\n id\n name\n email\n }\n }\n }\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnAzureAuthUrl = createEvent();\n\nexport const OnAzureAuthUrlError = createEvent();\n\nexport const OnFetchOutlookService = createEvent();\n\nexport const OnFetchOutlookServiceError = createEvent();\n\nexport const OnEnableOutlookService = createEvent();\n\nexport const OnEnableOutlookServiceError = createEvent();\n\nexport const OnExchangeOutlookCode = createEvent();\n\nexport const OnExchangeOutlookCodeError = createEvent();\n\nexport const OnAzureLogout = createEvent();\n\nexport const OnAzureLogoutError = createEvent();\n","import { createAction } from '@cobuildlab/react-simple-state';\nimport {\n CREATE_OUTLOOK_SERVICE,\n FETCH_AZURE_AUTH_URL,\n FETCH_OUTLOOK_SERVICES,\n UPDATE_OUTLOOK_SERVICE,\n EXCHANGE_CODE_FOR_TOKENS,\n LOGOUT_FROM_AZURE,\n} from './azure-queries';\nimport { DISABLE_EMAIL_SERVICES } from '../settings/outbound/outbound-queries';\nimport {\n OnAzureAuthUrl,\n OnAzureAuthUrlError,\n OnFetchOutlookService,\n OnFetchOutlookServiceError,\n OnEnableOutlookService,\n OnEnableOutlookServiceError,\n OnExchangeOutlookCode,\n OnExchangeOutlookCodeError,\n OnAzureLogout,\n OnAzureLogoutError,\n} from './azure-events';\nimport { OnApolloClient } from '../../shared/session/session-events';\n\n/**\n * Fetches the user's outlook service in the\n * specified agency\n *\n * @param {string} user - The id of the user\n * @param {string} agency - The id of the agency\n *\n * @returns {Promise} The outlook service object\n */\nexport const fetchOutlookService = createAction(\n OnFetchOutlookService,\n OnFetchOutlookServiceError,\n async (user, agency) => {\n const client = OnApolloClient.get();\n\n const {\n data: { outlookServicesList },\n } = await client.query({\n query: FETCH_OUTLOOK_SERVICES,\n fetchPolicy: 'network-only',\n variables: {\n first: 1,\n filter: {\n user: { id: { equals: user } },\n agency: { id: { equals: agency } },\n },\n },\n });\n\n let [service] = outlookServicesList.items;\n\n if (!service) {\n const {\n data: { outlookServiceCreate },\n } = await client.mutate({\n mutation: CREATE_OUTLOOK_SERVICE,\n variables: {\n data: {\n user: { connect: { id: user } },\n agency: { connect: { id: agency } },\n active: false,\n },\n },\n });\n\n service = outlookServiceCreate;\n }\n\n return { outlookService: service || null };\n },\n);\n\nexport const enableOutlookService = createAction(\n OnEnableOutlookService,\n OnEnableOutlookServiceError,\n async (id, user, agency) => {\n const client = OnApolloClient.get();\n\n await client.mutate({\n mutation: DISABLE_EMAIL_SERVICES,\n variables: {\n user,\n agency,\n },\n });\n\n const response = await client.mutate({\n mutation: UPDATE_OUTLOOK_SERVICE,\n variables: {\n filter: { id },\n data: { active: true },\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Fetches the authorization url for\n * microsoft azure services\n *\n * @param {string} agency - The agency id\n * @param {string} from - The page fetching from \"inbound\" or \"outbound\"\n *\n * @returns {Promise} The authorization url\n */\nexport const fetchAzureAuthUrl = createAction(\n OnAzureAuthUrl,\n OnAzureAuthUrlError,\n async (agency, from) => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_AZURE_AUTH_URL,\n fetchPolicy: 'network-only',\n variables: {\n agency,\n from,\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Exchanges outlook code for access and refresh tokens\n *\n * @param {string} code - The authorization code\n * @param {string} agency - The agency id\n * @param {string} from - Either \"inbound\" or \"outbound\"\n *\n * @returns {Promise} The outlook service object\n */\nexport const exchangeOutlookCode = createAction(\n OnExchangeOutlookCode,\n OnExchangeOutlookCodeError,\n async (code, agency, from) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: EXCHANGE_CODE_FOR_TOKENS,\n variables: {\n code,\n agency,\n from,\n },\n });\n\n return response.data;\n },\n);\n\nexport const logoutFromAzure = createAction(OnAzureLogout, OnAzureLogoutError, async (agency) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: LOGOUT_FROM_AZURE,\n variables: {\n agency,\n },\n });\n\n return response.data;\n});\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { MicrosoftButton } from '../../../../shared/components/MicrosoftButton';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport {\n Card as BoostCard,\n Grid,\n Radio,\n Row as BoostRow,\n InputField,\n Button,\n styled,\n} from '@8base/boost';\nimport {\n enableOutlookService,\n fetchAzureAuthUrl,\n fetchOutlookService,\n exchangeOutlookCode,\n logoutFromAzure,\n} from '../../../email/azure-actions';\nimport {\n OnAzureAuthUrl,\n OnAzureAuthUrlError,\n OnEnableOutlookService,\n OnEnableOutlookServiceError,\n OnFetchOutlookService,\n OnFetchOutlookServiceError,\n OnExchangeOutlookCode,\n OnExchangeOutlookCodeError,\n OnAzureLogoutError,\n OnAzureLogout,\n} from '../../../email/azure-events';\nimport { useAgency } from '../../../../shared/hooks/useAgency';\nimport { useUser } from '../../../../shared/hooks/useUser';\nimport { useURLQuery } from '../../../../shared/hooks/useURLQuery';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\n\nconst Card = styled(BoostCard)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\nconst Row = styled(BoostRow)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\nexport const MicrosoftServiceForm = ({ from, type, setType }) => {\n const [service, setService] = useState(null);\n const [loading, setLoading] = useState(false);\n const [redirecting, setRedirecting] = useState(false);\n const [saving, setSaving] = useState(false);\n const [exiting, setExiting] = useState(false);\n const [query] = useURLQuery();\n const agency = useAgency();\n const [user] = useUser();\n\n useEffect(() => {\n setLoading(true);\n\n if (query.code) {\n /**\n * [0] The service used either \"google\" or \"azure\"\n * [1] The agency that started the auth flow\n */\n const state = query.state.split(',');\n\n if (state[0] === 'azure') {\n exchangeOutlookCode(query.code, state[1], from);\n } else {\n fetchOutlookService(user.id, agency.id);\n }\n } else {\n fetchOutlookService(user.id, agency.id);\n }\n }, [agency, user, from, query]);\n\n useSubscription(\n OnAzureAuthUrl,\n ({ azureAuthUrl }) => {\n window.location.href = azureAuthUrl.url;\n },\n [],\n );\n\n useSubscription(\n OnAzureAuthUrlError,\n (e) => {\n setRedirecting(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnFetchOutlookService,\n ({ outlookService }) => {\n setService(outlookService);\n setLoading(false);\n\n if (outlookService && outlookService.active) {\n setType('MICROSOFT');\n }\n },\n [],\n );\n\n useSubscription(\n OnFetchOutlookServiceError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnEnableOutlookService,\n ({ outlookServiceUpdate }) => {\n setService(outlookServiceUpdate);\n setSaving(false);\n\n toast.success('Success', 'Outlook service enabled successfuly');\n },\n [],\n );\n\n useSubscription(\n OnEnableOutlookServiceError,\n (e) => {\n setSaving(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnExchangeOutlookCode,\n ({ azureExchangeTokens }) => {\n console.log('process.env.NODE_ENV', process.env.NODE_ENV);\n\n if (process.env.NODE_ENV === 'test') {\n setService(azureExchangeTokens);\n setLoading(false);\n } else {\n window.location.href = `${window.location.origin}${window.location.pathname}`;\n }\n },\n [],\n );\n\n useSubscription(\n OnExchangeOutlookCodeError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnAzureLogout,\n ({ azureLogout }) => {\n setService(azureLogout);\n setExiting(false);\n setType('NONE');\n\n toast.success('Success', 'Logged out from azure successfuly');\n },\n [setType],\n );\n\n useSubscription(\n OnAzureLogoutError,\n (e) => {\n setExiting(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const onSignIn = useCallback(() => {\n if (!loading) {\n setRedirecting(true);\n\n fetchAzureAuthUrl(agency.id, from);\n }\n }, [agency, from, loading]);\n\n const onSave = useCallback(() => {\n setSaving(true);\n\n enableOutlookService(service.id, user.id, agency.id);\n }, [service, user.id, agency.id]);\n\n const onSignOut = useCallback(() => {\n setExiting(true);\n\n logoutFromAzure(agency.id);\n }, [agency]);\n\n const isSelected = type === 'MICROSOFT';\n\n const { profile } = service || {};\n\n return (\n \n \n \n \n setType('MICROSOFT')}\n />\n \n \n \n \n \n \n \n \n \n \n \n {(loading || (service && !service.profile)) && (\n \n Sign in with Microsoft\n \n )}\n {service && service.profile && (\n <>\n \n Save\n \n \n Logout\n \n >\n )}\n \n \n \n );\n};\n\nMicrosoftServiceForm.propTypes = {\n from: PropTypes.oneOf(['inbound', 'outbound']).isRequired,\n type: PropTypes.string.isRequired,\n setType: PropTypes.func.isRequired,\n};\n","import React, { useState, useCallback } from 'react';\nimport { InboundForm } from './components/InboundForm';\n// import { GmailServiceForm } from '../outbound/components/GmailServiceForm';\nimport { MicrosoftServiceForm } from '../outbound/components/MicrosoftServiceForm';\nimport { Box } from '../../../shared/components/Box';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { disableInboundServices } from './inbound-actions';\nimport { OnDisableInboundServices, OnDisableInboundServicesError } from './inbound-store';\nimport { Card as BoostCard, Row, Grid, Text, Radio, Loader, Column, styled } from '@8base/boost';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport * as toast from '../../../shared/components/toast/Toast';\n\nconst Card = styled(BoostCard)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\nconst InboundService = () => {\n const [loading, setLoading] = useState(false);\n const [type, setType] = useState('NONE');\n const agency = useAgency();\n const [user] = useUser();\n\n const handleTypeChange = useCallback(\n (value) => {\n if (!loading) {\n setType(value);\n\n if (value === 'NONE') {\n setLoading(true);\n\n disableInboundServices(user.id, agency.id);\n }\n }\n },\n [agency, user, loading],\n );\n\n useSubscription(\n OnDisableInboundServices,\n () => {\n setLoading(false);\n\n toast.success('Success', 'Inbound services disabled completely');\n },\n [],\n );\n\n useSubscription(\n OnDisableInboundServicesError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n return (\n \n \n {/* */}\n \n \n \n \n \n \n handleTypeChange('NONE')}\n />\n \n \n \n Disabled\n {loading && }\n \n \n \n \n \n \n \n );\n};\n\nexport default InboundService;\n","import React from 'react';\nimport { Icon, Text as BoostText, Row, styled } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport PropTypes from 'prop-types';\n\nconst Text = styled(BoostText)`\n font-size: 12px !important;\n`;\n\nexport const GmailServiceItem = ({ service, selected, setSelected }) => {\n const { profile } = service;\n\n return (\n setSelected(service)}>\n \n {service.id === selected?.id && }\n \n \n {profile.name} {`<${profile.email}>`}\n \n \n \n );\n};\n\nGmailServiceItem.propTypes = {\n service: PropTypes.shape({\n id: PropTypes.string.isRequired,\n profile: PropTypes.shape({\n name: PropTypes.string.isRequired,\n email: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n selected: PropTypes.string.isRequired,\n setSelected: PropTypes.func.isRequired,\n};\n","import React from 'react';\nimport { Icon, Text as BoostText, Row, styled } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport PropTypes from 'prop-types';\n\nconst Text = styled(BoostText)`\n font-size: 12px !important;\n`;\n\nexport const OutlookServiceItem = ({ service, selected, setSelected }) => {\n const { profile } = service;\n\n return (\n setSelected(service)}>\n \n {service.id === selected?.id && }\n \n \n {profile.name} {`<${profile.email}>`}\n \n \n \n );\n};\n\nOutlookServiceItem.propTypes = {\n service: PropTypes.shape({\n id: PropTypes.string.isRequired,\n profile: PropTypes.shape({\n name: PropTypes.string.isRequired,\n email: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n selected: PropTypes.string.isRequired,\n setSelected: PropTypes.func.isRequired,\n};\n","import React from 'react';\nimport { Icon, Text as BoostText, Row, styled } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport PropTypes from 'prop-types';\n\nconst Text = styled(BoostText)`\n font-size: 12px !important;\n`;\n\nexport const OutboundServiceItem = ({ service, selected, setSelected }) => {\n return (\n setSelected(service)}>\n \n {service.id === selected?.id && }\n \n \n {service.server} {`<${service.username}>`}\n \n \n \n );\n};\n\nOutboundServiceItem.propTypes = {\n service: PropTypes.shape({\n id: PropTypes.string.isRequired,\n server: PropTypes.string.isRequired,\n username: PropTypes.string.isRequired,\n }).isRequired,\n selected: PropTypes.string.isRequired,\n setSelected: PropTypes.func.isRequired,\n};\n","import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchAvailableEmailServices, setAgencyEmailService } from '../email-actions';\nimport {\n OnFetchAvailableEmailServices,\n OnFetchAvailableEmailServicesError,\n OnSetAgencyEmailServiceError,\n} from '../email-store';\nimport { Dialog, Row, Button, useModal, Loader, styled } from '@8base/boost';\nimport { GmailServiceItem } from './GmailServiceItem';\nimport { OutlookServiceItem } from './OutlookServiceItem';\nimport { OutboundServiceItem } from './OutboundServiceItem';\nimport { Box } from '../../../shared/components/Box';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { EmailServiceTypename } from '@cobuildlab/lead-volt-share';\nimport PropTypes from 'prop-types';\n\nconst Body = styled(Dialog.Body)`\n min-height: 300px;\n`;\n\nexport const modalId = 'email-service-dialog';\n\nexport const ChooseServiceDialog = ({ agency }) => {\n const { isOpen, args, closeModal } = useModal(modalId);\n const [selected, setSelected] = useState(null);\n const [services, setServices] = useState([]);\n const [loading, setLoading] = useState(true);\n const [submitting, setSubmitting] = useState(false);\n\n const onSubmit = useCallback(() => {\n setSubmitting(true);\n\n let type = 'outbound';\n\n if (selected.__typename === EmailServiceTypename.GMAIL) {\n type = 'gmail';\n }\n\n if (selected.__typename === EmailServiceTypename.OUTLOOK) {\n type = 'outlook';\n }\n\n setAgencyEmailService(args.agencyEmailServiceId, selected.id, type);\n }, [args, selected]);\n\n useEffect(() => {\n if (isOpen && args) {\n setLoading(true);\n setSelected(args.selected);\n\n fetchAvailableEmailServices(agency);\n } else {\n setSubmitting(false);\n }\n }, [isOpen, args, agency]);\n\n useSubscription(\n OnFetchAvailableEmailServices,\n ({ agencyAvailableEmailServices }) => {\n setServices(agencyAvailableEmailServices.items);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchAvailableEmailServicesError,\n (e) => {\n onErrorMixinFC(e);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(OnSetAgencyEmailServiceError, (e) => {\n onErrorMixinFC(e);\n setLoading(false);\n });\n\n const items = useMemo(\n () =>\n services.map((service) => {\n if (service.__typename === 'GmailService') {\n return (\n \n );\n }\n\n if (service.__typename === 'OutlookService') {\n return (\n \n );\n }\n\n return (\n \n );\n }),\n [services, selected, setSelected],\n );\n\n const content = loading ? (\n \n \n \n ) : (\n items\n );\n\n return (\n \n closeModal(modalId)} />\n \n {content}\n \n \n \n \n Save\n \n \n \n \n );\n};\n\nChooseServiceDialog.propTypes = {\n agency: PropTypes.string.isRequired,\n};\n","import React from 'react';\nimport { Column, Text as BoostText, Icon, Button, styled } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport PropTypes from 'prop-types';\n\nconst Text = styled(BoostText)`\n font-size: 12px !important;\n`;\n\nexport const AgencyEmailServiceInfo = ({ service, onChange }) => {\n if (service.outlook) {\n return (\n \n \n \n {service.outlook.profile.name}\n {`<${service.outlook.profile.email}>`}\n \n Change\n \n \n \n );\n }\n\n if (service.gmail) {\n return (\n \n \n \n {service.gmail.profile.name}\n {`<${service.gmail.profile.email}>`}\n \n Change\n \n \n \n );\n }\n\n return (\n \n \n \n {service.outbound.server}\n {`<${service.outbound.username}>`}\n \n Change\n \n \n \n );\n};\n\nAgencyEmailServiceInfo.propTypes = {\n service: PropTypes.shape({\n outlook: PropTypes.shape({\n profile: PropTypes.shape({\n name: PropTypes.string,\n email: PropTypes.string.isRequired,\n }).isRequired,\n }),\n gmail: PropTypes.shape({\n profile: PropTypes.shape({\n name: PropTypes.string,\n email: PropTypes.string.isRequired,\n }).isRequired,\n }),\n outbound: PropTypes.shape({\n server: PropTypes.string.isRequired,\n username: PropTypes.string.isRequired,\n }),\n }).isRequired,\n onChange: PropTypes.func.isRequired,\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { ChooseServiceDialog, modalId } from './ChooseServiceDialog';\nimport { fetchAgencyEmailService } from '../email-actions';\nimport {\n OnFetchAgencyEmailService,\n OnFetchAgencyEmailServiceError,\n OnSetAgencyEmailService,\n} from '../email-store';\nimport { Card, Column, Row, Text, Button, Heading, useModal } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport * as toast from '../../../shared/components/toast/Toast';\nimport { AgencyEmailServiceInfo } from './AgencyEmailServiceInfo';\nimport { onErrorMixinFC } from '../../../shared/mixins';\n\nexport const AgencyEmailService = () => {\n const [loading, setLoading] = useState(true);\n const [service, setService] = useState(null);\n const { openModal, closeModal } = useModal(modalId);\n const agency = useAgency();\n\n useEffect(() => {\n setLoading(true);\n\n fetchAgencyEmailService(agency.id);\n }, [agency]);\n\n const onSelect = useCallback(() => {\n openModal(modalId, {\n agencyEmailServiceId: service.id,\n selected: service.outbound || service.gmail || service.outlook || null,\n });\n }, [service, openModal]);\n\n useSubscription(\n OnFetchAgencyEmailService,\n ({ agencyEmailService }) => {\n setService(agencyEmailService);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchAgencyEmailServiceError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnSetAgencyEmailService,\n ({ agencyEmailServiceUpdate }) => {\n setService(agencyEmailServiceUpdate);\n closeModal(modalId);\n\n toast.success('Success', 'Agency email service set successfully');\n },\n [],\n );\n\n let hasService = false;\n\n if (service) {\n hasService = service.outbound || service.gmail || service.outlook;\n }\n\n return (\n \n \n \n \n \n Default agency email service\n \n You need to select a default email service from the ones active to be used as the\n default service to send the automated emails from\n \n \n \n {hasService ? (\n \n ) : (\n \n Select\n \n )}\n \n \n \n \n );\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnGmailServiceFetch = createEvent();\n\nexport const OnGmailServiceFetchError = createEvent();\n\nexport const OnGmailServiceUpdate = createEvent();\n\nexport const OnGmailServiceUpdateError = createEvent();\n\nexport const OnGoogleAuthUrl = createEvent();\n\nexport const OnGoogleAuthUrlError = createEvent();\n\nexport const OnExchangeToken = createEvent();\n\nexport const OnExchangeTokenError = createEvent();\n\nexport const OnFetchOutboundService = createEvent();\n\nexport const OnFetchOutboundServiceError = createEvent();\n\nexport const OnUpdateOutboundService = createEvent();\n\nexport const OnUpdateOutboundServiceError = createEvent();\n\nexport const OnDisableEmailService = createEvent();\n\nexport const OnDisableEmailServiceError = createEvent();\n\nexport const OnGoogleLogoutEvent = createEvent();\n\nexport const OnGoogleLogoutEventError = createEvent();\n","export const CONNECTION_SECURITY_OPTIONS = [\n {\n label: 'None',\n value: 'None',\n },\n {\n label: 'TLS (STARTTLS)',\n value: 'TLS (STARTTLS)',\n },\n {\n label: 'SSL/TLS',\n value: 'SSL/TLS',\n },\n];\n","import { ValidationError } from '../../../shared/errors';\nimport { isValidString, isValidInteger } from '../../../shared/validators';\nimport { CONNECTION_SECURITY_OPTIONS } from './outbound-model';\n\n/**\n * Validates the input when creating a outbound service\n *\n * @param {object} service - The service object\n * @param {string} service.id - Indicates the identifier of the service to update\n * @param {boolean} service.active - Indicates if the current configuration is active\n * @param {string} service.server - The service smtp server\n * @param {number} service.port - The service smtp port\n * @param {string} service.connection - The service authentication option\n * @param {string} service.username - The authentication username\n * @param {string} service.password - The authentication password\n *\n * @returns {void}\n */\nexport const updateOutboundServiceValidation = (service) => {\n const errors = [];\n\n if (!isValidString(service.id)) errors.push('The outbound service identifier is not correct');\n\n if (!service.active) {\n if (errors.length > 0) throw new ValidationError(errors);\n\n return;\n }\n\n if (!isValidString(service.server)) errors.push('The server must be a valid string');\n\n if (!isValidInteger(service.port)) errors.push('The port has to be an integer bigger than zero');\n\n if (CONNECTION_SECURITY_OPTIONS[service.connection])\n errors.push('The connection must be a valid option');\n\n if (!isValidString(service.username)) errors.push('The username must be a valid string');\n\n if (!isValidString(service.password)) errors.push('The password must be a valid string');\n\n if (errors.length > 0) throw new ValidationError(errors);\n};\n","import { createAction } from '@cobuildlab/react-simple-state';\nimport {\n QUERY_OUTBOUND_SERVICE_SETTINGS,\n CREATE_OUTBOUND_SERVICE_MUTATION,\n UPDATE_OUTBOUND_SERVICE_MUTATION,\n FETCH_GMAIL_SERVICE,\n FETCH_GOOGLE_AUTH_URL,\n EXCHANGE_CODE_FOR_TOKENS,\n DISABLE_THIRD_PARTY_SERVICES,\n CREATE_GMAIL_SERVICE,\n UPDATE_GMAIL_SERVICE,\n DISABLE_EMAIL_SERVICES,\n UPDATE_MANY_OUTBOUND_SERVICES,\n LOGOUT_FROM_GMAIL_SERVICE,\n} from './outbound-queries';\nimport {\n INBOUND_SERVICE_SETTINGS_QUERY,\n CREATE_INBOUND_SERVICE_MUTATION,\n} from '../inbound/inbound-queries';\nimport {\n OnGmailServiceFetch,\n OnGmailServiceFetchError,\n OnGmailServiceUpdate,\n OnGmailServiceUpdateError,\n OnGoogleAuthUrl,\n OnGoogleAuthUrlError,\n OnExchangeToken,\n OnExchangeTokenError,\n OnFetchOutboundService,\n OnFetchOutboundServiceError,\n OnUpdateOutboundService,\n OnUpdateOutboundServiceError,\n OnDisableEmailService,\n OnDisableEmailServiceError,\n OnGoogleLogoutEvent,\n OnGoogleLogoutEventError,\n} from './outbound-store';\nimport { updateOutboundServiceValidation } from './outbound-validation';\nimport { OnApolloClient } from '../../../shared/session/session-events';\n\n/**\n * Fetches an outbound service binded to a agency\n *\n * @param {string} agencyId - The agency id\n * @param {string} userId - The user id\n *\n * @returns {Promise} The action result\n */\nexport const fetchOutboundServices = createAction(\n OnFetchOutboundService,\n OnFetchOutboundServiceError,\n async (agencyId, userId) => {\n const client = OnApolloClient.get();\n const first = 1;\n const filter = {\n agency: { id: { equals: agencyId } },\n user: { id: { equals: userId } },\n };\n\n const {\n data: { emailOutboundServicesList },\n } = await client.query({\n query: QUERY_OUTBOUND_SERVICE_SETTINGS,\n fetchPolicy: 'network-only',\n variables: {\n first,\n filter,\n },\n });\n\n const {\n data: { emailInboundServicesList },\n } = await client.query({\n query: INBOUND_SERVICE_SETTINGS_QUERY,\n fetchPolicy: 'network-only',\n variables: {\n first,\n filter,\n },\n });\n\n let [inbound] = emailInboundServicesList.items;\n let [outbound] = emailOutboundServicesList.items;\n\n if (!inbound) {\n await client.mutate({\n mutation: CREATE_INBOUND_SERVICE_MUTATION,\n variables: {\n data: {\n active: false,\n description: 'Example connection configuration',\n server: 'imap.example.com',\n protocol: 'IMAP',\n port: 993,\n connection: 'TLS',\n agency: { connect: { id: agencyId } },\n user: { connect: { id: userId } },\n },\n },\n });\n }\n\n if (!outbound) {\n const {\n data: { emailOutboundServiceCreate },\n } = await client.mutate({\n mutation: CREATE_OUTBOUND_SERVICE_MUTATION,\n variables: {\n data: {\n description: 'Example connection configuration',\n server: 'smtp.example.com',\n port: 465,\n connection: 'None',\n active: false,\n agency: { connect: { id: agencyId } },\n user: { connect: { id: userId } },\n },\n },\n });\n\n outbound = emailOutboundServiceCreate;\n }\n\n return { emailOutboundService: outbound };\n },\n);\n\n/**\n * Updates the email outbound service configuration\n *\n * @param {object} service - The outbound service object to update\n *\n * @returns {Promise} - The action result\n */\nexport const updateOutboundService = createAction(\n OnUpdateOutboundService,\n OnUpdateOutboundServiceError,\n async (data, userId, agencyId) => {\n const client = OnApolloClient.get();\n\n updateOutboundServiceValidation(data);\n\n await client.mutate({\n mutation: DISABLE_THIRD_PARTY_SERVICES,\n variables: {\n user: userId,\n agency: agencyId,\n },\n });\n\n const response = await client.mutate({\n mutation: UPDATE_OUTBOUND_SERVICE_MUTATION,\n variables: { data },\n });\n\n return response.data;\n },\n);\n\n/**\n * Fetches the specified user gmail configuration in the current agency\n *\n * @param {string} user - The user id\n * @param {string} agency - The agency id\n *\n * @returns {Promise} The service object\n */\nexport const fetchGmailService = createAction(\n OnGmailServiceFetch,\n OnGmailServiceFetchError,\n async (user, agency) => {\n const client = OnApolloClient.get();\n\n const first = 1;\n const filter = {\n user: { id: { equals: user } },\n agency: { id: { equals: agency } },\n };\n\n const {\n data: { gmailServicesList },\n } = await client.query({\n query: FETCH_GMAIL_SERVICE,\n fetchPolicy: 'network-only',\n variables: {\n filter,\n first,\n },\n });\n\n let [service] = gmailServicesList.items;\n\n if (!service) {\n const {\n data: { gmailServiceCreate },\n } = await client.mutate({\n mutation: CREATE_GMAIL_SERVICE,\n variables: {\n data: {\n active: false,\n user: { connect: { id: user } },\n agency: { connect: { id: agency } },\n },\n },\n });\n\n service = gmailServiceCreate;\n }\n\n return service || null;\n },\n);\n\n/**\n * Enables the gmail service\n *\n * @param {string} id - The gmail service string\n * @param {string} userId - The user id\n * @param {string} agencyId - The agency id\n *\n * @returns {Promise} The gmail service object\n */\nexport const enableGmailService = createAction(\n OnGmailServiceUpdate,\n OnGmailServiceUpdateError,\n async (id, userId, agencyId) => {\n const client = OnApolloClient.get();\n\n const filter = { id };\n const data = { active: true };\n\n await client.mutate({\n mutation: DISABLE_EMAIL_SERVICES,\n variables: {\n user: userId,\n agency: agencyId,\n },\n });\n\n const response = await client.mutate({\n mutation: UPDATE_GMAIL_SERVICE,\n variables: {\n filter,\n data,\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Fetches google authorization url\n *\n * @param {string} agency - The agency id\n *\n * @returns {Promise} The auth url\n */\nexport const fetchGoogleAuthUrl = createAction(\n OnGoogleAuthUrl,\n OnGoogleAuthUrlError,\n async (agency, from) => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_GOOGLE_AUTH_URL,\n fetchPolicy: 'network-only',\n variables: {\n agency,\n from,\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Exchanges the specified auth code for an access and refresh tokens\n *\n * @param {string} agency - The agency id\n * @param {string} code - The authorization code\n *\n * @returns {Promise} The gmailService object\n */\nexport const exchangeCodeForTokens = createAction(\n OnExchangeToken,\n OnExchangeTokenError,\n async (agency, from, code) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: EXCHANGE_CODE_FOR_TOKENS,\n variables: {\n agency,\n code,\n from,\n },\n });\n\n return response.data;\n },\n);\n\nexport const logoutFromGoogle = createAction(\n OnGoogleLogoutEvent,\n OnGoogleLogoutEventError,\n async (agency) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: LOGOUT_FROM_GMAIL_SERVICE,\n variables: {\n agency,\n },\n });\n\n return response.data;\n },\n);\n\nexport const disableOutboundServices = createAction(\n OnDisableEmailService,\n OnDisableEmailServiceError,\n async (userId, agencyId) => {\n const client = OnApolloClient.get();\n\n await client.mutate({\n mutation: DISABLE_THIRD_PARTY_SERVICES,\n variables: {\n user: userId,\n agency: agencyId,\n },\n });\n\n await client.mutate({\n mutation: UPDATE_MANY_OUTBOUND_SERVICES,\n variables: {\n filter: {\n user: { id: { equals: userId } },\n agency: { id: { equals: agencyId } },\n },\n data: {\n active: [{ set: false }],\n },\n },\n });\n },\n);\n","import React, { useState, useEffect } from 'react';\nimport TestConnectionButton from '../../../email/components/TestConnectionButton';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { updateOutboundService, fetchOutboundServices } from '../outbound-actions';\nimport { CONNECTION_SECURITY_OPTIONS } from '../outbound-model';\nimport { Box } from '../../../../shared/components/Box';\nimport {\n Card as BoostCard,\n Row as BoostRow,\n Grid,\n SelectField,\n Column,\n Switch,\n Form,\n Radio,\n InputField,\n Button,\n styled,\n} from '@8base/boost';\nimport {\n OnFetchOutboundService,\n OnFetchOutboundServiceError,\n OnUpdateOutboundService,\n OnUpdateOutboundServiceError,\n} from '../outbound-store';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport { useAgency } from '../../../../shared/hooks/useAgency';\nimport { useUser } from '../../../../shared/hooks/useUser';\nimport PropTypes from 'prop-types';\n\nconst Card = styled(BoostCard)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\nconst Row = styled(BoostRow)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\nconst initialForm = {\n id: null,\n active: false,\n description: '',\n server: '',\n port: 0,\n connection: 'None',\n username: '',\n password: '',\n fallback: false,\n};\n\nexport const OutboundForm = ({ type, setType }) => {\n const [form, setForm] = useState(initialForm);\n const [loading, setLoading] = useState(true);\n const agency = useAgency();\n const [user] = useUser();\n\n useEffect(() => {\n setLoading(true);\n fetchOutboundServices(agency.id, user.id);\n }, [agency.id, user.id]);\n\n useSubscription(\n OnFetchOutboundService,\n ({ emailOutboundService }) => {\n setLoading(false);\n\n setForm((prevState) => ({\n ...prevState,\n ...emailOutboundService,\n }));\n\n if (emailOutboundService.active) {\n setType('CUSTOM');\n }\n },\n [],\n );\n\n useSubscription(\n OnFetchOutboundServiceError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnUpdateOutboundService,\n ({ emailOutboundServiceUpdate }) => {\n setForm((prevState) => ({\n ...prevState,\n ...emailOutboundServiceUpdate,\n }));\n\n setLoading(false);\n\n toast.success('Success', 'Email outbound service updated');\n },\n [],\n );\n\n useSubscription(\n OnUpdateOutboundServiceError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const handleSubmit = () => {\n setLoading(true);\n\n updateOutboundService(\n {\n id: form.id,\n active: true,\n description: form.description,\n server: form.server,\n port: form.port,\n connection: form.connection,\n username: form.username,\n password: form.password,\n fallback: form.fallback,\n },\n user.id,\n agency.id,\n );\n };\n\n const isCustom = type === 'CUSTOM';\n\n return (\n \n \n e.preventDefault()}>\n \n \n \n setType('CUSTOM')} />\n \n \n \n Connection Information\n \n \n setForm({ ...form, description: value }),\n }}\n />\n setForm({ ...form, server: value }),\n }}\n stretch\n />\n setForm({ ...form, port: value }),\n }}\n width={10}\n />\n \n setForm({ ...form, fallback: !form.fallback })}\n />\n \n \n \n \n \n Security and Authentication\n \n \n setForm({ ...form, connection: value }),\n }}\n stretch={false}\n />\n setForm({ ...form, username: value }),\n }}\n />\n setForm({ ...form, password: value }),\n }}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n Save\n \n \n \n \n );\n};\n\nOutboundForm.propTypes = {\n type: PropTypes.string.isRequired,\n setType: PropTypes.func.isRequired,\n};\n","import React, { useCallback, useState } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { Box } from '../../../shared/components/Box';\nimport { AgencyEmailService } from '../../email/components/AgencyEmailService';\nimport { OutboundForm } from './components/OutboundForm';\n// import { GmailServiceForm } from './components/GmailServiceForm';\nimport { MicrosoftServiceForm } from './components/MicrosoftServiceForm';\nimport { disableOutboundServices } from './outbound-actions';\nimport { Card as BoostCard, Row, Loader, Text, Radio, Column, Grid, styled } from '@8base/boost';\nimport { OnDisableEmailService, OnDisableEmailServiceError } from './outbound-store';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport * as toast from '../../../shared/components/toast/Toast';\n\nconst Card = styled(BoostCard)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\n/**\n * Created the Outbound service configuration page\n *\n * @returns {React.Component} The component to render\n */\nfunction OutboundService() {\n const [type, setType] = useState('NONE');\n const [loading, setLoading] = useState(false);\n const agency = useAgency();\n const [user] = useUser();\n\n useSubscription(\n OnDisableEmailService,\n () => {\n setLoading(false);\n\n toast.success('Success', 'Outbound services disabled completely');\n },\n [],\n );\n\n useSubscription(\n OnDisableEmailServiceError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const handleTypeChange = useCallback(\n (value) => {\n if (!loading) {\n setType(value);\n\n if (value === 'NONE') {\n setLoading(true);\n\n disableOutboundServices(user.id, agency.id);\n }\n }\n },\n [agency, user, loading],\n );\n\n return (\n \n \n \n {/* */}\n \n \n \n \n \n \n handleTypeChange('NONE')}\n />\n \n \n \n Disabled\n {loading && }\n \n \n \n \n \n \n \n );\n}\n\nexport default OutboundService;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchPhoneCallSettingEvent = createEvent();\n\nexport const OnFetchPhoneCallSettingError = createEvent();\n\nexport const OnCreatePhoneCallSettingEvent = createEvent();\n\nexport const OnCreatePhoneCallSettingError = createEvent();\n\nexport const OnUpdatePhoneCallSettingEvent = createEvent();\n\nexport const OnUpdatePhoneCallSettingError = createEvent();\n","import gql from 'graphql-tag';\n\nexport const FETCH_PHONE_CALL_SETTING = gql`\n query FetchPhoneCallSettings($id: ID) {\n phoneCallSetting(id: $id) {\n id\n automaticCalls\n recordCalls\n forwardingPhoneNumber {\n code\n number\n }\n timeToForward\n campignAssineeFilter\n agency {\n id\n name\n }\n voicemail\n callCadenceConfig\n }\n }\n`;\n\nexport const FETCH_PHONE_CALL_SETTING_LIST = gql`\n query FetchPhoneCallSettingsList($filter: PhoneCallSettingFilter, $first: Int) {\n phoneCallSettingsList(filter: $filter, first: $first) {\n items {\n id\n automaticCalls\n recordCalls\n campignAssineeFilter\n timeToForward\n forwardingPhoneNumber {\n code\n number\n }\n agency {\n id\n name\n }\n voicemail\n callCadenceConfig\n }\n }\n }\n`;\n\nexport const CREATE_PHONE_CALL_SETTING = gql`\n mutation CreatePhoneCallSettings($data: PhoneCallSettingCreateInput!) {\n phoneCallSettingCreate(data: $data) {\n id\n automaticCalls\n recordCalls\n campignAssineeFilter\n timeToForward\n forwardingPhoneNumber {\n code\n number\n }\n agency {\n id\n name\n }\n callCadenceConfig\n }\n }\n`;\n\nexport const UPDATE_PHONE_CALL_SETTING = gql`\n mutation UpdatePhoneCallSetting($data: PhoneCallSettingUpdateInput!) {\n phoneCallSettingUpdate(data: $data) {\n id\n automaticCalls\n recordCalls\n campignAssineeFilter\n timeToForward\n forwardingPhoneNumber {\n code\n number\n }\n agency {\n id\n name\n }\n callCadenceConfig\n }\n }\n`;\n\nexport const QUERY_CAMPAIGNS_LIST = gql`\n query campaingList($agency: ID!, $offset: Int!, $limit: Int!) {\n campaignsList(filter: { agency: { id: { equals: $agency } } }, skip: $offset, first: $limit) {\n items {\n id\n name\n status\n automaticCalls\n priority\n agents {\n items {\n name\n }\n }\n createdAt\n }\n count\n }\n }\n`;\n","import { log, error } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../../../shared/session/session-events';\nimport {\n OnCreatePhoneCallSettingError,\n OnCreatePhoneCallSettingEvent,\n OnFetchPhoneCallSettingError,\n OnFetchPhoneCallSettingEvent,\n OnUpdatePhoneCallSettingError,\n OnUpdatePhoneCallSettingEvent,\n} from './phone-calls-settings-events';\nimport {\n FETCH_PHONE_CALL_SETTING_LIST,\n UPDATE_PHONE_CALL_SETTING,\n CREATE_PHONE_CALL_SETTING,\n} from './phone-calls-settings-queries';\n\n/**\n * Finds phone call configuration filtering by agency\n *\n * @param {string} id - The agency id to find the configuration\n *\n * @returns {Promise} The request result\n */\nexport const fetchPhoneCallSettingByAgency = async (id) => {\n const client = OnApolloClient.get();\n const filter = { agency: { id: { equals: id } } };\n const first = 1;\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_PHONE_CALL_SETTING_LIST,\n fetchPolicy: 'network-only',\n variables: { filter, first },\n });\n } catch (e) {\n error('fetchPhoneCallSettingByAgency', e);\n\n OnFetchPhoneCallSettingError.dispatch(e);\n return;\n }\n\n const { 0: configuration } = response.data.phoneCallSettingsList.items;\n\n log('fetchPhoneCallSettingByAgency', configuration);\n\n OnFetchPhoneCallSettingEvent.dispatch(configuration);\n\n return configuration;\n};\n\n/**\n * Creates a new Phone Call Configuration for the specified agency\n *\n * @param {object} config - The configuration data to store\n * @param {boolean} config.automaticCalls - Turns On/Off automatic calls\n * @param {boolean} config.recordCalls - Turns On/Off call recording\n * @param {string} config.agency - Agency related to this configuration\n *\n * @returns {Promise} Request result\n */\nexport const createPhoneCallSetting = async (config) => {\n const client = OnApolloClient.get();\n const data = {\n automaticCalls: config.automaticCalls,\n recordCalls: config.recordCalls,\n agency: { connect: { id: config.agency } },\n };\n\n let response = null;\n\n try {\n response = await client.mutate({\n mutation: CREATE_PHONE_CALL_SETTING,\n variables: { data },\n });\n } catch (e) {\n error('createPhoneCallSetting', e);\n\n OnCreatePhoneCallSettingError.dispatch(e);\n return;\n }\n\n log('createPhoneCallSetting', response.data);\n\n OnCreatePhoneCallSettingEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Updates a Phone Call Configuration object\n *\n * @param {object} config - The configuration data to store\n * @param {string} config.id - Id of the configuration to update\n * @param {boolean} config.automaticCalls - Turns On/Off automatic calls\n * @param {boolean} config.recordCalls - Turns On/Off call recording\n *\n * @returns {Promise} Request result\n */\nexport const updatePhoneCallSetting = async (config) => {\n const client = OnApolloClient.get();\n\n let response = null;\n\n try {\n response = await client.mutate({\n mutation: UPDATE_PHONE_CALL_SETTING,\n variables: { data: config },\n });\n } catch (e) {\n error('updatePhoneCallSetting', e);\n\n OnUpdatePhoneCallSettingError.dispatch(response.data);\n\n return;\n }\n\n log('updatePhoneCallSetting', response.data);\n\n OnUpdatePhoneCallSettingEvent.dispatch(response.data);\n return response.data;\n};\n","import React, { useCallback, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Table, Switch } from '@8base/boost';\nimport { PRIORITIES } from '../../../../shared/constants';\nimport { updateCampaign } from '../../../campaigns/campaigns-actions';\nimport moment from 'moment';\n\n/**\n *\n * @typedef {object} data\n * @property {string} name Name of the campaign\n * @property {string} priority Priority of the campaign\n * @property {string} createdAt Created date of the campaign\n * @property {string} id Id of the campaign\n * @property {boolean} automaticCalls if the setting if active\n * @property {object} agents Agents object\n * @property {Array} agents.items Agents array\n *\n */\n/**\n * @param {object} props props\n * @param {string} props.columns columns widths string\n * @param {data} props.data Campaign object\n * @returns {React.FC} React component\n */\nfunction CampaignListItem({ columns, data }) {\n const {\n name,\n automaticCalls,\n priority,\n id,\n createdAt,\n agents: { items: agents },\n } = data;\n const [active, setActive] = useState(automaticCalls);\n const shouldShowAgents = agents.length > 0;\n const [firstAgents, ...rest] = agents;\n const agentsText =\n shouldShowAgents && `${firstAgents?.name} ${rest.length > 0 && `& ${rest.length} more... `}`;\n\n const handleChange = useCallback(\n (value) => {\n setActive(value);\n updateCampaign(\n {\n id,\n automaticCalls: value,\n },\n false,\n );\n },\n [id],\n );\n\n return (\n \n {name}\n {PRIORITIES[priority - 1]}\n {moment(createdAt).format('MM-DD-YYYY, hh:mm a')}\n {shouldShowAgents ? agentsText : ' - '}\n \n \n \n \n );\n}\n\nCampaignListItem.propTypes = {\n columns: PropTypes.string.isRequired,\n data: PropTypes.shape({\n name: PropTypes.string,\n automaticCalls: PropTypes.bool,\n priority: PropTypes.string,\n id: PropTypes.string,\n createdAt: PropTypes.string,\n agents: PropTypes.shape({\n items: PropTypes.array,\n }),\n }).isRequired,\n};\n\nexport default CampaignListItem;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { Table, Row, Pagination } from '@8base/boost';\nimport { useList } from '../../../../shared/utils/useList';\nimport { QUERY_CAMPAIGNS_LIST } from '../phone-calls-settings/phone-calls-settings-queries';\nimport CampaignListItem from './CampaignListItem';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport * as toast from 'shared/components/toast/Toast';\nimport { OnCampaignUpdate } from 'modules/campaigns/campaign-events';\n\nconst columns = '1fr minmax(100px,130px) 1fr minmax(100px,180px) minmax(100px,180px)';\nconst pageSize = 10;\n\nconst Body = styled(Table.Body)`\n min-height: ${10 * 53}px;\n`;\n/**\n * @param {object} props props\n * @param {string} props.agency agency id\n * @returns {object} React component\n */\nfunction CampaignsList({ agency }) {\n const [page, setPage] = useState(1);\n const offset = (page - 1) * pageSize;\n\n const {\n data: { items, count },\n loading,\n } = useList('campaignsList', QUERY_CAMPAIGNS_LIST, {\n agency,\n limit: pageSize,\n offset,\n });\n useSimpleSubscription(OnCampaignUpdate, (data) => {\n if (data) {\n toast.success(`Campaign \"${data.campaignUpdate.name}\" updated successfully`);\n }\n });\n\n return (\n <>\n \n \n Name\n Priority\n Created\n Agents\n Automatic Calls\n \n \n {(item) => }\n \n \n \n \n \n \n \n >\n );\n}\n\nCampaignsList.propTypes = {\n agency: PropTypes.string.isRequired,\n};\n\nexport default CampaignsList;\n","import { useQuery } from '@apollo/react-hooks';\nimport { onErrorMixinFC } from '../mixins';\n\n/**\n *\n * @typedef {object} listOject\n * @property {object} data\n * @property {Function} refetch\n * @property {boolean} loading\n */\n/**\n *\n * A function that allows you to refetch the query and optionally pass in new variables\n *\n * @param {string} namespace the object key that returns the query\n * @param {string} query the query must be a list that returs a items array and count key\n * @param {object} variables variables\n * @returns {listOject} variables variables\n */\nexport function useList(namespace, query, variables) {\n const { data, refetch, loading } = useQuery(query, {\n variables,\n onError: (error) => {\n onErrorMixinFC(error);\n },\n });\n\n const newData = data ? data[namespace] : { items: [], count: 0 };\n\n return {\n data: newData,\n refetch,\n loading,\n };\n}\n","/**\n * Deafult state of the phone calls settings form\n * this must match the default field values in the PhoneCallSetting table\n */\nexport const INITIAL_SETTINGS = {\n loading: false,\n id: '',\n recordCalls: false,\n automaticCalls: false,\n callsDelay: 1,\n campignAssineeFilter: true,\n timeToForward: 0,\n forwardingPhoneNumber: {code: '1', number: ''},\n callCadenceConfig: {\n day1: 6,\n day2To7: 18,\n day8To30: 69,\n day31To89: 30,\n },\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport {\n Card,\n Column,\n Switch,\n Row,\n Loader,\n Heading,\n Button,\n Form,\n Grid,\n InputField,\n Input,\n Label,\n} from '@8base/boost';\nimport Field from 'shared/components/Field';\nimport {\n fetchPhoneCallSettingByAgency,\n createPhoneCallSetting,\n updatePhoneCallSetting,\n} from './phone-calls-settings/phone-calls-settings-actions';\nimport * as Toast from '../../../shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { fetchSession } from '../../auth/auth.actions';\nimport CampaignsList from './components/CampaignsList';\nimport { Body } from '../../my-account/components/Card';\nimport { OnSessionFetch } from '../../../shared/session/session-events';\nimport { INITIAL_SETTINGS } from './phone-calls-settings/phone-calls-settings-model';\nimport { Box } from '../../../shared/components/Box';\nimport { OnCreateVoiceMailMessageEvent } from 'modules/phone-calls/voice-mail-message/voice-mail-message-events';\nimport {\n OnCreatePhoneCallSettingError,\n OnCreatePhoneCallSettingEvent,\n OnFetchPhoneCallSettingError,\n OnFetchPhoneCallSettingEvent,\n OnUpdatePhoneCallSettingError,\n OnUpdatePhoneCallSettingEvent,\n} from './phone-calls-settings/phone-calls-settings-events';\n\n// const initialForm = {\n// loading: false,\n// id: '',\n// recordCalls: false,\n// automaticCalls: false,\n// };\n\n/**\n * Phone call settings view\n *\n * @returns {React.FC} The component to render\n */\nfunction PhoneCallSettings() {\n const agency = useAgency();\n const [form, setForm] = useState(INITIAL_SETTINGS);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n setLoading(true);\n\n fetchPhoneCallSettingByAgency(agency.id);\n }, [agency.id]);\n\n useSimpleSubscription(OnCreateVoiceMailMessageEvent, () =>\n Toast.success('Success', 'Voice mail message created successfully'),\n );\n\n useSimpleSubscription(OnFetchPhoneCallSettingEvent, (configuration) => {\n if (configuration) {\n console.log('configuration', configuration);\n setForm({\n ...form,\n ...configuration,\n });\n\n setLoading(false);\n } else {\n //TODO: Create a trigger after agency create to a settings record for every new agency\n createPhoneCallSetting({\n ...INITIAL_SETTINGS,\n agency: agency.id,\n });\n }\n });\n\n useSimpleSubscription(OnCreatePhoneCallSettingEvent, ({ phoneCallSettingCreate }) => {\n setLoading(false);\n setForm({\n ...form,\n ...phoneCallSettingCreate,\n });\n });\n\n useSimpleSubscription(OnUpdatePhoneCallSettingEvent, () => {\n Toast.success('Success!', 'Configuration updated successfully');\n fetchSession();\n });\n\n useSimpleSubscription(OnSessionFetch, () => {\n setForm((state) => ({ ...state, loading: false }));\n });\n\n useSimpleSubscription(OnFetchPhoneCallSettingError, onErrorMixinFC);\n\n useSimpleSubscription(OnCreatePhoneCallSettingError, onErrorMixinFC);\n\n useSimpleSubscription(OnUpdatePhoneCallSettingError, onErrorMixinFC);\n\n const handleChange = useCallback((key, value) => {\n setForm((state) => ({ ...state, [key]: value }));\n }, []);\n\n function removeTypenameRecursively(obj) {\n if (obj === null || obj === undefined) {\n return obj;\n } else if (Array.isArray(obj)) {\n return obj.map(removeTypenameRecursively);\n } else if (typeof obj === 'object') {\n const { __typename, ...rest } = obj;\n Object.keys(rest).forEach((key) => {\n rest[key] = removeTypenameRecursively(rest[key]);\n });\n return rest;\n }\n return obj;\n }\n\n const handleSubmit = useCallback(() => {\n const { loading, agency, ...data } = form;\n const cleanData = {\n ...removeTypenameRecursively(data),\n timeToForward: parseInt(data.timeToForward, 10) || 0, // Fallback to 0 if NaN\n };\n console.log('CLEAN DATA', cleanData);\n updatePhoneCallSetting(cleanData);\n\n setForm({ ...form, loading: true });\n }, [form]);\n\n const handleCadenceChange = useCallback((name, value) => {\n setForm((prevState) => ({\n ...prevState,\n callCadenceConfig: {\n ...prevState.callCadenceConfig,\n [name]: value,\n },\n }));\n }, []);\n\n const handleForwardingPhoneChange = useCallback((value) => {\n setForm((prevState) => ({\n ...prevState,\n forwardingPhoneNumber: {\n code: '1',\n number: value,\n },\n }));\n }, []);\n useEffect(() => {\n console.log('form', removeTypenameRecursively(form));\n }, [form]);\n\n if (loading) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n \n \n \n Forwarding Phone Number\n \n Incoming calls will be directed to this phone number when no agents are online\n \n\n \n null}\n options={[\n {\n label: '+1',\n value: '1',\n },\n ]}\n />\n handleForwardingPhoneChange(value)}\n />\n \n \n Seconds before forwarding call to physical phone number. (Leave at 0 to disable\n forwarding)\n \n handleChange('timeToForward', value)}\n />\n handleChange('automaticCalls', value)}\n />\n handleChange('recordCalls', value)}\n />\n handleChange('campignAssineeFilter', value)}\n />\n handleChange('voicemail', value)}\n />\n \n \n Call Cadence\n \n \n \n handleCadenceChange('day1', value),\n }}\n />\n \n \n handleCadenceChange('day2To7', value),\n }}\n />\n \n \n handleCadenceChange('day8To30', value),\n }}\n />\n \n \n handleCadenceChange('day31To89', value),\n }}\n />\n \n \n \n \n \n \n \n \n \n \n Save Configuration\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default PhoneCallSettings;\n","export const PUBLIC = 'PUBLIC';\n\nexport const PRIVATE = 'PRIVATE';\n\nexport const VOICE_MESSAGE_TYPE_OPTIONS = [\n { label: 'Public', value: PUBLIC },\n { label: 'Private', value: PRIVATE },\n];\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Table, CheckboxField, Dropdown, Icon, Menu } from '@8base/boost';\nimport AudioPlayer from 'react-h5-audio-player';\nimport { useSubscription } from '@cobuildlab/react-flux-state';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport voiceMailMessageStore, {\n UPDATE_VOICE_MAIL_MESSAGE_EVENT,\n UPDATE_VOICE_MAIL_MESSAGE_EVENT_ERROR,\n} from '../../../phone-calls/voice-mail-message/voice-mail-message-store';\nimport { updateVoiceMailMessage } from '../../../phone-calls/voice-mail-message/voice-mail-message-actions';\nimport { useUser } from '../../../../shared/hooks/useUser';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport 'react-h5-audio-player/lib/styles.css';\nimport { PRIVATE, PUBLIC } from '../../../phone-calls/voice-mail-message/voice-mail-message-model';\n\nconst PlayerCell = styled(Table.BodyCell)`\n padding-left: 0px !important;\n`;\n\nconst MenuItem = styled(Menu.Item)`\n color: ${({ danger }) => (danger ? '#FF0000' : 'rgb(50, 60, 71)')}!important;\n &:hover {\n ${({ danger }) => (danger ? '' : 'color: #3db4aa !important;')}\n }\n`;\n\n/**\n * Row item of the VoiceMailMessagesTable component\n *\n * @param {object} props - The component's prop object\n * @param {object} props.message - The voice mail message\n * @param {string} props.message.id - The id of the voice mail message\n * @param {string} props.message.name - The name of the voice mail message\n * @param {string} props.message.url - The url pointing to the voice mail audio file (.mp3 would be appended to it)\n * @param {boolean} props.message.active - Indicates if the current voice mail message is available for use\n * @param {string} props.columns - css grid layout columns property\n * @param {Function} props.onUpdate - Callback function to execute when the \"Update\" menu item is clicked\n * @param {Function} props.onDelete - Callback function to execute when the \"Delete\" menu item is clicked\n *\n * @returns {React.FC} The component to render\n */\nfunction VoiceMailMessageItem({ message, columns, onDelete, onUpdate }) {\n const [user] = useUser();\n const [active, setActive] = useState(message.active);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n setActive(message.active);\n }, [message.active]);\n\n useSubscription(\n voiceMailMessageStore,\n UPDATE_VOICE_MAIL_MESSAGE_EVENT,\n ({ voiceMailMessageUpdate }) => {\n if (message.id === voiceMailMessageUpdate.id) setLoading(false);\n },\n );\n\n useSubscription(voiceMailMessageStore, UPDATE_VOICE_MAIL_MESSAGE_EVENT_ERROR, onErrorMixinFC);\n\n const handleChange = useCallback(\n (value) => {\n setActive(value);\n setLoading(true);\n\n updateVoiceMailMessage({\n id: message.id,\n name: message.name,\n active: value,\n file: message.audio,\n });\n },\n [message.id, message.audio, message.name],\n );\n\n return (\n \n {message.name}\n \n \n \n \n \n \n \n {user.id === message.createdBy.id && (\n \n \n \n \n \n \n onUpdate(message)}>Update\n onDelete(message)} danger>\n Delete\n \n \n \n \n )}\n \n \n );\n}\n\nVoiceMailMessageItem.propTypes = {\n message: PropTypes.shape({\n id: PropTypes.string.isRequired,\n type: PropTypes.oneOf([PRIVATE, PUBLIC]).isRequired,\n name: PropTypes.string.isRequired,\n audio: PropTypes.shape({\n id: PropTypes.string.isRequired,\n filename: PropTypes.string.isRequired,\n downloadUrl: PropTypes.string.isRequired,\n }).isRequired,\n createdBy: PropTypes.shape({\n id: PropTypes.string.isRequired,\n }).isRequired,\n active: PropTypes.bool.isRequired,\n }).isRequired,\n columns: PropTypes.string.isRequired,\n onUpdate: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n};\n\nexport default VoiceMailMessageItem;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport { Button } from '@8base/boost';\nimport MicRecorder from 'mic-recorder-to-mp3';\nimport { formatSeconds } from '../../../phone-calls/phone-calls-utils';\nimport PropTypes from 'prop-types';\n\nconst recorder = new MicRecorder({\n bitRate: 128,\n});\n\n/**\n * Audio Recorded component\n *\n * @param {object} props - The component's prop object\n * @param {Function} props.onRecorded - Call back to be called when recording has finished\n *\n * @returns {React.FC} The component to render\n */\nfunction AudioRecorder({ onRecorded }) {\n const [recording, setRecording] = useState(false);\n const [loading, setLoading] = useState(false);\n const [time, setTime] = useState(0);\n\n useEffect(() => {\n return () => recorder.stop();\n }, []);\n\n const handleClick = useCallback(() => {\n if (recording) {\n setLoading(true);\n setRecording(false);\n recorder.stop();\n\n recorder.getMp3().then(([buffer, blob]) => {\n const file = new File(buffer, 'voicemail-message.mp3', {\n type: blob.type,\n lastModified: Date.now(),\n });\n\n setLoading(false);\n onRecorded(file);\n });\n } else {\n setRecording(true);\n setTime(0);\n\n recorder.start();\n }\n }, [recording, onRecorded]);\n\n useEffect(() => {\n let id = 0;\n\n if (recording) id = setInterval(() => setTime((time) => time + 1), 1000);\n\n return () => clearInterval(id);\n }, [recording]);\n\n const text = recording ? `STOP ${formatSeconds(time)}` : `Record`;\n\n return (\n \n {text}\n \n );\n}\n\nAudioRecorder.propTypes = {\n onRecorded: PropTypes.func.isRequired,\n};\n\nexport default AudioRecorder;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport { Form, Select, InputField, Column, Row, Divider, Button } from '@8base/boost';\nimport { ADMIN, MANAGER } from '../../../../shared/constants';\nimport { Padding } from '../../../../shared/components';\nimport { PrimaryBtn as ActionButton } from '../../../../shared/components/ui/buttons/PrimaryBtn';\nimport AudioRecorder from '../../phone-calls/components/AudioRecorder';\nimport AudioPlayer from 'react-h5-audio-player';\nimport 'react-h5-audio-player/lib/styles.css';\nimport styled from 'styled-components';\nimport { useUser } from '../../../../shared/hooks/useUser';\nimport {\n PRIVATE,\n PUBLIC,\n VOICE_MESSAGE_TYPE_OPTIONS,\n} from '../../../phone-calls/voice-mail-message/voice-mail-message-model';\nimport PropTypes from 'prop-types';\n\nconst Div = styled(Divider)`\n margin-top: 5px !important;\n`;\n\n/**\n * Voicemail message form component\n *\n * @param {object} props - The component's prop object\n * @param {object} props.message - The message object about to update (null if the form is going to create a new message)\n * @param {string} props.message.id - The Id of the voice mail message object\n * @param {string} props.message.name - The name of the voice mail message\n * @param {object} props.message.audio - The data of the audio file related to the message\n * @param {boolean} props.loading - The loading state of the component\n * @param {Function} props.onSubmit - Function called on submit with form values\n * @param {Function} props.onCancel - Function called on cancel button clicked\n *\n * @returns {React.FC} The component to render\n */\nfunction VoiceMailMessageForm({ message, loading, onSubmit, onCancel }) {\n const [, , roles] = useUser();\n const [name, setName] = useState(message ? message.name : '');\n const [file, setFile] = useState(message ? message.audio : null);\n const [type, setType] = useState(message ? message.type : PRIVATE);\n const [objectURL, setObjectURL] = useState(null);\n\n useEffect(() => {\n if (message) {\n setName(message.name);\n setFile(message.audio);\n setType(message.type);\n }\n }, [message]);\n\n const handleRecorded = useCallback((file) => {\n setFile(file);\n setObjectURL(URL.createObjectURL(file));\n }, []);\n\n const handleSubmit = useCallback(\n (e) => {\n e.preventDefault();\n\n const canPublish = roles.some((role) => role === MANAGER || role === ADMIN);\n\n const data = {\n name,\n file,\n type: canPublish ? type : PRIVATE,\n };\n\n if (message) {\n data.id = message.id;\n }\n\n onSubmit(data);\n },\n [message, name, file, roles, type, onSubmit],\n );\n\n const source = file !== null ? (file.downloadUrl ? file.downloadUrl : objectURL) : '';\n const canPublish = roles.some((role) => role === MANAGER || role === ADMIN);\n\n return (\n \n \n \n \n \n \n \n \n {canPublish && (\n \n )}\n \n \n \n \n \n \n \n Cancel\n \n \n {message ? 'Update Message' : 'Add Message'}\n \n \n \n \n \n );\n}\n\nVoiceMailMessageForm.propTypes = {\n message: PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n audio: PropTypes.object.isRequired,\n type: PropTypes.oneOf([PRIVATE, PUBLIC]).isRequired,\n }),\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n};\n\nVoiceMailMessageForm.defaultProps = {\n message: null,\n};\n\nexport default VoiceMailMessageForm;\n","import React, { useState, useEffect } from 'react';\nimport { Dialog } from '@8base/boost';\nimport VoiceMailMessageForm from './VoiceMailMessageForm';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport {\n createVoiceMailMessage,\n updateVoiceMailMessage,\n} from '../../../phone-calls/voice-mail-message/voice-mail-message-actions';\nimport {\n OnCreateVoiceMailMessageError,\n OnCreateVoiceMailMessageEvent,\n OnUpdateVoiceMailMessageError,\n OnUpdateVoiceMailMessageEvent,\n} from 'modules/phone-calls/voice-mail-message/voice-mail-message-events';\n\nexport const VoiceMailMessageDialog = ({ isOpen, handleOnClose, agencyId, initialMessage }) => {\n const [loading, setLoading] = useState(false);\n const [message, setMessage] = useState(initialMessage);\n\n const close = () => {\n handleOnClose();\n setLoading(false);\n setMessage(null);\n };\n\n const handleSubmit = (voiceMail) => {\n setLoading(true);\n\n if (voiceMail.id) {\n updateVoiceMailMessage(voiceMail);\n } else {\n createVoiceMailMessage(voiceMail, agencyId);\n }\n };\n\n useEffect(() => {\n setMessage(initialMessage);\n }, [initialMessage]);\n\n useEventSubscription(OnCreateVoiceMailMessageEvent, () => {\n close();\n });\n\n useEventSubscription(OnCreateVoiceMailMessageError, () => {\n setLoading(false);\n });\n\n useEventSubscription(OnUpdateVoiceMailMessageEvent, () => {\n close();\n });\n\n useEventSubscription(OnUpdateVoiceMailMessageError, () => {\n setLoading(false);\n });\n\n return (\n \n \n \n \n \n \n );\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Table, Row, Pagination } from '@8base/boost';\nimport VoiceMailMessageItem from './VoiceMailMessageItem';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport {\n fetchVoiceMailMessages,\n deleteVoiceMailMessage,\n} from '../../../phone-calls/voice-mail-message/voice-mail-message-actions';\nimport * as Toast from '../../../../shared/components/toast/Toast';\nimport { YesNoDialog } from '../../../../shared/components';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport PropTypes from 'prop-types';\nimport { VoiceMailMessageDialog } from './VoiceMailMessageDialog';\nimport { useUser } from '../../../../shared/hooks/useUser';\nimport styled from 'styled-components';\nimport {\n OnCreateVoiceMailMessageEvent,\n OnDeleteVoiceMailMessageError,\n OnDeleteVoiceMailMessageEvent,\n OnFetchVoiceMailMessagesError,\n OnFetchVoiceMailMessagesEvent,\n OnUpdateVoiceMailMessageError,\n OnUpdateVoiceMailMessageEvent,\n} from 'modules/phone-calls/voice-mail-message/voice-mail-message-events';\n\nconst Body = styled(Table.Body)`\n min-height: 400px;\n`;\n\nconst columns = 'minmax(200px, 1fr) minmax(350px, 1fr) 100px 100px';\n\n/**\n * Table of voice mail messages of a specific agency\n *\n * @param {object} props - The component's prop object\n * @param {string} props.agencyId - The agency related to the voice messages\n *\n * @returns {React.FC} The component to render\n */\nfunction VoiceMailMessagesTable({ agencyId }) {\n const [loading, setLoading] = useState(true);\n const [page, setPage] = useState(1);\n const [messages, setMessages] = useState([]);\n const [count, setCount] = useState(0);\n const [del, setDelete] = useState({ open: false, selected: null, loading: false });\n const [user, userLoading] = useUser();\n const [isOpen, setIsOpen] = useState(false);\n const [messageToUpdate, setMessageToUpdate] = useState(null);\n\n const handleOpen = () => setIsOpen(true);\n\n const handleOnClose = () => {\n setIsOpen(false);\n setMessageToUpdate(null);\n };\n\n const handleDelete = useCallback(\n (message) => {\n setDelete({ ...del, open: true, selected: message });\n },\n [del],\n );\n\n const onConfirmDelete = useCallback(() => {\n deleteVoiceMailMessage(del.selected.id);\n setDelete({ ...del, loading: true });\n }, [del]);\n\n const handleUpdate = (message) => {\n setMessageToUpdate(message);\n handleOpen();\n };\n\n const refresh = useCallback(() => {\n setLoading(true);\n\n fetchVoiceMailMessages(\n {\n agency: agencyId,\n user: [user.id, 'equals'],\n },\n page,\n );\n }, [user, page, agencyId, setLoading]);\n\n useEffect(() => {\n refresh();\n }, [refresh]);\n\n useEventSubscription(OnFetchVoiceMailMessagesEvent, ({ voiceMailMessagesList }) => {\n setLoading(false);\n setMessages(voiceMailMessagesList.items);\n setCount(voiceMailMessagesList.count);\n });\n\n useEventSubscription(OnCreateVoiceMailMessageEvent, () => {\n if (page === 1) {\n refresh();\n } else {\n setPage(1);\n }\n });\n\n useEventSubscription(OnUpdateVoiceMailMessageEvent, () => {\n Toast.success('Success', 'Voicemail message updated successfully!');\n\n if (page === 1) {\n refresh();\n } else {\n setPage(1);\n }\n });\n\n useEventSubscription(OnDeleteVoiceMailMessageEvent, () => {\n Toast.success('Success', 'Voicemail message deleted successfully!');\n\n setDelete({ ...del, selected: null, open: false, loading: false });\n\n if (page === 1) {\n refresh();\n } else {\n setPage(1);\n }\n });\n\n useEventSubscription(OnFetchVoiceMailMessagesError, onErrorMixinFC);\n\n useEventSubscription(OnUpdateVoiceMailMessageError, onErrorMixinFC);\n\n useEventSubscription(OnDeleteVoiceMailMessageError, (e) => {\n onErrorMixinFC(e);\n\n setDelete({ ...del, loading: false });\n });\n\n return (\n <>\n \n \n Name\n Play\n Active\n Action\n \n \n {(message) => (\n \n )}\n \n \n \n \n \n \n \n setDelete({ ...del, open: false, loading: false, selected: null })}\n onClose={() => setDelete({ ...del, open: false, loading: false, selected: null })}\n />\n \n >\n );\n}\n\nVoiceMailMessagesTable.propTypes = {\n agencyId: PropTypes.string.isRequired,\n};\n\nexport default VoiceMailMessagesTable;\n","import React, { useState } from 'react';\nimport { Card, Row } from '@8base/boost';\nimport VoiceMailMessagesTable from './components/VoiceMailMessagesTable';\nimport { VoiceMailMessageDialog } from './components/VoiceMailMessageDialog';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { CreateButton } from 'shared/components';\nimport { Box } from '../../../shared/components/Box';\n\n/**\n * Voice mail messages component for the settings page\n *\n * @returns {React.FC} The component to render\n */\nfunction VoiceMailMessages() {\n const agency = useAgency();\n const [isOpen, setIsOpen] = useState(false);\n const handleOpen = () => setIsOpen(true);\n\n const handleOnClose = () => setIsOpen(false);\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default VoiceMailMessages;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n padding: 2em;\n height: 100%;\n`;\n","import { Card } from '@8base/boost';\nimport styled from 'styled-components';\nimport { customScrollBar } from 'shared/css/mixins';\n\nexport const CardBody = styled(Card.Body)`\n ${customScrollBar};\n`;\n","import styled from 'styled-components';\nimport { FaRegClock, FaRegCheckCircle, FaRegTimesCircle } from 'react-icons/fa';\n\nexport const Approved = styled(FaRegCheckCircle)`\n color: #3db4aa;\n font-size: 25px;\n`;\n\nexport const Rejected = styled(FaRegTimesCircle)`\n color: var(--color-red);\n font-size: 25px;\n`;\n\nexport const Review = styled(FaRegClock)`\n color: var(--color-yellow);\n font-size: 25px;\n`;\n","export const TWILIO_TRUST_PRODUCT_STATUSES = {\n DRAFT: 'draft',\n PENDING_REVIEW: 'pending-review',\n IN_REVIEW: 'in-review',\n REJECTED: 'twilio-rejected',\n APPROVED: 'twilio-approved',\n};\n\nexport const TWILIO_MESSAGING_PRODUCT_STATUSES = {\n APPROVED: 'APPROVED',\n VERIFIED: 'VERIFIED',\n\n FAILED: 'FAILED',\n DELETION_FAILED: 'DELETION_FAILED',\n\n IN_PROGRESS: 'IN_PROGRESS',\n PENDING: 'PENDING',\n IN_REVIEW: 'IN_REVIEW',\n DELETION_PENDING: 'DELETION_PENDING',\n SUSPENDED: 'SUSPENDED',\n};\n\nexport type TwilioMessagingProductStatuses = keyof typeof TWILIO_MESSAGING_PRODUCT_STATUSES;\n","import React from 'react';\nimport { ColorRing } from 'react-loader-spinner';\nimport { Approved, Rejected, Review } from './Icons';\nimport { TWILIO_TRUST_PRODUCT_STATUSES } from '../constants';\n\n/**\n * @typedef {'draft' | 'pending-review' | 'in-review' | 'twilio-rejected' | 'twilio-approved'} TrustProductStatus\n */\n\n/**\n * @param {object} props - Component props.\n * @param {boolean} props.isLoading - Tells whether the request is loading or not.\n * @param {TrustProductStatus | boolean} [props.status] - Tells whether the product is approved or not.\n * @returns {React.ReactNode} Product status component\n */\nexport function TrustProductStatus({ isLoading, status }) {\n if (isLoading)\n return (\n \n );\n\n if (status === TWILIO_TRUST_PRODUCT_STATUSES.APPROVED || status === true) return ;\n\n if (\n status === TWILIO_TRUST_PRODUCT_STATUSES.DRAFT ||\n status === TWILIO_TRUST_PRODUCT_STATUSES.IN_REVIEW ||\n status === TWILIO_TRUST_PRODUCT_STATUSES.PENDING_REVIEW\n )\n return ;\n\n return ;\n}\n","import React from 'react';\nimport { Table, Text } from '@8base/boost';\nimport { TrustProductStatus } from './TrustProductStatus';\nimport styled from 'styled-components';\n\n/**\n * @typedef {'draft' | 'pending-review' | 'in-review' | 'twilio-rejected' | 'twilio-approved'} TrustProductStatus\n */\n\n/**\n * @typedef {object} EvaluationResultField\n * @property {string} failure_reason\n */\n\n/**\n * @typedef {object} EvaluationResult\n * @property {EvaluationResultField[]} fields\n */\n\n/**\n * @param {object} props - Component props.\n * @param {string} props.cols - Css declaration of columns number.\n * @param {string} props.title - Name of the trust product.\n * @param {TrustProductStatus} [props.status] - Trust product twilio status.\n * @param {EvaluationResult[] | string | null} props.failedEvaluationsResults - Trust product failed evaluation results.\n * @param {boolean} props.isLoading - Tells wheter the data is loaind or not.\n * @returns {React.ReactNode} props - Component props.\n */\nexport function TrustProductRegistrationRow({\n cols,\n title,\n status,\n failedEvaluationsResults,\n isLoading,\n}) {\n return (\n \n Trust\n {title}\n \n \n \n \n \n \n \n );\n}\n\nconst StyledUl = styled.ul`\n display: flex;\n flex-direction: column;\n gap: 1em;\n`;\n\n/**\n * @param {object} props - Component props.\n * @param {EvaluationResult[] | string | null} props.failedEvaluationsResults - Trust product failed evaluation results.\n * @param {TrustProductStatus} [props.status] - Trust product twilio status.\n * @returns {React.ReactNode} props - Component props.\n */\nfunction TrustProductRejectionReasons({ failedEvaluationsResults, status }) {\n if (!failedEvaluationsResults && !status) return Unexptected rejection;\n\n if (failedEvaluationsResults && Array.isArray(failedEvaluationsResults))\n return (\n \n {failedEvaluationsResults.map((evalResult) =>\n evalResult.fields.map((field) => (\n \n {field.failure_reason}\n \n )),\n )}\n \n );\n\n if (failedEvaluationsResults && typeof failedEvaluationsResults === 'string')\n return {failedEvaluationsResults};\n\n return ;\n}\n","import React from 'react';\nimport { ColorRing } from 'react-loader-spinner';\nimport { Approved, Rejected, Review } from './Icons';\nimport { TWILIO_MESSAGING_PRODUCT_STATUSES, TwilioMessagingProductStatuses } from '../constants';\n\ntype MessagingProductStatusProps = {\n isLoading: boolean;\n status?: TwilioMessagingProductStatuses | boolean;\n};\n\nexport function MessagingProductStatus({ isLoading, status }: MessagingProductStatusProps) {\n if (isLoading)\n return (\n \n );\n\n if (\n status === TWILIO_MESSAGING_PRODUCT_STATUSES.APPROVED ||\n status === TWILIO_MESSAGING_PRODUCT_STATUSES.VERIFIED ||\n status === true\n )\n return ;\n\n if (\n status === TWILIO_MESSAGING_PRODUCT_STATUSES.PENDING ||\n status === TWILIO_MESSAGING_PRODUCT_STATUSES.IN_REVIEW ||\n status === TWILIO_MESSAGING_PRODUCT_STATUSES.DELETION_PENDING ||\n status === TWILIO_MESSAGING_PRODUCT_STATUSES.IN_PROGRESS ||\n status === TWILIO_MESSAGING_PRODUCT_STATUSES.SUSPENDED\n )\n return ;\n\n return ;\n}\n","import React from 'react';\nimport { Table, Text } from '@8base/boost';\nimport { MessagingProductStatus } from './MessagingProductStatus';\nimport { TwilioMessagingProductStatuses } from '../constants';\n\ntype MessagingProductRegistrationRowProps = {\n cols: string;\n title: string;\n status?: TwilioMessagingProductStatuses | boolean;\n rejectionReason?: string;\n isLoading: boolean;\n};\n\nexport function MessagingProductRegistrationRow({\n cols,\n title,\n isLoading,\n status,\n rejectionReason,\n}: MessagingProductRegistrationRowProps): React.ReactNode {\n return (\n \n Messaging\n {title}\n \n \n \n \n \n \n \n );\n}\n\ntype RejectionReasonProps = {\n status?: TwilioMessagingProductStatuses | boolean;\n rejectionReason?: string;\n};\n\nfunction RejectionReason({ status, rejectionReason }: RejectionReasonProps) {\n if (rejectionReason) return {rejectionReason};\n\n if (!rejectionReason && !status) return Unexptected rejection;\n\n return ;\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { Table, Card } from '@8base/boost';\nimport { error as toastError, errors as toastErrors } from 'shared/components/toast/Toast';\nimport { Container } from './components/Container';\nimport { CardBody } from './components/Card';\n\nimport { getUserToken } from 'shared/helpers';\nimport { useAgency } from 'shared/hooks/useAgency';\nimport { useFetch } from 'shared/hooks/useFetch';\nimport { TrustProductRegistrationRow } from './components/TrustProductRegistrationRow';\nimport { MessagingProductRegistrationRow } from './components/MessagingProductRegistrationRow';\nimport { TableHeader } from 'shared/components';\n\nconst REACT_APP_WORKSPACE_ENDPOINT = process.env.REACT_APP_WORKSPACE_ENDPOINT;\n\n/**\n * @description Component to monitor statuses of registration for messaging and phone services\n * @returns {React.ReactNode} RegistrationStatus component.\n */\nexport default function RegistrationStatus() {\n const [token] = useState(getUserToken());\n const selectedAgency = useAgency();\n\n const cols = useMemo(() => '1fr 2fr 3fr 1fr', []);\n\n /**@type {RequestInit}*/\n const requestOptions = useMemo(\n () => ({\n method: 'GET',\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }),\n [token],\n );\n\n const telephonyProductsEndpoint = useMemo(\n () =>\n `${REACT_APP_WORKSPACE_ENDPOINT}/webhook/agencies/${selectedAgency.id}/telephony-products-status`,\n [selectedAgency.id],\n );\n\n const { data: productsData, isLoading: isLoadingProductsData, error: productsError } = useFetch(\n telephonyProductsEndpoint,\n requestOptions,\n );\n\n useEffect(() => {\n if (productsError)\n toastError(`Error fetching trust products registration data: ${productsError?.message}`);\n }, [productsError]);\n\n useEffect(() => {\n if (productsData?.errors) {\n toastErrors(productsData.errors.map((err) => err.message));\n }\n }, [productsData]);\n\n return (\n \n \n \n \n \n \n \n \n Type\n Name\n Rejection reason\n Status\n \n \n {(product) => {\n if (product.type === 'trust')\n return (\n \n );\n\n if (product.type === 'messaging')\n return (\n \n );\n }}\n \n \n \n \n \n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\ntype FetchState = {\n data: T | null;\n isLoading: boolean;\n error: Error | null;\n};\n\ntype UseFetch = FetchState & { reFetch: () => void };\n\nexport function useFetch(url: string, options?: RequestInit): UseFetch {\n const [state, setState] = useState>({\n data: null,\n isLoading: true,\n error: null,\n });\n\n const optsRef = useRef(options);\n const abortControllerRef = useRef(null);\n\n const reFetch = useCallback(() => {\n abortControllerRef.current = new AbortController();\n setState((prevState) => ({ ...prevState, error: null, isLoading: true }));\n\n fetch(url, { ...optsRef.current, signal: abortControllerRef.current.signal })\n .then((response) => response.json())\n .then((resData) => setState((prevState) => ({ ...prevState, data: resData })))\n .catch((error) => {\n if (error.name !== 'AbortError') {\n console.error(`[Error] useFetch: `, error);\n setState((prevState) => ({ ...prevState, error: error }));\n }\n })\n .finally(() => setState((prevState) => ({ ...prevState, isLoading: false })));\n }, [url]);\n\n useEffect(() => {\n reFetch();\n return () => {\n if (!abortControllerRef.current) return;\n\n abortControllerRef.current.abort();\n };\n }, [reFetch]);\n\n return { ...state, reFetch };\n}\n","export const TIMEZONE_OPTIONS = [\n {\n label: '(UTC-12:00) International Date Line West',\n value: '(UTC-12:00) International Date Line West',\n },\n {\n label: '(UTC-11:00) Coordinated Universal Time-11',\n value: '(UTC-11:00) Coordinated Universal Time-11',\n },\n { label: '(UTC-11:00) Samoa', value: '(UTC-11:00) Samoa' },\n { label: '(UTC-10:00) Hawaii', value: '(UTC-10:00) Hawaii' },\n { label: '(UTC-09:00) Alaska', value: '(UTC-09:00) Alaska' },\n { label: '(UTC-08:00) Baja California', value: '(UTC-08:00) Baja California' },\n {\n label: '(UTC-08:00) Pacific Time (US & Canada)',\n value: '(UTC-08:00) Pacific Time (US & Canada)',\n },\n { label: '(UTC-07:00) Arizona', value: '(UTC-07:00) Arizona' },\n {\n label: '(UTC-07:00) Chihuahua, La Paz, Mazatlan',\n value: '(UTC-07:00) Chihuahua, La Paz, Mazatlan',\n },\n {\n label: '(UTC-07:00) Mountain Time (US & Canada)',\n value: '(UTC-07:00) Mountain Time (US & Canada)',\n },\n { label: '(UTC-06:00) Central America', value: '(UTC-06:00) Central America' },\n {\n label: '(UTC-06:00) Central Time (US & Canada)',\n value: '(UTC-06:00) Central Time (US & Canada)',\n },\n {\n label: '(UTC-06:00) Guadalajara, Mexico City, Monterrey',\n value: '(UTC-06:00) Guadalajara, Mexico City, Monterrey',\n },\n { label: '(UTC-06:00) Saskatchewan', value: '(UTC-06:00) Saskatchewan' },\n { label: '(UTC-05:00) Bogota, Lima, Quito', value: '(UTC-05:00) Bogota, Lima, Quito' },\n {\n label: '(UTC-05:00) Eastern Time (US & Canada)',\n value: '(UTC-05:00) Eastern Time (US & Canada)',\n },\n { label: '(UTC-05:00) Indiana (East)', value: '(UTC-05:00) Indiana (East)' },\n { label: '(UTC-04:30) Caracas', value: '(UTC-04:30) Caracas' },\n { label: '(UTC-04:00) Asuncion', value: '(UTC-04:00) Asuncion' },\n { label: '(UTC-04:00) Atlantic Time (Canada)', value: '(UTC-04:00) Atlantic Time (Canada)' },\n { label: '(UTC-04:00) Cuiaba', value: '(UTC-04:00) Cuiaba' },\n {\n label: '(UTC-04:00) Georgetown, La Paz, Manaus, San Juan',\n value: '(UTC-04:00) Georgetown, La Paz, Manaus, San Juan',\n },\n { label: '(UTC-04:00) Santiago', value: '(UTC-04:00) Santiago' },\n { label: '(UTC-03:30) Newfoundland', value: '(UTC-03:30) Newfoundland' },\n { label: '(UTC-03:00) Brasilia', value: '(UTC-03:00) Brasilia' },\n { label: '(UTC-03:00) Buenos Aires', value: '(UTC-03:00) Buenos Aires' },\n { label: '(UTC-03:00) Cayenne, Fortaleza', value: '(UTC-03:00) Cayenne, Fortaleza' },\n { label: '(UTC-03:00) Greenland', value: '(UTC-03:00) Greenland' },\n { label: '(UTC-03:00) Montevideo', value: '(UTC-03:00) Montevideo' },\n {\n label: '(UTC-02:00) Coordinated Universal Time-02',\n value: '(UTC-02:00) Coordinated Universal Time-02',\n },\n { label: '(UTC-02:00) Mid-Atlantic', value: '(UTC-02:00) Mid-Atlantic' },\n { label: '(UTC-01:00) Azores', value: '(UTC-01:00) Azores' },\n { label: '(UTC-01:00) Cape Verde Is.', value: '(UTC-01:00) Cape Verde Is.' },\n { label: '(UTC) Casablanca', value: '(UTC) Casablanca' },\n { label: '(UTC) Coordinated Universal Time', value: '(UTC) Coordinated Universal Time' },\n {\n label: '(UTC) Dublin, Edinburgh, Lisbon, London',\n value: '(UTC) Dublin, Edinburgh, Lisbon, London',\n },\n { label: '(UTC) Monrovia, Reykjavik', value: '(UTC) Monrovia, Reykjavik' },\n {\n label: '(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna',\n value: '(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna',\n },\n {\n label: '(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague',\n value: '(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague',\n },\n {\n label: '(UTC+01:00) Brussels, Copenhagen, Madrid, Paris',\n value: '(UTC+01:00) Brussels, Copenhagen, Madrid, Paris',\n },\n {\n label: '(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb',\n value: '(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb',\n },\n { label: '(UTC+01:00) West Central Africa', value: '(UTC+01:00) West Central Africa' },\n { label: '(UTC+02:00) Amman', value: '(UTC+02:00) Amman' },\n {\n label: '(UTC+02:00) Athens, Bucharest, Istanbul',\n value: '(UTC+02:00) Athens, Bucharest, Istanbul',\n },\n { label: '(UTC+02:00) Beirut', value: '(UTC+02:00) Beirut' },\n { label: '(UTC+02:00) Cairo', value: '(UTC+02:00) Cairo' },\n { label: '(UTC+02:00) Damascus', value: '(UTC+02:00) Damascus' },\n { label: '(UTC+02:00) Harare, Pretoria', value: '(UTC+02:00) Harare, Pretoria' },\n {\n label: '(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius',\n value: '(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius',\n },\n { label: '(UTC+02:00) Jerusalem', value: '(UTC+02:00) Jerusalem' },\n { label: '(UTC+02:00) Minsk', value: '(UTC+02:00) Minsk' },\n { label: '(UTC+02:00) Windhoek', value: '(UTC+02:00) Windhoek' },\n { label: '(UTC+03:00) Baghdad', value: '(UTC+03:00) Baghdad' },\n { label: '(UTC+03:00) Kuwait, Riyadh', value: '(UTC+03:00) Kuwait, Riyadh' },\n {\n label: '(UTC+03:00) Moscow, St. Petersburg, Volgograd',\n value: '(UTC+03:00) Moscow, St. Petersburg, Volgograd',\n },\n { label: '(UTC+03:00) Nairobi', value: '(UTC+03:00) Nairobi' },\n { label: '(UTC+03:30) Tehran', value: '(UTC+03:30) Tehran' },\n { label: '(UTC+04:00) Abu Dhabi, Muscat', value: '(UTC+04:00) Abu Dhabi, Muscat' },\n { label: '(UTC+04:00) Baku', value: '(UTC+04:00) Baku' },\n { label: '(UTC+04:00) Port Louis', value: '(UTC+04:00) Port Louis' },\n { label: '(UTC+04:00) Tbilisi', value: '(UTC+04:00) Tbilisi' },\n { label: '(UTC+04:00) Yerevan', value: '(UTC+04:00) Yerevan' },\n { label: '(UTC+04:30) Kabul', value: '(UTC+04:30) Kabul' },\n { label: '(UTC+05:00) Ekaterinburg', value: '(UTC+05:00) Ekaterinburg' },\n { label: '(UTC+05:00) Islamabad, Karachi', value: '(UTC+05:00) Islamabad, Karachi' },\n { label: '(UTC+05:00) Tashkent', value: '(UTC+05:00) Tashkent' },\n {\n label: '(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi',\n value: '(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi',\n },\n { label: '(UTC+05:30) Sri Jayawardenepura', value: '(UTC+05:30) Sri Jayawardenepura' },\n { label: '(UTC+05:45) Kathmandu', value: '(UTC+05:45) Kathmandu' },\n { label: '(UTC+06:00) Astana', value: '(UTC+06:00) Astana' },\n { label: '(UTC+06:00) Dhaka', value: '(UTC+06:00) Dhaka' },\n { label: '(UTC+06:00) Novosibirsk', value: '(UTC+06:00) Novosibirsk' },\n { label: '(UTC+06:30) Yangon (Rangoon)', value: '(UTC+06:30) Yangon (Rangoon)' },\n { label: '(UTC+07:00) Bangkok, Hanoi, Jakarta', value: '(UTC+07:00) Bangkok, Hanoi, Jakarta' },\n { label: '(UTC+07:00) Krasnoyarsk', value: '(UTC+07:00) Krasnoyarsk' },\n {\n label: '(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi',\n value: '(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi',\n },\n { label: '(UTC+08:00) Irkutsk', value: '(UTC+08:00) Irkutsk' },\n { label: '(UTC+08:00) Kuala Lumpur, Singapore', value: '(UTC+08:00) Kuala Lumpur, Singapore' },\n { label: '(UTC+08:00) Perth', value: '(UTC+08:00) Perth' },\n { label: '(UTC+08:00) Taipei', value: '(UTC+08:00) Taipei' },\n { label: '(UTC+08:00) Ulaanbaatar', value: '(UTC+08:00) Ulaanbaatar' },\n { label: '(UTC+09:00) Osaka, Sapporo, Tokyo', value: '(UTC+09:00) Osaka, Sapporo, Tokyo' },\n { label: '(UTC+09:00) Seoul', value: '(UTC+09:00) Seoul' },\n { label: '(UTC+09:00) Yakutsk', value: '(UTC+09:00) Yakutsk' },\n { label: '(UTC+09:30) Adelaide', value: '(UTC+09:30) Adelaide' },\n { label: '(UTC+09:30) Darwin', value: '(UTC+09:30) Darwin' },\n { label: '(UTC+10:00) Brisbane', value: '(UTC+10:00) Brisbane' },\n {\n label: '(UTC+10:00) Canberra, Melbourne, Sydney',\n value: '(UTC+10:00) Canberra, Melbourne, Sydney',\n },\n { label: '(UTC+10:00) Guam, Port Moresby', value: '(UTC+10:00) Guam, Port Moresby' },\n { label: '(UTC+10:00) Hobart', value: '(UTC+10:00) Hobart' },\n { label: '(UTC+10:00) Vladivostok', value: '(UTC+10:00) Vladivostok' },\n {\n label: '(UTC+11:00) Magadan, Solomon Is., New Caledonia',\n value: '(UTC+11:00) Magadan, Solomon Is., New Caledonia',\n },\n { label: '(UTC+12:00) Auckland, Wellington', value: '(UTC+12:00) Auckland, Wellington' },\n {\n label: '(UTC+12:00) Coordinated Universal Time+12',\n value: '(UTC+12:00) Coordinated Universal Time+12',\n },\n { label: '(UTC+12:00) Fiji', value: '(UTC+12:00) Fiji' },\n {\n label: '(UTC+12:00) Petropavlovsk-Kamchatsky – Old',\n value: '(UTC+12:00) Petropavlovsk-Kamchatsky – Old',\n },\n { label: '(UTC+13:00) Nuku’alofa', value: '(UTC+13:00) Nuku’alofa' },\n];\n","import React from 'react';\nimport { Paper, Table } from '@8base/boost';\nimport PropTypes from 'prop-types';\n\nconst columns = '60% 40%';\n\ninterface IAgencyRolesTable {\n userAgencyRelation: any[];\n}\n\n/**\n * Table with every role of the user in agencies related to him\n *\n * @param props - The React component's prop object\n *\n * @returns Component\n */\nconst AgencyRolesTable: React.FC = ({ userAgencyRelation }) => {\n return (\n \n \n \n Agency\n Roles\n \n \n {(userAgency: any) => (\n \n {userAgency.agency.name}\n {userAgency.roles.join(', ')}\n \n )}\n \n \n \n );\n};\n\nAgencyRolesTable.propTypes = {\n userAgencyRelation: PropTypes.array.isRequired,\n};\n\nexport default AgencyRolesTable;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid, Paper, Table } from '@8base/boost';\n\ninterface IRoleTableProps {\n roleRelationArray: any[];\n titleHeader: string;\n userRole: string;\n}\n\n/**\n * Show user roles.\n *\n * @param props - The react component's prop object\n * @param roleRelationArray - User relationships with roles.\n * @param titleHeader - Check if it is company or agency.\n * @param userRole - Role of the user.\n *\n * @returns Table - The component to render\n */\nconst RoleTable: React.FC = ({ roleRelationArray, titleHeader, userRole }) => {\n return (\n <>\n {roleRelationArray.length > 0 ? (\n \n \n \n \n \n {titleHeader}\n Role\n \n \n {roleRelationArray.map((data) => {\n return (\n \n \n {`${titleHeader === 'Company' ? data.company.name : data.agency.name}`}\n \n {userRole}\n \n );\n })}\n \n \n \n \n \n ) : null}\n >\n );\n};\n\nRoleTable.propTypes = {\n roleRelationArray: PropTypes.array.isRequired,\n titleHeader: PropTypes.string.isRequired,\n userRole: PropTypes.string.isRequired,\n};\n\nexport { RoleTable };\n","import React, { useState, useEffect, FC, CSSProperties } from 'react';\nimport { updateUser, fetchSession } from '../../auth/auth.actions';\nimport {\n OnUserUpdateError,\n OnSessionFetch,\n OnUserUpdate,\n} from '../../../shared/session/session-events';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport styled from 'styled-components';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport {\n Card,\n Grid,\n Avatar,\n Form,\n InputField,\n SelectField,\n Dialog,\n Paragraph,\n Button,\n Row,\n Loader,\n} from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport { FileInput } from '@8base-react/file-input';\nimport { TIMEZONE_OPTIONS } from './general-model';\nimport AgencyRolesTable from './components/AgencyRolesTable';\nimport { RoleTable } from './components/RoleTable';\nimport { PrimaryBtn } from '../../../shared/components/ui/buttons/PrimaryBtn';\nimport * as toast from 'shared/components/toast/Toast';\n\nconst AvatarGridBox = styled(Grid.Box)`\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n\nconst AvatarText = styled.button`\n margin-top: 20px;\n height: 20px;\n width: 100%;\n color: #3db4aa;\n font-size: 13px;\n line-height: 18px;\n text-align: center;\n background: transparent;\n outline: none;\n cursor: pointer;\n`;\n\nconst AvatarStyle: CSSProperties = {\n width: 200,\n height: 200,\n border: '3px solid #3db4aa',\n};\nconst defaultAvatar = {\n downloadUrl: '',\n fileId: '',\n filename: '',\n public: false,\n mimetype: '',\n};\n\nexport const GeneralView: FC = () => {\n const [loading, setLoading] = useState(true);\n const [id, setId] = useState('');\n const [firstName, setFirstName] = useState('');\n const [lastName, setLastName] = useState('');\n const [email, setEmail] = useState('');\n const [timezone, setTimezone] = useState('');\n const [cellPhone, setCellPhone] = useState('');\n const [workPhone, setWorkPhone] = useState('');\n const [workPhoneExt, setWorkPhoneExt] = useState('');\n const [avatar, setAvatar] = useState(null);\n\n const [downloadUrl, setDownloadUrl] = useState('');\n\n const [adminRelation, setAdminRelation] = useState([]);\n const [userAgencyRelation, setUserAgencyRelation] = useState([]);\n\n const [isOpenUpdate, setIsOpenUpdate] = useState(false);\n const [loaderUpdate, setLoaderUpdate] = useState(false);\n\n const handleChangeFirstName = (e: any) => setFirstName(e.target.value);\n const handleChangeLastName = (e: any) => setLastName(e.target.value);\n const handleChangeEmail = (e: any) => setEmail(e.target.value);\n const handleChangeCellPhone = (e: any) => setCellPhone(e.target.value);\n const handleChangeWorkPhone = (e: any) => setWorkPhone(e.target.value);\n const handleChangeWorkPhoneExtra = (e: any) => setWorkPhoneExt(e.target.value);\n\n const handleOpenUpdate = () => setIsOpenUpdate(true);\n const handleCloseUpdate = () => setIsOpenUpdate(false);\n\n useEffect(() => {\n fetchSession();\n }, []);\n\n useSimpleSubscription(\n OnSessionFetch,\n (props) => {\n const { user } = props!;\n const { cellPhone, workPhone, workPhoneExt, timezone } = user;\n\n setId(user.id);\n setFirstName(user.firstName);\n setLastName(user.lastName);\n setEmail(user.email);\n setTimezone(timezone ? timezone : '');\n setCellPhone(cellPhone ? cellPhone : '');\n setWorkPhone(workPhone ? workPhone : '');\n setWorkPhoneExt(workPhoneExt ? workPhoneExt : '');\n setAdminRelation(user.userAdminRelation.items);\n setUserAgencyRelation(user.userAgencyUserRelation.items);\n setDownloadUrl(user.avatar !== null ? user.avatar.downloadUrl : null);\n setLoading(false);\n },\n [],\n );\n\n useSimpleSubscription(\n OnUserUpdate,\n () => {\n setLoaderUpdate(false);\n handleCloseUpdate();\n toast.success('Profile', 'Updated Successfully!');\n setLoading(true);\n fetchSession();\n },\n [handleCloseUpdate],\n );\n\n useSimpleSubscription(\n OnUserUpdateError,\n (error) => {\n setLoaderUpdate(false);\n handleCloseUpdate();\n onErrorMixinFC(error);\n },\n [handleCloseUpdate],\n );\n\n const handleSubmit = () => {\n setLoaderUpdate(true);\n\n const _Avatar = {\n fileId: avatar ? avatar.fileId : defaultAvatar.fileId,\n filename: avatar ? avatar.filename : defaultAvatar.filename,\n };\n\n const userData = {\n id,\n firstName,\n lastName,\n email,\n timezone,\n cellPhone,\n workPhone,\n workPhoneExt,\n avatar: avatar && _Avatar,\n };\n\n updateUser(userData);\n };\n\n if (loading) return ;\n\n return (\n \n \n \n \n \n \n \n {\n setDownloadUrl(picture.downloadUrl);\n setAvatar(picture);\n }}\n // value={input.field}\n maxFiles={1}>\n {({ pick }) => (\n pick({})}>Change Profile Image\n )}\n \n \n \n \n \n Personal Information\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setTimezone(value),\n }}\n options={TIMEZONE_OPTIONS}\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 Save Changes\n \n \n \n \n \n Are you sure update the changes?\n \n \n \n Cancel\n \n \n Update\n \n \n \n \n \n );\n};\n\nconst LoaderSpinner: FC = () => (\n \n \n \n);\n","import React, { useState, useEffect } from 'react';\nimport styled from 'styled-components';\nimport * as toast from 'shared/components/toast/Toast';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { updateUserSignature } from './email-actions';\nimport { Card, Loader, Row } from '@8base/boost';\nimport { RadioInputField } from 'shared/components';\nimport { PrimaryBtn } from '../../../shared/components/ui/buttons/PrimaryBtn';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { Editor } from '@tinymce/tinymce-react';\nimport { Box } from '../../../shared/components/Box';\nimport { OnUserSignatureUpdateError, OnUserSignatureUpdateEvent } from './email-events';\nimport { OnUserSignatureError, OnUserSignatureEvent } from 'modules/email/email-events';\nimport { fetchUserSignature } from 'modules/email/email-actions';\n\nconst CardBodyHeight = styled(Card.Body)`\n display: flex;\n flex-direction: column;\n min-height: 335px;\n`;\n\nconst CardFooterFlexEnd = styled(Card.Footer)`\n display: flex;\n justify-content: flex-end;\n`;\n\nconst FullHeightContainer = styled.div`\n display: grid;\n grid-template-columns: 250px 1fr;\n`;\n\nconst TitleCardBody = styled.p`\n font-size: 13px;\n font-weight: bold;\n`;\n\nconst EmailView = () => {\n const [isEnableSignature, setIsEnableSignature] = useState(false);\n const [editorState, setEditorState] = useState(/* EditorState.createEmpty() */);\n\n const [loaderComponent, setLoaderComponent] = useState(true);\n const [loaderUpdate, setLoaderUpdate] = useState(false);\n\n useEffect(() => {\n fetchUserSignature();\n }, []);\n\n const handleChangeEnableSignature = () => {\n setIsEnableSignature(!isEnableSignature);\n };\n\n useEventSubscription(OnUserSignatureUpdateEvent, () => {\n setLoaderUpdate(false);\n toast.success('Signature Successfully Updated');\n });\n\n useEventSubscription(OnUserSignatureUpdateError, (err) => {\n setLoaderUpdate(false);\n onErrorMixinFC(err);\n });\n\n useEventSubscription(OnUserSignatureEvent, (data) => {\n setIsEnableSignature(data.user.isEnableSignature ? true : false);\n if (data.user.signature !== null) {\n setEditorState(data.user.signature);\n }\n setLoaderComponent(false);\n });\n\n useEventSubscription(OnUserSignatureError, (err) => {\n console.log(err);\n onErrorMixinFC(err);\n });\n\n const handleUpdateSignature = () => {\n setLoaderUpdate(true);\n\n const data = {\n signature: editorState || '',\n isEnableSignature,\n };\n updateUserSignature(data);\n };\n\n if (loaderComponent) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n \n Email Signature\n \n \n \n \n \n setEditorState(newContent)}\n />\n \n \n \n \n \n Save Changes\n \n \n \n \n );\n};\n\nexport { EmailView };\n","import React, { useCallback } from 'react';\nimport { Table, Dropdown, Menu, Icon, Tag as BoostTag } from '@8base/boost';\nimport { DropdownBodyOnTable } from '../../../../shared/components';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst MenuItem = styled(Menu.Item)`\n color: ${({ danger }) => (danger ? '#FF0000' : 'rgb(50, 60, 71)')}!important;\n &:hover {\n ${({ danger }) => (danger ? '' : 'color: #3db4aa !important;')}\n }\n`;\n\nconst Roles = styled(Table.BodyCell)`\n word-break: break-word !important;\n`;\n\nconst Tag = styled(BoostTag)`\n ${(props) => {\n switch (props.status) {\n case 'active':\n return `\n color: #3DB4AA !important;\n background-color: rgba(61, 180, 170, .1) !important;\n border-color: rgba(61, 180, 170, .4) !important;\n `;\n case 'invited':\n return `\n color: #62ABFE !important;\n background-color: rgba(98, 171, 254, .1) !important;\n border-color: rgba(98, 171, 254, .4) !important;\n `;\n case 'inactive':\n return `\n color: #FF0606 !important;\n background-color: rgba(255, 6, 6, .1) !important;\n border-color: rgba(255, 6, 6, .4) !important;\n `;\n default:\n return `\n color: #3DB4AA !important;\n background-color: rgba(61, 180, 170, .1) !important;\n border-color: rgba(61, 180, 170, .4) !important;\n `;\n }\n }}\n`;\n\n/**\n * User table row compnent\n *\n * @param {object} props - The component's prop object\n * @param {number} props.index - The number of the row in the table\n * @param {object} props.user - The user object to display the data from\n * @param {Function} props.onUpdate - Callback that is triggered when the update button is clicked\n * @param {Function} props.onDelete - Callback that is triggered when the delete button is clicked\n *\n * @returns {React.FC} The component to render\n */\nfunction UsersTableRow({ index, user, onUpdate, onDelete }) {\n const {\n 0: { roles },\n } = user.userAgencyUserRelation.items;\n const [admin] = user.userAdminRelation.items;\n\n const handleUpdate = useCallback(\n (callback) => {\n onUpdate(user);\n callback();\n },\n [user, onUpdate],\n );\n\n const handleDelete = useCallback(\n (callback) => {\n onDelete(user);\n callback();\n },\n [user, onDelete],\n );\n\n return (\n <>\n {index}\n \n {user.firstName} {user.lastName}\n \n {user.email}\n \n {roles.join(', ')} {admin ? ', ADMIN' : ''}\n \n \n {user.status}\n \n \n \n \n \n \n \n \n {({ closeDropdown }) => (\n \n handleUpdate(closeDropdown)}>Edit Details\n handleDelete(closeDropdown)}>\n Delete\n \n \n )}\n \n \n \n >\n );\n}\n\nUsersTableRow.propTypes = {\n index: PropTypes.number.isRequired,\n user: PropTypes.shape({\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n email: PropTypes.string.isRequired,\n roles: PropTypes.array.isRequired,\n status: PropTypes.array.isRequired,\n userAgencyUserRelation: PropTypes.shape({\n items: PropTypes.array.isRequired,\n }).isRequired,\n userAdminRelation: PropTypes.shape({\n items: PropTypes.array.isRequired,\n }).isRequired,\n }).isRequired,\n onUpdate: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n};\n\nexport default UsersTableRow;\n","import gql from 'graphql-tag';\n\nexport const AGENCY_USERS_LIST = gql`\n query FetchAgencyUsers($id: ID, $first: Int, $skip: Int) {\n usersList(\n filter: { userAgencyUserRelation: { some: { agency: { id: { equals: $id } } } } }\n first: $first\n skip: $skip\n orderBy: createdAt_DESC\n ) {\n count\n items {\n id\n firstName\n lastName\n email\n status\n userAgencyUserRelation(filter: { agency: { id: { equals: $id } } }) {\n items {\n id\n roles\n }\n }\n userAdminRelation(\n filter: { company: { agencyCompanyRelation: { some: { id: { equals: $id } } } } }\n ) {\n items {\n company {\n id\n name\n }\n }\n }\n }\n }\n }\n`;\n\nexport const UPDATE_USER_AGENCY_ROLES = gql`\n mutation UpdateUserAgencyRole($data: AgencyUserUpdateInput!) {\n agencyUserUpdate(data: $data) {\n id\n roles\n }\n }\n`;\n\nexport const REMOVE_USER_FROM_AGENCY = gql`\n mutation DeleteUserAgency($data: AgencyUserDeleteInput) {\n agencyUserDelete(data: $data) {\n success\n }\n }\n`;\nexport const DELETE_AGENT = gql`\n mutation deleteAgent($agent: AgentDeleteInput) {\n agentDelete(data: $agent) {\n success\n }\n }\n`;\n\nexport const DELETE_MANAGER = gql`\n mutation deleteManager($manager: ManagerDeleteInput) {\n managerDelete(data: $manager) {\n success\n }\n }\n`;\n\nexport const UPDATE_AGENT = gql`\n mutation editAgentToManager($userId: ID, $agencyId: ID, $agentId: AgentDeleteInput) {\n agentDelete(data: $agentId) {\n success\n }\n\n managerCreate(\n data: { user: { connect: { id: $userId } }, agency: { connect: { id: $agencyId } } }\n ) {\n id\n }\n }\n`;\n\nexport const UPDATE_MANAGER = gql`\n mutation editManagerToAgent($userId: ID, $agencyId: ID, $managerId: ManagerDeleteInput) {\n managerDelete(data: $managerId) {\n success\n }\n\n agentCreate(\n data: { user: { connect: { id: $userId } }, agency: { connect: { id: $agencyId } } }\n ) {\n id\n }\n }\n`;\n","import { ValidationError } from '../../../shared/errors';\nimport { AGENCY_ROLES } from '../../../shared/constants';\nimport { isValidString } from '../../../shared/validators';\n\n/**\n * Validator on the User Role update operation\n *\n * @param {object} data - The data to validate\n *\n * @returns {void}\n */\nexport const updateUserRolesValidator = (data) => {\n const errors = [];\n\n if (!isValidString(data.id)) errors.push('This request is not valid');\n\n if (data.roles.length === 0) errors.push('The user must have at least one role in the agency');\n\n const validRoles = data.roles.every(\n (role) => role === AGENCY_ROLES.MANAGER || role === AGENCY_ROLES.AGENT,\n );\n\n if (!validRoles) errors.push('The roles assigned to the user are not valid');\n\n if (errors.length > 0) {\n throw new ValidationError(errors);\n }\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnUsersListEvent = createEvent();\n\nexport const OnUsersListError = createEvent();\n\nexport const OnUpdateUserAgencyRolesEvent = createEvent();\n\nexport const OnUpdateUserAgencyRolesError = createEvent();\n\nexport const OnRemoveUserFromAgencyEvent = createEvent();\n\nexport const OnRemoveUserFromAgencyError = createEvent();\n\nexport const OnDeleteAgentEvent = createEvent();\n\nexport const OnDeleteAgentError = createEvent();\n\nexport const OnUpdateAgentEvent = createEvent();\n\nexport const OnUpdateAgentError = createEvent();\n\nexport const OnDeleteManagerEvent = createEvent();\n\nexport const OnDeleteManagerError = createEvent();\n\nexport const OnUpdateManagerEvent = createEvent();\n\nexport const OnUpdateManagerError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport {\n AGENCY_USERS_LIST,\n DELETE_AGENT,\n DELETE_MANAGER,\n UPDATE_AGENT,\n UPDATE_MANAGER,\n UPDATE_USER_AGENCY_ROLES,\n REMOVE_USER_FROM_AGENCY,\n} from './team-queries';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport { updateUserRolesValidator } from './team-validators';\nimport {\n OnDeleteAgentError,\n OnDeleteAgentEvent,\n OnDeleteManagerError,\n OnDeleteManagerEvent,\n OnRemoveUserFromAgencyError,\n OnRemoveUserFromAgencyEvent,\n OnUpdateAgentError,\n OnUpdateAgentEvent,\n OnUpdateManagerError,\n OnUpdateManagerEvent,\n OnUpdateUserAgencyRolesError,\n OnUpdateUserAgencyRolesEvent,\n OnUsersListError,\n OnUsersListEvent,\n} from './team-events';\n\n/**\n * Fetch user list\n *\n * @param {string} agencyId - The agency id\n * @param {number} page - The page to search the users from\n *\n * @returns {Promise} The request result\n */\nexport const fetchUsersList = async (agencyId, page = 1) => {\n const client = OnApolloClient.get();\n const first = 10;\n const skip = first * (page - 1);\n let response = null;\n\n try {\n response = await client.query({\n query: AGENCY_USERS_LIST,\n fetchPolicy: 'network-only',\n variables: { id: agencyId, first, skip },\n });\n } catch (e) {\n error('fetchUsersList', e);\n\n return OnUsersListError.dispatch(e.message);\n }\n\n log('fetchUsersList', response.data);\n\n OnUsersListEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Updates the roles of a user in a specific agency\n *\n * @param {string} id - The AgencyUser id\n * @param {Array} roles - The roles assigned to the user\n *\n * @returns {Promise} The request response\n */\nexport const updateUserRolesInAgency = async (id, roles) => {\n const client = OnApolloClient.get();\n let response = null;\n const data = {\n id,\n roles,\n };\n\n try {\n updateUserRolesValidator(data);\n } catch (e) {\n error('updateUserRolesInAgency');\n\n return OnUpdateUserAgencyRolesError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: UPDATE_USER_AGENCY_ROLES,\n variables: { data },\n });\n } catch (e) {\n error('updateUserRoles', e);\n\n return OnUpdateUserAgencyRolesError.dispatch(e);\n }\n\n log('updateUserRoles', response.data);\n\n OnUpdateUserAgencyRolesEvent.dispatch(response.data);\n};\n\n/**\n * Removes the user from the agency\n *\n * @param {string} id - Id of the AgencyUser record\n *\n * @returns {Promise} The request result\n */\nexport const removeUserFromAgency = async (id) => {\n const client = OnApolloClient.get();\n let response = null;\n const data = {\n id,\n };\n\n try {\n response = await client.mutate({\n mutation: REMOVE_USER_FROM_AGENCY,\n variables: { data },\n });\n } catch (e) {\n error('removeUserFromAgency', e);\n\n return OnRemoveUserFromAgencyError.dispatch(e);\n }\n\n log('removeUserFromAgency', response.data);\n OnRemoveUserFromAgencyEvent.dispatch(response.data);\n};\n\n/**\n * Function to delete Agent\n *\n * @param {string} id - id from the agent to delete\n * @param {boolean} force\n */\n\nexport const deleteAgent = async (id, force) => {\n const client = OnApolloClient.get();\n\n let response;\n\n try {\n response = await client.mutate({\n mutation: DELETE_AGENT,\n fetchPolicy: 'no-cache',\n variables: {\n agent: {\n id,\n force,\n },\n },\n });\n } catch (e) {\n error('deleteAgent', e);\n OnDeleteAgentError.dispatch(e);\n }\n\n OnDeleteAgentEvent.dispatch(response.data);\n fetchUsersList();\n return response;\n};\n\n/**\n * Function to delete manager\n *\n * @param {string} id - id from the manager to delete\n * @param {boolean} force\n */\n\nexport const deleteManager = async (id, force) => {\n const client = OnApolloClient.get();\n\n let response;\n\n try {\n response = await client.mutate({\n mutation: DELETE_MANAGER,\n fetchPolicy: 'no-cache',\n variables: {\n manager: {\n id,\n force,\n },\n },\n });\n } catch (e) {\n error('delete Manager', e);\n OnDeleteManagerError.dispatch(e);\n }\n\n OnDeleteManagerEvent.dispatch(response.data);\n fetchUsersList();\n return response;\n};\n\n/**\n * Function to update Agent\n *\n * @param {string} agentId - id from the agent to edit\n * @param {string} userId - id from the user to create a manager\n * @param {string} agencyId - id from the agency to create an manager there\n *\n */\n\nexport const updateAgent = async (agentId, userId, agencyId) => {\n const client = OnApolloClient.get();\n\n const agent = {\n id: agentId,\n force: true,\n };\n\n let response;\n\n try {\n response = await client.mutate({\n mutation: UPDATE_AGENT,\n fetchPolicy: 'no-cache',\n variables: { agentId: agent, userId, agencyId },\n });\n } catch (e) {\n error('updateAgent', e);\n OnUpdateAgentError.dispatch(e);\n }\n\n OnUpdateAgentEvent.dispatch(response.data);\n fetchUsersList(agencyId);\n return response;\n};\n\n/**\n * Function to update manager\n *\n * @param {string} managerId - id from the manager to update\n * @param {string} userId - id from the user to create a manager\n * @param {string} agencyId - id from the agency to create an agent there\n *\n */\n\nexport const updateManager = async (managerId, userId, agencyId) => {\n const client = OnApolloClient.get();\n\n const manager = {\n id: managerId,\n force: true,\n };\n\n let response;\n\n try {\n response = await client.mutate({\n mutation: UPDATE_MANAGER,\n fetchPolicy: 'no-cache',\n variables: { managerId: manager, userId, agencyId },\n });\n } catch (e) {\n error('updateManager', e);\n OnUpdateManagerError.dispatch(e);\n }\n\n OnUpdateManagerEvent.dispatch(response.data);\n fetchUsersList(agencyId);\n return response;\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { SelectField } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { onErrorMixinFC } from '../../../../../shared/mixins';\nimport { DialogForm } from '../../../../../shared/components';\nimport { updateUserRolesInAgency } from '../../team-actions';\nimport PropTypes from 'prop-types';\nimport { OnUpdateUserAgencyRolesError, OnUpdateUserAgencyRolesEvent } from '../../team-events';\n\nconst ROLES_OPTIONS = [\n { label: 'Manager', value: 'MANAGER' },\n { label: 'Agent', value: 'AGENT' },\n];\n\n/**\n * Function to update role\n *\n * @param {Function} onClose - function to close modal\n * @param {Function} isOpen - function to open modal\n * @param {object} user - user to update\n */\n\nconst UpdateDetailsForm = ({ onClose, isOpen, user }) => {\n const [roles, setRoles] = useState([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n const {\n 0: { roles },\n } = user.userAgencyUserRelation.items;\n setRoles(roles);\n }\n }, [user, isOpen]);\n\n useEventSubscription(OnUpdateUserAgencyRolesEvent, () => setLoading(false));\n\n useEventSubscription(OnUpdateUserAgencyRolesError, (e) => {\n setLoading(false);\n onErrorMixinFC(e);\n });\n\n const handleUpdate = useCallback(() => {\n setLoading(true);\n\n const {\n 0: { id },\n } = user.userAgencyUserRelation.items;\n\n updateUserRolesInAgency(id, roles);\n }, [user, roles]);\n\n return (\n \n \n \n );\n};\n\nUpdateDetailsForm.propTypes = {\n onClose: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n user: PropTypes.object,\n};\n\nUpdateDetailsForm.defaultProps = {\n user: {},\n};\n\nexport default UpdateDetailsForm;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Table } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport UsersTableRow from './UsersTableRow';\nimport UpdateDetailsForm from './team-actions/UpdateDetailsForm';\nimport * as Toast from '../../../../shared/components/toast/Toast';\nimport YesNoDialog from '../../../../shared/components/YesNoDialog';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport { fetchUsersList, removeUserFromAgency } from '../team-actions';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport {\n OnRemoveUserFromAgencyError,\n OnRemoveUserFromAgencyEvent,\n OnUpdateUserAgencyRolesEvent,\n OnUsersListError,\n OnUsersListEvent,\n} from '../team-events';\n\nconst Body = styled(Table.Body)`\n min-height: 335px;\n`;\n\nconst columns = '68px repeat(5 , 1fr) 105px';\n\n/**\n * The users table component\n *\n * @param {object} props - The react component props object\n * @param {string} props.agencyId - The agency to fetch the users from\n * @param {number} props.page - The page to reduce the results of users\n * @param {Function} props.onUsersCount - Callback that triggers when the final count of users in this agency is available\n *\n * @returns {React.FC} The component to render\n */\nfunction UsersTable({ agencyId, page, onUsersCount }) {\n const [users, setUsers] = useState([]);\n const [loading, setLoading] = useState(true);\n const [updateModal, setUpdateModal] = useState({ open: false, selected: {} });\n const [deleteModal, setDeleteModal] = useState({ open: false, selected: {}, loading: false });\n\n useEffect(() => {\n setLoading(true);\n\n fetchUsersList(agencyId, page);\n }, [agencyId, page]);\n\n useEventSubscription(OnUsersListEvent, ({ usersList }) => {\n setLoading(false);\n\n onUsersCount(usersList.count);\n setUsers(usersList.items);\n });\n\n useEventSubscription(OnUpdateUserAgencyRolesEvent, () => {\n setUpdateModal({ open: false, selected: {} });\n\n Toast.success('Success', 'User roles in agency updated');\n\n if (page === 1) {\n setLoading(true);\n fetchUsersList(agencyId, page);\n }\n });\n\n useEventSubscription(OnRemoveUserFromAgencyEvent, () => {\n setDeleteModal({ open: false, selected: {}, loading: false });\n\n Toast.success('Success', 'User successfully removed from agency');\n\n if (page === 1) {\n setLoading(true);\n fetchUsersList(agencyId, page);\n }\n });\n\n useEventSubscription(OnUsersListError, onErrorMixinFC);\n\n useEventSubscription(OnRemoveUserFromAgencyError, (e) => {\n setDeleteModal((state) => ({ ...state, loading: false }));\n\n onErrorMixinFC(e);\n });\n\n const handleEdit = useCallback((user) => {\n setUpdateModal({\n open: true,\n selected: user,\n });\n }, []);\n\n const handleDeleteClick = useCallback(\n (user) =>\n setDeleteModal({\n open: true,\n selected: user,\n }),\n [],\n );\n\n const handleDelete = useCallback(() => {\n const {\n 0: { id },\n } = deleteModal.selected.userAgencyUserRelation.items;\n\n setDeleteModal((state) => ({ ...state, loading: true }));\n\n removeUserFromAgency(id);\n }, [deleteModal]);\n\n return (\n \n \n #\n NAME\n EMAIL\n ROLES\n STATUS\n LAST SIGN IN\n ACTIONS\n \n \n {(user, i) => (\n \n \n \n )}\n \n setUpdateModal({ open: false, selected: {} })}\n />\n setDeleteModal((state) => ({ ...state, open: false }))}\n onYes={handleDelete}\n onNo={() => setDeleteModal((state) => ({ ...state, open: false }))}\n isLoading={deleteModal.loading}\n />\n \n );\n}\n\nUsersTable.propTypes = {\n agencyId: PropTypes.string.isRequired,\n page: PropTypes.number.isRequired,\n onUsersCount: PropTypes.func.isRequired,\n};\n\nexport default UsersTable;\n","import React, { useState, useCallback } from 'react';\nimport * as toast from 'shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../../../shared/mixins';\nimport PropTypes from 'prop-types';\nimport { Button, Form, SelectField, InputField, Dialog } from '@8base/boost';\nimport { hasError } from 'apollo-client/core/ObservableQuery';\nimport { createInvitation } from './../../../invitations/invitations-actions';\nimport { USER_INVITATION_TYPES } from './../../../invitations/invitations-model';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport {\n OnCreateInvitationError,\n OnCreateInvitationEvent,\n} from 'modules/my-account/invitations/invitation-events';\n\nexport const Invitation = ({ onClose, isOpen, agencyId, agencyName }) => {\n const formDefault = {\n type: '',\n email: '',\n };\n const [form, setForm] = useState(formDefault);\n const [formErrors, setFormErrors] = useState({\n type: {},\n email: {},\n });\n const [loading, setLoading] = useState(false);\n const handleChange = useCallback(({ target }) => {\n const { value, name } = target;\n setFormErrors((state) => ({ ...state, [name]: {} }));\n setForm((state) => ({ ...state, [name]: value }));\n }, []);\n\n const handleSelectChange = useCallback((type) => {\n setFormErrors((state) => ({ ...state, type: {} }));\n setForm((state) => ({ ...state, type }));\n }, []);\n\n useEventSubscription(OnCreateInvitationEvent, () => {\n setForm(formDefault);\n onClose();\n toast.success('Success', 'Invitation send successfully');\n setLoading(false);\n });\n\n useEventSubscription(OnCreateInvitationError, (error) => {\n onErrorMixinFC(error);\n setLoading(false);\n });\n\n const saveInvitation = useCallback(() => {\n const data = {\n ...form,\n agency: {\n connect: {\n id: agencyId,\n },\n },\n };\n setLoading(true);\n createInvitation(data);\n }, [form, agencyId]);\n\n const disabledSubmit = hasError(formErrors);\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n Cancel\n \n \n Send\n \n \n \n >\n );\n};\nInvitation.propTypes = {\n onClose: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n agencyId: PropTypes.string.isRequired,\n agencyName: PropTypes.string.isRequired,\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { OnSessionFetch } from '../../../shared/session/session-events';\nimport { Card, Pagination, Row } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport UsersTable from './components/UsersTable';\nimport { Invitation } from './components/invite-team-member/Invitation';\nimport { useHistory } from 'react-router-dom';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { Box } from '../../../shared/components/Box';\nimport { CreateButton } from 'shared/components';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { OnRemoveUserFromAgencyEvent, OnUpdateUserAgencyRolesEvent } from './team-events';\n\nconst CardHeader = styled(Card.Header)`\n display: flex;\n justify-content: flex-end;\n`;\n\nconst StatusTeam = ({ color1, color2, dato }) => (\n \n {dato}\n \n);\n\nconst TeamView = (props) => {\n const [pagination, setPagination] = useState({ page: 1, total: 0 });\n const [isInviteModalOpen, setisInviteModalOpen] = useState(false);\n const agency = useAgency();\n const history = useHistory();\n\n useEffect(() => {\n const user = OnSessionFetch.get().user;\n const validUser = user?.userAdminRelation.count > 0;\n if (!validUser) {\n history.goBack();\n }\n }, [history]);\n\n useEventSubscription(OnUpdateUserAgencyRolesEvent, () => {\n if (pagination.page !== 1) {\n setPagination((state) => ({ ...state, page: 1 }));\n }\n });\n\n useEventSubscription(OnRemoveUserFromAgencyEvent, () => {\n if (pagination.page !== 1) {\n setPagination((state) => ({ ...state, page: 1 }));\n }\n });\n\n const handlePageChange = useCallback(\n (page) => setPagination((state) => ({ ...state, page })),\n [],\n );\n\n const handleTotalChange = useCallback(\n (total) => setPagination((state) => ({ ...state, total })),\n [],\n );\n\n return (\n \n \n \n setisInviteModalOpen(true)}\n text=\"Create Team Member\"\n />\n \n \n \n \n \n \n \n \n \n setisInviteModalOpen(false)}\n agencyId={agency.id}\n agencyName={agency.name}\n />\n \n \n );\n};\n\nStatusTeam.propTypes = {\n dato: PropTypes.string.isRequired,\n color1: PropTypes.string.isRequired,\n color2: PropTypes.string.isRequired,\n};\n\nexport { TeamView };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport SettingsMenu from '../../settings/SettingsView';\nimport { Loader, Row } from '@8base/boost';\nimport { Margin } from '../../../shared/components';\n/**\n * Component that renders it's children with the layout of the settings\n *\n * @param {object} props Props\n * @param {object} props.children React element\n * @returns {object} React element\n */\nexport default function SettingsLayout({ children, loading }) {\n return (\n <>\n \n {loading ? (\n \n \n \n ) : (\n \n {children}\n \n )}\n >\n );\n}\nSettingsLayout.defaultProps = {\n loading: false,\n};\nSettingsLayout.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n loading: PropTypes.bool,\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnUpdateCompanySubscription = createEvent();\n\nexport const OnUpdateCompanySubscriptionError = createEvent();\n\nexport const OnConfirmSubscriptionChange = createEvent();\n\nexport const OnConfirmSubscriptionChangeError = createEvent();\n\nexport const OnCancelSubscriptionChange = createEvent();\n\nexport const OnCancelSubscriptionChangeError = createEvent();\n\nexport const OnFetchCompanySubscriptionPlanEvent = createEvent();\n\nexport const OnFetchCompanySubscriptionPlanError = createEvent();\n\nexport const OnFetchAvailableSubscriptionPlansEvent = createEvent();\n\nexport const OnFetchAvailableSubscriptionPlansError = createEvent();\n","import { isValidString, isValidInteger } from '@cobuildlab/validation-utils';\nimport { ValidationError } from '../../../../shared/errors';\n\n/**\n * Create payment method validator\n *\n * @param {object} data - The data to create the payment method\n *\n * @returns {void}\n */\nexport function updateCompanySubscriptionValidator(data) {\n const errors = [];\n\n if (!isValidString(data.companySubscriptionId)) {\n errors.push('The company should have a valid subscription plan already');\n }\n\n if (!isValidString(data.subscriptionPlanId)) {\n errors.push('The selected company should be a valid one');\n }\n\n if (!isValidInteger(data.numberOfSeats)) {\n errors.push('The number of seats should be a valid integer');\n }\n\n if (errors.length > 0) throw new ValidationError(errors);\n}\n","import { OnApolloClient } from '../../../../shared/session/session-events';\nimport { INVOICE_STATUS } from '@cobuildlab/lead-volt-share';\nimport { fetchPaymentIntentFromInvoice } from '../billing-actions';\nimport { voidInvoice } from '../billing-actions';\nimport { log, error } from '@cobuildlab/pure-logger';\nimport {\n FETCH_COMPANY_SUBSCRIPTION_PLAN,\n FETCH_COMPANY_SUBSCRIPTION_PLANS,\n FETCH_SUBSCRIPTION_PLANS,\n} from './subscription-plan-queries';\nimport {\n OnUpdateCompanySubscription,\n OnUpdateCompanySubscriptionError,\n OnConfirmSubscriptionChange,\n OnConfirmSubscriptionChangeError,\n OnCancelSubscriptionChange,\n OnCancelSubscriptionChangeError,\n OnFetchCompanySubscriptionPlanEvent,\n OnFetchCompanySubscriptionPlanError,\n OnFetchAvailableSubscriptionPlansEvent,\n OnFetchAvailableSubscriptionPlansError,\n} from './subscription-plan-events';\nimport { updateCompanySubscriptionValidator } from './subscription-plan-validators';\n\n/**\n * Fetches a subscription plan\n *\n * @param {string} id - The subscription plan id\n *\n * @returns {Promise} The request result\n */\nexport const fetchSubscriptionPlan = async (id) => {\n const client = OnApolloClient.get();\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_COMPANY_SUBSCRIPTION_PLAN,\n variables: { id },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchSubscriptionPlan', e);\n\n return OnFetchCompanySubscriptionPlanError.dispatch(e);\n }\n\n log('fetchSubscriptionPlan', response.data);\n\n return OnFetchCompanySubscriptionPlanEvent.dispatch(response.data);\n};\n\n/**\n * Fetches the current company subscription plan\n *\n * @param {string} id - The company id\n *\n * @returns {Promise} The request result\n */\nexport const fetchCompanyCurrentSubscription = async (id) => {\n const client = OnApolloClient.get();\n const first = 1;\n const skip = 0;\n const orderBy = 'createdAt_DESC';\n const filter = { company: { id: { equals: id } } };\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_COMPANY_SUBSCRIPTION_PLANS,\n variables: { filter, first, skip, orderBy },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchCompanyCurrentSubscription', e);\n\n return OnFetchCompanySubscriptionPlanError.dispatch(e);\n }\n\n log('fetchCompanyCurrentSubscription', response.data);\n\n return OnFetchCompanySubscriptionPlanEvent.dispatch(response.data);\n};\n\n/**\n * Updates a company subscription\n *\n * @param {object} data - The data object\n *\n * @returns {Promise} The request result\n */\nexport const updateCompanySubscription = async (data) => {\n let response = null;\n\n try {\n updateCompanySubscriptionValidator(data);\n } catch (e) {\n error('updateCompanySubscription', e);\n\n return OnUpdateCompanySubscriptionError.dispatch(e);\n }\n\n try {\n response = await fetch(\n `${process.env.REACT_APP_WORKSPACE_ENDPOINT}/webhook/change-subscription`,\n {\n method: 'post',\n body: JSON.stringify({\n ...data,\n }),\n },\n );\n } catch (e) {\n error('updateCompanySubscription', e);\n\n return OnUpdateCompanySubscriptionError.dispatch(e);\n }\n\n const result = await response.json();\n\n if (!response.ok) {\n const message = result.message ? result.message : 'Something happened, please try again';\n\n error('updateCompanySubscription', message);\n\n return OnUpdateCompanySubscriptionError.dispatch(new Error(message));\n }\n\n log('updateCompanySubscription', result);\n\n return OnUpdateCompanySubscription.dispatch(result);\n};\n\n/**\n * Confirms the subscription change in case it requires a payment method\n * or the card was declined\n *\n * @param {object} data - The data needed to confirm subscription payment\n * @param {object} stripe - The stripe object\n *\n * @returns {Promise} The request result\n */\nexport const confirmSubscriptionChange = async (data, stripe) => {\n const { invoice, paymentMethodId } = data;\n\n if (invoice.status === INVOICE_STATUS.OPEN) {\n let paymentIntent = null;\n\n try {\n paymentIntent = await fetchPaymentIntentFromInvoice(invoice.invoiceId);\n } catch (e) {\n error('confirmSubscriptionChange', e);\n\n return OnConfirmSubscriptionChangeError.dispatch(e);\n }\n\n if (\n paymentIntent.status === 'requires_action' ||\n paymentIntent.status === 'requires_payment_method'\n ) {\n let result = null;\n\n try {\n result = await stripe.confirmCardPayment(paymentIntent.client_secret, {\n payment_method: paymentMethodId,\n });\n } catch (e) {\n error('confirmSubscriptionChange', e);\n\n return OnConfirmSubscriptionChangeError.dispatch(e);\n }\n\n if (result.error) {\n return OnConfirmSubscriptionChangeError.dispatch(new Error(result.error.message));\n }\n\n return OnConfirmSubscriptionChange.dispatch(result);\n }\n\n if (paymentIntent.status === 'requires_payment_method') {\n return OnConfirmSubscriptionChangeError.dispatch(\n new Error(paymentIntent.last_payment_error.message),\n );\n }\n }\n};\n\n/**\n * Cancels the specified invoice that belongs to a\n * pending update in a subscription\n *\n * @param {string} stripeInvoiceId - The stripe invoice id\n *\n * @returns {Promise} The request result\n */\nexport const cancelSubscriptionChange = async (stripeInvoiceId) => {\n let invoice = null;\n\n try {\n invoice = await voidInvoice(stripeInvoiceId);\n } catch (e) {\n error('cancelSubscriptionChange', e);\n\n return OnCancelSubscriptionChangeError.dispatch(e);\n }\n\n log('cancelSubscriptionChange', invoice);\n\n return OnCancelSubscriptionChange.dispatch(invoice);\n};\n\n/**\n * Fetches the available plans\n *\n * @param {string} currentPlanId - The current plan id\n *\n * @returns {Promise} The request result\n */\nexport const fetchAvailablePlans = async (currentPlanId) => {\n const client = OnApolloClient.get();\n const orderBy = 'order_ASC';\n let response = null;\n const filter = {\n OR: [{ isFreeTrial: { equals: false } }, { id: { equals: currentPlanId } }],\n };\n\n try {\n response = await client.query({\n query: FETCH_SUBSCRIPTION_PLANS,\n variables: { filter, orderBy },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchAvailablePlans', e);\n\n return OnFetchAvailableSubscriptionPlansError.dispatch(e);\n }\n\n log('fetchAvailablePlans', response.data);\n\n return OnFetchAvailableSubscriptionPlansEvent.dispatch(response.data);\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport {\n Heading as BoostHeading,\n Dialog,\n Row,\n Column,\n Loader,\n Button,\n useModal,\n} from '@8base/boost';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { useSubscriptionPlans } from '../../../../onboarding/onboarding-hooks';\nimport { PlanCard } from '../../../../company/components/PlanCard';\nimport { PrimaryBtn as PrimaryButton } from '../../../../../shared/components/ui/buttons/PrimaryBtn';\nimport { updateCompanySubscription } from '../subscription-plan-actions';\nimport {\n OnUpdateCompanySubscription,\n OnUpdateCompanySubscriptionError,\n} from '../subscription-plan-events';\nimport { onErrorMixinFC } from '../../../../../shared/mixins';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\n\nconst Heading = styled(BoostHeading)`\n letter-spacing: 0.5px !important;\n ${(props) => {\n switch (props.color) {\n case 'primary':\n return 'color: #3DB4AA';\n default:\n return 'color: #7D828C';\n }\n }}\n`;\n\nexport const modalId = 'change-subscription-plan-dialog';\n\n/**\n * Change plan dialog component\n *\n * @param {object} props - The component props object\n * @param {string} props.id - The id of the modal\n * @param {string} props.currentPlanId - The id of the currently used plan\n *\n * @returns {React.FC} The component to render\n */\nfunction ChangePlanDialog({ companySubscription, companyUsersCount }) {\n const { isOpen, closeModal } = useModal(modalId);\n const { items, loading, fetch } = useSubscriptionPlans({ isFreeTrial: false });\n const [dialogLoading, setDialogLoading] = useState(false);\n const [selected, setSelected] = useState('');\n const [seats, setSeats] = useState(0);\n\n useEffect(() => {\n if (isOpen) {\n fetch();\n }\n }, [fetch, isOpen]);\n\n useEffect(() => {\n if (companySubscription) {\n setSeats(companySubscription.numberOfSeats);\n setSelected(companySubscription.subscriptionPlan.id);\n }\n }, [companySubscription]);\n\n useSubscription(\n OnUpdateCompanySubscription,\n () => {\n setDialogLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnUpdateCompanySubscriptionError,\n (e) => {\n setDialogLoading(false);\n onErrorMixinFC(e);\n },\n [],\n );\n\n const handleChange = useCallback((plan) => {\n setSelected(plan.id);\n }, []);\n\n const handleSubmit = useCallback(() => {\n setDialogLoading(true);\n\n updateCompanySubscription({\n companySubscriptionId: companySubscription.id,\n subscriptionPlanId: selected,\n numberOfSeats: seats,\n });\n }, [seats, selected, companySubscription]);\n\n const plans = loading ? (\n \n ) : (\n items.map((subscription) => (\n \n ))\n );\n\n return (\n \n closeModal(modalId)} />\n \n \n \n Subscription Plan\n \n {plans}\n \n \n \n \n closeModal(modalId)}>\n Cancel\n \n \n Save\n \n \n \n \n );\n}\n\nChangePlanDialog.propTypes = {\n companySubscription: PropTypes.object,\n companyUsersCount: PropTypes.number.isRequired,\n};\n\nChangePlanDialog.defaultProps = {\n companySubscription: null,\n};\n\nexport default ChangePlanDialog;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { Loader, Row as BoostRow, Paragraph, Text } from '@8base/boost';\nimport { retrieveUpcomingInvoice } from '../../billing-actions';\nimport { OnUpcomingInvoiceFetch, OnUpcomingInvoiceFetchError } from '../../billing-events';\nimport PropTypes from 'prop-types';\nimport * as Toast from '../../../../../shared/components/toast/Toast';\nimport * as moment from 'moment';\nimport styled from 'styled-components';\n\nconst Row = styled(BoostRow)`\n width: 150px;\n`;\n\n/**\n * Next invoice information component\n *\n * @param {object} props - The component's prop object\n * @param {string} props.companyId - The company id\n *\n * @returns {React.FC} The component to render\n */\nfunction NextInvoiceInformation({ companyId }) {\n const [invoice, setInvoice] = useState(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n\n useEffect(() => {\n setLoading(true);\n retrieveUpcomingInvoice(companyId);\n }, [companyId]);\n\n const retryFetch = useCallback(() => {\n setLoading(true);\n retrieveUpcomingInvoice(companyId);\n }, [companyId]);\n\n useSubscription(\n OnUpcomingInvoiceFetch,\n ({ invoice: nextInvoice }) => {\n setInvoice(nextInvoice);\n\n setLoading(false);\n setError(null);\n },\n [],\n );\n\n useSubscription(\n OnUpcomingInvoiceFetchError,\n (e) => {\n setError(e);\n setLoading(false);\n\n Toast.error('Could not show next invoice information, please try again.');\n },\n [],\n );\n\n if (loading) {\n return (\n \n \n \n );\n }\n\n if (error) {\n return (\n \n Retry\n \n );\n }\n\n return (\n \n You will be charged ${invoice.amount_due / 100} on{' '}\n {moment.unix(invoice.period_end).format('MM/DD/YYYY')}\n \n );\n}\n\nNextInvoiceInformation.propTypes = {\n companyId: PropTypes.string.isRequired,\n};\n\nexport default NextInvoiceInformation;\n","import React, { useEffect, useState, useCallback } from 'react';\nimport { Card, Loader, Button, Row, Paragraph, Column, Icon, Paper, withModal } from '@8base/boost';\nimport { useStripe } from '@stripe/react-stripe-js';\nimport { PrimaryBtn as PrimaryButton } from '../../../../../shared/components/ui/buttons/PrimaryBtn';\nimport ChangePlanDialog, { modalId } from './ChangePlanDialog';\nimport NextInvoiceInformation from './NextInvoiceInformation';\nimport { PlanCard } from '../../../../company/components/PlanCard';\nimport styled from 'styled-components';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { confirmSubscriptionChange, cancelSubscriptionChange } from '../subscription-plan-actions';\nimport {\n OnUpdateCompanySubscription,\n OnConfirmSubscriptionChange,\n OnConfirmSubscriptionChangeError,\n OnCancelSubscriptionChange,\n OnCancelSubscriptionChangeError,\n} from '../subscription-plan-events';\nimport { onErrorMixinFC } from '../../../../../shared/mixins';\nimport * as Toast from '../../../../../shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\n\nconst Title = styled.h3`\n font-size: 16px;\n font-weight: bold;\n line-height: 28px;\n`;\n\nconst Alert = styled(Paper)`\n box-shadow: none !important;\n border: 1px solid #d0d7dd;\n`;\n\n/**\n * Subscription plan changed component\n *\n * @returns {React.FC} The component to render\n */\nfunction SubscriptionPlanChanger({ company, companyUsersCount, openModal, closeModal }) {\n const stripe = useStripe();\n const [subscription, setSubscription] = useState(null);\n const [loading, setLoading] = useState(true);\n const [confirming, setConfirming] = useState(false);\n const [canceling, setCanceling] = useState(false);\n\n useEffect(() => {\n const sub = company?.subscriptions?.items[0];\n\n if (sub) {\n setSubscription(sub ? sub : null);\n setLoading(false);\n }\n }, [company]);\n\n useSubscription(\n OnUpdateCompanySubscription,\n ({ subscription: sub }) => {\n closeModal(modalId);\n\n if (!sub.pending_update) {\n return Toast.success('Success', 'Subscription plan changed successfully');\n }\n\n Toast.info('Info', 'Processing payment...');\n const [{ paymentMethodId }] = company.companyPaymentMethods.items;\n\n setConfirming(true);\n\n confirmSubscriptionChange(\n {\n invoice: {\n invoiceId: sub.latest_invoice.id,\n status: sub.latest_invoice.status,\n },\n paymentMethodId,\n },\n stripe,\n );\n },\n [company, stripe, closeModal],\n );\n\n useSubscription(\n OnConfirmSubscriptionChange,\n () => {\n setConfirming(false);\n\n Toast.success('Success', 'Subscription plan changed successfully');\n },\n [],\n );\n\n useSubscription(\n OnCancelSubscriptionChange,\n () => {\n setCanceling(false);\n\n Toast.success('Success', 'Subscription plan change canceled successfully');\n },\n [],\n );\n\n useSubscription(\n OnConfirmSubscriptionChangeError,\n (e) => {\n setConfirming(false);\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnCancelSubscriptionChangeError,\n (e) => {\n setCanceling(false);\n onErrorMixinFC(e);\n },\n [],\n );\n\n const handleChange = useCallback(() => {\n if (!company) return Toast.warn('Wait until the form loads');\n\n const [paymentMethod] = company.companyPaymentMethods.items;\n\n if (!paymentMethod) return Toast.error('You need to register a payment method first');\n\n openModal(modalId);\n }, [company, openModal]);\n\n const handlePaySubscription = useCallback(() => {\n setConfirming(true);\n\n const [invoice] = company.companyInvoices.items;\n const [{ paymentMethodId }] = company.companyPaymentMethods.items;\n\n confirmSubscriptionChange(\n {\n invoice,\n paymentMethodId,\n },\n stripe,\n );\n }, [company, stripe]);\n\n const handleCancelChange = useCallback(() => {\n setCanceling(true);\n const [{ invoiceId }] = company.companyInvoices.items;\n\n cancelSubscriptionChange(invoiceId);\n }, [company]);\n\n return (\n \n \n Subscription Plan\n \n \n {loading ? (\n \n \n \n ) : (\n \n {subscription?.pendingUpdate && (\n \n \n \n \n You have a pending subscription change to another plan, please confirm or cancel\n this chage to continue let us know what are your preferences\n \n \n \n )}\n \n \n )}\n \n \n {subscription?.pendingUpdate ? (\n \n \n Confirm Payment\n \n \n Cancel Payment\n \n \n ) : (\n \n \n Change Plan\n \n \n \n )}\n \n \n \n );\n}\n\nSubscriptionPlanChanger.propTypes = {\n company: PropTypes.shape({\n id: PropTypes.string.isRequired,\n companyInvoices: PropTypes.shape({\n items: PropTypes.arrayOf(\n PropTypes.shape({\n invoiceId: PropTypes.string,\n }),\n ).isRequired,\n }).isRequired,\n companyPaymentMethods: PropTypes.shape({\n items: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n nameOnCard: PropTypes.string,\n addressLine1: PropTypes.string,\n addressLine2: PropTypes.string,\n city: PropTypes.string,\n state: PropTypes.string,\n last4: PropTypes.string,\n expireDate: PropTypes.string,\n paymentMethodId: PropTypes.string,\n }),\n ).isRequired,\n }).isRequired,\n subscriptions: PropTypes.shape({\n items: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n status: PropTypes.string,\n numberOfSeatsh: PropTypes.number,\n subscriptionPlan: PropTypes.object,\n stripeCustomerId: PropTypes.string,\n }),\n ).isRequired,\n }).isRequired,\n }).isRequired,\n companyUsersCount: PropTypes.number.isRequired,\n openModal: PropTypes.func.isRequired,\n closeModal: PropTypes.func.isRequired,\n};\n\nexport default withModal(SubscriptionPlanChanger);\n","import gql from 'graphql-tag';\n\nexport const FETCH_COMPANY_PAYMENT_METHOD = gql`\n query FetchCompanyPaymentMethod($id: ID) {\n companyPaymentMethod(id: $id) {\n id\n nameOnCard\n expireDate\n last4\n addressLine1\n addressLine2\n city\n state\n country\n paymentMethodId\n company {\n id\n name\n }\n }\n }\n`;\n\nexport const FETCH_PAYMENT_METHODS = gql`\n query FetchPaymentMethods(\n $filter: CompanyPaymentMethodFilter\n $skip: Int\n $first: Int\n $last: Int\n $orderBy: [CompanyPaymentMethodOrderBy]\n ) {\n companyPaymentMethodsList(\n filter: $filter\n skip: $skip\n first: $first\n last: $last\n orderBy: $orderBy\n ) {\n count\n items {\n id\n nameOnCard\n expireDate\n last4\n addressLine1\n addressLine2\n city\n state\n country\n paymentMethodId\n company {\n id\n name\n }\n }\n }\n }\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnPaymentMethodUpdate = createEvent();\n\nexport const OnPaymentMethodUpdateError = createEvent();\n\nexport const OnFetchPaymentMethod = createEvent();\n\nexport const OnFetchPaymentMethodError = createEvent();\n\nexport const OnFetchCurrentPaymentMethodEvent = createEvent();\n\nexport const OnFetchCurrentPaymentMethodError = createEvent();\n","import { isValidString } from '@cobuildlab/validation-utils';\nimport { ValidationError } from '../../../../shared/errors';\n\n/**\n * Create payment method validator\n *\n * @param {object} data - The data to create the payment method\n *\n * @returns {void}\n */\nexport function updatePaymentMethodValidator(data) {\n const errors = [];\n\n if (!isValidString(data.cardHolderName)) {\n errors.push('The name on the card should be a valid string');\n }\n\n if (!isValidString(data.addressLine1)) {\n errors.push('The address line 1 should be a valid string');\n }\n\n if (!isValidString(data.city)) {\n errors.push('The city should be a valid string');\n }\n\n if (!isValidString(data.state)) {\n errors.push('The state should be a valid string');\n }\n\n if (errors.length > 0) throw new ValidationError(errors);\n}\n","import { FETCH_PAYMENT_METHODS, FETCH_COMPANY_PAYMENT_METHOD } from './payment-method-queries';\nimport { OnApolloClient, OnSessionFetch } from '../../../../shared/session/session-events';\nimport { createPaymentMethod } from '../billing-actions';\nimport {\n OnFetchCurrentPaymentMethodError,\n OnFetchCurrentPaymentMethodEvent,\n OnFetchPaymentMethod,\n OnFetchPaymentMethodError,\n OnPaymentMethodUpdate,\n OnPaymentMethodUpdateError,\n} from './payment-method-events';\nimport { error, log } from '@cobuildlab/pure-logger';\nimport { updatePaymentMethodValidator } from './payment-method-validators';\n\n/**\n * Updates the customer payment method\n *\n * @param {object} method - The data to create the payment method\n * @param {object} stripe - The stripe object\n * @param {object} elements - The elements object\n * @returns {Promise} The request result\n */\nexport const updatePaymentMethod = async (method, stripe, elements) => {\n const { user } = OnSessionFetch.get();\n const { addressLine1, addressLine2, city, state, cardHolderName, customerId, companyId } = method;\n let paymentMethod = null;\n\n try {\n updatePaymentMethodValidator(method);\n } catch (e) {\n error('updatePaymentMethod', e);\n\n return OnPaymentMethodUpdateError.dispatch(e);\n }\n\n const data = {\n billing_details: {\n address: {\n line1: addressLine1,\n line2: addressLine2,\n city: city,\n state: state,\n country: 'US',\n },\n email: user.email,\n name: cardHolderName,\n },\n metadata: { company_id: companyId },\n };\n\n try {\n paymentMethod = await createPaymentMethod(data, customerId, stripe, elements);\n } catch (e) {\n error('updatePaymentMethod', e);\n\n return OnPaymentMethodUpdateError.dispatch(e);\n }\n\n log('updatePaymentMethod', paymentMethod);\n\n return OnPaymentMethodUpdate.dispatch(paymentMethod);\n};\n\n/**\n * Fetches the specified company payment method\n *\n * @param {string} id - The payment method id\n *\n * @returns {Promise} The request result\n */\nexport const fetchCompanyPaymentMethod = async (id) => {\n const client = OnApolloClient.get();\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_COMPANY_PAYMENT_METHOD,\n variables: { id },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchCompanyPaymentMethod', e);\n\n return OnFetchPaymentMethodError.dispatch(e);\n }\n\n log('fetchCompanyPaymentMethod', response.data);\n\n return OnFetchPaymentMethod.dispatch(response.data);\n};\n\n/**\n * Fetches the current payment method used\n *\n * @param {string} id - The company id\n *\n * @returns {Promise} The request result\n */\nexport const fetchCurrentPaymentMethod = async (id) => {\n const client = OnApolloClient.get();\n let response = null;\n const first = 1;\n const orderBy = 'createdAt_DESC';\n const filter = { company: { id: { equals: id } } };\n\n try {\n response = await client.query({\n query: FETCH_PAYMENT_METHODS,\n variables: { filter, first, orderBy },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchCurrentPaymentMethod', e);\n\n return OnFetchCurrentPaymentMethodError.dispatch(e);\n }\n\n log('fetchCurrentPaymentMethod', response.data);\n\n return OnFetchCurrentPaymentMethodEvent.dispatch(response.data);\n};\n","import React, { useCallback, useState, useEffect } from 'react';\nimport { PropTypes } from 'prop-types';\nimport DialogForm from '../../../../../shared/components/dialog/DialogForm';\nimport { PaymentForm } from './PaymentForm';\nimport { updatePaymentMethod } from '../payment-method-actions';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnPaymentMethodUpdate, OnPaymentMethodUpdateError } from '../payment-method-events';\nimport * as Toast from '../../../../../shared/components/toast/Toast';\nimport { useModal } from '@8base/boost';\nimport { onErrorMixinFC } from '../../../../../shared/mixins';\nimport { useElements, useStripe } from '@stripe/react-stripe-js';\n\n/**\n * This component is a Dialog/Modal with a form to update the Payment.\n *\n * @param {object} props - The component props object\n * @param {string} props.id - The id of the dialog\n *\n * @returns {React.FC} - The View in a Dialog/Modal\n */\nconst PaymentDialogForm = ({ id }) => {\n const elements = useElements();\n const stripe = useStripe();\n const { isOpen, args, closeModal } = useModal(id);\n const [ready, setReady] = useState(false);\n const [loading, setLoading] = useState(true);\n const [form, setForm] = useState(args.data ? args.data : {});\n\n useEffect(() => {\n if (!isOpen) {\n setReady(false);\n setLoading(true);\n }\n }, [isOpen]);\n\n useEffect(() => {\n setForm(\n args.data\n ? {\n customerId: args.data.customerId,\n companyId: args.data.companyId,\n cardHolderName: args.data.nameOnCard,\n addressLine1: args.data.addressLine1,\n addressLine2: args.data.addressLine2,\n city: args.data.city,\n state: args.data.state,\n card: {},\n }\n : { card: {} },\n );\n }, [args.data]);\n\n useEffect(() => {\n if (elements && stripe && ready) {\n setLoading(false);\n }\n }, [elements, stripe, ready]);\n\n useSubscription(\n OnPaymentMethodUpdate,\n () => {\n setLoading(false);\n\n Toast.success('Success', 'Payment method updated successfully');\n\n closeModal(id);\n },\n [],\n );\n\n useSubscription(\n OnPaymentMethodUpdateError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const handleSubmit = useCallback(() => {\n if (!stripe || !elements) {\n return Toast.warn('Wait a few seconds and try again...');\n }\n\n setLoading(true);\n\n updatePaymentMethod(form, stripe, elements);\n }, [stripe, elements, form]);\n\n const handleChange = useCallback((name, value) => {\n setForm((state) => ({\n ...state,\n [name]: value,\n }));\n }, []);\n\n const handleReady = useCallback(() => {\n setReady(true);\n }, []);\n\n return (\n closeModal(id)}\n onClickCreate={handleSubmit}\n isOpen={isOpen}\n isLoading={loading}>\n \n \n );\n};\n\nPaymentDialogForm.propTypes = {\n id: PropTypes.string.isRequired,\n};\n\nexport { PaymentDialogForm };\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Row, Card, Button, Loader, NoData, Grid, useModal, styled } from '@8base/boost';\nimport { PaymentDialogForm } from './PaymentDialogForm';\nimport { fetchCompanyPaymentMethod } from '../payment-method-actions';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { useAgency } from '../../../../../shared/hooks/useAgency';\nimport {\n OnFetchPaymentMethod,\n OnFetchPaymentMethodError,\n OnPaymentMethodUpdate,\n} from '../payment-method-events';\nimport { onErrorMixinFC } from '../../../../../shared/mixins';\nimport PropTypes from 'prop-types';\n\nconst Section = styled(Card.Section)`\n padding: 12px 24px !important;\n`;\n\nconst id = 'change-payment-dialog';\n\n/**\n * Payment method changed component\n *\n * @returns {React.FC} The component to render\n */\nfunction PaymentMethodChanger({ customerId, paymentMethodId }) {\n const agency = useAgency();\n const [companyId, setCompanyId] = useState(agency.company.id);\n const [method, setPaymentMethod] = useState(null);\n const [loading, setLoading] = useState(paymentMethodId ? true : false);\n const { openModal } = useModal(id);\n\n const fetch = useCallback(() => {\n if (paymentMethodId) {\n setLoading(true);\n fetchCompanyPaymentMethod(paymentMethodId);\n }\n }, [paymentMethodId]);\n\n useEffect(() => {\n if (agency.company.id !== companyId) {\n setCompanyId(agency.company.id);\n }\n }, [agency, companyId]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n const handleClick = useCallback(() => {\n openModal(id, {\n data: {\n ...method,\n companyId,\n customerId,\n },\n });\n }, [openModal, customerId, companyId, method]);\n\n useSubscription(\n OnFetchPaymentMethod,\n ({ companyPaymentMethod }) => {\n setPaymentMethod(companyPaymentMethod);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnPaymentMethodUpdate,\n () => {\n fetch();\n },\n [fetch],\n );\n\n useSubscription(\n OnFetchPaymentMethodError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n let content = null;\n\n /**\n * If component is loading, then render a loader\n */\n if (loading)\n content = (\n \n \n \n \n \n );\n\n /**\n * If component finished loading and payment method exists,\n * render card information\n */\n if (!loading && method && method.last4)\n content = (\n <>\n \n \n Credit Card\n {`**** **** **** ${method.last4}`}\n \n \n \n \n Expiration Date\n {method.expireDate}\n \n \n >\n );\n\n /**\n * If component finished loading and there is no payment method,\n * then render the no data component\n */\n if (!loading && (!method || !method.last4))\n content = (\n \n \n \n );\n\n return (\n \n \n \n \n Update Payment Method\n \n \n \n {content}\n \n \n );\n}\n\nPaymentMethodChanger.propTypes = {\n paymentMethodId: PropTypes.string,\n customerId: PropTypes.string,\n};\n\nPaymentMethodChanger.defaultProps = {\n paymentMethodId: null,\n customerId: null,\n};\n\nexport default PaymentMethodChanger;\n","import React from 'react';\r\nimport { INVOICE_STATUS } from '@cobuildlab/lead-volt-share';\r\nimport { Tag as BoostTag } from '@8base/boost';\r\nimport PropTypes from 'prop-types';\r\nimport styled from 'styled-components';\r\n\r\nconst Tag = styled(BoostTag)`\r\n ${(props) => {\r\n switch (props.type) {\r\n case INVOICE_STATUS.DRAFT:\r\n return `\r\n color: #1E87F6 !important;\r\n border-color: #1E87F6 !important;\r\n background-color: rgba(30, 195, 246, 0.15) !important;\r\n `;\r\n case INVOICE_STATUS.OPEN:\r\n return `\r\n color: #F6C01E !important;\r\n border-color: #F6C01E !important;\r\n background-color: rgba(246,192,30,0.15) !important;\r\n `;\r\n case INVOICE_STATUS.PAID:\r\n return `\r\n color: #3DB4AA !important;\r\n border-color: #3DB4AA !important;\r\n background-color: rgba(61,180,170,0.1) !important;\r\n `;\r\n case INVOICE_STATUS.VOID:\r\n return `\r\n color: rgb(125, 130, 140) !important;\r\n border-color: rgb(125, 130, 140) !important;\r\n background-color: rgba(125, 130, 140, 0.1) !important;\r\n `;\r\n case INVOICE_STATUS.UNCOLLECTIBLE:\r\n return `\r\n color: #FF0000 !important;\r\n border-color: #FF0000 !important;\r\n background-color: rgba(255,0,0,0.08) !important;\r\n `;\r\n default:\r\n return `\r\n color: #3DB4AA !important;\r\n border-color: #3DB4AA !important;\r\n background-color: rgba(61,180,170,0.1) !important;\r\n `;\r\n }\r\n }}\r\n`;\r\n\r\n/**\r\n * This component show a text with a pre-format text\r\n *\r\n * @param {string} status - refer to the status text/string for the History Table\r\n * @returns {string} return a Pre-format Text\r\n */\r\n\r\nconst StatusCell = ({ status }) => {\r\n return {status.split('_').join(' ')};\r\n};\r\n\r\nStatusCell.propTypes = {\r\n status: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default StatusCell;\r\n","import React, { useState, useEffect } from 'react';\nimport { Card, Grid, Table, Row, Pagination, styled } from '@8base/boost';\nimport StatusCell from './StatusCell';\nimport { DateBox } from '../../../../shared/components';\nimport { useCompanyInvoices } from '../billing-hooks';\nimport PropTypes from 'prop-types';\n\nconst TableContainer = styled(Table)`\n & div[role='loader'] > div[role='loader'] div {\n border-color: #3db4aa !important;\n }\n`;\n\nconst Body = styled(Table.Body)`\n height: 275px;\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\n/**\n * Billing history component\n *\n * @param {object} props - The components prop object\n * @param {string} props.companyId - The company id\n * @param {string} props.invoice - The latest invoice\n *\n * @returns {React.FC} The component to render\n */\nfunction BillingHistory({ companyId, latestInvoice }) {\n const [page, setPage] = useState(1);\n const { items, count, loading, refetch } = useCompanyInvoices(companyId, page);\n\n useEffect(() => {\n if (latestInvoice.id || latestInvoice.status) {\n refetch();\n }\n }, [latestInvoice.id, latestInvoice.status, refetch]);\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n Date\n Item Name\n Status\n Amount\n \n \n {(invoice) => (\n \n \n \n \n Subscription\n \n \n \n ${invoice.total}\n \n )}\n \n \n \n \n \n \n \n \n \n );\n}\n\nBillingHistory.propTypes = {\n companyId: PropTypes.string.isRequired,\n latestInvoice: PropTypes.object,\n};\n\nBillingHistory.defaultProps = {\n latestInvoice: {},\n};\n\nexport default BillingHistory;\n","import { useState, useEffect, useCallback } from 'react';\nimport { fetchCompanyInvoices } from './billing-actions';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { LIST_INITIAL_STATE } from '../../../shared/constants';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { OnFetchCompanyInvoicesError, OnFetchCompanyInvoicesEvent } from './billing-events';\n\n/**\n * Hook to use company invoices as a list of items\n *\n * @param {string} companyId - The company id\n * @param {number} page - The page to fetch\n *\n * @returns {Promise} The request result\n */\nexport function useCompanyInvoices(companyId, page = 1) {\n const [state, setState] = useState(LIST_INITIAL_STATE);\n\n const fetch = useCallback(() => {\n setState((state) => ({\n ...state,\n loading: true,\n }));\n fetchCompanyInvoices(companyId, page);\n }, [companyId, page]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n useEventSubscription(OnFetchCompanyInvoicesEvent, ({ companyInvoicesList }) => {\n setState((state) => ({\n ...state,\n items: companyInvoicesList.items,\n count: companyInvoicesList.count,\n loading: false,\n }));\n });\n\n useEventSubscription(OnFetchCompanyInvoicesError, (e) => {\n onErrorMixinFC(e);\n\n setState((state) => ({\n ...state,\n items: [],\n count: 0,\n loading: true,\n }));\n });\n\n return {\n ...state,\n refetch: fetch,\n };\n}\n","import React, { useCallback, useState, useEffect } from 'react';\r\nimport { Dialog, Paragraph, Row, Button, Column, Text as BoostText, useModal } from '@8base/boost';\r\nimport { useSubscription } from '@cobuildlab/react-simple-state';\r\nimport { OnSubscriptionCanceled, OnSubscriptionCanceledError } from '../billing-events';\r\nimport { cancelSubscription } from '../billing-actions';\r\nimport { PlanCard } from '../../../company/components/PlanCard';\r\nimport { onErrorMixinFC } from '../../../../shared/mixins';\r\nimport PropTypes from 'prop-types';\r\nimport moment from 'moment';\r\nimport styled from '@emotion/styled';\r\n\r\nconst Note = styled(Paragraph)`\r\n color: #a5afb6;\r\n margin-top: 5px;\r\n`;\r\n\r\nconst Text = styled(BoostText)`\r\n font-size: 1.3rem !important;\r\n`;\r\n\r\nexport const modalId = 'cancel-subscription-dialog';\r\n\r\n/**\r\n * This Component show the Name and description of the Plan to Cancel\r\n *\r\n * @returns {React.FC} - The component to render\r\n */\r\nfunction CancelSubscriptionDialog() {\r\n const [loading, setLoading] = useState(false);\r\n const { isOpen, args, closeModal } = useModal(modalId);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n setLoading(false);\r\n }\r\n }, [isOpen]);\r\n\r\n const handleClose = useCallback(() => {\r\n closeModal(modalId);\r\n }, [closeModal]);\r\n\r\n const handleConfirm = useCallback(() => {\r\n setLoading(true);\r\n\r\n cancelSubscription(args.companySubscription.id);\r\n }, [args.companySubscription]);\r\n\r\n useSubscription(\r\n OnSubscriptionCanceled,\r\n () => {\r\n closeModal(modalId);\r\n },\r\n [],\r\n );\r\n\r\n useSubscription(\r\n OnSubscriptionCanceledError,\r\n (e) => {\r\n setLoading(false);\r\n\r\n onErrorMixinFC(e);\r\n },\r\n [],\r\n );\r\n\r\n const companySubscription = args.companySubscription || {};\r\n const expireDate = companySubscription.expireDate\r\n ? moment(companySubscription.expireDate).format('MM/DD/YYYY')\r\n : null;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n Are you sure you want to cancel? Your subscription will be cancelled for the following\r\n plan:\r\n \r\n \r\n \r\n You will still have full access to your workspace until{' '}\r\n {expireDate}\r\n \r\n \r\n \r\n \r\n \r\n \r\n No, Do Not Cancel\r\n \r\n \r\n Yes, Cancel\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nCancelSubscriptionDialog.propTypes = {\r\n companySubscription: PropTypes.shape({\r\n expireDate: PropTypes.string.isRequired,\r\n subscriptionPlan: PropTypes.object.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nexport default CancelSubscriptionDialog;\r\n","import React, { useCallback } from 'react';\nimport { Card, Row, Text, Button, useModal } from '@8base/boost';\nimport { PropTypes } from 'prop-types';\nimport CancelSubscriptionDialog, { modalId } from './CancelSubscriptionDialog';\nimport styled from 'styled-components';\n\nconst Title = styled.h3`\n font-size: 16px;\n font-weight: bold;\n line-height: 28px;\n`;\n\n/**\n * Cancel plan card component\n *\n * @param {object} props - The component's prop object\n * @param {object} props.companySubscription - The current company subscription\n *\n * @returns {React.FC} The component to render\n */\nfunction CancelPlanCard({ companySubscription }) {\n const { openModal } = useModal(modalId);\n\n const handleCancel = useCallback(() => {\n openModal(modalId, {\n companySubscription,\n });\n }, [openModal, companySubscription]);\n\n return (\n \n \n Cancel Subscription\n \n \n \n \n Cancel Subscription\n \n You can cancel at anytime\n \n \n \n \n );\n}\n\nCancelPlanCard.propTypes = {\n companySubscription: PropTypes.object.isRequired,\n};\n\nexport default CancelPlanCard;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport { Card, Column, Row, Loader, Scrollable } from '@8base/boost';\nimport { useStripe, useElements } from '@stripe/react-stripe-js';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { PlanCard } from '../../../company/components/PlanCard';\nimport { PrimaryBtn as Button } from '../../../../shared/components/ui/buttons/PrimaryBtn';\nimport { SUBSCRIPTION_STATUS } from '@cobuildlab/lead-volt-share';\nimport { renewCompanySubscription } from '../billing-actions';\nimport { OnSubscriptionRenew, OnSubscriptionRenewError } from '../billing-events';\nimport { useSubscriptionPlans } from '../../../onboarding/onboarding-hooks';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport * as Toast from '../../../../shared/components/toast/Toast';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\n\nconst Title = styled.h3`\n font-size: 16px;\n font-weight: bold;\n line-height: 28px;\n`;\n\nconst PlanList = styled.div`\n max-height: 200px;\n`;\n\nconst { CANCELED } = SUBSCRIPTION_STATUS;\n\n/**\n * The renovate subscription component\n *\n * @param {object} props - The component props\n * @param {object} props.company - The company to renew the subscription from\n *\n * @returns {React.FC} The component to render\n */\nfunction RenovateSubscription({ company }) {\n const { items, loading: fetchLoading } = useSubscriptionPlans({ isFreeTrial: false });\n const [loading, setLoading] = useState(false);\n const [form, setForm] = useState({});\n const [subscription] = company.subscriptions.items;\n const stripe = useStripe();\n const elements = useElements();\n\n useEffect(() => {\n const [paymentMethod] = company.companyPaymentMethods.items;\n const [sub] = company.subscriptions.items;\n const [invoice] = company.companyInvoices.items;\n\n setForm({\n companyId: company.id,\n subscriptionPlan: sub.status !== CANCELED ? sub.subscriptionPlan : null,\n numberOfSeats: sub.numberOfSeats,\n status: sub.status,\n stripeCustomerId: sub.stripeCustomerId,\n stripeInvoiceId: invoice.invoiceId,\n paymentMethodId: paymentMethod?.paymentMethodId,\n });\n }, [company]);\n\n const handleChange = useCallback((name, value) => {\n setForm((state) => ({\n ...state,\n [name]: value,\n }));\n }, []);\n\n const handleSeatsChange = useCallback((change) => {\n setForm((state) => ({\n ...state,\n numberOfSeats: typeof change === 'number' ? change : change(state.numberOfSeats),\n }));\n }, []);\n\n const handleSubmit = useCallback(() => {\n const [subscription] = company.subscriptions.items;\n setLoading(true);\n\n if (!stripe || !elements) return Toast.warn('Try again in a few seconds...');\n\n renewCompanySubscription(form, subscription, stripe, elements);\n }, [company, form, stripe, elements]);\n\n useSubscription(\n OnSubscriptionRenew,\n () => {\n setLoading(false);\n\n Toast.success('Success', 'Subscription renewed, recovering information...');\n },\n [],\n );\n\n useSubscription(\n OnSubscriptionRenewError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const plans = items.map((plan) => (\n handleChange('subscriptionPlan', plan)}\n numberOfSeats={form.numberOfSeats}\n min={subscription.numberOfSeats}\n onQuantityChange={handleSeatsChange}\n readOnly={subscription.status !== CANCELED}\n />\n ));\n\n return (\n \n \n Renew Subscription\n \n \n {fetchLoading ? (\n \n \n \n ) : (\n \n \n {plans}\n \n \n )}\n \n \n \n \n Renew Subscription\n \n \n \n \n );\n}\n\nRenovateSubscription.propTypes = {\n company: PropTypes.shape({\n id: PropTypes.string.isRequired,\n companyInvoices: PropTypes.shape({\n items: PropTypes.arrayOf(\n PropTypes.shape({\n invoiceId: PropTypes.string,\n }),\n ).isRequired,\n }).isRequired,\n companyPaymentMethods: PropTypes.shape({\n items: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n nameOnCard: PropTypes.string,\n addressLine1: PropTypes.string,\n addressLine2: PropTypes.string,\n city: PropTypes.string,\n state: PropTypes.string,\n last4: PropTypes.string,\n expireDate: PropTypes.string,\n paymentMethodId: PropTypes.string,\n }),\n ).isRequired,\n }).isRequired,\n subscriptions: PropTypes.shape({\n items: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n status: PropTypes.string,\n numberOfSeats: PropTypes.number,\n subscriptionPlan: PropTypes.object,\n stripeCustomerId: PropTypes.string,\n }),\n ).isRequired,\n }).isRequired,\n }).isRequired,\n};\n\nexport default RenovateSubscription;\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { Row, Loader } from '@8base/boost';\r\nimport { Box } from '../../../shared/components/Box';\r\nimport Layout from '../components/Layout';\r\nimport { Column, NoData } from '@8base/boost';\r\nimport { SUBSCRIPTION_STATUS } from '@cobuildlab/lead-volt-share';\r\nimport SubscriptionPlanChanger from './subscription-plan/components/SubscriptionPlanChanger';\r\nimport PaymentMethodChanger from './payment-method/components/PaymentMethodChanger';\r\nimport BillingHistory from './components/BillingHistory';\r\nimport CancelPlanCard from './components/CancelPlanCard';\r\nimport RenovateSubscription from './components/RenovateSubscription';\r\nimport { useCompany } from '../../company/company-hooks';\r\nimport { useAgency } from '../../../shared/hooks/useAgency';\r\nimport { useUser } from '../../../shared/hooks/useUser';\r\nimport { onErrorMixinFC } from '../../../shared/mixins';\r\nimport withSession from '../../../shared/hoc/withSession';\r\nimport { fetchSession } from '../../auth/auth.actions';\r\n\r\nconst { CANCELED, INCOMPLETE } = SUBSCRIPTION_STATUS;\r\n\r\n/**\r\n * A Component to show information about the billing info and the Subcription Plan of a Company\r\n *\r\n * @returns {React.FC} The component to render\r\n */\r\nfunction BillingView() {\r\n const [user, loadingUser] = useUser();\r\n const agency = useAgency();\r\n const [companyId, setCompanyId] = useState(agency.company.id);\r\n const { data, loading, error, setCompany } = useCompany(companyId);\r\n const prevSubStatus = useRef('');\r\n\r\n useEffect(() => {\r\n if (agency.company.id !== companyId) {\r\n setCompanyId(agency.company.id);\r\n setCompany(agency.company.id);\r\n }\r\n }, [agency, companyId, setCompany]);\r\n\r\n useEffect(() => {\r\n if (data) {\r\n const [subscription] = data.company.subscriptions.items;\r\n\r\n if (prevSubStatus.current !== '' && subscription.status !== prevSubStatus.current) {\r\n fetchSession();\r\n }\r\n\r\n prevSubStatus.current = subscription.status;\r\n }\r\n }, [data]);\r\n\r\n useEffect(() => {\r\n if (error) {\r\n onErrorMixinFC(error);\r\n }\r\n }, [error]);\r\n\r\n if (loading) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * If user is loading, render a loading component\r\n */\r\n if (loadingUser) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n const { company, usersList } = data;\r\n const admins = user.userAdminRelation.items;\r\n const isAdminInCurrentAgency = admins.some(({ company: c }) => c.id === company.id);\r\n\r\n if (!isAdminInCurrentAgency) {\r\n return ;\r\n }\r\n\r\n const [subscription] = company.subscriptions.items;\r\n const [paymentMethod] = company.companyPaymentMethods.items;\r\n const [invoice] = company.companyInvoices.items;\r\n\r\n /**\r\n * If subscription is canceled, show renew subscription component\r\n */\r\n const renewal =\r\n subscription.status === CANCELED || subscription.status === INCOMPLETE ? (\r\n \r\n ) : null;\r\n\r\n /**\r\n * If subscription is canceled, hide the cancel plan card component\r\n */\r\n const cancel =\r\n subscription.status !== CANCELED && subscription.status !== INCOMPLETE ? (\r\n \r\n ) : null;\r\n\r\n if (loading) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n {renewal}\r\n {subscription.status !== CANCELED && subscription.status !== INCOMPLETE && (\r\n \r\n )}\r\n \r\n \r\n {cancel}\r\n \r\n \r\n );\r\n}\r\n\r\n/** export the Component with User Session Data */\r\nexport default withSession(BillingView);\r\n","import gql from 'graphql-tag';\n\nexport const agencyFragment = gql`\n fragment agencyFragment on Agency {\n id\n name\n createdAt\n quoteOfDay {\n title\n }\n company {\n id\n name\n }\n phoneCallSettings {\n id\n automaticCalls\n recordCalls\n campignAssineeFilter\n agency {\n id\n name\n }\n callCadenceConfig\n }\n ifsScore\n voicemailUrl\n }\n`;\n\nexport const QUERY_AGENCY_LIST = gql`\n query FetchAgenciesList($filter: AgencyFilter, $sort: [AgencySort!], $first: Int, $skip: Int) {\n agenciesList(filter: $filter, first: $first, skip: $skip, sort: $sort) {\n count\n items {\n ...agencyFragment\n }\n }\n }\n ${agencyFragment}\n`;\n\nexport const MUTATION_CREATE_AGENCY = gql`\n mutation CreateAgency($data: AgencyCreateInput!) {\n agencyCreate(data: $data) {\n ...agencyFragment\n }\n }\n ${agencyFragment}\n`;\n\nexport const MUTATION_UPDATE_AGENCY = gql`\n mutation UpdateAgency($data: AgencyUpdateInput!, $filter: AgencyKeyFilter) {\n agencyUpdate(data: $data, filter: $filter) {\n id\n name\n }\n }\n`;\n\nexport const MUTATION_DELETE_AGENCY = gql`\n mutation DeleteAgency($filter: AgencyKeyFilter) {\n agencyDelete(filter: $filter, force: true) {\n success\n }\n }\n`;\n","import { ValidationError } from '../../shared/errors';\nimport { isValidEmail, isValidString } from '../../shared/validators';\n\nconst agencyMessage = 'The agency must have a ';\nconst agencyMessageValid = `${agencyMessage} valid`;\nconst messages = {\n name: `${agencyMessageValid} name`,\n company: `${agencyMessageValid} company`,\n agents: `The agents emails must be valid`,\n};\n\nexport const agencyCreateUpdateValidator = (agency) => {\n let errors = [];\n\n if (!isValidString(agency.name)) errors.push(messages.name);\n\n if (!isValidString(agency.companyId)) errors.push(messages.company);\n\n if (agency.agents) {\n let email = agency.agents.find((agentMail) => !isValidEmail(agentMail));\n\n if (email) {\n errors.push(`${messages.agents}, \"${email}\" was given`);\n }\n }\n\n if (errors.length > 0) throw new ValidationError(errors);\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnAgencyError = createEvent();\n\nexport const OnAgencyListFetched = createEvent();\n\nexport const OnAgenyCreateEvent = createEvent();\n\nexport const OnAgencyPhoneCreateError = createEvent();\n\nexport const OnAgencyUpdateEvent = createEvent();\n\nexport const OnAgencyDeleteEvent = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient, OnSessionFetch } from '../../shared/session/session-events';\nimport { getRolesOnSelectedAgency } from '../../shared/utils/agency-utils';\nimport {\n QUERY_AGENCY_LIST,\n MUTATION_CREATE_AGENCY,\n MUTATION_UPDATE_AGENCY,\n MUTATION_DELETE_AGENCY,\n} from './agency-queries';\nimport { agencyCreateUpdateValidator } from './agency-validators';\nimport { ADMIN } from '../../shared/constants';\nimport {\n OnAgencyDeleteEvent,\n OnAgencyError,\n OnAgencyListFetched,\n OnAgencyUpdateEvent,\n OnAgenyCreateEvent,\n} from './agency-events';\n\n/**\n * Creates a filter object\n *\n * @param {object} filter - the data used to filter the search\n * @param {string} search - Search term used for also filter the search\n *\n * @returns {object} the filter object\n */\nconst createFilter = (filter, search) => {\n const byCompany = filter.company\n ? {\n company: { id: { equals: filter.company } },\n }\n : {\n company: { adminCompanyRelation: { some: { user: { id: { equals: filter.user } } } } },\n };\n\n const byStartDate = filter.startDate\n ? { createdAt: { gte: `${filter.startDate}T00:00:00Z` } }\n : {};\n\n const byEndDate = filter.endDate ? { createdAt: { lte: `${filter.endDate}T00:00:00Z` } } : {};\n\n const bySearch = search ? { OR: [{ name: { contains: search } }] } : {};\n\n return {\n ...byCompany,\n ...bySearch,\n AND: [byStartDate, byEndDate],\n };\n};\n\n/**\n * Generates a sort object\n *\n * @param {string} sort - Sort value\n *\n * @returns {object} The sort object\n */\nconst createSort = (sort) => {\n return {\n ...(sort === 'newest' && { sort: [{ createdAt: 'DESC' }] }),\n ...(sort === 'oldest' && { sort: [{ createdAt: 'ASC' }] }),\n };\n};\n\n/**\n * Fetches the agencies given the filter data\n *\n * @param {number} page - The page to fetch\n * @param {object} data - Object that contains filter data\n * @param {string} search - The search string to filter results\n *\n * @returns {void}\n */\nexport const fetchAgencies = async (page, data, search) => {\n const client = OnApolloClient.get();\n const filter = createFilter(data, search);\n const sort = createSort(data.sort);\n const skip = (page - 1) * 10;\n\n try {\n const response = await client.query({\n query: QUERY_AGENCY_LIST,\n fetchPolicy: 'no-cache',\n variables: { first: 10, skip, filter, ...sort },\n });\n\n log('fetchAgencies', response.data);\n\n return OnAgencyListFetched.dispatch(response.data);\n } catch (e) {\n error('fetchAgencies', e);\n return OnAgencyError.dispatch(e);\n }\n};\n\n/**\n * Stores agency in the database\n *\n * @param {object} agency - The agency object\n *\n * @returns {void}\n */\nexport const createAgency = async (agency) => {\n const client = OnApolloClient.get();\n const { user } = OnSessionFetch.get();\n let response = null;\n\n const data = {\n name: agency.name,\n company: {\n connect: { id: agency.companyId },\n },\n agencyInvitationAgencyRelation: {\n create: agency.invitations,\n },\n ifsScore: agency.ifsScores,\n voicemailUrl: agency.voicemailUrl\n };\n\n try {\n agencyCreateUpdateValidator(agency);\n } catch (e) {\n error('createAgency', e);\n return OnAgencyError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: MUTATION_CREATE_AGENCY,\n variables: { data },\n });\n } catch (e) {\n error('createAgency', e);\n return OnAgencyError.dispatch(e);\n }\n\n const { agencyCreate } = response.data;\n\n log('createAgency', response.data);\n\n return OnAgenyCreateEvent.dispatch({ agencyCreate });\n};\n\n/**\n * Updates the agency in db\n *\n * @param {object} agency - The agency object\n *\n * @returns {void}\n */\nexport const updateAgency = async (agency) => {\n const client = OnApolloClient.get();\n const { user } = OnSessionFetch.get();\n console.log('update', agency);\n const variables = {\n data: {\n name: agency.name,\n ifsScore: agency.ifsScores,\n voicemailUrl: agency.voicemailUrl\n },\n filter: {\n id: agency.id,\n },\n };\n\n const roles = getRolesOnSelectedAgency(user, { ...agency, company: { id: agency.id } });\n\n if (roles.includes(ADMIN)) {\n variables.data.company = {\n connect: { id: agency.companyId },\n };\n }\n\n try {\n agencyCreateUpdateValidator(agency);\n\n const response = await client.mutate({\n mutation: MUTATION_UPDATE_AGENCY,\n variables,\n });\n\n log('updateAgency', response.data);\n\n return OnAgencyUpdateEvent.dispatch(response.data);\n } catch (e) {\n error('updateAgency', e);\n return OnAgencyError.dispatch(e);\n }\n};\n\n/**\n * Deletes the given agency from the db\n *\n * @param {number} id - The agency id\n *\n * @returns {void}\n */\nexport const deleteAgency = async (id) => {\n const client = OnApolloClient.get();\n\n try {\n const response = await client.mutate({\n mutation: MUTATION_DELETE_AGENCY,\n variables: { filter: { id } },\n });\n\n log('deleteAgency', response.data);\n\n return OnAgencyDeleteEvent.dispatch(response.data);\n } catch (e) {\n error('deleteAgency', e);\n return OnAgencyError.dispatch(e);\n }\n};\n","import React, { useState } from 'react';\nimport { Dropdown, Icon, Menu } from '@8base/boost';\nimport { DropdownBodyOnTable } from 'shared/components';\nimport { YesNoDialog } from '../../../shared/components';\nimport { deleteAgency } from '../agency-actions';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport { OnAgencyDeleteEvent } from '../agency-events';\n\nconst MenuItem = styled(Menu.Item)`\n color: ${({ danger }) => (danger ? '#FF0000' : 'rgb(50, 60, 71)')}!important;\n &:hover {\n ${({ danger }) => (danger ? '' : 'color: #3db4aa !important;')}\n }\n`;\n\nconst BoldText = styled.span`\n font-weight: bold;\n`;\n\nconst AgencyActions = ({ agency, onUpdateClick }) => {\n const [isDeleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n\n const handleDelete = () => {\n setIsDeleting(true);\n deleteAgency(agency.id);\n };\n\n useEventSubscription(OnAgencyDeleteEvent, () => {\n setIsDeleting(false);\n setDeleteDialogOpen(false);\n });\n\n return (\n <>\n \n \n \n \n \n {({ closeDropdown }) => (\n \n {\n onUpdateClick(agency);\n closeDropdown();\n }}>\n Update Agency\n \n \n )}\n \n setDeleteDialogOpen(false)}\n onClose={() => setDeleteDialogOpen(false)}\n isLoading={isDeleting}\n yesText=\"Yes, Delete\"\n noText=\"Cancel\"\n title=\"Delete Agency\"\n text={\n \n {`Are you sure you want to delete this Agency ?`}\n \n This action can’t be undone.\n \n }\n />\n \n >\n );\n};\n\nAgencyActions.propTypes = {\n agency: PropTypes.shape({\n id: PropTypes.string.isRequired,\n }).isRequired,\n onUpdateClick: PropTypes.func.isRequired,\n};\n\nexport default AgencyActions;\n","export const SORT_OPTIONS = [\n { label: 'Date: Newest First', value: 'newest', field: 'createdAt', orderWay: 'DESC' },\n { label: 'Date: Oldest First', value: 'oldest', field: 'createdAt', orderWay: 'ASC' },\n];\n\nexport const FILTER_CATEGORIES = {\n startDate: {\n title: 'Date Start',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'startDate',\n },\n endDate: {\n title: 'Date End',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'endDate',\n },\n companyId: {\n title: 'Company',\n identifier: 'companyId',\n },\n};\n\nexport const FORM_TOOLTIP_STRINGS = {\n agents: {\n tooltipPlacement: 'top',\n tooltipText:\n 'Invite agents using their email address. This will send them an invite to join this agency.',\n },\n managers: {\n tooltipPlacement: 'top',\n tooltipText:\n 'Invite managers using their email address. This will send them an invite to join this agency.',\n },\n};\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { Dropdown } from '@8base/boost';\nimport { DropdownBodyOnTable, FilterFooter, FilterCategory } from 'shared/components';\nimport { FILTER_CATEGORIES } from '../agency-model';\nimport filterIconGrey from 'shared/assets/images/filter-grey.svg';\nimport filterIconGreen from 'shared/assets/images/filter-green.svg';\nimport PropTypes from 'prop-types';\n\nconst FilterDropdown = styled(Dropdown)`\n display: inline-block;\n`;\n\nconst DropdownBody = styled.div`\n background-color: #fff;\n position: relative;\n z-index: 2000;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n`;\n\nconst FilterBody = styled.div`\n display: grid;\n grid-template-rows: repeat(3, min-content);\n grid-template-columns: repeat(2, [col-start] 1fr [col-end]);\n gap: 12px;\n padding: 12px;\n`;\n\nconst FilterBtn = styled.div`\n display: flex;\n border-radius: 5px;\n border: solid 1px ${({ active }) => (active ? '#3db4aa' : '#d0d7dd')};\n padding: 0px 16px;\n height: 36px;\n box-sizing: border-box;\n align-items: center;\n`;\n\nconst FilterIconLabel = styled.span`\n margin-left: 4px;\n font-size: 13px;\n opacity: 0.9;\n ${(props) => (props.active ? 'color: #3db4aa;' : '')}\n`;\n\nconst FilterIcon = styled.img`\n width: 2rem;\n height: 2rem;\n`;\n\nconst AgencyFilter = ({ onConfirm, companies }) => {\n const [filterValues, setFilterValues] = useState({\n startDate: '',\n endDate: '',\n companyId: '',\n });\n const [isOpen, setIsOpen] = useState(false);\n\n const filters = {\n ...FILTER_CATEGORIES,\n companyId: {\n title: 'Company',\n placeholder: 'Select',\n identifier: 'companyId',\n options: [{ label: 'None', value: '' }, ...companies],\n },\n };\n\n const handleFilter = (key, value) => {\n const newState = { ...filterValues };\n newState[key] = value;\n\n if (key === 'startDate') {\n if (newState.startDate > newState.endDate) newState.endDate = '';\n }\n\n setFilterValues(newState);\n };\n\n const categories = Object.entries(filters).map(([key, value]) => (\n \n ));\n\n const icon = isOpen ? : ;\n\n return (\n \n \n setIsOpen(!isOpen)}>\n {icon}\n Filters\n \n \n \n {({ closeDropdown }) => (\n \n {categories}\n onConfirm(filterValues)}\n onCancel={() => null}\n closeDropdown={() => {\n setIsOpen(false);\n closeDropdown();\n }}\n />\n \n )}\n \n \n );\n};\n\nAgencyFilter.propTypes = {\n onConfirm: PropTypes.func.isRequired,\n companies: PropTypes.array.isRequired,\n};\n\nexport default AgencyFilter;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid, styled } from '@8base/boost';\nimport Field from './Field';\n\nconst BtnAddItem = styled.button`\n margin-top: 10px;\n display: flex;\n align-items: center;\n background: transparent;\n outline: none;\n cursor: pointer;\n`;\n\nconst BtnDeleteItem = styled.button`\n margin-top: 28px;\n height: 20px;\n width: 20px;\n border: 1px solid #eb4235;\n border-radius: 100px;\n background: transparent;\n outline: none;\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst BtnLess = styled.p`\n margin-left: 2px;\n height: 20px;\n width: 20px;\n color: #eb4235;\n font-size: 18px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst BtnPlus = styled.p`\n box-sizing: border-box;\n height: 16px;\n width: 16px;\n border: 0.67px solid #3db4aa;\n border-radius: 100px;\n color: #3db4aa;\n font-size: 16px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst BtnText = styled.p`\n color: #3db4aa;\n font-family: Poppins;\n font-size: 12px;\n letter-spacing: 0.18px;\n line-height: 20px;\n margin-left: 16px;\n`;\n\n/**\n * Render a list with inputs and its can add or remove new inputs.\n *\n * @param {object} props component props\n * @param {Array} props.data list data\n * @param {string} props.inputPlaceholder placeholder for each input\n * @param {string} props.inputLabel label for each input\n * @param {Function} props.onBlurInput handle on blur\n * @param {Function} props.onDeleteItem handle for deletes an item\n * @param {Function} props.onAddItem handle for creates an item\n * @returns {React.ReactElement} component\n */\nconst ListInputsEditable = ({\n data,\n inputPlaceholder,\n inputLabel,\n btnAddText,\n onBlurInput,\n onDeleteItem,\n onAddItem,\n}) => {\n return (\n <>\n {data.map((item, index) => {\n const label = `${inputLabel} #${index + 1}`;\n\n return (\n \n \n \n \n \n \n -\n \n \n \n );\n })}\n \n \n \n +\n {btnAddText}\n \n \n \n >\n );\n};\n\nListInputsEditable.propTypes = {\n data: PropTypes.array.isRequired,\n inputPlaceholder: PropTypes.string.isRequired,\n inputLabel: PropTypes.string.isRequired,\n btnAddText: PropTypes.string.isRequired,\n onBlurInput: PropTypes.func.isRequired,\n onDeleteItem: PropTypes.func.isRequired,\n onAddItem: PropTypes.func.isRequired,\n};\n\nexport default ListInputsEditable;\n","import React, { useState, useEffect } from 'react';\nimport { Form, InputField, SelectField } from '@8base/boost';\nimport { TagsInput } from '../../../../shared/components';\nimport { OnSessionFetch } from '../../../../shared/session/session-events';\nimport ListInputsEditable from '../../../../shared/components/ListInputsEditable';\nimport { IFS_SCORES_DEFAULT } from '@cobuildlab/lead-volt-share';\nimport { ADMIN } from '../../../../shared/constants';\nimport { getRolesOnSelectedAgency } from '../../../../shared/utils/agency-utils';\nimport { fetchVoiceMailMessagesForCalls } from 'modules/phone-calls/voice-mail-message/voice-mail-message-actions';\nimport { FORM_TOOLTIP_STRINGS } from '../../agency-model';\nimport PropTypes from 'prop-types';\n\nexport const AgencyForm = ({ agency, setFormData }) => {\n let initialCompanyId = '';\n const { user } = OnSessionFetch.get();\n\n if (agency) {\n initialCompanyId = agency.company.id;\n } else if (user.userAdminRelation.items.length === 1) {\n initialCompanyId = user.userAdminRelation.items[0].company.id;\n }\n const [name, setName] = useState(agency ? agency.name : '');\n const [companyId, setCompanyId] = useState(initialCompanyId);\n const [voicemailUrl, setVoicemailUrl] = useState(agency ? agency.voicemailUrl : '');\n const [agents, setAgents] = useState([]);\n const [managers, setManagers] = useState([]);\n const [voicemails, setVoicemails] = useState([]);\n const [ifsScores, setIfsScores] = useState([]);\n\n const handleOnBlurIfsScore = (index, event) => {\n const newIfsScores = [...ifsScores];\n newIfsScores[index].value = event.target.value;\n setIfsScores(newIfsScores);\n };\n\n const handleOnAddIfsScore = () => {\n setIfsScores([...ifsScores, { value: '' }]);\n };\n\n const handleOnDeleteIfsScore = (index) => {\n const value = ifsScores[index].value;\n const newIfsScores = [...ifsScores.filter((score) => score.value !== value)];\n setIfsScores(newIfsScores);\n };\n\n const roles = getRolesOnSelectedAgency(user, agency);\n\n useEffect(() => {\n console.log({\n agency,\n name,\n managers,\n agents,\n ifsScores,\n companyId,\n voicemailUrl,\n });\n setFormData({\n agency,\n name,\n managers,\n agents,\n ifsScores,\n companyId,\n voicemailUrl,\n });\n }, [agency, name, agents, managers, ifsScores, companyId, setFormData, voicemailUrl]);\n\n useEffect(() => {\n if (agency?.id) {\n fetchVoicemailList();\n }\n }, [agency, user]);\n\n const fetchVoicemailList = async () => {\n const { voiceMailMessagesList } = await fetchVoiceMailMessagesForCalls({\n agency: agency.id,\n user: [user.id, 'equals'],\n active: [true, 'equals'],\n });\n setVoicemails(voiceMailMessagesList.items);\n };\n\n useEffect(() => {\n const ifsScores = agency\n ? agency.ifsScore.length === 1 && agency.ifsScore[0] === ''\n ? IFS_SCORES_DEFAULT\n : agency.ifsScore\n : IFS_SCORES_DEFAULT;\n setIfsScores(ifsScores.map((score) => ({ value: score })));\n }, [agency]);\n\n return (\n event.preventDefault()}>\n \n \n setName(value),\n }}\n />\n {(!agency || roles.includes(ADMIN)) && (\n ({\n label: company.name,\n value: company.id,\n }))}\n stretch={true}\n input={{\n name: 'companyId',\n value: companyId,\n onChange: (value) => setCompanyId(value),\n }}\n />\n )}\n ({\n label: v.name,\n value: v.audio.downloadUrl,\n }))}\n stretch={true}\n input={{\n name: 'voicemailUrl',\n value: voicemailUrl,\n onChange: (value) => setVoicemailUrl(value),\n }}\n />\n \n \n {agency === null && (\n <>\n \n Invite agents\n \n setAgents(value)}\n tags={agents}\n tooltipPlacement={FORM_TOOLTIP_STRINGS.agents.tooltipPlacement}\n tooltipText={FORM_TOOLTIP_STRINGS.agents.tooltipText}\n />\n \n \n \n Invite managers\n \n setManagers(value)}\n tags={managers}\n tooltipPlacement={FORM_TOOLTIP_STRINGS.managers.tooltipPlacement}\n tooltipText={FORM_TOOLTIP_STRINGS.managers.tooltipText}\n />\n \n \n >\n )}\n \n IFS Scores\n \n \n \n \n \n );\n};\nAgencyForm.propTypes = {\n agency: PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n company: PropTypes.shape({\n id: PropTypes.string.isRequired,\n }),\n ifsScore: PropTypes.array.isRequired,\n }),\n};\nAgencyForm.defaultProps = {\n agency: null,\n};\n","import React, { useState } from 'react';\nimport { DialogForm } from '../../../shared/components';\nimport { AgencyForm } from './forms/AgencyForm';\nimport PropTypes from 'prop-types';\nconst AgencyFormDialog = ({ agency, isOpen, isLoading, isUpdate, onClose, onSubmit }) => {\n const [formData, setFormData] = useState({ agency });\n const handleSubmit = () => {\n const form = {\n operation: formData.agency ? 'Update' : 'create',\n id: formData.agency ? formData.agency.id : undefined,\n name: formData.name,\n companyId: formData.companyId,\n agents: formData.agents,\n managers: formData.managers,\n ifsScores: formData.ifsScores.map((score) => score.value),\n voicemailUrl: formData.voicemailUrl\n };\n onSubmit(form);\n };\n return (\n \n \n \n );\n};\n\nAgencyFormDialog.propTypes = {\n agency: PropTypes.object,\n isOpen: PropTypes.bool.isRequired,\n isLoading: PropTypes.bool.isRequired,\n isUpdate: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onSubmit: PropTypes.bool.isRequired,\n};\n\nAgencyFormDialog.defaultProps = {\n agency: null,\n};\n\nexport default AgencyFormDialog;\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport styled from 'styled-components';\nimport { Card, Table, Pagination } from '@8base/boost';\nimport AgencyActions from '../../agency/components/AgencyActions';\nimport AgencyFilter from '../../agency/components/AgencyFilter';\nimport { ListCardBody as ListCard, ItemFilter, SearchInput } from '../../../shared/components';\nimport { DateBox } from 'shared/components';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchAgencies, createAgency, updateAgency } from '../../agency/agency-actions';\nimport { SORT_OPTIONS } from '../../agency/agency-model';\nimport { OnSessionFetch } from '../../../shared/session/session-events';\nimport AgencyFormDialog from '../../agency/components/AgencyFormDialog';\nimport { fetchSession } from '../../auth/auth.actions';\nimport { CreateButton } from 'shared/components';\nimport { Box } from '../../../shared/components/Box';\nimport * as Toast from '../../../shared/components/toast/Toast';\nimport {\n OnAgencyDeleteEvent,\n OnAgencyError,\n OnAgencyListFetched,\n OnAgencyPhoneCreateError,\n OnAgencyUpdateEvent,\n OnAgenyCreateEvent,\n} from 'modules/agency/agency-events';\n\nconst ListCardBody = styled(ListCard)`\n padding: 0 !important;\n`;\n\nconst TableRow = styled(Table.BodyRow)`\n ${(props) => (props.active ? `background-color: #fcfcfc !important` : '')};\n`;\n\nconst StyledHeaderCell = styled(Table.HeaderCell)`\n padding-left: 24px !important;\n`;\n\nconst StyledTableHeader = styled(Table.Header)`\n height: 36px !important;\n`;\n\nconst TableBody = styled(Table.Body)`\n max-height: 50vh;\n height: 50vh;\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst SearchBar = styled(SearchInput)`\n width: 100% !important;\n`;\n\nconst PaginationContainer = styled.div`\n display: flex;\n justify-content: center;\n font-size: 1.2rem;\n padding: 0 1rem;\n\n & > div > div > *::before {\n background-color: var(--color-primary);\n transition: all 0.2s;\n }\n\n & > div > span {\n display: inline-block;\n padding: 0.5rem 1.5rem;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n }\n`;\n\nconst CustomGrid = styled.div`\n display: grid;\n width: ${(props) => props.width};\n grid-template-columns: ${(props) => props.columns};\n column-gap: ${(props) => props.columnGap};\n grid-template-areas: ${(props) => props.areas};\n ${(props) => (props.alignItems ? `align-items:${props.alignItems} ` : '')};\n`;\n\nconst CustomGridCell = styled.div`\n grid-area: ${(props) => props.area};\n ${(props) => (props.justifySelf ? `justify-self:${props.justifySelf} ` : '')};\n`;\n\nconst TABLE_COLUMUNS = '70px repeat(3,1fr) 100px';\n\nconst AgencyView = () => {\n const [data, setData] = useState({\n agency: null,\n isLoading: true,\n agencies: [],\n count: 0,\n page: 1,\n search: '',\n });\n const [dialog, setDialog] = useState({\n isOpen: false,\n isLoading: false,\n });\n const [deleteDialog, setDeleteDialog] = useState({\n isOpen: false,\n isLoading: false,\n });\n const [filters, setFilters] = useState({\n sort: 'newest',\n startDate: '',\n endDate: '',\n companyId: '',\n });\n\n const paginationRef = useRef(null);\n const searchRef = useRef(null);\n const { user } = OnSessionFetch.get();\n\n /**\n * Function to fetch agencies when component mounts\n *\n * @param {string} search -Search term\n *\n * @returns {void}\n */\n const refreshAgencies = (search = '') => {\n setData((state) => ({\n ...state,\n isLoading: true,\n agencies: [],\n }));\n\n setDialog((state) => ({\n ...state,\n isOpen: false,\n isLoading: false,\n }));\n\n const { companyId } = filters;\n\n fetchAgencies(\n data.page,\n {\n ...filters,\n company: companyId !== '' ? companyId : null,\n user: user.id,\n },\n search,\n );\n\n paginationRef.current.children[0].children[3].childNodes[5].textContent = ' agencies';\n };\n\n useEffect(refreshAgencies, [user.id, data.page, data.search, filters]);\n\n /**\n * Handle submit of the create/update dialog form\n *\n * @param {object} form - The agency attributes to create/edit\n *\n * @returns {void}\n */\n const handleSubmit = (form) => {\n setDialog((state) => ({ ...state, isLoading: true }));\n setDeleteDialog((state) => ({ ...state, isLoading: true }));\n\n if (form.operation === 'create') {\n const invitations = [\n ...form.agents.map((email) => ({\n email,\n type: 'AGENT',\n })),\n ...form.managers.map((email) => ({\n email,\n type: 'MANAGER',\n })),\n ];\n\n createAgency({ ...form, invitations });\n } else if (form.operation === 'Update') {\n updateAgency(form);\n }\n };\n\n const handleFilter = useCallback((newFilters) => {\n setData((state) => ({\n ...state,\n page: 1,\n }));\n setFilters((state) => ({\n ...state,\n startDate: newFilters.startDate,\n endDate: newFilters.endDate,\n companyId: newFilters.companyId,\n }));\n }, []);\n\n // Suscriptions for handling request results\n useEventSubscription(OnAgencyListFetched, ({ agenciesList }) =>\n setData((state) => ({\n ...state,\n agencies: agenciesList.items,\n count: agenciesList.count,\n isLoading: false,\n })),\n );\n\n useEventSubscription(OnAgenyCreateEvent, () => {\n setData((state) => ({\n ...state,\n agency: null,\n }));\n setDialog((state) => ({\n ...state,\n isLoading: false,\n isOpen: false,\n }));\n setDeleteDialog({\n ...deleteDialog,\n isLoading: false,\n isOpen: false,\n });\n\n refreshAgencies();\n });\n\n useEventSubscription(OnAgencyPhoneCreateError, () => {\n Toast.warn(\n 'Could not create phone number automatically on the agency, please create it manually',\n );\n });\n\n useEventSubscription(OnAgencyUpdateEvent, () => {\n setData({\n ...data,\n agency: null,\n });\n setDialog({\n ...dialog,\n isLoading: false,\n isOpen: false,\n });\n setDeleteDialog({\n ...deleteDialog,\n isLoading: false,\n isOpen: false,\n });\n\n refreshAgencies();\n\n fetchSession();\n });\n\n useEventSubscription(OnAgencyError, (err) => {\n setDialog({\n ...dialog,\n isLoading: false,\n });\n setDeleteDialog({\n ...deleteDialog,\n isLoading: false,\n });\n\n onErrorMixinFC(err);\n });\n\n useEventSubscription(OnAgencyDeleteEvent, () => {\n setData({\n ...data,\n agency: null,\n });\n setDialog({\n ...dialog,\n isLoading: false,\n isOpen: false,\n });\n setDeleteDialog({\n ...deleteDialog,\n isLoading: false,\n isOpen: false,\n });\n\n refreshAgencies();\n });\n\n const pageOffset = (data.page - 1) * 10;\n\n return (\n \n \n \n \n \n refreshAgencies(searchRef.current.value)}\n />\n \n \n ({\n label: company.name,\n value: company.id,\n }))}\n onConfirm={handleFilter}\n />\n \n \n \n {\n setFilters({ ...filters, sort: value });\n setData({ ...data, page: 1 });\n }}\n value={filters.sort}\n options={SORT_OPTIONS}\n placeholder=\"Sort agencies by\"\n />\n \n \n {\n setData({\n ...data,\n agency: !dialog.isOpen ? null : data.agency,\n });\n setDialog({\n ...dialog,\n isOpen: !dialog.isOpen,\n });\n }}\n text=\"Create Agency\"\n />\n \n \n \n \n \n \n \n Name\n Company\n Created At\n Action\n \n \n {(agency, i) => (\n \n {i + 1 + pageOffset}\n {agency.name}\n {agency.company.name}\n {/**/}\n {/* {agency.quoteOfDay ? agency.quoteOfDay.title : '-'}*/}\n {/**/}\n \n \n \n \n {\n setData({ ...data, agency });\n setDialog({ ...dialog, isOpen: true });\n }}\n />\n \n \n )}\n \n \n \n setData({ ...data, page })}\n defaultPage={1}\n total={data.count}\n page={data.page}\n />\n \n \n \n \n {\n setData({\n ...data,\n agency: !dialog.isOpen ? null : data.agency,\n });\n setDialog({\n ...dialog,\n isOpen: !dialog.isOpen,\n });\n }}\n onSubmit={handleSubmit}\n isUpdate={data.agency === null ? false : true}\n />\n \n \n );\n};\n\nexport { AgencyView };\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Heading } from '@8base/boost';\nimport PropTypes from 'prop-types';\nimport { Link, Route, Switch, Redirect, withRouter } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { OnSessionFetch } from '../../shared/session/session-events';\nimport { ADMIN, MANAGER, AGENT } from '../../shared/constants/index';\nimport { useAgency } from '../../shared/hooks/useAgency';\nimport { userHasAnyRoleInAgency } from '../../shared/utils/agency-utils';\nimport { isCompanyAvailable } from '../../shared/utils/company-utils';\nimport { Box } from '../../shared/components/Box';\nimport { InvitationsView } from '../my-account/invitations/InvitationsView';\nimport CompanyView from '../my-account/company/CompanyView';\nimport CompanyInvitationsView from '../my-account/company-invitations/CompanyInvitationsView';\nimport VendorsView from '../vendors/VendorsView';\nimport PhoneNumberView from '../my-account/phone-numbers/PhoneNumberView';\nimport InboundService from './inbound/InboundService';\nimport OutboundService from './outbound/OutboundService';\nimport PhoneCallSettings from './phone-calls/PhoneCallSettings';\nimport VoiceMailMessages from './voice-mail-messages/VoiceMailMessages';\nimport RegistrationStatus from './registration-status/RegistrationStatus';\nimport { GeneralView } from '../my-account/general/GeneralView';\nimport { EmailView } from '../my-account/email/EmailView';\nimport { TeamView } from '../my-account/team/TeamView';\nimport BillingView from '../my-account/billing/BillingView';\nimport { AgencyView } from '../my-account/agency/AgencyView';\n\nexport const routes = [\n {\n name: 'Profile',\n path: '/settings/general',\n auth: [ADMIN, MANAGER, AGENT],\n },\n {\n name: 'Email',\n path: '/settings/email',\n auth: [ADMIN, MANAGER, AGENT],\n },\n {\n name: 'Agencies',\n path: '/settings/agency',\n auth: [ADMIN, MANAGER],\n },\n {\n name: 'Agency Invitations',\n path: '/settings/invitations',\n auth: [ADMIN, MANAGER],\n },\n {\n name: 'Company',\n path: '/settings/company',\n auth: [ADMIN],\n },\n {\n name: 'Company Invitations',\n path: '/settings/company-invitations',\n auth: [ADMIN],\n },\n // {\n // name: 'Status Mapping',\n // path: '/settings/status-mapping',\n // },\n {\n name: 'Billing',\n path: '/settings/billing',\n auth: [ADMIN],\n allow: true,\n },\n {\n name: 'Team',\n path: '/settings/team',\n auth: [ADMIN, MANAGER],\n },\n {\n name: 'Phone numbers',\n path: '/settings/phone-numbers',\n auth: [ADMIN, MANAGER],\n },\n {\n name: 'Outbound Email Services',\n path: '/settings/services/email/outbound',\n auth: [ADMIN, MANAGER, AGENT],\n },\n {\n name: 'Inbound Email Services',\n path: '/settings/services/email/inbound',\n auth: [ADMIN, MANAGER, AGENT],\n },\n {\n name: 'Vendors',\n path: '/settings/vendors',\n auth: [ADMIN, MANAGER],\n },\n {\n name: 'Phone Call Settings',\n path: '/settings/phone-call',\n auth: [ADMIN, MANAGER],\n },\n {\n name: 'Voice Mail Messages',\n path: '/settings/voice-mail-messages',\n auth: [ADMIN, MANAGER, AGENT],\n },\n {\n name: 'Telephony Registration',\n path: '/settings/telephony-registration',\n auth: [ADMIN, MANAGER],\n },\n];\n\nconst Container = styled.div`\n height: calc(100vh - 91px);\n width: 100%;\n background-color: #f4f5f6;\n display: flex;\n flex-direction: row;\n`;\n\nconst Sidebar = styled.div`\n height: calc(100vh - 91px);\n width: 250px;\n display: flex;\n flex-direction: column;\n padding: 24px 0px;\n box-shadow: 2px 0px 5px 0 rgb(50, 50, 93, 0.14);\n`;\n\nconst Content = styled.div`\n width: 100%;\n height: calc(100vh - 91px);\n max-height: calc(100vh - 91px);\n overflow: auto;\n`;\n\nconst List = styled.ul`\n width: 100%;\n list-style: none;\n`;\n\nconst Li = styled.li`\n width: 99%;\n height: 32px;\n ${(props) =>\n props.active &&\n `\n background-color: #fff;\n border-left: 2.5px solid #3db4aa;\n a {\n color: #3db4aa;\n }\n `}\n\n &:hover {\n background-color: #fff;\n border-left: 2.5px solid #3db4aa;\n }\n`;\n\nconst StyledLink = styled(Link)`\n color: #323c47;\n text-decoration: none;\n height: 100%;\n padding-left: 24px;\n display: flex;\n align-items: center;\n ${(props) => (props.active ? 'color: #3db4aa;' : '')}\n &:hover {\n color: #3db4aa;\n }\n`;\n\nconst SettingsView = ({ history }) => {\n const [pathnameActive, setPathnameActive] = useState(window.location.pathname);\n const { user } = OnSessionFetch.get();\n const agency = useAgency();\n\n useEffect(() => {\n const unlisten = history.listen((location) => setPathnameActive(location.pathname));\n\n return () => unlisten();\n }, [history]);\n\n const isCompanyPaid = isCompanyAvailable(agency);\n const items = useMemo(\n () =>\n routes\n .filter(\n (route) =>\n !route.auth ||\n (userHasAnyRoleInAgency(user, agency, route.auth) &&\n (!isCompanyPaid ? route.allow : true)),\n )\n .map((route) => {\n const isActive = pathnameActive === route.path;\n\n return (\n \n \n {route.name}\n \n \n );\n }),\n [user, agency, pathnameActive, isCompanyPaid],\n );\n\n // if (!isCompanyPaid) {\n // return null;\n // }\n\n return (\n \n \n \n Settings\n \n {items}\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\nSettingsView.propTypes = {\n history: PropTypes.object.isRequired,\n};\n\nexport default withRouter(SettingsView);\n","import { error, log } from '@cobuildlab/pure-logger';\nimport {\n FETCH_PHONE_CALL_RECORDINGS,\n DELETE_PHONE_CALL_RECORDING,\n} from './phone-call-recordings-queries';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport {\n OnDeletePhoneCallRecordingError,\n OnDeletePhoneCallRecordingEvent,\n OnFetchPhoneCallRecordingsError,\n OnFetchPhoneCallRecordingsEvent,\n} from '../phone-calls-events';\n\n/**\n * Fetches the Phone Call Recordings by filter and page\n *\n * @param {object} filter - The parameters to filter the results\n * @param {number} page - The page to fetch results from\n *\n * @returns {Promise} Request result\n */\nexport const fetchPhoneCallRecordings = async (filter, page = 1) => {\n const client = OnApolloClient.get();\n const first = 10;\n const skip = first * (page - 1);\n const orderBy = 'createdAt_DESC';\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_PHONE_CALL_RECORDINGS,\n variables: { filter, first, skip, orderBy },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchPhoneCallRecordings', e);\n OnFetchPhoneCallRecordingsError.dispatch(e);\n\n return;\n }\n\n log('fetchPhoneCallRecordings', response.data);\n OnFetchPhoneCallRecordingsEvent.dispatch(response.data);\n};\n\n/**\n * Deletes the specified phone call recording\n *\n * @param {string} id - Phone call recording id\n *\n * @returns {Promise} The request result\n */\nexport const deletePhoneCallRecording = async (id) => {\n const client = OnApolloClient.get();\n let response = null;\n\n try {\n response = await client.mutate({\n mutation: DELETE_PHONE_CALL_RECORDING,\n variables: { data: { id } },\n });\n } catch (e) {\n error('deletePhoneCallRecording', e);\n OnDeletePhoneCallRecordingError.dispatch(e);\n\n return;\n }\n\n log('deletePhoneCallRecording', response.data);\n OnDeletePhoneCallRecordingEvent.dispatch(response.data);\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Card, Paper, Row, Table, Column, Pagination, Icon, Dropdown, Menu } from '@8base/boost';\nimport {\n fetchPhoneCallRecordings,\n deletePhoneCallRecording,\n} from '../../phone-calls/phone-call-recordings/phone-call-recordings-actions';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport * as Toast from '../../../shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { formatPhoneNumber, formatDuration } from '../../phone-calls/phone-calls-utils';\nimport { CALL_TYPES } from '../../phone-calls/phone-calls-model';\nimport { DateBox, YesNoDialog } from '../../../shared/components';\nimport AudioPlayer from 'react-h5-audio-player';\nimport styled from 'styled-components';\nimport 'react-h5-audio-player/lib/styles.css';\nimport {\n OnDeletePhoneCallRecordingError,\n OnDeletePhoneCallRecordingEvent,\n OnFetchPhoneCallRecordingsError,\n OnFetchPhoneCallRecordingsEvent,\n} from 'modules/phone-calls/phone-calls-events';\n\nconst PlayerCell = styled(Table.BodyCell)`\n padding-left: 0px !important;\n`;\n\nconst TableBody = styled(Table.Body)`\n min-height: 250px;\n`;\n\nconst MenuItem = styled(Menu.Item)`\n color: ${({ danger }) => (danger ? '#FF0000' : 'rgb(50, 60, 71)')}!important;\n &:hover {\n ${({ danger }) => (danger ? '' : 'color: #3db4aa !important;')}\n }\n`;\n\n/**\n * Renders the record calls configuration view\n *\n * @param {object} props - Props object passed to this component\n *\n * @returns {React.FC} The component to render\n */\nfunction PhoneCallRecordings(props) {\n const [loading, setLoading] = useState(true);\n const [page, setPage] = useState(1);\n const [recordings, setRecordings] = useState([]);\n const [count, setCount] = useState(0);\n const agency = useAgency();\n const [del, setDelete] = useState({ open: false, loading: false, selected: null });\n\n const refresh = useCallback(() => {\n // const filter = { call: { agency: { id: { equals: agency.id } } } };\n const filter = {\n OR: [\n { call: { agency: { id: { equals: agency.id } } } },\n {\n inboundCall: { agency: { id: { equals: agency.id } } },\n },\n ],\n };\n\n setLoading(true);\n\n fetchPhoneCallRecordings(filter, page);\n }, [agency.id, page]);\n\n const handleDelete = useCallback(\n (recording) => {\n setDelete({ ...del, open: true, selected: recording });\n },\n [del],\n );\n\n const handleConfirmDelete = useCallback(() => {\n deletePhoneCallRecording(del.selected.id);\n\n setDelete({ ...del, loading: true });\n }, [del]);\n\n useEffect(() => {\n refresh();\n }, [refresh]);\n\n useSimpleSubscription(OnFetchPhoneCallRecordingsEvent, ({ phoneCallRecordingsList }) => {\n setLoading(false);\n\n setRecordings(phoneCallRecordingsList.items);\n setCount(phoneCallRecordingsList.count);\n });\n\n useSimpleSubscription(OnDeletePhoneCallRecordingEvent, () => {\n Toast.success('Success', 'Recording deleted successfully!');\n\n setDelete({ ...del, open: false, loading: false, selected: null });\n\n if (page === 1) {\n refresh();\n } else {\n setPage(1);\n }\n });\n\n useSimpleSubscription(OnFetchPhoneCallRecordingsError, (err) => {\n onErrorMixinFC(err);\n });\n\n useSimpleSubscription(OnDeletePhoneCallRecordingError, (err) => {\n onErrorMixinFC(err);\n\n setDelete({ ...del, loading: false });\n });\n\n console.log('recordings', recordings);\n\n return (\n \n \n \n \n \n \n Date\n From\n To\n Duration\n Play\n Actions\n \n \n {(recording) => {\n const call = recording.call || recording.inboundCall;\n const recordingType = recording.call ? CALL_TYPES.OUTBOUND : CALL_TYPES.INBOUND;\n\n const from =\n recordingType === CALL_TYPES.OUTBOUND\n ? `${call.user.firstName} ${call.user.lastName} ${formatPhoneNumber(\n `+${call.from.number.code}${call.from.number.number}`,\n )}`\n : formatPhoneNumber(call.from);\n\n const to =\n recordingType === CALL_TYPES.OUTBOUND\n ? call.lead\n ? `${call.lead.firstName} ${call.lead.lastName} ${formatPhoneNumber(call.to)}`\n : formatPhoneNumber(call.to)\n : `+${call.to.number.code}${call.to.number.number}`;\n\n return (\n \n \n \n \n {from}\n {to}\n {formatDuration(recording.duration * 1000)}\n \n \n \n \n \n \n \n \n \n \n handleDelete(recording)}>\n Delete\n \n \n \n \n \n \n );\n }}\n \n \n \n \n \n \n \n \n \n setDelete({ open: false, loading: false, selected: null })}\n onClose={() => setDelete({ open: false, loading: false, selected: null })}\n title=\"Delete Phone Call Recording\"\n text=\"Are you sure you want to delete this phone call recording ?\"\n />\n \n );\n}\n\nexport default PhoneCallRecordings;\n","import React from 'react';\r\nimport { Dropdown } from '@8base/boost';\r\nimport styled from 'styled-components';\r\nimport { PropTypes } from 'prop-types';\r\nimport { DropdownBodyOnTable, FilterFooter, FilterCategory } from 'shared/components';\r\nimport filterIconGrey from 'shared/assets/images/filter-grey.svg';\r\nimport filterIconGreen from 'shared/assets/images/filter-green.svg';\r\n\r\nconst FilterDropdown = styled(Dropdown)`\r\n display: inline-block;\r\n`;\r\n\r\nconst DropdownBody = styled.div`\r\n background-color: #fff;\r\n position: relative;\r\n z-index: 2000;\r\n border: solid 1px #d0d7dd;\r\n border-radius: 5px;\r\n`;\r\n\r\nconst FilterBody = styled.div`\r\n display: grid;\r\n grid-template-rows: repeat(3, min-content);\r\n grid-template-columns: repeat(${(props) => props.columnsNumber}, [col-start] 1fr [col-end]);\r\n gap: 12px;\r\n padding: 12px;\r\n`;\r\n\r\nconst FilterBtn = styled.div`\r\n display: flex;\r\n border-radius: 5px;\r\n border: solid 1px ${({ active }) => (active ? '#3db4aa' : '#d0d7dd')};\r\n padding: 0px 16px;\r\n height: 36px;\r\n box-sizing: border-box;\r\n align-items: center;\r\n`;\r\n\r\nconst FilterIconLabel = styled.span`\r\n margin-left: 4px;\r\n font-size: 13px;\r\n opacity: 0.9;\r\n ${(props) => (props.active ? 'color: #3db4aa;' : '')}\r\n`;\r\n\r\nconst FilterIcon = styled.img`\r\n width: 2rem;\r\n height: 2rem;\r\n`;\r\n\r\nconst LogFilter = (props) => {\r\n const categories = Object.entries(props.categories).map(([identifier, category]) => (\r\n \r\n ));\r\n const icon = props.active ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n props.onFilterClick()}>\r\n {icon}\r\n Filters\r\n \r\n \r\n \r\n {({ closeDropdown }) => (\r\n \r\n {categories}\r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nLogFilter.propTypes = {\r\n onConfirm: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n onFilterClick: PropTypes.func.isRequired,\r\n active: PropTypes.bool.isRequired,\r\n categories: PropTypes.object.isRequired,\r\n values: PropTypes.object.isRequired,\r\n onFilter: PropTypes.func.isRequired,\r\n};\r\nLogFilter.defaultProps = {\r\n columnsNumber: 2,\r\n};\r\n\r\nexport default LogFilter;\r\n","import { useSubscription } from '@cobuildlab/react-simple-state';\nimport { useCallback, useEffect, useState } from 'react';\nimport { fetchAgencyEmails } from '../../../email/email-actions';\nimport { OnFetchEmails, OnFetchEmailsError } from '../../../email/email-store';\n\nconst initialState = {\n items: [],\n count: 0,\n loading: true,\n error: null,\n};\n\n/**\n * Hook that fetches agency emails\n *\n * @param {string} agency - The agency id\n * @param {object} filters - Data to filter the results\n * @param {string} sort - Order to return the results\n *\n * @returns {object} The hook state\n */\nexport function useAgencyEmails(agency, filters = {}, sort = '') {\n const [state, setState] = useState(initialState);\n const [page, setPage] = useState(1);\n\n const fetch = useCallback(() => {\n setState((prevState) => ({ ...prevState, items: [], loading: true }));\n\n fetchAgencyEmails(agency, page, sort, filters);\n }, [agency, filters, sort, page]);\n\n useSubscription(\n OnFetchEmails,\n ({ mailList }) => {\n setState((prevState) => ({\n ...prevState,\n items: mailList.items,\n count: mailList.count,\n loading: false,\n error: null,\n }));\n },\n [],\n );\n\n useSubscription(\n OnFetchEmailsError,\n (e) => {\n setState((prevState) => ({\n ...prevState,\n error: e,\n loading: false,\n }));\n },\n [],\n );\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n return {\n ...state,\n page,\n setPage,\n refresh: fetch,\n };\n}\n","import React, { useMemo } from 'react';\nimport { Table, Tag, Text, Link, Column } from '@8base/boost';\nimport { EMAIL_TYPES } from '@cobuildlab/lead-volt-share';\nimport { DateBox } from '../../../../shared/components';\nimport PropTypes from 'prop-types';\n\nexport const EmailLogRow = ({ email, columns }) => {\n const { lead } = email;\n let type = null;\n\n if (email.type === EMAIL_TYPES.INBOX) {\n type = Incoming;\n } else {\n type = Outgoing;\n }\n\n const to = useMemo(() => {\n return email?.to?.split(',').map((address, i) => {address});\n }, [email.to]);\n\n const cc = useMemo(\n () => email.ccopy.split(',').map((address, i) => {address}),\n [email.ccopy],\n );\n\n return (\n \n {type}\n \n \n {`${lead.firstName} ${lead.lastName}`}\n \n \n \n {email.from}\n \n \n \n {to}\n \n \n \n \n {cc}\n \n \n \n \n \n \n );\n};\n\nEmailLogRow.propTypes = {\n columns: PropTypes.string.isRequired,\n email: PropTypes.shape({\n from: PropTypes.string.isRequired,\n to: PropTypes.string.isRequired,\n ccopy: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n lead: PropTypes.shape({\n id: PropTypes.string.isRequired,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }).isRequired,\n createdAt: PropTypes.string.isRequired,\n }).isRequired,\n};\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { Card, Table, Pagination, Row } from '@8base/boost';\r\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\r\nimport { fetchManagerAndAgents } from '../../users/user-actions';\r\nimport { ItemFilter as SortFilter } from 'shared/components';\r\nimport { SORT_OPTIONS, FILTER_CATEGORIES } from '../../email/email-model';\r\nimport { onErrorMixinFC } from 'shared/mixins';\r\nimport { useAgency } from 'shared/hooks/useAgency';\r\nimport LogFilter from './components/LogFilter';\r\nimport * as R from 'ramda';\r\nimport styled from 'styled-components';\r\nimport { useAgencyEmails } from './hooks/useAgencyEmails';\r\nimport { EmailLogRow } from './components/EmailLogRow';\r\nimport { Box } from '../../../shared/components/Box';\r\nimport {\r\n OnFetchManagerAndAgentUsersError,\r\n OnFetchManagerAndAgentUsersEvent,\r\n} from 'modules/users/user-events';\r\n\r\nconst TableBody = styled(Table.Body)`\r\n min-height: 400px;\r\n`;\r\n\r\nconst columns =\r\n '150px minmax(150px, 1fr) minmax(150px, 1fr) minmax(150px, 1fr) minmax(150px, 1fr) 150px';\r\n\r\nconst EmailLogs = () => {\r\n const agency = useAgency();\r\n const [filter, setFilter] = useState({});\r\n const [filters, setFilters] = useState({});\r\n const [sort, setSort] = useState('');\r\n const { items, count, loading, error, page, setPage } = useAgencyEmails(agency.id, filters, sort);\r\n const [open, setOpen] = useState(false);\r\n const [categories, setCategories] = useState(FILTER_CATEGORIES);\r\n\r\n useEffect(() => {\r\n fetchManagerAndAgents(agency.id);\r\n }, [agency.id]);\r\n\r\n useEffect(() => {\r\n if (error) {\r\n onErrorMixinFC(error);\r\n }\r\n }, [error]);\r\n\r\n useSimpleSubscription(OnFetchManagerAndAgentUsersEvent, ({ usersList }) => {\r\n const options = R.clone(categories);\r\n\r\n options.assignedTo.options = [\r\n { label: 'None', value: '' },\r\n ...usersList.items.map((user) => ({\r\n label: `${user.firstName} ${user.lastName}`,\r\n value: user.id,\r\n })),\r\n ];\r\n\r\n setCategories(options);\r\n });\r\n\r\n useSimpleSubscription(OnFetchManagerAndAgentUsersError, (e) => {\r\n onErrorMixinFC(e);\r\n });\r\n\r\n const onConfirm = useCallback(() => {\r\n setOpen(false);\r\n\r\n setFilters(filter);\r\n }, [filter]);\r\n\r\n const onFilter = useCallback((name, value) => {\r\n setFilter((prevState) => ({\r\n ...prevState,\r\n [name]: value,\r\n ...(name === 'dateStart' && value > prevState.dateEnd\r\n ? {\r\n dateEnd: '',\r\n }\r\n : {}),\r\n }));\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n setOpen(true)}\r\n active={open}\r\n onFilter={onFilter}\r\n values={filter}\r\n categories={categories}\r\n onConfirm={onConfirm}\r\n onCancel={() => setOpen(false)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Type\r\n Lead\r\n From\r\n To\r\n Cc\r\n Date\r\n \r\n \r\n {(email) => }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EmailLogs;\r\n","import React, { useMemo } from 'react';\nimport { Table, Link, Tag, Text, Paragraph } from '@8base/boost';\nimport { DateBox } from 'shared/components';\nimport PropTypes from 'prop-types';\n\nexport const SmsRow = ({ message, columns }) => {\n let fromComponent = null;\n let toComponent = null;\n let typeComponent = null;\n\n const fromNumber = useMemo(() => {\n return message.from\n ? `+${message.from.number.code} ${message.from.number.number}`\n : message.receivedFrom\n ? `+1 ${message.receivedFrom}`\n : 'No information';\n }, [message]);\n\n const toNumber = useMemo(() => {\n return message.to ? `+1 ${message.to}` : 'No information';\n }, [message]);\n\n if (message.type === 'INCOMING') {\n fromComponent = message.lead ? (\n \n {message.lead.firstName} {message.lead.lastName}\n \n ) : (\n fromNumber\n );\n\n toComponent = toNumber;\n\n typeComponent = {message.type.toLowerCase()};\n } else {\n fromComponent = message.user ? (\n \n {`${message.user.firstName} ${message.user.lastName}`} \n {fromNumber}\n \n ) : (\n `${fromNumber}`\n );\n\n toComponent = message.lead ? (\n \n {message.lead.firstName} {message.lead.lastName}\n \n ) : (\n toNumber\n );\n\n typeComponent = {message.type.toLowerCase()};\n }\n\n return (\n \n {fromComponent}\n {toComponent}\n {typeComponent}\n \n {message.text}\n \n \n \n \n \n );\n};\n\nSmsRow.propTypes = {\n message: PropTypes.shape({\n id: PropTypes.string.isRequired,\n type: PropTypes.oneOf(['INCOMING', 'OUTGOING']),\n lead: PropTypes.shape({\n id: PropTypes.string.isRequired,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }),\n receivedFrom: PropTypes.string,\n from: PropTypes.shape({\n number: PropTypes.shape({\n code: PropTypes.string,\n number: PropTypes.string,\n }),\n }),\n user: PropTypes.shape({\n id: PropTypes.string.isRequired,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }),\n to: PropTypes.string,\n text: PropTypes.string.isRequired,\n createdAt: PropTypes.string.isRequired,\n }).isRequired,\n columns: PropTypes.string.isRequired,\n};\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { Table, Paper, Pagination } from '@8base/boost';\r\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\r\nimport { fetchSMSMessages } from '../../leads/leads-actions';\r\nimport { SMS_FILTER_DATA, SMS_FILTER_CATEGORIES, SMS_SORT_OPTIONS } from '../../leads/leads-model';\r\nimport { fetchManagerAndAgents } from '../../users/user-actions';\r\nimport { ItemFilter } from 'shared/components';\r\nimport styled from 'styled-components';\r\nimport { onErrorMixinFC } from 'shared/mixins';\r\nimport { useAgency } from 'shared/hooks/useAgency';\r\nimport LogFilter from '../email-logs/components/LogFilter';\r\nimport * as toast from 'shared/components/toast/Toast';\r\nimport * as R from 'ramda';\r\nimport { SmsRow } from './SmsRow';\r\nimport { OnFetchSmsListEvent, OnLeadsError } from 'modules/leads/leads-events';\r\nimport {\r\n OnFetchManagerAndAgentUsersError,\r\n OnFetchManagerAndAgentUsersEvent,\r\n} from 'modules/users/user-events';\r\n\r\nconst TableHeader = styled(Table.Header)``;\r\n\r\nconst TableBody = styled(Table.Body)``;\r\n\r\nconst CardHeader = styled.div`\r\n display: grid;\r\n grid-template-columns: repeat(2, 1fr);\r\n height: 64px;\r\n border-bottom: 1px solid #e8eff5;\r\n padding: 0 24px;\r\n position: relative;\r\n`;\r\n\r\nconst HeaderLeftSide = styled.div`\r\n display: flex;\r\n justify-content: flex-start;\r\n align-items: center;\r\n`;\r\n\r\nconst HeaderRightSide = styled.div`\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n > div {\r\n margin-left: 15px;\r\n max-width: 200px;\r\n }\r\n`;\r\n\r\nconst CardBody = styled.div`\r\n overflow: auto;\r\n padding: 0;\r\n`;\r\n\r\nconst PaginationContainer = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n font-size: 1.2rem;\r\n padding: 0 1rem;\r\n\r\n & > div > div > *::before {\r\n background-color: var(--color-primary);\r\n transition: all 0.2s;\r\n }\r\n\r\n & > div > span {\r\n display: inline-block;\r\n padding: 0.5rem 1.5rem;\r\n border: solid 1px #d0d7dd;\r\n border-radius: 5px;\r\n }\r\n`;\r\n\r\n/**\r\n * Component to fetch the Logs of the Lead SMS Messages\r\n *\r\n * @returns {React.Component} Return the Component.\r\n */\r\n\r\nconst SmsLogs = () => {\r\n const agency = useAgency();\r\n\r\n const [smsMessages, setSmsMessages] = useState([]);\r\n const [page, setPage] = useState(1);\r\n const [filter, setFilter] = useState(R.clone(SMS_FILTER_DATA));\r\n const [currentFilter, setCurrentFilter] = useState(R.clone(SMS_FILTER_DATA));\r\n const [showFilter, setShowFilter] = useState(false);\r\n const [filterCategories, setFilterCategories] = useState(R.clone(SMS_FILTER_CATEGORIES));\r\n const [loading, setLoading] = useState(true);\r\n\r\n useSimpleSubscription(OnFetchSmsListEvent, ({ sMSMessagesList }) => {\r\n setSmsMessages(sMSMessagesList);\r\n setLoading(false);\r\n });\r\n\r\n useSimpleSubscription(OnLeadsError, (err) => {\r\n console.log(err);\r\n onErrorMixinFC(err);\r\n });\r\n\r\n useSimpleSubscription(OnFetchManagerAndAgentUsersEvent, ({ usersList }) => {\r\n const categoriesClone = R.clone(filterCategories);\r\n\r\n categoriesClone.assignedTo.options = usersList.items.map((user) => ({\r\n label: `${user.firstName} ${user.lastName}`,\r\n value: user.id,\r\n }));\r\n\r\n setFilterCategories(categoriesClone);\r\n });\r\n\r\n useSimpleSubscription(OnFetchManagerAndAgentUsersError, () => {\r\n toast.error('Users Managment', 'There was an error fetching the users, please try again.');\r\n });\r\n\r\n const filterHandler = useCallback(\r\n (identifier, value) => {\r\n //console.log('filterHandlre called');\r\n const newFilter = { ...filter };\r\n newFilter[identifier] = value;\r\n if (identifier === 'dateStart') {\r\n if (newFilter.dateStart > newFilter.dateEnd) {\r\n newFilter.dateEnd = '';\r\n }\r\n }\r\n //console.log('newFilter', newFilter);\r\n setFilter(newFilter);\r\n },\r\n [filter],\r\n );\r\n\r\n const confirmFilterHandler = useCallback(() => {\r\n setShowFilter(false);\r\n setCurrentFilter(filter);\r\n setLoading(true);\r\n }, [filter]);\r\n\r\n const sortHandler = (value) => {\r\n const newState = R.clone(currentFilter);\r\n newState.sort = value;\r\n setCurrentFilter(newState);\r\n setLoading(true);\r\n };\r\n\r\n const filterClickHandler = () => {\r\n setShowFilter(true);\r\n };\r\n\r\n const handlePageChanger = (page) => {\r\n console.log(page);\r\n setPage(page);\r\n setLoading(true);\r\n };\r\n\r\n const getSmsMessages = () => {\r\n fetchSMSMessages(page, { ...currentFilter, agency: agency.id });\r\n };\r\n\r\n const getAgents = () => {\r\n fetchManagerAndAgents(agency.id);\r\n };\r\n\r\n useEffect(() => {\r\n if (loading) {\r\n getSmsMessages();\r\n getAgents();\r\n }\r\n // eslint-disable-next-line\r\n }, [loading]);\r\n\r\n const columnsSize = 'minmax(150px, 250px) minmax(150px, 250px) 150px minmax(150px, 1fr) 150px';\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n setFilter(currentFilter);\r\n }}\r\n />\r\n {\r\n sortHandler(value);\r\n }}\r\n value={currentFilter.sort}\r\n options={SMS_SORT_OPTIONS}\r\n placeholder=\"Sort SMS Logs by Date (Newest/Oldest)\"\r\n />\r\n \r\n \r\n \r\n \r\n \r\n From\r\n To\r\n Type\r\n Text\r\n Date\r\n \r\n \r\n {(smsMessage) => }\r\n \r\n \r\n \r\n {\r\n handlePageChanger(page);\r\n }}\r\n defaultPage={1}\r\n total={smsMessages.count}\r\n page={page}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default SmsLogs;\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { Table, Paper, Dialog, Pagination } from '@8base/boost';\r\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\r\nimport { fetchPhoneCalls } from '../../phone-calls/phone-calls-actions';\r\nimport {\r\n FILTER_DATA,\r\n FILTER_CATEGORIES_OUTBOUND,\r\n SORT_OPTIONS,\r\n} from '../../phone-calls/phone-calls-model';\r\nimport { fetchManagerAndAgents } from '../../users/user-actions';\r\nimport { ItemFilter } from 'shared/components';\r\nimport FormValues from '../../../shared/components/forms/FormValues';\r\nimport { onErrorMixinFC } from 'shared/mixins';\r\nimport { DateBox } from 'shared/components';\r\nimport { useAgency } from 'shared/hooks/useAgency';\r\nimport LogFilter from '../email-logs/components/LogFilter';\r\nimport styled from 'styled-components';\r\nimport * as toast from 'shared/components/toast/Toast';\r\nimport * as R from 'ramda';\r\nimport { IconInfo } from '../../../shared/components/ui/Icons';\r\nimport { getPhoneNumberStr } from '../../my-account/phone-numbers/phone-numbers-utils';\r\nimport { formatPhoneNumber } from '../../phone-calls/phone-calls-utils';\r\nimport moment from 'moment';\r\nimport {\r\n OnFetchOutboundCallsError,\r\n OnFetchOutboundCallsEvent,\r\n} from 'modules/phone-calls/phone-calls-events';\r\nimport {\r\n OnFetchManagerAndAgentUsersError,\r\n OnFetchManagerAndAgentUsersEvent,\r\n} from 'modules/users/user-events';\r\n\r\nconst TableHeader = styled(Table.Header)``;\r\n\r\nconst TableBody = styled(Table.Body)``;\r\n\r\nconst TableBodyRow = styled(Table.BodyRow)``;\r\n\r\nconst CardHeader = styled.div`\r\n display: grid;\r\n grid-template-columns: repeat(2, 1fr);\r\n height: 64px;\r\n border-bottom: 1px solid #e8eff5;\r\n padding: 0 24px;\r\n position: relative;\r\n`;\r\n\r\nconst HeaderLeftSide = styled.div`\r\n display: flex;\r\n justify-content: flex-start;\r\n align-items: center;\r\n`;\r\n\r\nconst HeaderRightSide = styled.div`\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n > div {\r\n margin-left: 15px;\r\n max-width: 200px;\r\n }\r\n`;\r\n\r\nconst CardBody = styled.div`\r\n overflow: auto;\r\n padding: 0;\r\n`;\r\n\r\nconst PaginationContainer = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n font-size: 1.2rem;\r\n padding: 0 1rem;\r\n\r\n & > div > div > *::before {\r\n background-color: var(--color-primary);\r\n transition: all 0.2s;\r\n }\r\n\r\n & > div > span {\r\n display: inline-block;\r\n padding: 0.5rem 1.5rem;\r\n border: solid 1px #d0d7dd;\r\n border-radius: 5px;\r\n }\r\n`;\r\n\r\nconst columnsSize =\r\n 'minmax(150px, 1fr) minmax(150px, 1fr) minmax(150px, 1fr) minmax(150px, 1fr) minmax(150px, 1fr) 150px';\r\n\r\n/**\r\n * Component to fetch the Logs of the Lead SMS Messages\r\n *\r\n * @returns {React.Component} Return the Component.\r\n */\r\n\r\nconst PhoneCallsLogs = () => {\r\n const agency = useAgency();\r\n\r\n const [phoneCalls, setPhoneCalls] = useState([]);\r\n const [page, setPage] = useState(1);\r\n const [filter, setFilter] = useState(R.clone(FILTER_DATA));\r\n const [currentFilter, setCurrentFilter] = useState(R.clone(FILTER_DATA));\r\n const [showFilter, setShowFilter] = useState(false);\r\n const [filterCategories, setFilterCategories] = useState(R.clone(FILTER_CATEGORIES_OUTBOUND));\r\n const [loading, setLoading] = useState(true);\r\n const [disposition, setDisposition] = useState({ open: false, data: {} });\r\n\r\n useSimpleSubscription(OnFetchOutboundCallsEvent, ({ phoneCallsList }) => {\r\n setPhoneCalls(phoneCallsList);\r\n setLoading(false);\r\n });\r\n\r\n useSimpleSubscription(OnFetchOutboundCallsError, (err) => {\r\n onErrorMixinFC(err);\r\n });\r\n\r\n useSimpleSubscription(OnFetchManagerAndAgentUsersEvent, ({ usersList }) => {\r\n const categoriesClone = R.clone(filterCategories);\r\n const defaultOption = {\r\n label: `None`,\r\n value: '',\r\n };\r\n categoriesClone.assignedTo.options = usersList.items.map((user) => ({\r\n label: `${user.firstName} ${user.lastName}`,\r\n value: user.id,\r\n }));\r\n categoriesClone.assignedTo.options.unshift(defaultOption);\r\n setFilterCategories(categoriesClone);\r\n });\r\n\r\n useSimpleSubscription(OnFetchManagerAndAgentUsersError, () => {\r\n toast.error('Users Managment', 'There was an error fetching the users, please try again.');\r\n });\r\n\r\n const filterHandler = useCallback(\r\n (identifier, value) => {\r\n const newFilter = { ...filter };\r\n newFilter[identifier] = value;\r\n if (identifier === 'dateStart') {\r\n if (newFilter.dateStart > newFilter.dateEnd) {\r\n newFilter.dateEnd = '';\r\n }\r\n }\r\n setFilter(newFilter);\r\n },\r\n [filter],\r\n );\r\n\r\n const onDispositionClick = useCallback((data) => {\r\n setDisposition((state) => ({\r\n ...state,\r\n data: {\r\n carrier: data.carrier,\r\n currentPremium: data.currentPremium,\r\n quotedPremium: data.quotedPremium,\r\n status: data?.status?.name,\r\n expirationDate: data?.expirationDate\r\n ? moment(data?.expirationDate).format('MM/DD/YYYY')\r\n : '',\r\n insurance: data?.insurance,\r\n notes: data.notes,\r\n ifsScore: '',\r\n createdAt: moment(data.createdAt).format('MM/DD/YYYY'),\r\n createdBy: `${data.createdBy.firstName} ${data.createdBy.lastName} (${data.createdBy.email})`,\r\n },\r\n open: true,\r\n }));\r\n }, []);\r\n\r\n const confirmFilterHandler = useCallback(() => {\r\n setShowFilter(false);\r\n setCurrentFilter(filter);\r\n setLoading(true);\r\n }, [filter]);\r\n\r\n const sortHandler = (value) => {\r\n const newState = R.clone(currentFilter);\r\n newState.sort = value;\r\n setCurrentFilter(newState);\r\n setLoading(true);\r\n };\r\n\r\n const filterClickHandler = () => {\r\n setShowFilter(true);\r\n };\r\n\r\n const handlePageChanger = (page) => {\r\n setPage(page);\r\n setLoading(true);\r\n };\r\n\r\n const getSmsMessages = () => {\r\n fetchPhoneCalls(page, { ...currentFilter, agency: agency.id });\r\n };\r\n\r\n const getAgents = () => {\r\n fetchManagerAndAgents(agency.id);\r\n };\r\n\r\n useEffect(() => {\r\n if (loading) {\r\n getSmsMessages();\r\n getAgents();\r\n }\r\n // eslint-disable-next-line\r\n }, [loading]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n setFilter(currentFilter);\r\n }}\r\n />\r\n {\r\n sortHandler(value);\r\n }}\r\n value={currentFilter.sort}\r\n options={SORT_OPTIONS}\r\n placeholder=\"Sort Call Logs by Date (Newest/Oldest)\"\r\n />\r\n \r\n \r\n \r\n \r\n \r\n Leads\r\n From\r\n To\r\n Agents\r\n Dates\r\n Disposition\r\n \r\n \r\n {(phoneCall) => (\r\n \r\n \r\n {phoneCall.lead\r\n ? `${phoneCall.lead.firstName} ${phoneCall.lead.lastName}`\r\n : 'Without Lead'}\r\n \r\n \r\n {phoneCall.from && formatPhoneNumber(getPhoneNumberStr(phoneCall.from))}\r\n \r\n {phoneCall.to}\r\n \r\n {phoneCall.createdBy.firstName} {phoneCall.createdBy.lastName}\r\n \r\n \r\n \r\n \r\n \r\n {phoneCall.phoneCallDispositionRelation && (\r\n onDispositionClick(phoneCall.phoneCallDispositionRelation)}\r\n />\r\n )}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n {\r\n handlePageChanger(page);\r\n }}\r\n defaultPage={1}\r\n total={phoneCalls.count}\r\n page={page}\r\n />\r\n \r\n \r\n \r\n \r\n {disposition.open && (\r\n \r\n setDisposition((state) => ({ ...state, open: false, data: {} }))}\r\n />\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst rows = [\r\n [\r\n {\r\n key: 'carrier',\r\n label: 'Carrier',\r\n type: 'text',\r\n },\r\n {\r\n key: 'currentPremium',\r\n label: 'Current Premium',\r\n type: 'text',\r\n },\r\n {\r\n key: 'quotedPremium',\r\n label: 'Quoted Premium',\r\n type: 'text',\r\n },\r\n {\r\n key: 'status',\r\n label: 'Status',\r\n type: 'text',\r\n },\r\n ],\r\n [\r\n {\r\n key: 'insurance',\r\n label: 'Insurance',\r\n type: 'text',\r\n },\r\n {\r\n key: 'expirationDate',\r\n label: 'Expiration Date',\r\n type: 'text',\r\n },\r\n ],\r\n [\r\n {\r\n key: 'score',\r\n label: 'Score',\r\n type: 'text',\r\n },\r\n {\r\n key: 'createdAt',\r\n label: 'Dispositon created at',\r\n type: 'text',\r\n },\r\n ],\r\n [\r\n {\r\n key: 'createdBy',\r\n label: 'Created By',\r\n type: 'text',\r\n },\r\n ],\r\n];\r\n\r\nexport default PhoneCallsLogs;\r\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Row, Dropdown, Text, Grid, DateInputField } from '@8base/boost';\nimport { FilterButtonWithFocus as Button, Padding } from '../../../../shared/components';\nimport * as Toast from '../../../../shared/components/toast/Toast';\nimport * as moment from 'moment';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst Container = styled(Padding)`\n border-bottom: solid 1px #d0d7dd;\n`;\n\n/**\n * Agents info filter component\n *\n * @param {object} props - The component's prop object\n * @param {Function} props.onFilter - The function to submit changes\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentsInfoFilter({ onFilter }) {\n const [isOpen, setOpen] = useState(false);\n const [form, setForm] = useState({});\n\n useEffect(() => {\n setForm((state) => ({\n ...state,\n from: moment()\n .startOf('month')\n .format('YYYY-MM-DD'),\n to: moment()\n .endOf('month')\n .format('YYYY-MM-DD'),\n }));\n }, []);\n\n const handleToggle = useCallback(() => {\n setOpen((state) => !state);\n }, []);\n\n const handleDropdownClose = useCallback(() => {\n setOpen(false);\n }, []);\n\n const handleChange = useCallback((name, value) => {\n setForm((state) => ({\n ...state,\n [name]: value,\n }));\n }, []);\n\n const handleApply = useCallback(() => {\n if (!form.from || !form.to) return Toast.error('Both dates are needed');\n\n onFilter(form);\n\n setOpen(false);\n }, [form, onFilter]);\n\n const handleCancel = useCallback(() => {\n setOpen(false);\n }, []);\n\n return (\n \n \n \n \n \n \n \n \n handleChange('from', value),\n }}\n />\n \n \n handleChange('to', value),\n }}\n />\n \n \n \n \n \n \n Apply Filters\n \n \n Cancel\n \n \n \n \n \n );\n}\n\nAgentsInfoFilter.propTypes = {\n onFilter: PropTypes.func.isRequired,\n};\n\nexport default AgentsInfoFilter;\n","import React, { useCallback, useState } from 'react';\nimport { Row, Grid } from '@8base/boost';\nimport AgentsInfoFilter from './AgentsInfoFilter';\nimport { SearchInput } from '../../../../shared/components';\nimport PropTypes from 'prop-types';\n\n/**\n * Agents info header component\n *\n * @param {object} props - The props object\n * @param {Function} props.onFilter - The set filter function\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentsInfoHeader({ onFilter }) {\n const [search, setSearch] = useState('');\n\n const handleFilter = useCallback(\n (filter) => {\n const from = `${filter.from}T00:00:00Z`;\n const to = `${filter.to}T23:59:59Z`;\n\n onFilter((state) => ({\n ...state,\n from,\n to,\n }));\n },\n [onFilter],\n );\n\n const handleSearch = useCallback(() => {\n onFilter((state) => ({\n ...state,\n search,\n }));\n }, [search, onFilter]);\n\n return (\n \n \n \n \n \n \n \n \n \n \n );\n}\n\nAgentsInfoHeader.propTypes = {\n onFilter: PropTypes.func.isRequired,\n};\n\nexport default AgentsInfoHeader;\n","import React, { useEffect } from 'react';\nimport { Table, Loader, Row } from '@8base/boost';\nimport { usePromise } from '@cobuildlab/hooks-utils';\nimport { fetchUserInfoInAgency } from '../../../users/user-actions';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport PropTypes from 'prop-types';\n\n/**\n * Agents info row component\n *\n * @param {object} props - The component's prop object\n * @param {object} props.agent - The user object\n * @param {string} props.columns - The columns layout\n * @param {object} props.filters - The filters object\n * @param {string} props.agencyId - The agency id\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentsInfoRow({ agent, columns, filters, agencyId }) {\n const [data, loading, { error }] = usePromise(\n () => fetchUserInfoInAgency(agent.id, agencyId, filters.from, filters.to),\n { initialState: null },\n [agent.id, agencyId, filters],\n );\n\n useEffect(() => {\n if (error) {\n onErrorMixinFC(error);\n }\n }, [error]);\n\n const sold = loading\n ? null\n : data && !error\n ? new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n }).format(data.leadsList.groups[0].amount)\n : 0;\n\n const time = loading ? null : data && !error ? data.phoneCallsList.groups[0].duration : 0;\n const sms = loading ? null : data && !error ? data.sMSMessagesList.count : 0;\n const createdTask = loading ? null : data && !error ? data.leadTasksList.count : 0;\n const updatedTask = loading ? null : data && !error ? data.leadHistoriesList.groups[0].count : 0;\n\n return (\n \n \n {agent.firstName} {agent.lastName}\n \n {!loading && `${sold !== null ? sold : 0}`}\n {!loading && `${time !== null ? time : 0} seg`}\n \n {loading ? (\n \n \n \n ) : (\n sms\n )}\n \n {!loading && `${createdTask}`}\n {!loading && `${updatedTask !== null ? updatedTask : 0}`}\n \n );\n}\n\nAgentsInfoRow.propTypes = {\n agent: PropTypes.shape({\n id: PropTypes.string.isRequired,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }).isRequired,\n columns: PropTypes.string.isRequired,\n filters: PropTypes.shape({\n from: PropTypes.string.isRequired,\n to: PropTypes.string.isRequired,\n }).isRequired,\n agencyId: PropTypes.string.isRequired,\n};\n\nexport default AgentsInfoRow;\n","import React, { useState } from 'react';\nimport { Card, Table as BoostTable, Row, Pagination } from '@8base/boost';\nimport AgentsInfoHeader from './components/AgentsInfoHeader';\nimport AgentsInfoRow from './components/AgentsInfoRow';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { useUsersInAgency } from '../../users/users-hooks';\nimport styled from 'styled-components';\nimport * as moment from 'moment';\n\nconst Table = styled(BoostTable)`\n & div[role='loader'] > div[role='loader'] div {\n border-color: #3db4aa !important;\n }\n`;\n\nconst Body = styled(BoostTable.Body)`\n min-height: 400px;\n`;\n\nconst columns = 'minmax(200px, 1fr) 150px 150px 150px 150px 150px';\n\n/**\n * Agency Info Component\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentInfo() {\n const [page, setPage] = useState(1);\n const [filters, setFilters] = useState({\n from: moment()\n .startOf('month')\n .toISOString(),\n to: moment()\n .endOf('month')\n .toISOString(),\n search: '',\n });\n const agency = useAgency();\n const { items: users, loading, count } = useUsersInAgency(agency.id, page, filters.search);\n\n return (\n \n \n \n \n \n \n \n Agent\n Sold Amount\n Time on Calls\n SMS Sent\n Task Created\n Task Completed\n \n \n {(agent) => (\n \n )}\n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default AgentInfo;\n","import moment from 'moment';\n\n/**\n * @param {('now'|'day-start'|'morning'|'afternoon')} key - Key\n * @returns {string} Date string.\n */\nexport function getDates(key) {\n const dateNow = moment();\n if (key === 'now') {\n return dateNow.toISOString();\n } else if (key === 'day-start') {\n const dateLimit = moment()\n .startOf('day')\n .toISOString();\n\n return dateLimit;\n } else if (key === 'morning') {\n const dateLimit = moment('11:00 am', 'HH:mm a').toISOString();\n\n return dateLimit;\n } else if (key === 'afternoon') {\n const dateLimit = moment('6:00 pm', 'HH:mm a').toISOString();\n\n return dateLimit;\n }\n}\n","import React, { useState, useCallback } from 'react';\nimport {\n Row,\n Dropdown,\n Button as BoostButton,\n Text,\n Grid,\n DateInputField,\n Radio,\n} from '@8base/boost';\nimport { IconFilterGreen, IconFilterGrey } from '../../../../shared/components/ui/Icons';\nimport { Padding } from '../../../../shared/components';\nimport * as Toast from '../../../../shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { getDates } from '../agent-calls-utils';\n\nconst Button = styled(BoostButton)`\n padding: 0 10px !important;\n ${(props) => props.isOpen && 'border-color: #3db4aa !important;'}\n\n & > *:not(:last-child) {\n margin-right: 4px !important;\n }\n`;\n\nconst Container = styled(Padding)`\n border-bottom: solid 1px #d0d7dd;\n`;\n\n/**\n * Agents info filter component\n *\n * @param {object} props - The component's prop object\n * @param {Function} props.onFilter - The function to submit changes\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentsInfoFilter({ onFilter }) {\n const [isOpen, setOpen] = useState(false);\n const [categories, setCategories] = useState(1);\n const [form, setForm] = useState(() => ({\n from: getDates('day-start'),\n to: getDates('now'),\n }));\n\n const onHandleCategoryChange = (value) => {\n const form = {\n to: getDates('now'),\n from: getDates('day-start'),\n };\n\n if (value === 1) {\n form.to = getDates('morning');\n } else if (value === 2) {\n form.to = getDates('afternoon');\n }\n setForm((state) => ({\n ...state,\n ...form,\n }));\n setCategories(value);\n };\n const handleToggle = useCallback(() => {\n setOpen((state) => !state);\n }, []);\n\n const handleDropdownClose = useCallback(() => {\n setOpen(false);\n }, []);\n\n const handleChange = useCallback((name, value) => {\n setForm((state) => ({\n ...state,\n [name]: value,\n }));\n }, []);\n\n const handleApply = useCallback(() => {\n if (!form.from || !form.to) return Toast.error('Both dates are needed');\n\n onFilter(form);\n\n setOpen(false);\n }, [form, onFilter]);\n\n const handleCancel = useCallback(() => {\n setOpen(false);\n }, []);\n\n const icon = isOpen ? : ;\n\n return (\n \n \n \n {icon} Filters\n \n \n \n \n \n \n \n \n \n \n \n \n {categories === 3 && (\n <>\n \n handleChange('from', value),\n }}\n />\n \n \n handleChange('to', value),\n }}\n />\n \n >\n )}\n \n \n \n \n \n Apply Filters\n \n \n Cancel\n \n \n \n \n \n );\n}\n\nAgentsInfoFilter.propTypes = {\n onFilter: PropTypes.func.isRequired,\n};\n\nexport default AgentsInfoFilter;\n","import React, { useCallback, useState } from 'react';\nimport { Row, Grid } from '@8base/boost';\nimport AgentsInfoFilter from './AgentsCallsFilter';\nimport { SearchInput } from '../../../../shared/components';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\n\n/**\n * Agents info header component\n *\n * @param {object} props - The props object\n * @param {Function} props.onFilter - The set filter function\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentsCallsHeader({ onFilter }) {\n const [search, setSearch] = useState('');\n\n const handleFilter = useCallback(\n (filter) => {\n const from = moment(filter.from).toISOString();\n const to = moment(filter.to).toISOString();\n\n onFilter((state) => ({\n ...state,\n from,\n to,\n }));\n },\n [onFilter],\n );\n\n const handleSearch = useCallback(() => {\n onFilter((state) => ({\n ...state,\n search,\n }));\n }, [search, onFilter]);\n\n return (\n \n \n \n \n \n \n \n \n \n \n );\n}\n\nAgentsCallsHeader.propTypes = {\n onFilter: PropTypes.func.isRequired,\n};\n\nexport default AgentsCallsHeader;\n","import moment from 'moment';\n/**\n * @param {number|string}time - Time to add cero.\n * @returns {string} - string with left cero.\n */\nexport function addLeftCero(time) {\n return `0${parseInt(time)}`.slice(-2);\n}\n/**\n * @param {number} duration - Duaration as seconds by default\n * @param {string} unit - To define the unit in which the duration has to be calculated.\n * @returns {string} - Formated duration string\n */\nexport function formatDuration(duration, unit = 'seconds') {\n const momentDuration = moment.duration(duration, unit);\n\n const hours = addLeftCero(momentDuration.hours());\n const minutes = addLeftCero(momentDuration.minutes());\n const seconds = addLeftCero(momentDuration.seconds());\n\n return `${hours}:${minutes}:${seconds}`;\n}\n","import React from 'react';\nimport { Table } from '@8base/boost';\nimport PropTypes from 'prop-types';\nimport StyledBadge from '../../../../shared/components/ui/StyledBadge';\nimport { AGENTS_CALL_PERFORMANCE_STATUSES as STATUSES } from '@cobuildlab/lead-volt-share';\nimport { formatDuration } from '../../../../shared/utils/moment-utils';\n\n/**\n * Agents info row component\n *\n * @param {object} props - The component's prop object\n * @param {object} props.agent - The user object\n * @param {string} props.columns - The columns layout\n * @param {object} props.filters - The filters object\n * @param {string} props.agencyId - The agency id\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentsInfoRow({ agent, columns }) {\n let priority = 1;\n if (agent.status === STATUSES.BAD) {\n priority = 4;\n } else if (agent.status === STATUSES.REGULAR) {\n priority = 2;\n }\n const totalTalkTime = formatDuration(Number(agent.totalTalkTime));\n const talkTimeAverage = `${formatDuration(Number(agent.talkTimeAverage))}/h`;\n const callsPerHours = Number(agent.callsPerHours).toFixed(2);\n\n return (\n \n \n \n {agent.firstName} {agent.lastName}\n \n \n {callsPerHours}\n {agent.outboundDialsCount}\n {agent.totalDialsCount}\n {agent.contacts}\n {agent.dialPerContact}\n {totalTalkTime}\n {talkTimeAverage}\n {agent.quotesPerClose}\n \n );\n}\n\nAgentsInfoRow.propTypes = {\n agent: PropTypes.shape({\n id: PropTypes.string.isRequired,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n status: PropTypes.string.isRequired,\n totalTalkTime: PropTypes.number,\n talkTimeAverage: PropTypes.number,\n outboundDialsCount: PropTypes.number,\n totalDialsCount: PropTypes.number,\n contacts: PropTypes.number,\n dialPerContact: PropTypes.number,\n callsPerHours: PropTypes.number,\n quotesPerClose: PropTypes.number,\n }).isRequired,\n columns: PropTypes.string.isRequired,\n filters: PropTypes.shape({\n from: PropTypes.string.isRequired,\n to: PropTypes.string.isRequired,\n }).isRequired,\n // agencyId: PropTypes.string.isRequired,\n};\n\nexport default AgentsInfoRow;\n","import gql from 'graphql-tag';\n\nexport const FETCH_AGENT_CALL_REPORT_QUERY = gql`\n query FetchAgentCalls(\n $agency: ID!\n $search: String\n $startDate: DateTime!\n $endDate: DateTime!\n $first: Int\n $skip: Int\n ) {\n agentsCalls(\n agency: $agency\n search: $search\n startDate: $startDate\n endDate: $endDate\n first: $first\n skip: $skip\n ) {\n items {\n firstName\n lastName\n outboundDialsCount\n totalDialsCount\n contacts\n callsPerHours\n status\n totalTalkTime\n dialPerContact\n talkTimePerHour\n talkTimeAverage\n quotesPerClose\n }\n count\n }\n }\n`;\n","import { OnApolloClient } from '../../../shared/session/session-events';\nimport { FETCH_AGENT_CALL_REPORT_QUERY } from './agent-calls-querys';\nimport { log } from '@cobuildlab/pure-logger';\n\n/**\n * @param {string} agency - Agency id\n * @param {string} search - The search param\n * @param {string} startDate - Bottom date\n * @param {string} endDate - Top date\n * @param {number} page - page number\n *\n * @returns {{items:[],count:number}} - Data\n */\nexport async function fetchAgentCallsReport(agency, search, startDate, endDate, page = 1) {\n const client = OnApolloClient.get();\n\n const first = 10;\n const skip = (page - 1) * first;\n const variables = {\n agency,\n search,\n startDate,\n endDate,\n first,\n skip,\n };\n\n const response = await client.query({\n query: FETCH_AGENT_CALL_REPORT_QUERY,\n fetchPolicy: 'network-only',\n variables,\n });\n\n log('fetchAgentCallsReport', response.data);\n\n return response.data.agentsCalls;\n}\n","import React, { useState } from 'react';\nimport { Card, Table as BoostTable, Row, Pagination } from '@8base/boost';\nimport AgentsCallsHeader from './components/AgentsCallsHeader';\nimport AgentsInfoRow from './components/AgentsCallsRow';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport styled from 'styled-components';\nimport { useAgentCallsReport } from './agent-calls-hooks';\nimport { getDates } from './agent-calls-utils';\n\nconst Table = styled(BoostTable)`\n & div[role='loader'] > div[role='loader'] div {\n border-color: #3db4aa !important;\n }\n`;\n\nconst Body = styled(BoostTable.Body)`\n min-height: 400px;\n`;\n\nconst columns = 'minmax(200px, 1fr) 140px 140px 140px 140px 140px 140px 140px 140px';\n\n/**\n * Agency Info Component\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentCalls() {\n const [page, setPage] = useState(1);\n const [filters, setFilters] = useState(() => ({\n from: getDates('day-start'),\n to: getDates('now'),\n search: '',\n }));\n const agency = useAgency();\n\n const [users, count, loading] = useAgentCallsReport(agency.id, page, filters);\n\n return (\n \n \n \n \n \n \n \n Agent\n Dials/hours\n Outboud dials\n Total dials\n Contacts\n Dials/contacts\n TalkTime\n TalkTime(%)\n Quotes/Close\n \n \n {(agent) => (\n \n )}\n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default AgentCalls;\n","import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';\nexport type Maybe = T;\nexport type Exact = { [K in keyof T]: T[K] };\nexport type MakeOptional = Omit & { [SubKey in K]?: Maybe };\nexport type MakeMaybe = Omit & { [SubKey in K]: Maybe };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n /** A date-time string at UTC, such as `2007-12-25T16:15:30Z`, compliant with the `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */\n DateTime: any;\n /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */\n JSON: any;\n /** The `BigInt` scalar type represents whole numeric values. */\n BigInt: any;\n /** A date string, such as `2007-12-25`, compliant with the `full-date` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */\n Date: any;\n /** A time string at UTC, such as `16:15:30Z`, compliant with the `full-time` format outlined in section 5.6 of the RFC 3339profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */\n Time: any;\n};\nexport type Admin = {\n __typename?: 'Admin';\n id: Maybe;\n createdAt: Maybe;\n updatedAt: Maybe;\n deletedAt: Maybe;\n createdBy: Maybe;\n user: Maybe;\n company: Maybe;\n _description: Maybe;\n};\n\nexport type Admin_PermissionFilter = {\n id?: Maybe;\n createdAt?: Maybe;\n updatedAt?: Maybe;\n deletedAt?: Maybe;\n _fullText?: Maybe;\n createdBy?: Maybe;\n user?: Maybe;\n company?: Maybe;\n AND?: Maybe>;\n OR?: Maybe>;\n};\n\nexport type Admin_PermissionRelationFilter = {\n some?: Maybe;\n every?: Maybe;\n none?: Maybe;\n};\n\n/** Admin relation input */\nexport type AdminCompanyManyRelationInput = {\n connect?: Maybe;\n};\n\n/** Company create input from adminCompanyRelation */\nexport type AdminCompanyRelation_CompanyCreateInput = {\n name: Scalars['String'];\n taxId?: Maybe;\n adminCompanyRelation?: Maybe;\n agencyCompanyRelation?: Maybe;\n companyInvitationCompanyRelation?: Maybe;\n paymentMethodCompanyRelation?: Maybe;\n subscriptions?: Maybe;\n /** DEPRECATED */\n cardExpireDate?: Maybe;\n /** DEPRECATED */\n last4?: Maybe;\n /** DEPRECATED */\n addressLine1?: Maybe;\n /** DEPRECATED */\n addressLine2?: Maybe;\n /** DEPRECATED */\n city?: Maybe;\n /** DEPRECATED */\n state?: Maybe;\n /** DEPRECATED */\n country?: Maybe;\n companyInvoices?: Maybe;\n companyPaymentMethods?: Maybe;\n status?: Maybe;\n};\n\n/** Company update input from adminCompanyRelation */\nexport type AdminCompanyRelation_CompanyUpdateInput = {\n name?: Maybe;\n taxId?: Maybe;\n adminCompanyRelation?: Maybe;\n agencyCompanyRelation?: Maybe;\n companyInvitationCompanyRelation?: Maybe<\n CompanyCompanyInvitationCompanyRelationUpdateRelationInput\n >;\n paymentMethodCompanyRelation?: Maybe;\n subscriptions?: Maybe;\n /** DEPRECATED */\n cardExpireDate?: Maybe;\n /** DEPRECATED */\n last4?: Maybe;\n /** DEPRECATED */\n addressLine1?: Maybe;\n /** DEPRECATED */\n addressLine2?: Maybe;\n /** DEPRECATED */\n city?: Maybe;\n /** DEPRECATED */\n state?: Maybe;\n /** DEPRECATED */\n country?: Maybe;\n companyInvoices?: Maybe;\n companyPaymentMethods?: Maybe;\n status?: Maybe;\n};\n\n/** Admin relation input */\nexport type AdminCompanyRelationInput = {\n connect?: Maybe;\n create?: Maybe;\n};\n\n/** Admin relation input */\nexport type AdminCompanyUpdateRelationInput = {\n connect?: Maybe;\n disconnect?: Maybe;\n reconnect?: Maybe;\n create?: Maybe;\n update?: Maybe;\n};\n\n/** Admin create input */\nexport type AdminCreateInput = {\n user: AdminUserRelationInput;\n company: AdminCompanyRelationInput;\n};\n\n/** Admin create many input */\nexport type AdminCreateManyInput = {\n user: AdminUserManyRelationInput;\n company: AdminCompanyManyRelationInput;\n};\n\n/** Admin delete input */\nexport type AdminDeleteInput = {\n id?: Maybe;\n force?: Maybe;\n};\n\n/** AdminFieldsPermissions create input */\nexport type AdminFieldsPermissions = {\n createdAt?: Maybe;\n updatedAt?: Maybe;\n};\n\nexport type AdminFilter = {\n id?: Maybe;\n createdAt?: Maybe;\n updatedAt?: Maybe;\n deletedAt?: Maybe;\n _fullText?: Maybe;\n createdBy?: Maybe;\n user?: Maybe;\n company?: Maybe;\n AND?: Maybe>;\n OR?: Maybe>;\n};\n\nexport type AdminGroupBy = {\n query: AdminGroupByQuery;\n sort?: Maybe>;\n having?: Maybe;\n first?: Maybe;\n last?: Maybe;\n skip?: Maybe;\n};\n\nexport type AdminGroupByQuery = {\n id?: Maybe>;\n createdAt?: Maybe>;\n updatedAt?: Maybe>;\n createdBy?: Maybe;\n user?: Maybe
\n {label} call ᛫ {moment(duration).format('mm:ss')}\n
{moment(date).format('MM-DD-YYYY')}
{moment(date).format('LT')}
{props.label}
{value}
Select Campaign
{component.code}
([^<]*)<\\/p>/.exec(body);\n\n if (!result) return '';\n\n const { 1: paragraph } = result;\n\n return paragraph;\n};\n","import React from 'react';\nimport { Icon, Button as BoostButton, styled } from '@8base/boost';\nimport PropTypes from 'prop-types';\n\nexport const Button = styled(BoostButton)`\n background-color: #fff;\n border: 2px solid #000;\n color: #000;\n\n &:after {\n border: 4px solid #000;\n border-top-color: transparent;\n }\n\n ${(props) =>\n props.disabled\n ? `\n color: #CFD7DE;\n background-color: #E8EFF5;\n border: 1px solid #CFD7DE;\n\n & > span > i {\n display: none;\n }\n `\n : `\n &:hover {\n border: 2px solid #000;\n background-color: #fff;\n }\n \n &:active {\n border: 2px solid #000;\n background-color: #fff;\n }\n `}\n`;\n\nexport const GoogleButton = ({ children, ...rest }) => {\n return (\n \n \n {children}\n \n );\n};\n\nGoogleButton.propTypes = {\n children: PropTypes.node.isRequired,\n};\n","import React from 'react';\nimport { Icon, Button as BoostButton, styled } from '@8base/boost';\nimport PropTypes from 'prop-types';\n\nexport const Button = styled(BoostButton)`\n background-color: #fff;\n border: 2px solid #000;\n color: #000;\n\n &:after {\n border: 4px solid #000;\n border-top-color: transparent;\n }\n\n ${(props) =>\n props.disabled\n ? `\n color: #CFD7DE;\n background-color: #E8EFF5;\n border: 1px solid #CFD7DE;\n\n & > span > i {\n display: none;\n }\n `\n : `\n &:hover {\n border: 2px solid #000;\n background-color: #fff;\n }\n \n &:active {\n border: 2px solid #000;\n background-color: #fff;\n }\n `}\n`;\n\nexport const MicrosoftButton = ({ children, ...rest }) => {\n return (\n \n \n {children}\n \n );\n};\n\nMicrosoftButton.propTypes = {\n children: PropTypes.node.isRequired,\n};\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Column, Row, Button, Icon } from '@8base/boost';\nimport { GoogleButton } from '../../../shared/components/GoogleButton';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { FileInput } from '@8base-react/file-input';\nimport styled from 'styled-components';\nimport {\n OnCreateEmailError,\n OnFetchEmailConfig,\n OnFetchEmailConfigError,\n OnCreateOutlookEmailError,\n} from '../email-store';\nimport { MicrosoftButton } from '../../../shared/components/MicrosoftButton';\nimport { PRE_SIGNATURE } from '../email-model';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { IconTrash } from '../../../shared/components/ui/Icons';\nimport PropTypes from 'prop-types';\nimport { fetchEmailConfiguration, fetchUserSignature } from '../email-actions';\nimport { Editor } from '@tinymce/tinymce-react';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { OnCreateGoogleEmailError, OnUserSignatureEvent } from '../email-events';\n\nconst FormColumn = styled(Column)`\n & > div:not(:last-child) {\n border-bottom: 1px solid #e9eff4;\n }\n\n & > *:not(:last-child) {\n margin-bottom: 0px !important;\n }\n`;\n\nconst InputColumn = styled(Column)`\n padding: 5px 0px;\n`;\n\nconst Actions = styled.div`\n padding: 24px 0px;\n width: 100%;\n`;\n\nconst Label = styled.label`\n color: #9b9b9b;\n margin-right: 5px;\n`;\n\nconst Section = styled.div`\n ${(props) => (props.paddingLess ? 'padding: 0px !important' : 'padding: 0px 24px !important;')}\n display: flex;\n align-items: center;\n ${(props) => (props.stretch ? `width: 100%;` : '')}\n`;\n\nconst Div = styled.div`\n width: 50%;\n text-align: ${(props) => props.textAlign};\n`;\n\nconst Input = styled.input`\n width: ${(props) => (props.width ? props.width : '100%')};\n border: none !important;\n &:focus {\n outline: none !important;\n }\n\n &::placeholder {\n color: #cfd7de;\n }\n`;\n\nconst ReadOnly = styled.p`\n font-weight: 600;\n width: 100%;\n`;\n\nconst Normal = styled.span`\n font-weight: 400;\n`;\n\nconst TextBody = styled.p`\n font-size: 12px;\n text-align: center;\n width: 100%;\n`;\n\nconst IconDelete = styled.div`\n display: inline-flex;\n width: 16px;\n height: 16px;\n border-radius: 100%;\n background-color: #ccc;\n justify-content: center;\n align-items: center;\n > div {\n width: 10px;\n height: 3px;\n background: #fff;\n }\n`;\n\nconst onLoading = { config: true, signature: true };\n\nconst onNotLoading = { config: false, signature: false };\n\n/**\n * Email form component\n *\n * @param {object} props - The component's props object\n * @param {object} props.dest - The destination object\n * @param {string} props.dest.id - Id of the lead to relate the email\n * @param {string} props.threadId - The thread id where the email is going to be created\n * @param {string} props.initialSubject - Subject to initialize the input\n * @param {object} props.onSubmit - Handler of the click event on the submit button\n * @param {object} props.onTrash - Handler of the click event on the trash button\n *\n * @returns {React.Component} Component to render\n */\nfunction EmailForm({ dest, onSubmit, onSubmitWithGoogle, onSubmitWithOutlook, onTrash }) {\n const [to, setTo] = useState(dest?.to || '');\n const [cc, setCc] = useState(dest?.cc || '');\n let [subject, setSubject] = useState(dest?.subject || '');\n const [body, setBody] = useState('');\n const [attachments, setAttachments] = useState([]);\n const [loading, setLoading] = useState({ config: true, signature: true });\n const [signature, setSignature] = useState(null);\n const [config, setConfig] = useState(null);\n const [service, setService] = useState(null);\n const [user] = useUser();\n const agency = useAgency();\n\n useEffect(() => {\n setLoading(onLoading);\n\n fetchUserSignature();\n fetchEmailConfiguration(user.id, agency.id);\n }, [user, agency]);\n\n useEffect(() => {\n if (signature) {\n setBody((prevBody) => `${prevBody}${PRE_SIGNATURE}${signature}`);\n }\n }, [signature]);\n\n useEventSubscription(\n OnFetchEmailConfig,\n ({ gmail, outlook, outbound }) => {\n if (gmail && gmail.active) {\n setService(gmail);\n setConfig('GMAIL');\n } else if (outlook && outlook.active) {\n setService(outlook);\n setConfig('OUTLOOK');\n } else {\n setService(outbound);\n setConfig('MANUAL');\n }\n\n setLoading((prevState) => ({\n ...prevState,\n config: false,\n }));\n },\n [],\n );\n\n useEventSubscription(\n OnFetchEmailConfigError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n useEventSubscription(\n OnCreateEmailError,\n (e) => {\n setLoading(onNotLoading);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useEventSubscription(\n OnCreateOutlookEmailError,\n (e) => {\n setLoading(onNotLoading);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useEventSubscription(OnUserSignatureEvent, (data) => {\n if (data.user.isEnableSignature) {\n if (data.user.signature !== null) {\n setSignature(data.user.signature);\n }\n }\n\n setLoading((prevState) => ({\n ...prevState,\n signature: false,\n }));\n });\n\n const addFile = (value) => {\n const aux = [...attachments];\n aux.push(value);\n setAttachments(aux);\n };\n\n const deleteFile = (i) => {\n const aux = attachments.filter((file) => {\n return file !== attachments[i];\n });\n\n setAttachments(aux);\n };\n\n useEventSubscription(OnCreateGoogleEmailError, () => {\n setLoading(onNotLoading);\n });\n\n const emailAttachList = useMemo(\n () =>\n attachments.map((file) => {\n const url = file.downloadUrl;\n return `${file.filename}`;\n }),\n [attachments],\n );\n\n const handleSubmit = () => {\n setLoading(onLoading);\n\n let sub = subject.trim();\n\n if (dest && dest.isReply) {\n if (!/^Re: /.test(subject.match)) {\n sub = `Re: ${sub}`;\n }\n }\n\n onSubmit({\n to,\n cc,\n subject: sub,\n from: service.username,\n body: `${body}${attachments.length > 0 ? ` Attachments: ${emailAttachList}` : ''}`,\n attachments: attachments,\n lead: dest?.id ? { id: dest.id } : undefined,\n agency: { id: agency.id },\n user: { id: user.id },\n });\n };\n\n const handleSubmitWithGoogle = () => {\n setLoading(onLoading);\n\n onSubmitWithGoogle({\n subject,\n to,\n cc,\n content: body,\n agency: agency.id,\n });\n };\n\n const handleSubmitWithOutlook = () => {\n setLoading(onLoading);\n\n onSubmitWithOutlook({\n subject,\n cc,\n to,\n body,\n agency: agency.id,\n });\n };\n\n const attachmentsList = attachments.map((file, i) => {\n return (\n \n {file.filename}\n deleteFile(i)}>\n \n \n \n );\n });\n\n let submit = (\n <>\n \n Send\n \n \n {({ pick }) => (\n pick()} name=\"PaperClip\" color=\"ICON_GRAY\" cursor=\"pointer\" />\n )}\n \n >\n );\n\n let from = service ? service.username : '';\n\n if (config === 'GMAIL') {\n submit = (\n \n Send\n \n );\n\n from = service.profile.email;\n }\n\n if (config === 'OUTLOOK') {\n submit = (\n \n Send\n \n );\n\n from = service.profile.email;\n }\n\n return (\n \n \n \n \n From:\n \n {from}\n \n \n \n To:\n {dest ? (\n \n {dest.to}\n \n ) : (\n setTo(e.target.value)}\n placeholder=\"Emails\"\n />\n )}\n \n \n Cc:\n setCc(e.target.value)}\n placeholder=\"Emails\"\n />\n \n \n \n \n \n \n Subject:\n {dest && dest.subject ? (\n \n {subject}\n \n ) : (\n setSubject(e.target.value)}\n />\n )}\n \n \n \n \n \n \n \n {attachmentsList.length < 1 ? There are no files : attachmentsList}\n \n \n \n \n \n \n {submit}\n \n \n \n \n \n \n \n \n \n );\n}\n\nEmailForm.propTypes = {\n dest: PropTypes.shape({\n id: PropTypes.string,\n to: PropTypes.string,\n cc: PropTypes.string,\n subject: PropTypes.string,\n isReply: PropTypes.bool,\n }),\n onSubmit: PropTypes.func.isRequired,\n onSubmitWithGoogle: PropTypes.func,\n onSubmitWithOutlook: PropTypes.func,\n onTrash: PropTypes.func.isRequired,\n};\n\nEmailForm.defaultProps = {\n onSubmitWithGoogle: () => {},\n onSubmitWithOutlook: () => {},\n initialSubject: '',\n threadId: '',\n dest: null,\n};\n\nexport default EmailForm;\n","import React from 'react';\nimport { Button, Modal, Card, Icon, Row, Heading } from '@8base/boost';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnCreateEmail, OnCreateOutlookEmail } from '../email-store';\nimport EmailForm from './EmailForm';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport * as toast from '../../../shared/components/toast/Toast';\n\nconst Body = styled(Card.Body)`\n min-width: 50vw;\n`;\n\n/**\n * Renders the Email form in a dialog\n *\n * @param {object} props - The component's prop object\n * @param {object} props.dest - The data to initially fill the form\n * @param {boolean} props.isOpen - Open/Closes the dialog\n * @param {Function} props.onSubmit - Handles submit operation\n * @param {Function} props.onClose - Handles close operation\n *\n * @returns {React.Component} Component to render\n */\nfunction EmailDialog({ dest, isOpen, onSubmit, onSubmitWithGoogle, onSubmitWithOutlook, onClose }) {\n useSubscription(\n OnCreateEmail,\n () => {\n onClose();\n\n toast.success('Success', 'Email sent successfully');\n },\n [onClose],\n );\n\n useSubscription(\n OnCreateOutlookEmail,\n () => {\n onClose();\n\n toast.success('Success', 'Email sent successfuly');\n },\n [onClose],\n );\n\n return (\n \n \n \n \n Compose Email\n \n \n \n \n \n \n {isOpen && (\n \n )}\n \n \n \n );\n}\n\nEmailDialog.propTypes = {\n dest: PropTypes.object,\n isOpen: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onSubmitWithGoogle: PropTypes.func.isRequired,\n onSubmitWithOutlook: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n};\n\nEmailDialog.defaultProps = {\n dest: null,\n};\n\nexport default EmailDialog;\n","import React, { useState } from 'react';\nimport EmailDialog from './EmailDialog';\nimport { createNewEmail, createGoogleEmail, createOutlookEmail } from '../email-actions';\nimport PropTypes from 'prop-types';\nimport * as toast from '../../../shared/components/toast/Toast';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { OnCreateGoogleEmailError, OnCreateGoogleEmailEvent } from '../email-events';\n\nexport const ComposeEmailContext = React.createContext();\n\nexport const ComposeEmailProvider = ({ children }) => {\n const [isOpen, setIsOpen] = useState(false);\n const [dest, setDest] = useState(null);\n\n const onCompose = (dest = null) => {\n setIsOpen(true);\n setDest(dest);\n };\n\n const onSubmit = (form) => {\n createNewEmail(form);\n };\n\n const onSubmitWithGoogle = (form) => {\n createGoogleEmail(form);\n };\n\n const onSubmitWithOutlook = (form) => {\n createOutlookEmail(form);\n };\n\n const onClose = () => {\n setIsOpen(false);\n setDest(null);\n };\n\n useEventSubscription(OnCreateGoogleEmailEvent, () => {\n setIsOpen(false);\n setDest(null);\n\n toast.success('Success', 'Email sent successfully');\n });\n\n useEventSubscription(OnCreateGoogleEmailError, (e) => {\n toast.error(e.message);\n });\n\n return (\n \n {children}\n \n \n );\n};\n\nComposeEmailProvider.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport { fetchEmails } from '../email-actions';\nimport { OnFetchEmails, OnFetchEmailsError } from '../email-store';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\n\nconst initialState = {\n items: [],\n count: 0,\n loading: false,\n error: null,\n};\n\n/**\n * Email list hook\n *\n * @param {string} user - The user id\n * @param {string} agency - The agency id\n * @param {object} filters - The data to filter the results\n *\n * @returns {object} Returns an Object\n */\nexport function useEmailList(user, agency, filters = {}) {\n const [state, setState] = useState(initialState);\n const [page, setPage] = useState(1);\n\n const fetch = useCallback(() => {\n if (filters.folder) {\n setState((prevState) => ({\n ...prevState,\n loading: true,\n items: page === 1 ? [] : prevState.items,\n }));\n\n fetchEmails(user, agency, filters, page);\n }\n }, [user, agency, filters, page]);\n\n const next = useCallback(() => {\n setPage((prevPage) => prevPage + 1);\n }, []);\n\n const refresh = useCallback(() => {\n if (page === 1) {\n setState((prevState) => ({\n ...prevState,\n loading: true,\n items: [],\n }));\n\n fetchEmails(user, agency, filters, page);\n } else {\n setPage(1);\n }\n }, [user, agency, filters, page]);\n\n useSubscription(\n OnFetchEmails,\n ({ mailList }) => {\n setState((prevState) => ({\n ...prevState,\n items: page === 1 ? mailList.items : [...prevState.items, ...mailList.items],\n count: mailList.count,\n loading: false,\n error: null,\n }));\n },\n [page],\n );\n\n useSubscription(\n OnFetchEmailsError,\n (e) => {\n setState((prevState) => ({\n ...prevState,\n loading: false,\n error: e,\n }));\n },\n [],\n );\n\n useEffect(() => {\n setPage(1);\n }, [filters]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n return {\n ...state,\n next,\n refresh,\n };\n}\n","import React from 'react';\n\nexport const EmailProfileContext = React.createContext(null);\n","import React, { useEffect, useState, useContext, useCallback } from 'react';\nimport { Card, Icon, Row, Loader, Text, Paragraph, styled } from '@8base/boost';\nimport { useParams } from 'react-router';\nimport { fetchEmail } from '../email-actions';\nimport { OnFetchEmail, OnFetchEmailError } from '../email-store';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { Box } from '../../../shared/components/Box';\nimport { ComposeEmailContext } from './ComposeEmailProvider';\nimport { EmailProfileContext } from './EmailProfileContext';\n\nconst Body = styled(Card.Body)`\n height: 100%;\n`;\n\nexport const EmailDetails = () => {\n const { emailId } = useParams();\n const [loading, setLoading] = useState(true);\n const [query, setQuery] = useURLQuery();\n const [email, setEmail] = useState(null);\n const { onCompose } = useContext(ComposeEmailContext);\n const outbound = useContext(EmailProfileContext);\n\n useEffect(() => {\n setLoading(true);\n\n fetchEmail(emailId);\n }, [emailId]);\n\n const onReply = useCallback(() => {\n const cc = [...(email.to || '').split(','), ...(email.ccopy || '').split(',')]\n .filter((address) => address.trim() !== outbound.username)\n .join(',');\n\n onCompose({\n id: email.lead?.id,\n from: outbound.username,\n to: email.from,\n cc,\n subject: email.subject,\n isReply: true,\n });\n }, [email, outbound, onCompose]);\n\n useSubscription(\n OnFetchEmail,\n ({ mail }) => {\n setEmail(mail);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchEmailError,\n (e) => {\n onErrorMixinFC(e);\n\n setLoading(false);\n },\n [],\n );\n\n const onClose = () => setQuery('/email', query);\n\n const canReply = email?.type === 'INBOX';\n\n const users =\n email && !loading ? (\n \n \n \n \n From\n \n {email.from}\n \n \n \n \n \n To\n \n {email.to}\n \n \n \n \n \n CC\n \n {email.ccopy}\n \n \n \n ) : null;\n\n const content = loading ? (\n \n \n \n ) : (\n \n \n \n );\n\n return (\n \n \n \n \n \n {email?.subject}\n \n \n \n {email && canReply && (\n \n )}\n \n \n \n \n \n {users}\n {content}\n \n \n );\n};\n","import React, { useState, useEffect, useCallback, useContext, useRef } from 'react';\nimport { Switch, Route } from 'react-router-dom';\nimport { Icon, Dropdown, Menu, Row, Column, Button } from '@8base/boost';\nimport { ButtonIcon } from '../../../shared/components/ui/buttons/ButtonIcon';\nimport SearchInput from './SearchInput';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { Title } from '../../../shared/components/ui/text/Title';\nimport composeEmail from '../../../shared/assets/images/compose-email.svg';\nimport { IconUpdateGrey } from '../../../shared/components/ui/Icons';\nimport styled from '@emotion/styled';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport EmailList from './EmailList';\nimport { LIST_FILTER_OPTIONS } from '../email-model';\nimport { getSelectedListOptionLabel } from '../email-utils';\n// import Thread from './Thread';\n// import ThreadFallback from './ThreadFallback';\nimport { ComposeEmailContext } from './ComposeEmailProvider';\nimport { useEmailList } from '../hooks/useEmailList';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { EmailDetails } from './EmailDetails';\n\nconst { INBOX, SEND, ARCHIVE, TRASH } = LIST_FILTER_OPTIONS;\n\nconst MailListToolbarRow = styled(Row)`\n width: 100%;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 0px !important;\n`;\n\nconst StyledColumn = styled(Column)`\n margin-right: 0px !important;\n height: 100%;\n position: relative;\n`;\n\nconst StyledDivBorder = styled(Column)`\n border-bottom: 1px solid #d8d8d8;\n padding: 24px;\n`;\n\nconst Container = styled.div`\n height: ${({ top }) => (top ? `calc(100vh - ${top}px)` : 'auto')};\n`;\n\nconst StyledRow = styled(Row)`\n margin-top: 16px;\n width: 100%;\n`;\n\nconst InboxSection = styled.div`\n width: 385px;\n height: 100%;\n border-right: 1px solid #d8d8d8;\n overflow: auto;\n`;\n\nconst ThreadContainer = styled.div`\n width: 100%;\n height: 100%;\n padding: 24px;\n`;\n\nexport const ManualEmailsView = () => {\n const [user] = useUser();\n const agency = useAgency();\n const [query, setQuery] = useURLQuery();\n const [top, setTop] = useState(null);\n const { onCompose } = useContext(ComposeEmailContext);\n const container = useRef(null);\n const { items, loading, count, next, refresh, error } = useEmailList(user.id, agency.id, query);\n\n useEffect(() => {\n if (!query.folder) {\n setQuery('/email', {\n ...query,\n folder: INBOX,\n });\n }\n }, [query, setQuery]);\n\n useEffect(() => {\n const { top } = container.current.getBoundingClientRect();\n setTop(top);\n }, []);\n\n useEffect(() => {\n if (error) {\n onErrorMixinFC(error);\n }\n }, [error]);\n\n const onFolderChange = useCallback(\n (folder, callback) => {\n setQuery('/email', {\n ...query,\n folder,\n });\n\n if (callback) {\n callback();\n }\n },\n [query, setQuery],\n );\n\n const onSearch = useCallback(\n (search) => {\n setQuery('/email', {\n ...query,\n search: search ? search : undefined,\n });\n },\n [query, setQuery],\n );\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {getSelectedListOptionLabel(query.folder)}\n \n \n \n \n {({ toggleDropdown }) => (\n \n onFolderChange(INBOX, toggleDropdown)}>\n Inbox\n \n onFolderChange(SEND, toggleDropdown)}>\n Sent\n \n onFolderChange(ARCHIVE, toggleDropdown)}>\n Archived\n \n onFolderChange(TRASH, toggleDropdown)}>\n Trash\n \n \n )}\n \n \n \n \n onCompose()}\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","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnFetchGmailList, OnFetchGmailListError } from '../email-store';\nimport { fetchGoogleEmails } from '../email-actions';\n\nconst initialState = {\n items: [],\n count: 0,\n loading: true,\n error: null,\n next: null,\n};\n\n/**\n * Manages email fetching with the gmail api\n *\n * @param {string} agency - The agency id\n * @param {object} filters - Object with the data to filter\n *\n * @returns {object} The hook state\n */\nexport function useGmailList(agency, filters = {}) {\n const [state, setState] = useState(initialState);\n const after = useRef(null);\n\n const fetch = useCallback(() => {\n setState((prevState) => ({ ...prevState, loading: true }));\n\n fetchGoogleEmails(agency, 10, state.next, filters);\n }, [agency, state.next, filters]);\n\n const refresh = useCallback(() => {\n if (state.next) {\n setState((prevState) => ({\n ...prevState,\n items: [],\n count: 0,\n error: null,\n next: null,\n }));\n } else {\n setState((prevState) => ({\n ...prevState,\n items: [],\n count: 0,\n error: null,\n }));\n\n fetch();\n }\n }, [state.next, fetch]);\n\n const next = useCallback(() => {\n setState((prevState) => ({\n ...prevState,\n next: after.current,\n }));\n }, []);\n\n useSubscription(\n OnFetchGmailList,\n ({ googleEmailsList }) => {\n after.current = googleEmailsList.next;\n\n setState((prevState) => ({\n ...prevState,\n count: googleEmailsList.count,\n items:\n prevState.next === null\n ? googleEmailsList.items\n : [...prevState.items, ...googleEmailsList.items],\n loading: false,\n error: null,\n }));\n },\n [],\n );\n\n useSubscription(\n OnFetchGmailListError,\n (e) => {\n setState((prevState) => ({\n ...prevState,\n loading: false,\n error: e,\n }));\n },\n [],\n );\n\n useEffect(() => {\n after.current = null;\n\n setState(initialState);\n }, [filters]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n return {\n ...state,\n refresh,\n next,\n hasMore: after.current !== null,\n };\n}\n","import React, { useCallback, useMemo } from 'react';\nimport { Grid, Avatar, Text, Column, Paragraph } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\n\nexport const GmailListItem = ({ email }) => {\n const [query, setQuery] = useURLQuery();\n\n const onClick = useCallback(() => {\n setQuery(`/email/${email.id}`, query);\n }, [query, email, setQuery]);\n\n const from = useMemo(\n () => email.payload.headers.find((header) => header.name.toLowerCase() === 'from'),\n [email],\n );\n\n const subject = useMemo(\n () => email.payload.headers.find((header) => header.name.toLowerCase() === 'subject'),\n [email],\n );\n\n const [firstName, lastName] = from.value.split(' ');\n\n return (\n \n \n \n \n \n \n \n \n {from.value}\n \n \n \n {moment(parseInt(email.internalDate)).format('MM-DD-YYYY, hh:mm a')}\n {subject.value}\n \n \n );\n};\n\nGmailListItem.propTypes = {\n email: PropTypes.shape({\n id: PropTypes.string.isRequired,\n payload: PropTypes.shape({\n headers: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n ),\n }).isRequired,\n internalDate: PropTypes.string.isRequired,\n }).isRequired,\n};\n","import React, { useMemo } from 'react';\nimport { Box } from '../../../shared/components/Box';\nimport { GmailListItem } from './GmailListItem';\nimport { Row, Loader, Link } from '@8base/boost';\nimport PropTypes from 'prop-types';\n\nexport const GmailList = (props) => {\n const emails = useMemo(\n () => props.items.map((email) => ),\n [props.items],\n );\n\n const loading = props.loading ? (\n \n \n \n \n \n ) : null;\n\n const next =\n !props.loading && props.hasMore ? (\n \n \n \n Load more\n \n \n \n ) : null;\n\n return (\n \n {emails}\n {loading}\n {next}\n \n );\n};\n\nGmailList.propTypes = {\n items: PropTypes.arrayOf({\n id: PropTypes.string.isRequired,\n payload: PropTypes.shape({\n headers: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n ),\n }).isRequired,\n internalDate: PropTypes.string.isRequired,\n }).isRequired,\n loading: PropTypes.bool.isRequired,\n hasMore: PropTypes.bool.isRequired,\n onMore: PropTypes.bool.isRequired,\n};\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { GoogleButton } from '../../../shared/components/GoogleButton';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchUserSignature, replyGoogleEmail } from '../email-actions';\nimport { OnReplyGoogleEmail, OnReplyGoogleEmailError } from '../email-store';\nimport { Box } from '../../../shared/components/Box';\nimport { Editor } from '@tinymce/tinymce-react';\nimport { Dialog, Row, Icon, useModal, Loader, Card, Text } from '@8base/boost';\nimport * as toast from '../../../shared/components/toast/Toast';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { OnUserSignatureEvent } from '../email-events';\n\nexport const modalId = 'gmail-reply-dialog';\n\nexport const GmailReplyDialog = () => {\n const { isOpen, args, closeModal } = useModal(modalId);\n const [loading, setLoading] = useState(true);\n const [submitting, setSubmitting] = useState(false);\n const [signature, setSignature] = useState('');\n const [, setQuery] = useURLQuery();\n const editorRef = useRef(null);\n const agency = useAgency();\n\n useEffect(() => {\n if (isOpen) {\n setLoading(true);\n\n fetchUserSignature();\n } else {\n setSignature('');\n }\n }, [isOpen]);\n\n useEventSubscription(OnUserSignatureEvent, ({ user }) => {\n if (user && user.isEnableSignature) {\n setSignature(user.signature || '');\n }\n\n setLoading(false);\n });\n\n useEventSubscription(\n OnReplyGoogleEmail,\n ({ googleEmailCreate }) => {\n toast.success('Success', 'Email sent successfuly');\n\n setQuery(`/email/${googleEmailCreate.id}`, {\n type: 'SENT',\n });\n\n closeModal(modalId);\n },\n [setQuery, closeModal],\n );\n\n useEventSubscription(\n OnReplyGoogleEmailError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n const close = useCallback(() => {\n if (!submitting) {\n closeModal(modalId);\n }\n }, [submitting, closeModal]);\n\n const onSubmit = useCallback(() => {\n if (editorRef.current) {\n setSubmitting(true);\n\n replyGoogleEmail({\n to: args.to,\n subject: args.subject,\n content: editorRef.current.getContent(),\n agency: agency.id,\n threadId: args.threadId,\n });\n }\n }, [args, agency]);\n\n const content = loading ? (\n \n \n \n \n \n ) : (\n (editorRef.current = editor)}\n apiKey={process.env.REACT_APP_EDITOR_API_KEY}\n initialValue={signature}\n init={{\n height: 300,\n width: '100%',\n menubar: false,\n plugins: [\n 'advlist autolink lists link image charmap print preview anchor',\n 'searchreplace visualblocks code fullscreen',\n 'insertdatetime media table paste code',\n ],\n toolbar:\n 'fontselect fontsizeselect capitalize | bold italic underline forecolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | code',\n }}\n />\n );\n\n return (\n \n \n \n {`Re: ${args.subject}`}\n \n \n \n {content}\n \n \n \n \n \n Send\n \n \n \n \n \n \n );\n};\n","import React, { useCallback, useEffect, useState, useMemo } from 'react';\nimport { useParams } from 'react-router';\nimport { Card, Row, Loader, Icon, useModal, styled } from '@8base/boost';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { fetchGoogleEmail } from '../email-actions';\nimport { OnFetchGmailItem, OnFetchGmailItemError } from '../email-store';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { GmailReplyDialog, modalId } from './GmailReplyDialog';\n\nconst Body = styled(Card.Body)`\n height: 100%;\n`;\n\nexport const GmailDetails = () => {\n const { emailId } = useParams();\n const agency = useAgency();\n const [query, setQuery] = useURLQuery();\n const [email, setEmail] = useState(null);\n const [loading, setLoading] = useState(true);\n const { openModal } = useModal(modalId);\n\n useEffect(() => {\n setLoading(true);\n setEmail(null);\n fetchGoogleEmail(emailId, agency.id);\n }, [emailId, agency]);\n\n useSubscription(\n OnFetchGmailItem,\n ({ googleEmail }) => {\n setEmail(googleEmail);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchGmailItemError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n const onClose = useCallback(() => {\n setQuery('/email', query);\n }, [query, setQuery]);\n\n const onReply = useCallback(() => {\n if (!loading) {\n const subject = email.payload.headers.find(\n (header) => header.name.toLowerCase() === 'subject',\n );\n\n const to = email.payload.headers.find((header) => header.name.toLowerCase() === 'from');\n\n openModal(modalId, {\n subject: subject.value,\n to: to.value,\n threadId: email.threadId,\n });\n }\n }, [loading, email, openModal]);\n\n const canReply = useMemo(() => {\n if (!email) {\n return false;\n }\n\n return !email.labelIds.includes('SENT');\n }, [email]);\n\n const content = loading ? (\n \n \n \n ) : (\n \n \n \n );\n\n return (\n \n \n \n {canReply && (\n \n )}\n \n \n \n {content}\n \n \n );\n};\n","import React, { useCallback, useEffect, useContext } from 'react';\nimport { Switch, Route } from 'react-router-dom';\nimport { Grid, Dropdown, Button, Menu, Icon, Row, Column, styled } from '@8base/boost';\nimport { useGmailList } from '../hooks/useGmailList';\nimport { ButtonIcon } from '../../../shared/components/ui/buttons/ButtonIcon';\nimport { Title } from '../../../shared/components/ui/text/Title';\nimport { GmailList } from './GmailList';\nimport { getSelectedGmailOptionLabel } from '../email-utils';\nimport { Box } from '../../../shared/components/Box';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { IconUpdateGrey } from '../../../shared/components/ui/Icons';\nimport google from '../../../shared/assets/images/google.svg';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport SearchInput from './SearchInput';\nimport { GmailDetails } from './GmailDetails';\nimport { ComposeEmailContext } from './ComposeEmailProvider';\n\nconst Layout = styled(Grid.Layout)`\n height: 100%;\n max-height: 100%;\n`;\n\nexport const GmailEmailsView = () => {\n const agency = useAgency();\n const [query, setQuery] = useURLQuery();\n const { items, loading, hasMore, next, refresh } = useGmailList(agency.id, query);\n const { onCompose } = useContext(ComposeEmailContext);\n\n useEffect(() => {\n if (!query.type) {\n setQuery('/email', {\n ...query,\n type: 'INBOX',\n });\n }\n }, [query, setQuery]);\n\n const handleType = useCallback(\n (type, callback) => {\n setQuery('/email', {\n ...query,\n type,\n });\n\n if (callback) {\n callback();\n }\n },\n [query, setQuery],\n );\n\n const handleSearch = useCallback(\n (value) => {\n setQuery('/email', {\n ...query,\n q: value || undefined,\n });\n },\n [query, setQuery],\n );\n\n return (\n \n \n \n \n \n \n \n \n \n {getSelectedGmailOptionLabel(query.type)}\n \n \n \n \n {({ toggleDropdown }) => (\n \n handleType('INBOX', toggleDropdown)}>\n Inbox\n \n handleType('SENT', toggleDropdown)}>\n Sent\n \n handleType('STARRED', toggleDropdown)}>\n Starred\n \n handleType('TRASH', toggleDropdown)}>\n Trash\n \n \n )}\n \n \n onCompose()}\n disabled={loading}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnFetchOutlookEmails, OnFetchOutlookEmailsError } from '../email-store';\nimport { fetchOutlookEmails } from '../email-actions';\n\nconst initialState = {\n items: [],\n count: 0,\n loading: true,\n error: null,\n next: null,\n};\n\n/**\n * Manages email fetching with the outlook api\n *\n * @param {string} agency - The agency id\n * @param {object} filters - Object with the data to filter\n *\n * @returns {object} The hook state\n */\nexport function useOutlookList(agency, filters = {}) {\n const [state, setState] = useState(initialState);\n const after = useRef(null);\n\n const fetch = useCallback(() => {\n if (filters.folder) {\n setState((prevState) => ({ ...prevState, loading: true }));\n\n fetchOutlookEmails(agency, state.next, filters);\n }\n }, [agency, state.next, filters]);\n\n const refresh = useCallback(() => {\n if (state.next) {\n setState((prevState) => ({\n ...prevState,\n items: [],\n count: 0,\n error: null,\n next: null,\n }));\n } else {\n setState((prevState) => ({\n ...prevState,\n items: [],\n count: 0,\n error: null,\n }));\n\n fetch();\n }\n }, [state.next, fetch]);\n\n const next = useCallback(() => {\n setState((prevState) => ({\n ...prevState,\n next: after.current,\n }));\n }, []);\n\n useSubscription(\n OnFetchOutlookEmails,\n ({ outlookEmailsList }) => {\n after.current = outlookEmailsList.next;\n\n setState((prevState) => ({\n ...prevState,\n count: outlookEmailsList.count,\n items:\n prevState.next === null\n ? outlookEmailsList.items\n : [...prevState.items, ...outlookEmailsList.items],\n loading: false,\n error: null,\n }));\n },\n [],\n );\n\n useSubscription(\n OnFetchOutlookEmailsError,\n (e) => {\n setState((prevState) => ({\n ...prevState,\n loading: false,\n error: e,\n }));\n },\n [],\n );\n\n useEffect(() => {\n after.current = null;\n\n setState(initialState);\n }, [filters]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n return {\n ...state,\n refresh,\n next,\n hasMore: after.current !== null,\n };\n}\n","import React, { useCallback } from 'react';\nimport { Grid, Avatar, Text, Column, Paragraph } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\n\nexport const OutlookListItem = ({ email }) => {\n const [query, setQuery] = useURLQuery();\n\n const onClick = useCallback(() => {\n setQuery(`/email/${email.id}`, query);\n }, [query, email, setQuery]);\n\n const [firstName, lastName] = email.from.name.split(' ');\n\n return (\n \n \n \n \n \n \n \n \n {email.from.address}\n \n \n \n {moment(email.createdAt).format('MM-DD-YYYY, hh:mm a')}\n {email.subject}\n \n \n );\n};\n\nOutlookListItem.propTypes = {\n email: PropTypes.shape({\n id: PropTypes.string.isRequired,\n subject: PropTypes.string.isRequired,\n from: PropTypes.shape({\n name: PropTypes.string.isRequired,\n address: PropTypes.string.isRequired,\n }).isRequired,\n createdAt: PropTypes.string.isRequired,\n }).isRequired,\n};\n","import React, { useMemo } from 'react';\nimport { Box } from '../../../shared/components/Box';\nimport { OutlookListItem } from './OutlookListItem';\nimport { Row, Loader, Link } from '@8base/boost';\nimport PropTypes from 'prop-types';\n\nexport const OutlookList = (props) => {\n const emails = useMemo(\n () => props.items.map((email) => ),\n [props.items],\n );\n\n const loading = props.loading ? (\n \n \n \n \n \n ) : null;\n\n const next =\n !props.loading && props.hasMore ? (\n \n \n \n Load more\n \n \n \n ) : null;\n\n return (\n \n {emails}\n {loading}\n {next}\n \n );\n};\n\nOutlookList.propTypes = {\n items: PropTypes.arrayOf({\n id: PropTypes.string.isRequired,\n subject: PropTypes.string.isRequired,\n from: PropTypes.shape({\n name: PropTypes.string.isRequired,\n address: PropTypes.string.isRequired,\n }).isRequired,\n createdAt: PropTypes.string.isRequired,\n }).isRequired,\n loading: PropTypes.bool.isRequired,\n hasMore: PropTypes.bool.isRequired,\n onMore: PropTypes.bool.isRequired,\n};\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { MicrosoftButton } from '../../../shared/components/MicrosoftButton';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchUserSignature, replyOutlookEmail } from '../email-actions';\nimport { OnReplyOutlookEmail, OnReplyOutlookEmailError } from '../email-store';\nimport { Box } from '../../../shared/components/Box';\nimport { Editor } from '@tinymce/tinymce-react';\nimport { Dialog, Row, Icon, useModal, Loader, Card, Text } from '@8base/boost';\nimport * as toast from '../../../shared/components/toast/Toast';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { OnUserSignatureEvent } from '../email-events';\n\nexport const modalId = 'outlook-reply-dialog';\n\nexport const OutlookReplyDialog = () => {\n const { isOpen, args, closeModal } = useModal(modalId);\n const [loading, setLoading] = useState(true);\n const [submitting, setSubmitting] = useState(false);\n const [signature, setSignature] = useState('');\n const [, setQuery] = useURLQuery();\n const editorRef = useRef(null);\n const agency = useAgency();\n\n useEffect(() => {\n if (isOpen) {\n setLoading(true);\n\n fetchUserSignature();\n } else {\n setSignature('');\n }\n }, [isOpen]);\n\n useEventSubscription(OnUserSignatureEvent, ({ user }) => {\n if (user && user.isEnableSignature) {\n setSignature(user.signature || '');\n }\n\n setLoading(false);\n });\n\n useEventSubscription(\n OnReplyOutlookEmail,\n () => {\n toast.success('Success', 'Email sent successfuly');\n\n setLoading(false);\n\n setQuery('/email', {\n folder: 'sentitems',\n });\n\n closeModal(modalId);\n },\n [setQuery, closeModal],\n );\n\n useEventSubscription(\n OnReplyOutlookEmailError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n const close = useCallback(() => {\n if (!submitting) {\n closeModal(modalId);\n }\n }, [submitting, closeModal]);\n\n const onSubmit = useCallback(() => {\n if (editorRef.current) {\n setSubmitting(true);\n\n replyOutlookEmail({\n agency: agency.id,\n body: editorRef.current.getContent(),\n replyId: args.emailId,\n });\n }\n }, [args, agency]);\n\n const content = loading ? (\n \n \n \n \n \n ) : (\n (editorRef.current = editor)}\n apiKey={process.env.REACT_APP_EDITOR_API_KEY}\n initialValue={signature}\n init={{\n height: 300,\n width: '100%',\n menubar: false,\n plugins: [\n 'advlist autolink lists link image charmap print preview anchor',\n 'searchreplace visualblocks code fullscreen',\n 'insertdatetime media table paste code',\n ],\n toolbar:\n 'fontselect fontsizeselect capitalize | bold italic underline forecolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | code',\n }}\n />\n );\n\n return (\n \n \n \n {`Re: ${args.subject}`}\n \n \n \n {content}\n \n \n \n \n \n Send\n \n \n \n \n \n \n );\n};\n","import React, { useCallback, useEffect, useState, useMemo, useContext } from 'react';\nimport { useParams } from 'react-router';\nimport { Card, Row, Loader, Icon, useModal, Text, styled } from '@8base/boost';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { fetchOutlookEmail } from '../email-actions';\nimport { OnFetchOutlookEmailError, OnFetchOutlookEmail } from '../email-store';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { OutlookReplyDialog, modalId } from './OutlookReplyDialog';\nimport { EmailProfileContext } from './EmailProfileContext';\nimport { Box } from '../../../shared/components/Box';\n\nconst Body = styled(Card.Body)`\n height: 100%;\n`;\n\nexport const OutlookDetails = () => {\n const { emailId } = useParams();\n const agency = useAgency();\n const [query, setQuery] = useURLQuery();\n const [email, setEmail] = useState(null);\n const [loading, setLoading] = useState(true);\n const outlookProfile = useContext(EmailProfileContext);\n const { openModal } = useModal(modalId);\n\n useEffect(() => {\n setLoading(true);\n setEmail(null);\n fetchOutlookEmail(emailId, agency.id);\n }, [emailId, agency]);\n\n useSubscription(\n OnFetchOutlookEmail,\n ({ outlookEmail }) => {\n setEmail(outlookEmail);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchOutlookEmailError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n const onClose = useCallback(() => {\n setQuery('/email', query);\n }, [query, setQuery]);\n\n const onReply = useCallback(() => {\n if (!loading) {\n openModal(modalId, {\n subject: email.subject,\n emailId: email.id,\n });\n }\n }, [loading, email, openModal]);\n\n const canReply = email?.from?.address !== outlookProfile?.email;\n\n const to = useMemo(() => {\n if (!email) {\n return '';\n }\n\n return email.to.map((address) => address.address).join(', ');\n }, [email]);\n\n const users = email ? (\n \n \n From: {email.from.address}\n \n \n To: {to}\n \n \n ) : null;\n\n const content = loading ? (\n \n \n \n ) : (\n \n \n \n );\n\n return (\n \n \n \n {email && canReply && (\n \n )}\n \n \n \n \n {users}\n {content}\n \n \n \n );\n};\n","import React, { useCallback, useEffect, useContext } from 'react';\nimport { Switch, Route } from 'react-router-dom';\nimport { Grid, Dropdown, Button, Menu, Icon, Row, Column, styled } from '@8base/boost';\nimport { useOutlookList } from '../hooks/useOutlookList';\nimport { ButtonIcon } from '../../../shared/components/ui/buttons/ButtonIcon';\nimport { Title } from '../../../shared/components/ui/text/Title';\nimport { OutlookList } from './OutlookList';\nimport { getSelectedOutlookOptionLabel } from '../email-utils';\nimport { Box } from '../../../shared/components/Box';\nimport { useURLQuery } from '../../../shared/hooks/useURLQuery';\nimport { IconUpdateGrey } from '../../../shared/components/ui/Icons';\nimport microsoft from '../../../shared/assets/images/microsoft.svg';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport SearchInput from './SearchInput';\nimport { OutlookDetails } from './OutlookDetails';\nimport { ComposeEmailContext } from './ComposeEmailProvider';\n\nconst Layout = styled(Grid.Layout)`\n height: 100%;\n max-height: 100%;\n`;\n\nexport const OutlookEmailsView = () => {\n const agency = useAgency();\n const [query, setQuery] = useURLQuery();\n const { items, loading, hasMore, next, refresh } = useOutlookList(agency.id, query);\n const { onCompose } = useContext(ComposeEmailContext);\n\n useEffect(() => {\n if (!query.folder) {\n setQuery('/email', {\n ...query,\n folder: 'inbox',\n });\n }\n }, [query, setQuery]);\n\n const handlFolder = useCallback(\n (folder, callback) => {\n setQuery('/email', {\n ...query,\n folder,\n });\n\n if (callback) {\n callback();\n }\n },\n [query, setQuery],\n );\n\n const handleSearch = useCallback(\n (value) => {\n setQuery('/email', {\n ...query,\n search: value || undefined,\n });\n },\n [query, setQuery],\n );\n\n return (\n \n \n \n \n \n \n \n \n \n {getSelectedOutlookOptionLabel(query.folder)}\n \n \n \n \n {({ toggleDropdown }) => (\n \n handlFolder('inbox', toggleDropdown)}>\n Inbox\n \n handlFolder('sentitems', toggleDropdown)}>\n Sent\n \n handlFolder('deleteditems', toggleDropdown)}>\n Trash\n \n \n )}\n \n \n onCompose()}\n disabled={loading}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { ManualEmailsView } from './components/ManualEmailsView';\nimport { GmailEmailsView } from './components/GmailEmailsView';\nimport { Row, Loader } from '@8base/boost';\nimport { useAgency } from '../../shared/hooks/useAgency';\nimport { Box } from '../../shared/components/Box';\nimport { useUser } from '../../shared/hooks/useUser';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchEmailConfiguration } from './email-actions';\nimport { OnFetchEmailConfig, OnFetchEmailConfigError } from './email-store';\nimport { onErrorMixinFC } from '../../shared/mixins';\nimport { OutlookEmailsView } from './components/OutlookEmailsView';\nimport { EmailProfileContext } from './components/EmailProfileContext';\n\n/**\n * Email view\n *\n * @returns {React.Component} The component to render\n */\nfunction Email() {\n const agency = useAgency();\n const [user] = useUser();\n const [loading, setLoading] = useState(true);\n const [mode, setMode] = useState('manual');\n const [profile, setProfile] = useState(null);\n\n useEffect(() => {\n setLoading(true);\n\n fetchEmailConfiguration(user.id, agency.id);\n }, [agency.id, user.id]);\n\n useSubscription(\n OnFetchEmailConfig,\n ({ gmail, outlook, outbound }) => {\n if (gmail && gmail.active) {\n setProfile(gmail.profile);\n setMode('gmail');\n }\n\n if (outlook && outlook.active) {\n setProfile(outlook.profile);\n setMode('outlook');\n }\n\n if (outbound && outbound.active) {\n setProfile(outbound);\n setMode('manual');\n }\n\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchEmailConfigError,\n (e) => {\n onErrorMixinFC(e);\n\n setLoading(false);\n },\n [],\n );\n\n if (loading) {\n return (\n \n \n \n \n \n );\n }\n\n if (mode === 'gmail') {\n return (\n \n \n \n );\n }\n\n if (mode === 'outlook') {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n );\n}\n\nexport default Email;\n","import { useState, useCallback, useEffect } from 'react';\nimport { fetchLeadsLight, createFilter } from '../leads-actions';\nimport { useSubscription } from '@apollo/client/react/hooks';\nimport { LEADS_LIST_LIGHT_SUBSCRIPTION } from '../leads-queries';\nimport { SUBSCRIPTIONS_OPERATIONS } from '../../../shared/constants/8base';\n\nconst initialState = {\n items: [],\n count: 0,\n loading: true,\n error: null,\n};\n\n/**\n * Hook that fetches a list of leads in an agency\n *\n * @param {string} agency - The agency id\n * @param {string} sort - The order of the results\n * @param {string} filters - Data to create a filter from\n * @param {string} filters.firstName - To search leads by their first name\n * @param {string} filters.middleName - To search leads by their middle name\n * @param {string} filters.lastName - To searcg leads by their last name\n * @param {string} filters.createdAfter - Filter for leads created after the date (YYYY-MM-DD hh:mm:ss)\n * @param {string} filters.createdBefore - Filter for leads created before the date (YYYY-MM-DD hh:mm:ss)\n * @param {string} filters.leadType - Type of the lead (Auto, Comercial Auto, Employee, etc)\n * @param {string} filters.campaign - The campaign id\n * @param {string} filters.leadVendor - Lead vendor id\n * @param {string} filters.assignedTo - The id of the user assigned to the lead (, \"None\" or Empty)\n * @param {string} filters.hasNotes - If the lead should have notes or not\n * @param {string} filters.phoneNumber - A phone number to filter leads from\n *\n * @returns {object} The list state\n */\nexport function useAgencyLeads(agency, sort, filters = {}) {\n const [page, setPage] = useState(1);\n const [state, setState] = useState(initialState);\n\n const fetch = useCallback(async () => {\n setState((prevState) => ({ ...prevState, loading: true }));\n\n const data = await fetchLeadsLight(\n page,\n {\n agency,\n sort,\n ...filters,\n },\n filters.search || '',\n );\n\n if (data && data.leadsList) {\n setState((prevState) => ({\n ...prevState,\n items: data.leadsList.items,\n count: data.leadsList.count,\n loading: false,\n error: null,\n }));\n } else {\n setState((prevState) => ({\n ...prevState,\n items: [],\n count: 0,\n loading: false,\n error: new Error('Something happened while fetching the leads'),\n }));\n }\n }, [agency, sort, page, filters]);\n\n useEffect(() => {\n setPage(1);\n }, [filters]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n const { data } = useSubscription(LEADS_LIST_LIGHT_SUBSCRIPTION, {\n variables: { filter: createFilter(filters, filters.search) },\n });\n\n useEffect(() => {\n if (!data) return;\n\n const { mutation, node } = data.Lead;\n\n if (mutation === SUBSCRIPTIONS_OPERATIONS.UPDATE) {\n setState((prevState) => {\n if (prevState.items.length === 0) {\n return prevState;\n }\n\n return {\n ...prevState,\n items: prevState.items.map((item) => (item.id === node.id ? node : item)),\n };\n });\n } else {\n fetch();\n }\n }, [data, fetch]);\n\n return {\n ...state,\n refresh: fetch,\n page,\n setPage,\n };\n}\n","import React, { useState } from 'react';\nimport { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { compose } from 'recompose';\nimport { withAuth } from '@8base/react-sdk';\nimport { withApollo } from '@apollo/client/react/hoc';\nimport MainLoader from 'shared/components/ui/MainLoader';\nimport { useHistory } from 'react-router-dom';\n\n//Component to monitor statuses of registration for messaging and phone services\nconst Welcome = ({ checkRegistration, ...restProps }) => {\n const history = useHistory();\n const [registration, setRegistration] = useState(undefined);\n\n useEffect(() => {\n checkRegistration().then((res) => {\n setRegistration(res);\n });\n }, [checkRegistration]);\n useEffect(() => {\n if (registration === true) {\n history.push('/dashboard');\n }\n if (registration === false && restProps.location.pathname !== '/waiting-phone-registration') {\n history.push('/waiting-phone-registration');\n }\n }, [history, registration, restProps.location.pathname]);\n return ;\n};\n\nexport default compose(withApollo, withAuth)(Welcome);\n","export const ENTITIES = {\n LEAD: 'LEAD',\n NOTE: 'NOTE',\n TASK: 'TASK',\n EMAIL: 'EMAIL',\n CALL: 'CALL',\n SMS: 'SMS',\n STAGE: 'STAGE',\n};\n\nexport const OPERATIONS = {\n CREATE: 'CREATE',\n UPDATE: 'Update',\n};\n\nexport const ENTITY_SELECTOR_OPTIONS = [\n { label: 'No Filter', value: '' },\n { label: 'Lead', value: 'LEAD' },\n { label: 'Note', value: 'NOTE' },\n { label: 'Task', value: 'TASK' },\n { label: 'Email', value: 'EMAIL' },\n { label: 'Call', value: 'CALL' },\n { label: 'Sms', value: 'SMS' },\n { label: 'Stage', value: 'STAGE' },\n];\n\nexport const RESULTS_PER_PAGE = 15;\n","import { Column, Grid } from '@8base/boost';\nimport styled from 'styled-components';\n\nexport const IconContainer = styled.div`\n width: ${(props) => (props.horizontal ? '12%' : '100%')};\n ${(props) => !props.horizontal && 'text-align: center;'}\n`;\n\nexport const DateContainer = styled.div`\n width: ${(props) => (props.horizontal ? '25%' : '100%')};\n`;\n\nexport const InfoContainer = styled.div`\n width: ${(props) => (props.horizontal ? '58%' : '100%')};\n`;\n\nexport const MarginLessCol = styled(Column)`\n & > *:not(:last-child) {\n margin-bottom: 0px !important;\n }\n`;\n\nexport const Layout = styled(Grid.Layout)`\n ${(props) => props.padding && ' padding: 0px 14px;'}\n ${(props) =>\n props.border &&\n `\n padding-bottom: 14px;\n border-bottom: 1px solid #e8eff5;\n `}\n`;\nLayout.defaultProps = {\n padding: true,\n};\nexport const Box = styled(Grid.Box)`\n justify-content: ${(props) => props.justifyContent};\n align-items: ${(props) => props.alignItems};\n`;\n\nexport const Content = styled.div`\n border-bottom: 1px solid #e8eff5;\n transition: opacity 1s;\n overflow: hidden;\n width: 100%;\n ${({ state, isData }) => {\n switch (state) {\n case 'entering':\n case 'entered':\n return `\n ${isData &&\n `\n padding: 14px; \n `}\n height: auto;\n opacity: 1;\n `;\n case 'exiting':\n case 'exited':\n return `\n padding: 0px;\n height: 0px !important;\n opacity: 0; \n `;\n default:\n return ``;\n }\n }}\n`;\n","import styled from 'styled-components';\nimport { Grid } from '@8base/boost';\n\nexport const ColumnInfo = styled(Grid.Box)`\n padding: 12px 0px 12px 24px;\n`;\n\nexport const ColumnName = styled.span`\n font-family: 'Poppins';\n font-size: 13px;\n line-height: 20px;\n font-weight: 600;\n`;\n\nexport const ColumnValue = styled.span`\n font-family: 'Poppins';\n font-size: 13px;\n line-height: 20px;\n`;\n\nexport const RowHeader = styled.div`\n height: 36px;\n color: #9b9b9b;\n font-size: 12px;\n font-weight: bold;\n line-height: 18px;\n font-family: 'Poppins';\n letter-spacing: 0.5px;\n background-color: #fcfcfc;\n border-top: 1px solid #d3d3d3;\n border-bottom: 1px solid #d3d3d3;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n padding-left: 24px;\n`;\n","import { ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport styled from 'styled-components';\n\nexport const Name = styled(ColumnName)`\n ${(props) =>\n props.clickable &&\n `\n color: #3db4aa;\n cursor: pointer;\n &:hover {\n text-decoration: underline;\n }\n `}\n`;\n\nexport const Value = styled(ColumnValue)`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n`;\n","import React from 'react';\nimport { Row, Avatar, Grid, Column } from '@8base/boost';\nimport moment from 'moment';\nimport { MarginLessCol, Layout, Content } from './containers';\nimport { Name, Value } from './interfaces';\nimport { Transition } from 'react-transition-group';\nimport ReactJsonView from 'react-json-view';\nimport { OPERATIONS } from '../leads-history-model';\nimport PropTypes from 'prop-types';\n\n/**\n * Item for a history event on the lead, either create or update\n *\n * @param {object} props - The props object of the component\n * @param {object} props.event - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.difference - JSON changes details\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {object} props.event.lead - The lead associated with the event\n * @param {string} props.event.lead.firstName - First name of the lead\n * @param {string} props.event.lead.lastName - Last name of the lead\n * @param {object} props.event.createdBy - The user that initiated the event\n * @param {string} props.event.createdBy.firstName - First name of the user who initiated the event\n * @param {boolean} props.isFullHistory - Renders the object in a horizontal orientation if true\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n * @param {Function} props.onDetailsClick - Function to handle the update label click\n *\n * @returns {React.FC} The component to render\n */\nfunction LeadHistoryItem({ event, onDetailsClick, isFullHistory, horizontal }) {\n const now = moment().startOf('day');\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n const created = moment(event.createdAt);\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n\n const columns = '35px 100px minmax(200px, 1fr)';\n\n return (\n \n \n {horizontal && (\n \n \n \n )}\n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('MM/DD/YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {horizontal ? (\n <>\n {event.operation === OPERATIONS.CREATE ? (\n Created By\n ) : (\n onDetailsClick(event.difference)}>\n Updated By\n \n )}\n {event.createdBy && (\n \n {event.createdBy.firstName} {event.createdBy.lastName}\n \n )}\n >\n ) : (\n {event.operation === OPERATIONS.CREATE ? 'Created' : 'Updated'}\n )}\n \n \n \n \n {(state) => (\n \n {event.operation === OPERATIONS.UPDATE && (\n \n )}\n \n )}\n \n \n );\n}\n\nLeadHistoryItem.propTypes = {\n event: PropTypes.shape({\n operation: PropTypes.string.isRequired,\n difference: PropTypes.string,\n createdAt: PropTypes.string.isRequired,\n lead: PropTypes.shape({\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }).isRequired,\n createdBy: PropTypes.shape({\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n horizontal: PropTypes.bool,\n isFullHistory: PropTypes.bool,\n onDetailsClick: PropTypes.func.isRequired,\n};\n\nLeadHistoryItem.defaultProps = {\n horizontal: true,\n isFullHistory: false,\n};\n\nexport default LeadHistoryItem;\n","import React from 'react';\nimport moment from 'moment';\nimport { Row, Icon, Grid, Column } from '@8base/boost';\nimport { MarginLessCol, Content, Layout } from './containers';\nimport { Transition } from 'react-transition-group';\nimport FormValues from '../../../../shared/components/forms/FormValues';\nimport { Name, Value } from './interfaces';\nimport PropTypes from 'prop-types';\n\nconst rows = [\n [\n {\n key: 'text',\n type: 'text',\n },\n ],\n];\n\nconst columns = '35px 100px minmax(200px, 1fr)';\n\n/**\n * Item for a history event on the lead, either create or update\n *\n * @param {object} props - The props object of the component\n * @param {object} props.event - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.difference - JSON changes details\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {object} props.event.note - The note object related with the event\n * @param {string} props.event.note.title - The title of the note\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n * @param {boolean} props.isFullHistory - If true, renders all component information\n * @param {Function} props.onNoteClick - Function to pass more information about the note\n * @param {Function} props.onDetailsClick - Function to pass more information on the difference when updated\n *\n * @returns {React.FC} The component to render\n */\nfunction NoteHistoryItem({ event, horizontal, isFullHistory, onNoteClick, onDetailsClick }) {\n const now = moment().startOf('day');\n const created = moment(event.createdAt);\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n\n const data = {\n text: event.note.text,\n };\n\n const handleInfoClick = () => {\n if (horizontal) {\n onNoteClick({\n title: event.note.title,\n data,\n rows,\n });\n }\n };\n\n return (\n \n \n \n \n \n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('MM/DD/YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {horizontal ? (\n <>\n {event.operation === 'CREATE' ? (\n \n New note created\n \n ) : (\n onDetailsClick(event.difference)}>\n Updated Note\n \n )}\n {event.note.title}\n >\n ) : (\n {event.operation === 'CREATE' ? 'Created' : 'Updated'}\n )}\n \n \n \n \n {(state) => (\n \n \n \n )}\n \n \n );\n}\n\nNoteHistoryItem.propTypes = {\n event: PropTypes.shape({\n operation: PropTypes.string.isRequired,\n difference: PropTypes.string,\n createdAt: PropTypes.string.isRequired,\n note: PropTypes.shape({\n title: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n horizontal: PropTypes.bool,\n isFullHistory: PropTypes.bool,\n onNoteClick: PropTypes.func,\n onDetailsClick: PropTypes.func,\n};\n\nNoteHistoryItem.defaultProps = {\n horizontal: true,\n isFullHistory: false,\n onNoteClick: () => {},\n onDetailsClick: () => {},\n};\n\nexport default NoteHistoryItem;\n","import React from 'react';\nimport { Row, Grid, Column } from '@8base/boost';\nimport { IconTasksGreen } from '../../../../shared/components/ui/Icons';\nimport { ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport { MarginLessCol, Layout, Content } from './containers';\nimport FormValues from '../../../../shared/components/forms/FormValues';\nimport { Transition } from 'react-transition-group';\nimport { Name, Value } from './interfaces';\nimport moment from 'moment';\nimport PropTypes from 'prop-types';\n\nconst rows = [\n [\n {\n key: 'description',\n label: 'Description',\n type: 'text',\n },\n ],\n [\n {\n key: 'date',\n label: 'Date',\n type: 'text',\n },\n {\n key: 'priority',\n label: 'Priority',\n type: 'text',\n },\n ],\n [\n {\n key: 'status',\n label: 'Status',\n type: 'text',\n },\n {\n key: 'type',\n label: 'Type',\n type: 'text',\n },\n ],\n];\n\nconst columns = '35px 100px minmax(200px, 1fr)';\n\n/**\n * Email history item component\n *\n * @param {object} props - The component's prop object\n * @param {object} props.event - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.difference - JSON changes details\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {object} props.event.task - The task object related with the event\n * @param {string} props.event.task.title - The title of the task\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n * @param {boolean} props.isFullHistory - If true, renders all component information\n * @param {Function} props.onTaskClick - Function to pass more information about the task\n * @param {Function} props.onDetailsClick - Function to pass more information on the difference when updated\n *\n * @returns {React.FC} The component to render\n */\nfunction TaskHistoryItem({ event, onDetailsClick, onTaskClick, isFullHistory, horizontal }) {\n const now = moment().startOf('day');\n const created = moment(event.createdAt);\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n\n const data = {\n date: moment(event.task.date).format('MM/DD/YYYY'),\n priority: event.task.priority,\n status: event.task.status,\n type: event.task.type.name,\n description: event.task.description,\n };\n\n const handleInfoClick = () => {\n if (horizontal) {\n onTaskClick({\n title: event.task.title,\n data,\n rows,\n });\n }\n };\n\n return (\n \n \n \n \n \n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('MM/DD/YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {event.operation === 'CREATE' ? (\n New Task\n ) : horizontal ? (\n onDetailsClick(event.difference)}>\n Updated Task\n \n ) : (\n Updated Task\n )}\n {horizontal && {event.task.title}}\n \n \n \n \n {(state) => (\n \n \n \n )}\n \n \n );\n}\n\nTaskHistoryItem.propTypes = {\n event: PropTypes.shape({\n operation: PropTypes.string.isRequired,\n difference: PropTypes.string,\n createdAt: PropTypes.string.isRequired,\n task: PropTypes.shape({\n title: PropTypes.string.isRequired,\n date: PropTypes.string.isRequired,\n priority: PropTypes.string.isRequired,\n status: PropTypes.string.isRequired,\n type: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }).isRequired,\n description: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n horizontal: PropTypes.bool,\n isFullHistory: PropTypes.bool,\n onTaskClick: PropTypes.func,\n onDetailsClick: PropTypes.func,\n};\n\nTaskHistoryItem.defaultProps = {\n horizontal: true,\n isFullHistory: false,\n onTaskClick: () => {},\n onDetailsClick: () => {},\n};\n\nexport default TaskHistoryItem;\n","import React from 'react';\nimport { Grid, Row, Column } from '@8base/boost';\nimport { IconInboxGreen } from '../../../../shared/components/ui/Icons';\nimport { ColumnValue } from '../../components/ColumnInfo';\nimport { MarginLessCol, Content, Layout } from './containers';\nimport { Transition } from 'react-transition-group';\nimport { Value, Name } from './interfaces';\nimport FormValues from '../../../../shared/components/forms/FormValues';\nimport moment from 'moment';\nimport PropTypes from 'prop-types';\n\nconst rows = [\n [\n {\n key: 'subject',\n label: 'Subject:',\n type: 'text',\n inline: true,\n },\n ],\n [\n {\n key: 'from',\n label: 'From:',\n type: 'text',\n inline: true,\n },\n ],\n [\n {\n key: 'to',\n label: 'To:',\n type: 'text',\n inline: true,\n },\n ],\n [\n {\n key: 'body',\n label: 'Content',\n type: 'html',\n margin: { top: '10px' },\n },\n ],\n];\n\nconst columns = '35px 100px minmax(200px, 1fr)';\n\n/**\n * Email history item component\n *\n * @param {object} props - The component's prop object\n * @param {object} props.event - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {object} props.event.email - The email object related with the event\n * @param {object} props.event.email.to - The destinatary\n * @param {string} props.event.email.subject - The subject of the email\n * @param {object} props.event.email.thread - Thread related to the email\n * @param {object} props.event.email.thread.lead - The lead related to the conversation\n * @param {object} props.event.email.thread.lead.email - Email of the lead related to the conversation\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n * @param {boolean} props.isFullHistory - If true, renders all component information\n * @param {Function} props.onEmailClick - Function to trigger to pass email info\n *\n * @returns {React.FC} The component to render\n */\nfunction EmailHistoryItem({ event, horizontal, isFullHistory, onEmailClick }) {\n const now = moment().startOf('day');\n const created = moment(event.createdAt);\n const yesterday = now.clone().subtract(1, 'days').startOf('day');\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n const { thread } = event.email;\n\n const data = {\n subject: event.email.subject,\n from: event.email.from,\n to: event.email.to,\n body: event.email.body,\n };\n\n const handleInfoClick = () => {\n if (horizontal) {\n onEmailClick({\n title: `Email ${event.email.to === thread.lead.email ? 'Sent' : 'Reply'}`,\n space: 5,\n data,\n rows,\n });\n }\n };\n\n return (\n \n \n \n \n \n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('MM/DD/YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {thread?.lead ? (\n event.email.to === thread.lead.email ? (\n \n Email Sent\n \n ) : (\n \n Email Reply\n \n )\n ) : event.email.to && thread.email && event.email.to === thread.email ? (\n \n Email Sent\n \n ) : (\n \n Email Reply\n \n )}\n {horizontal && {event.email.subject}}\n \n \n \n \n {(state) => (\n \n \n \n )}\n \n \n );\n}\n\nEmailHistoryItem.propTypes = {\n event: PropTypes.shape({\n operation: PropTypes.string.isRequired,\n createdAt: PropTypes.string.isRequired,\n email: PropTypes.shape({\n to: PropTypes.string.isRequired,\n from: PropTypes.string.isRequired,\n subject: PropTypes.string.isRequired,\n body: PropTypes.string.isRequired,\n thread: PropTypes.shape({\n email: PropTypes.string,\n lead: PropTypes.shape({\n email: PropTypes.string.isRequired,\n }),\n }).isRequired,\n }).isRequired,\n }).isRequired,\n onEmailClick: PropTypes.func,\n isFullHistory: PropTypes.bool,\n horizontal: PropTypes.bool,\n};\n\nEmailHistoryItem.defaultProps = {\n horizontal: true,\n isFullHistory: false,\n onEmailClick: () => {},\n};\n\nexport default EmailHistoryItem;\n","import React from 'react';\nimport moment from 'moment';\nimport { Row, Grid, Column } from '@8base/boost';\nimport { IconCallGreen } from '../../../../shared/components/ui/Icons';\nimport { formatDuration } from '../../../phone-calls/phone-calls-utils';\nimport { Layout, Content, MarginLessCol } from './containers';\nimport { Transition } from 'react-transition-group';\nimport FormValues from '../../../../shared/components/forms/FormValues';\nimport { Name, Value } from './interfaces';\nimport PropTypes from 'prop-types';\n\nconst rows = [\n [\n {\n key: 'carrier',\n label: 'Carrier',\n type: 'text',\n },\n {\n key: 'currentPremium',\n label: 'Current Premium',\n type: 'text',\n },\n {\n key: 'quotedPremium',\n label: 'Quoted Premium',\n type: 'text',\n },\n {\n key: 'status',\n label: 'Status',\n type: 'text',\n },\n ],\n [\n {\n key: 'insurance',\n label: 'Insurance',\n type: 'text',\n },\n {\n key: 'expirationDate',\n label: 'Expiration Date',\n type: 'text',\n },\n ],\n [\n {\n key: 'score',\n label: 'Score',\n type: 'text',\n },\n {\n key: 'createdAt',\n label: 'Dispositon created at',\n type: 'text',\n },\n ],\n [\n {\n key: 'createdBy',\n label: 'Created By',\n type: 'text',\n },\n ],\n];\n\nconst columns = '35px 100px minmax(200px, 1fr)';\n\n/**\n * Item for a history event on the lead, either create or update\n *\n * @param {object} props - The props object of the component\n * @param {object} props.event - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {object} props.event.call - The call object related with the event\n * @param {string} props.event.call.duration - The duration of the call\n * @param {string} props.event.call.status - The status of the call\n * @param {object} props.event.phoneCallDispositionRelation - The disposition related with this call\n * @param {string} props.event.phoneCallDispositionRelation.carrier - The carrier info\n * @param {object} props.event.phoneCallDispositionRelation.status - The status assigned to the lead while calling\n * @param {string} props.event.phoneCallDispositionRelation.status.name - The name of status\n * @param {string} props.event.phoneCallDispositionRelation.expirationDate - The expiration date info\n * @param {string} props.event.phoneCallDispositionRelation.insurance - The insuance info\n * @param {string} props.event.phoneCallDispositionRelation.notes - A note for the call\n * @param {string} props.event.phoneCallDispositionRelation.score - The score info\n * @param {boolean} props.onDispositionClick - Function to trigger to pass disposition info\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n * @param {boolean} props.isFullHistory - If true, renders all component information\n *\n * @returns {React.FC} The component to render\n */\nfunction CallHistoryItem({ event, horizontal, isFullHistory, onDispositionClick }) {\n const now = moment().startOf('day');\n const created = moment(event.createdAt);\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n const durationLabel = formatDuration(event.call.duration);\n\n const { phoneCallDispositionRelation: disposition } = event.call;\n\n const data = disposition\n ? {\n carrier: disposition.carrier,\n currentPremium: disposition.currentPremium,\n quotedPremium: disposition.quotedPremium,\n status: disposition?.status?.name,\n expirationDate: disposition?.expirationDate\n ? moment(disposition?.expirationDate).format('MM/DD/YYYY')\n : '',\n insurance: disposition?.insurance,\n notes: disposition.notes,\n ifsScore: '',\n createdAt: moment(disposition.createdAt).format('MM/DD/YYYY'),\n createdBy: `${disposition.createdBy.firstName} ${disposition.createdBy.lastName} (${disposition.createdBy.email})`,\n }\n : null;\n\n const handleInfoClick = () => onDispositionClick({ title: 'Disposition', data, rows });\n\n return (\n \n \n \n \n \n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('DD/MM-YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {horizontal ? (\n data ? (\n \n Disposition\n \n ) : (\n {event.call.status}\n )\n ) : (\n {event.call.status}\n )}\n {horizontal && Duration: {durationLabel}}\n \n \n \n \n {(state) => (\n \n {data !== null && }\n \n )}\n \n \n );\n}\n\nCallHistoryItem.propTypes = {\n event: PropTypes.shape({\n operation: PropTypes.string.isRequired,\n createdAt: PropTypes.string.isRequired,\n call: PropTypes.shape({\n duration: PropTypes.number.isRequired,\n status: PropTypes.string.isRequired,\n phoneCallDispositionRelation: PropTypes.shape({\n carrier: PropTypes.string.isRequired,\n currentPremium: PropTypes.string.isRequired,\n quotedPremium: PropTypes.string.isRequired,\n status: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }).isRequired,\n expirationDate: PropTypes.string.isRequired,\n insurance: PropTypes.string.isRequired,\n notes: PropTypes.string.isRequired,\n score: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }).isRequired,\n }),\n }).isRequired,\n }).isRequired,\n horizontal: PropTypes.bool,\n isFullHistory: PropTypes.bool,\n onDispositionClick: PropTypes.func,\n};\n\nCallHistoryItem.defaultProps = {\n onDispositionClick: () => {},\n horizontal: true,\n isFullHistory: false,\n};\n\nexport default CallHistoryItem;\n","import React from 'react';\nimport moment from 'moment';\nimport styled from 'styled-components';\nimport { FaArrowUp, FaArrowDown } from 'react-icons/fa';\nimport { Row, Grid, Column } from '@8base/boost';\nimport { IconChatGreen } from '../../../../shared/components/ui/Icons';\nimport { MarginLessCol, Content, Layout } from './containers';\nimport { Name, Value } from './interfaces';\nimport { Transition } from 'react-transition-group';\nimport FormValues from '../../../../shared/components/forms/FormValues';\nimport PropTypes from 'prop-types';\n\nconst IconContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst ArrowContainer = styled.div`\n padding-top: 5px;\n margin-left: 5px;\n`;\n\nconst rows = [\n [\n {\n key: 'from',\n label: 'From:',\n type: 'text',\n inline: true,\n },\n ],\n [\n {\n key: 'to',\n label: 'To:',\n type: 'text',\n inline: true,\n },\n ],\n [\n {\n key: 'text',\n label: 'Text',\n type: 'text',\n margin: {\n top: '10px',\n },\n },\n ],\n];\n\nconst columns = '35px 100px minmax(200px, 1fr)';\n\n/**\n * Item for a history event on the lead, either create or update\n *\n * @param {object} props - The props object of the component\n * @param {object} props.event - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {object} props.event.sms - The sms object related with the event\n * @param {string} props.event.sms.text - The text of the sms\n * @param {object} props.event.sms.createdBy - The user that initially sent the message\n * @param {string} props.event.sms.createdBy.firstName - The author's first name\n * @param {string} props.event.sms.createdBy.lastName - The author's last name\n * @param {string} props.event.sms.lead.firstName - The author's first name\n * @param {string} props.event.sms.lead.lastName - The author's last name\n * @param {boolean} props.onSmsClick - Function to trigger to pass sms info\n * @param {boolean} props.isFullHistory - Renders the object in a horizontal orientation if true\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n *\n * @returns {React.FC} The component to render\n */\nfunction SmsHistoryItem({ event, horizontal, isFullHistory, onSmsClick }) {\n const now = moment().startOf('day');\n const created = moment(event.createdAt);\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n const from = event.sms.createdBy\n ? `${event.sms.createdBy.firstName} ${event.sms.createdBy.lastName}`\n : '';\n\n const data = {\n from,\n to: `(${event.sms.phoneNumber})`,\n text: event.sms.text,\n };\n\n const handleInfoClick = () => {\n if (horizontal) {\n onSmsClick({\n title: 'Message sent',\n space: 5,\n data,\n rows,\n });\n }\n };\n\n const arrowIcon =\n event.sms?.type === 'INCOMING' ? (\n \n ) : (\n \n );\n\n return (\n \n \n \n \n \n \n {arrowIcon}\n \n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('DD/MM-YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {event.sms?.type === 'INCOMING' ? (\n \n Message received\n \n ) : (\n \n Message sent\n \n )}\n\n {horizontal && {event.sms.text}}\n \n \n \n \n {(state) => (\n \n \n \n )}\n \n \n );\n}\n\nSmsHistoryItem.propTypes = {\n event: PropTypes.shape({\n operation: PropTypes.string.isRequired,\n createdAt: PropTypes.string.isRequired,\n sms: PropTypes.shape({\n text: PropTypes.string.isRequired,\n phoneNumber: PropTypes.string.isRequired,\n lead: PropTypes.shape({\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }).isRequired,\n createdBy: PropTypes.shape({\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }),\n type: PropTypes.string,\n }).isRequired,\n }).isRequired,\n onSmsClick: PropTypes.func,\n isFullHistory: PropTypes.bool,\n horizontal: PropTypes.bool,\n};\n\nSmsHistoryItem.defaultProps = {\n onSmsClick: () => {},\n isFullHistory: false,\n horizontal: true,\n};\n\nexport default SmsHistoryItem;\n","import React from 'react';\nimport { Row, Icon, Grid } from '@8base/boost';\nimport { ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport { MarginLessCol, Layout } from './containers';\nimport { Value } from './interfaces';\nimport moment from 'moment';\nimport PropTypes from 'prop-types';\n\nconst columns = '35px 100px minmax(200px, 1fr)';\n\n/**\n * Stage history item component\n *\n * @param {event} props - The component's prop object\n * @param {object} props.event - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {object} props.event.stage - The stage object related with the event\n * @param {string} props.event.stage.name - The name of the stage\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n * @param {boolean} props.isFullHistory - If true, renders all component information\n *\n * @returns {React.FC} The component to render\n */\nfunction StageHistoryItem({ event, horizontal, isFullHistory }) {\n const now = moment().startOf('day');\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n const created = moment(event.createdAt);\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n\n return (\n \n \n \n \n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('MM/DD/YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {horizontal ? (\n <>\n Status changed to\n {event.stage.name}\n >\n ) : (\n {event.stage.name}\n )}\n \n \n \n );\n}\n\nStageHistoryItem.propTypes = {\n event: PropTypes.shape({\n operation: PropTypes.string.isRequired,\n createdAt: PropTypes.string.isRequired,\n stage: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n horizontal: PropTypes.bool,\n isFullHistory: PropTypes.bool,\n};\n\nStageHistoryItem.defaultProps = {\n horizontal: true,\n isFullHistory: false,\n};\n\nexport default StageHistoryItem;\n","import React from 'react';\nimport { Row, Grid } from '@8base/boost';\nimport { ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport { MarginLessCol, Layout } from './containers';\nimport { Name } from './interfaces';\nimport moment from 'moment';\nimport PropTypes from 'prop-types';\nimport {\n IconCallGreen,\n IconInboxGreen,\n IconChatGreen,\n IconTasksGreen,\n} from '../../../../shared/components/ui/Icons';\nimport { ENTITIES } from '../leads-history-model';\nimport { Avatar, Icon } from '@8base/boost';\n\nconst columns = '35px 100px minmax(200px, 1fr)';\n\n/**\n * Item rendered when entity is deleted\n *\n * @param {object} props - The component's prop object\n * @param {object} props.event - The object defining the event\n * @param {object} props.event.entity - The object defining the event\n * @param {string} props.event.operation - CREATE / UPDATE / DELETE the entity\n * @param {string} props.event.createdAt - Timestamp of the event\n * @param {boolean} props.isFullHistory - If true, renders all component information\n * @param {boolean} props.horizontal - Renders the object in a horizontal orientation if true\n *\n * @returns {React.FC} The component to render\n */\nfunction DeletedHistoryItem({ event, horizontal, isFullHistory }) {\n const now = moment().startOf('day');\n const created = moment(event.createdAt);\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n\n const InnerWrapper = horizontal ? MarginLessCol : Row;\n let icon = null;\n\n switch (event.entity) {\n case ENTITIES.LEAD:\n icon = ;\n break;\n case ENTITIES.NOTE:\n icon = (\n \n );\n break;\n case ENTITIES.TASK:\n icon = ;\n break;\n case ENTITIES.EMAIL:\n icon = ;\n break;\n case ENTITIES.CALL:\n icon = ;\n break;\n case ENTITIES.SMS:\n icon = ;\n break;\n case ENTITIES.STAGE:\n icon = ;\n break;\n default:\n icon = null;\n }\n\n return (\n \n {icon}\n \n \n {created.isSame(now, 'day') ? (\n Today\n ) : created.isSame(yesterday, 'day') ? (\n Yesterday\n ) : (\n {created.format('MM/DD/YYYY')}\n )}\n {created.format('LT')}\n \n \n \n \n {event.operation === 'CREATE' ? (\n New {event.entity.toLowerCase()}\n ) : (\n Updated {event.entity.toLowerCase()}\n )}\n \n \n \n );\n}\n\nDeletedHistoryItem.propTypes = {\n event: PropTypes.shape({\n entity: PropTypes.string.isRequired,\n lead: PropTypes.shape({\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }).isRequired,\n operation: PropTypes.string.isRequired,\n createdAt: PropTypes.string.isRequired,\n }).isRequired,\n horizontal: PropTypes.bool,\n isFullHistory: PropTypes.bool,\n};\n\nDeletedHistoryItem.defaultProps = {\n horizontal: true,\n isFullHistory: false,\n};\n\nexport default DeletedHistoryItem;\n","import React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\nimport { usePhoneCallComponent } from '../phone-calls-hooks';\nimport { Button, Loader } from '@8base/boost';\nimport * as toast from '../../../shared/components/toast/Toast';\n\n/**\n * @param {object} props Props.\n * @param {object} props.children Children element.\n * @param {string} props.tel Phone number as tel prop.\n * @param {string} props.data Lead data for get lead name oand other info\n * @returns {object} React Element\n */\nexport const PhoneNumber = ({ children, tel, name, lead }) => {\n const phoneUtil = PhoneNumberUtil.getInstance();\n\n const { makeCall, ready, startingCall } = usePhoneCallComponent() || {};\n\n const call = useCallback(() => {\n if (tel) {\n const isValidNumber = phoneUtil.isValidNumberForRegion(phoneUtil.parse(tel, 'US'), 'US');\n\n if (isValidNumber) {\n makeCall(tel, name, lead);\n } else {\n toast.error('Invalid phone number!');\n }\n } else {\n toast.error('You must register a phone number for this lead');\n }\n }, [makeCall, tel, name, lead, phoneUtil]);\n\n return (\n \n {startingCall ? : children}\n \n );\n};\n\nPhoneNumber.defaultProps = {\n name: 'Unknown',\n lead: undefined,\n};\n\nPhoneNumber.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n tel: PropTypes.string.isRequired,\n name: PropTypes.string,\n lead: PropTypes.string,\n};\n","import gql from 'graphql-tag';\n\nexport const LEAD_STAGE_FRAGMENT = gql`\n fragment leadStageFragment on LeadStage {\n id\n name\n createdAt\n }\n`;\n\nexport const QUERY_LEADS_STAGES = gql`\n query FetchLeadStages {\n leadStagesList {\n items {\n ...leadStageFragment\n }\n }\n }\n ${LEAD_STAGE_FRAGMENT}\n`;\n\nexport const CREATE_LEAD_STAGE_HISTORY = gql`\n mutation CreateLeadStage($data: LeadStageHistoryCreateInput!, $stage: ID!, $lead: ID!) {\n leadStageHistoryCreate(data: $data) {\n stage {\n ...leadStageFragment\n }\n }\n leadUpdate(filter: { id: $lead }, data: { stage: { connect: { id: $stage } } }) {\n id\n }\n }\n ${LEAD_STAGE_FRAGMENT}\n`;\n\nexport const ASSING_LEAD_STAGE = gql`\n mutation AssignLeadStage($stage: ID!, $lead: ID!) {\n leadUpdate(filter: { id: $lead }, data: { stage: { connect: { id: $stage } } }) {\n id\n }\n }\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchLeadStages = createEvent();\n\nexport const OnFetchLeadStagesError = createEvent();\n\nexport const OnSetLeadStage = createEvent();\n\nexport const OnSetLeadStageError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { createAction } from '@cobuildlab/react-simple-state';\nimport {\n QUERY_LEADS_STAGES,\n CREATE_LEAD_STAGE_HISTORY,\n ASSING_LEAD_STAGE as ASSING_LEAD_STAGE_MUTATION,\n} from './leads-stage-queries';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport {\n OnFetchLeadStages,\n OnFetchLeadStagesError,\n OnSetLeadStage,\n OnSetLeadStageError,\n} from './leads-stage-store';\n\n/**\n * Fetch lead stages\n *\n * @returns {Promise}\n */\nexport const fetchLeadStages = createAction(OnFetchLeadStages, OnFetchLeadStagesError, async () => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: QUERY_LEADS_STAGES,\n });\n\n return response.data;\n});\n\n/**\n * Assigns the provided stage to the provided lead\n *\n * @param {number} lead - The lead id\n * @param {number} stage - The stage id\n *\n * @returns {Promise} result function\n */\nexport const assignLeadStage = createAction(\n OnSetLeadStage,\n OnSetLeadStageError,\n async (lead, stage) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: CREATE_LEAD_STAGE_HISTORY,\n variables: {\n data: {\n lead: { connect: { id: lead } },\n stage: { connect: { id: stage } },\n },\n lead,\n stage,\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Assigns the provided stage to the provided lead\n * without creating leadStageHistory\n *\n * @param {number} leadId - Lead id\n * @param {number} stageId - Stage id\n *\n * @returns {Promise} The function's result function.\n */\nexport const assignLeadToStage = async (leadId, stageId) => {\n const client = OnApolloClient.get();\n\n try {\n const { data } = await client.mutate({\n mutation: ASSING_LEAD_STAGE_MUTATION,\n variables: { lead: leadId, stage: stageId },\n });\n\n log('assignLeadStage without creating leadStageHistory', data);\n\n return data;\n } catch (e) {\n error('assignLeadStage', e);\n }\n};\n","import React from 'react';\nimport { Table } from '@8base/boost';\nimport styled from 'styled-components';\nimport { useHistory } from 'react-router-dom';\nimport {\n priorityMap,\n findPriority,\n canAssignAgents,\n getLeadFullName,\n getLeadPhoneNumbers,\n} from '../leads-utils';\nimport { updateLeadPriority, updateLeadUsers } from '../leads-actions';\nimport {\n DropdownWithCheck,\n TextContact,\n DateBox,\n SelectInput,\n SimpleDropdown,\n} from 'shared/components';\nimport { getAssignedUsersLabel, mapUserToDropdownWithCheck } from '../../users/user-utils';\nimport { getActionItem } from '../leads-history/leads-history-utils';\n\nimport { PRIORITY_OPTIONS } from '../../../shared/constants';\nimport { PropTypes } from 'prop-types';\nimport { PhoneNumber } from '../../phone-calls/Components/PhoneNumber';\nimport { formatPhoneNumber, parseListToSelectOptions } from '../../phone-calls/phone-calls-utils';\nimport { assignLeadToStage } from '../leads-stage/leads-stage-action';\n\nconst TableBodyCell = styled(Table.BodyCell)`\n word-break: break-word !important;\n`;\n\nconst TextContactContainer = styled.div`\n & span p {\n text-align: start !important;\n }\n`;\n\nconst LeadCell = ({ columnName, lead, users, user, agency, stages }) => {\n const [stagesList] = stages;\n const stagesOptions = parseListToSelectOptions(stagesList);\n const history = useHistory();\n let cell;\n\n switch (columnName) {\n case 'ID':\n cell = (\n \n ID\n \n );\n break;\n case 'Received':\n cell = (\n \n \n \n );\n break;\n case 'Contact': {\n const phones = getLeadPhoneNumbers(lead);\n const contact = (\n \n \n history.push(`/leads/${lead.id}`)}\n style={{ color: '#3DB4AA' }}>\n {lead.firstName} {lead.lastName}\n \n {phones && phones.length > 0 && (\n \n {formatPhoneNumber(phones[0].phone.number)}\n \n )}\n \n \n );\n\n cell = {contact};\n break;\n }\n case 'Stage':\n cell = (\n \n {\n assignLeadToStage(lead.id, value);\n }}\n // TODO: remove optional operator when all the lead has a default stage\n value={lead?.stage?.id}\n options={stagesOptions}\n placeholder={''}\n />\n \n );\n break;\n case 'IFS Score':\n cell = (\n \n {lead.ifsScore}\n \n );\n break;\n case 'Assigned To':\n if (users) {\n if (canAssignAgents(user, agency)) {\n cell = (\n \n updateLeadUsers(lead.id, values)}\n />\n \n );\n } else {\n cell = (\n \n ({\n id: u.id,\n label: `${u.firstName} ${u.lastName}`,\n value: u.id,\n }))}\n header={getAssignedUsersLabel(lead.assignees.items)}\n />\n \n );\n }\n } else {\n cell = ;\n }\n break;\n case 'Campaign':\n cell = (\n \n {lead.campaign ? lead.campaign.name : ''}\n \n );\n break;\n case 'Last Action':\n cell = (\n \n {lead.lastHistoryActionType &&\n getActionItem(lead.lastHistoryActionType, lead.lastHistoryActionData)}\n \n );\n break;\n case 'Priority':\n cell = (\n \n updateLeadPriority(lead.id, findPriority(value))}\n value={findPriority(lead.priority)}\n options={priorityMap(PRIORITY_OPTIONS)}\n placeholder={''}\n />\n \n );\n break;\n default:\n cell = (\n \n default\n \n );\n }\n return cell;\n};\n\nLeadCell.propTypes = {\n lead: PropTypes.object.isRequired,\n user: PropTypes.object.isRequired,\n agency: PropTypes.object.isRequired,\n columnName: PropTypes.string.isRequired,\n stages: PropTypes.array.isRequired,\n};\n\nexport default LeadCell;\n","import React from 'react';\nimport { ENTITIES } from './leads-history-model';\nimport LeadHistoryItem from './components/LeadHistoryItem';\nimport NoteHistoryItem from './components/NoteHistoryItem';\nimport TaskHistoryItem from './components/TaskHistoryItem';\nimport EmailHistoryItem from './components/EmailHistoryItem';\nimport CallHistoryItem from './components/CallHistoryItem';\nimport SmsHistoryItem from './components/SmsHistoryItem';\nimport StageHistoryItem from './components/StageHistoryItem';\nimport DeletedHistoryItem from './components/DeletedHistoryItem';\n\n/**\n * Chooses the right component for the given history event\n *\n * @param {string} lastHistoryActionType - Type of action.\n * @param {string} lastHistoryActionData - Data.\n * @param {boolean} horizontal - Tiny version of the component.\n * @param {boolean} fullHistory - If true, every item would be rendered with all of its information\n * @param {Function} onDetailsClick - Function to trigger when a difference button in an update event item is clicked\n \n * @param {Function} onInfoClick - Function to trigger when the item wants to pass some information\n * @returns {React.FC} Component to render\n */\nexport const getActionItem = (\n lastHistoryActionType,\n lastHistoryActionData,\n horizontal = false,\n fullHistory = false,\n onDetailsClick = () => {},\n onInfoClick = () => {},\n) => {\n const action = JSON.parse(lastHistoryActionData);\n\n if (!action.entity) {\n return (\n \n );\n }\n\n switch (lastHistoryActionType) {\n case ENTITIES.LEAD:\n return (\n \n );\n case ENTITIES.NOTE:\n return (\n \n );\n case ENTITIES.TASK:\n return (\n \n );\n case ENTITIES.EMAIL:\n return (\n \n );\n case ENTITIES.CALL:\n return (\n \n );\n case ENTITIES.SMS:\n return (\n \n );\n case ENTITIES.STAGE:\n return (\n \n );\n default:\n return null;\n }\n};\n/**\n * Chooses the right component for the given history event\n *\n * @param {object} event - A history item object\n * @param {boolean} horizontal - Tiny version of the component\n * @param {boolean} fullHistory - If true, every item would be rendered with all of its information\n * @param {Function} onDetailsClick - Function to trigger when a difference button in an update event item is clicked\n * @param {Function} onInfoClick - Function to trigger when the item wants to pass some information\n * @returns {React.FC} Component to render\n */\nexport const getHistoryItem = (\n event,\n horizontal = true,\n fullHistory = false,\n onDetailsClick = () => {},\n onInfoClick = () => {},\n) => {\n if (event[event.entity.toLowerCase()] === null) {\n return (\n \n );\n }\n\n switch (event.entity) {\n case ENTITIES.LEAD:\n return (\n \n );\n case ENTITIES.NOTE:\n return (\n \n );\n case ENTITIES.TASK:\n return (\n \n );\n case ENTITIES.EMAIL:\n return (\n \n );\n case ENTITIES.CALL:\n return (\n \n );\n case ENTITIES.SMS:\n return (\n \n );\n case ENTITIES.STAGE:\n return (\n \n );\n default:\n return null;\n }\n};\n\n/**\n * Returns if an event is related with the specified search string\n *\n * @param {string} search - The search string\n * @param {object} event - The event object\n *\n * @returns {boolean} Is item related or not with the search term\n */\nexport const filterItem = (search, event) => {\n const regexp = new RegExp(`${search}`, 'i');\n const name = `${event.lead.firstName} ${event.lead.middleName} ${event.lead.lastName}`;\n\n if (regexp.test(event.operation)) return true;\n\n if (regexp.test(name)) return true;\n\n switch (event.entity) {\n case ENTITIES.NOTE:\n return event.note && (regexp.test(event.note.title) || regexp.test(event.note.title));\n case ENTITIES.TASK:\n return (\n event.task &&\n (regexp.test(event.task.title) ||\n regexp.test(event.task.type) ||\n regexp.test(event.task.priority) ||\n regexp.test(event.task.description))\n );\n case ENTITIES.EMAIL:\n return (\n event.email &&\n (regexp.test(event.email.thread.identifier) ||\n regexp.test(event.email.subject) ||\n regexp.test(event.email.body) ||\n regexp.test(event.email.to) ||\n regexp.test(event.email.from))\n );\n case ENTITIES.CALL:\n return (\n event.call &&\n (regexp.test(event.call.status) ||\n (event.call.phoneCallDispositionRelation &&\n (regexp.test(event.call.phoneCallDispositionRelation.notes) ||\n regexp.test(event.call.phoneCallDispositionRelation.score?.name))))\n );\n case ENTITIES.SMS:\n return event.text && regexp.test(event.sms.text);\n case ENTITIES.STAGE:\n return event.stage && regexp.test(event.stage.name);\n default:\n return false;\n }\n};\n","import React, { useState, useCallback, useEffect, useMemo } from 'react';\nimport { Dropdown } from '@8base/boost';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport { DropdownBodyOnTable, FilterFooter, FilterCategory } from 'shared/components';\nimport filterIconGrey from 'shared/assets/images/filter-grey.svg';\nimport filterIconGreen from 'shared/assets/images/filter-green.svg';\nimport { fetchFilterOptions } from '../leads-actions';\nimport { FILTER_CATEGORIES } from '../leads-model';\nimport { usePromise } from '@cobuildlab/hooks-utils';\nimport moment from 'moment';\n\nconst DropdownBody = styled.div`\n background-color: #fff;\n position: relative;\n z-index: 2000;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n`;\n\nconst FilterBody = styled.div`\n display: grid;\n /* grid-template-rows: repeat(3, min-content); */\n grid-template-columns: repeat(3, [col-start] 1fr [col-end]);\n gap: 12px;\n padding: 12px;\n`;\n\nconst FilterBtn = styled.div`\n display: flex;\n border-radius: 5px;\n border: solid 1px ${({ active }) => (active ? '#3db4aa' : '#d0d7dd')};\n padding: 0px 16px;\n height: 36px;\n box-sizing: border-box;\n align-items: center;\n`;\n\nconst FilterIcon = styled.img`\n width: 2rem;\n height: 2rem;\n`;\n\nconst LeadFilter = (props) => {\n const [filters, setFilters] = useState(props.query);\n const [categories, setCategories] = useState(FILTER_CATEGORIES);\n const [options] = usePromise(() => fetchFilterOptions(props.agency), { initialState: null });\n\n useEffect(() => {\n if (options) {\n const { campaignsList, agencyUsersList } = options;\n\n setCategories((prevCategories) => ({\n ...prevCategories,\n assignedTo: {\n ...prevCategories.assignedTo,\n options: [\n { label: 'Anyone', value: '' },\n { label: 'None', value: 'none' },\n ...agencyUsersList.items.map((agent) => ({\n label: `${agent.user.firstName} ${agent.user.lastName}`,\n value: agent.user.id,\n })),\n ],\n },\n campaign: {\n ...prevCategories.campaign,\n options: [\n { label: 'All Campaigns', value: '' },\n ...campaignsList.items.map((campaign) => ({\n label: campaign.name,\n value: campaign.id,\n })),\n ],\n },\n }));\n }\n }, [options]);\n\n useEffect(() => {\n setFilters(props.query);\n }, [props.query]);\n\n const onChange = useCallback((name, value) => {\n if (name === 'createdAfter' && value) {\n value = moment(value)\n .startOf('day')\n .toISOString();\n }\n\n if (name === 'createdBefore' && value) {\n value = moment(value)\n .endOf('day')\n .toISOString();\n }\n\n setFilters((prevFilters) => ({\n ...prevFilters,\n [name]: value || undefined,\n }));\n }, []);\n\n const onSubmit = useCallback(() => {\n props.onConfirm(filters);\n }, [filters, props]);\n\n const onClose = useCallback(() => {\n setFilters(props.query);\n }, [props.query]);\n\n const fields = useMemo(\n () =>\n Object.entries(categories).map(([identifier, category]) => (\n \n )),\n [categories, filters, onChange],\n );\n\n const active = useMemo(\n () => Object.keys(props.query).some((key) => key !== 'search' && props.query[key]),\n [props.query],\n );\n\n const icon = active ? : ;\n\n return (\n \n \n \n {icon}\n Filters\n \n \n \n {({ closeDropdown }) => (\n \n {fields}\n \n \n )}\n \n \n );\n};\n\nLeadFilter.propTypes = {\n agency: PropTypes.string.isRequired,\n query: PropTypes.object.isRequired,\n onConfirm: PropTypes.func.isRequired,\n onCancel: PropTypes.func,\n};\n\nLeadFilter.defaultProps = {\n onCancel: () => {},\n};\n\nexport default LeadFilter;\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { PropTypes } from 'prop-types';\n\nimport { YesNoDialog } from '../../../shared/components';\n\nconst BoldText = styled.span`\n font-weight: bold;\n`;\n\nconst LeadsDialog = ({ isOpen, onYes, onClose, selectedLead, selectedLeads, isLoading }) => {\n const text = (\n \n \n {`Are you sure you want to delete ${\n selectedLead.length > 0 || selectedLeads.length === 1 ? 'this Lead?' : 'these Leads?'\n } `}\n \n This action can’t be undone.\n \n );\n return (\n 0 || selectedLeads.length === 1 ? 'Lead' : 'Leads'}`}\n text={text}\n isLoading={isLoading}\n />\n );\n};\n\nLeadsDialog.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n isLoading: PropTypes.bool.isRequired,\n onYes: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n selectedLead: PropTypes.string.isRequired,\n selectedLeads: PropTypes.array.isRequired,\n};\n\nexport default React.memo(LeadsDialog);\n","import React, { useState, useEffect, useCallback, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { LeadPhoneType } from '@cobuildlab/lead-volt-share';\nimport { Form, Grid, Select, Row, Label, Icon, Button, Tooltip } from '@8base/boost';\nimport styled from 'styled-components';\nimport {\n GENDER_OPTIONS,\n BIRTHMONTH_OPTIONS,\n BIRTHDAY_OPTIONS,\n BIRTHYEAR_OPTIONS,\n STATES_OPTIONS,\n LEAD_TYPE_OPTIONS,\n} from '../../leads-model';\nimport { Margin, SelectMultipleAgents } from '../../../../shared/components';\nimport { PRIORITY_OPTIONS } from '../../leads-model';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchManagerAndAgents } from '../../../users/user-actions';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport Field from '../../../../shared/components/Field';\nimport { PhoneNumberUtil } from 'google-libphonenumber';\nimport {\n OnFetchManagerAndAgentUsersError,\n OnFetchManagerAndAgentUsersEvent,\n} from 'modules/users/user-events';\n\nconst phoneUtil = PhoneNumberUtil.getInstance();\n\nconst GridBoxFlexEnd = styled(Grid.Box)`\n justify-content: flex-end;\n`;\n\nconst Add = styled(Icon)`\n margin-right: 0px !important;\n`;\n\nconst CenteredIcon = styled(Icon)`\n margin-top: 20px;\n`;\n\n/**\n * Lead form fields\n *\n * @param {object} props component props\n * @param {object} props.lead lead data\n * @param {boolean} props.isUpdate is edit or not\n * @param {Array} props.campaigns campaigns list\n * @param {Array} props.phoneList phones list\n * @param {Function} props.setPhoneList set for list phones\n * @param {string} props.activeAgency ID of active agency\n * @param {Function} props.handleOnChangeInput handle on change\n * @returns {React.ReactElement} component\n */\nconst LeadForm = ({\n lead,\n isUpdate,\n campaigns,\n phoneList,\n setPhoneList,\n activeAgency,\n handleOnChangeInput,\n}) => {\n const [users, setUsers] = useState([]);\n\n useEffect(() => {\n activeAgency && fetchManagerAndAgents(activeAgency.id);\n setPhoneList(lead.phones);\n }, [activeAgency, lead.phones, setPhoneList]);\n\n useEventSubscription(OnFetchManagerAndAgentUsersEvent, ({ usersList }) =>\n setUsers(usersList.items),\n );\n useEventSubscription(OnFetchManagerAndAgentUsersError, (e) =>\n toast.error('There was an error fetching the users, please try again.'),\n );\n\n const handleAddInputPhone = (e) => {\n e.preventDefault();\n setPhoneList([\n ...phoneList,\n {\n phone: {\n code: '1',\n number: '',\n },\n },\n ]);\n };\n\n const handleDeleteInputPhone = useCallback(\n (i) => {\n setPhoneList((prevState) => {\n if (prevState.length === 1) {\n toast.error('At least one phone number is required');\n\n return prevState;\n }\n\n return prevState\n .map((phone, j) => (i === j ? { ...phone, delete: true } : phone))\n .filter((phone) => (phone.delete && !phone.id ? false : true));\n });\n },\n [setPhoneList],\n );\n\n const handleOnChangeNumber = useCallback(\n (value, i) => {\n if (value.length > 1) {\n let phone = null;\n\n try {\n phone = phoneUtil.parse(value, 'US');\n } catch (e) {\n toast.error(`The phone #${i + 1} is not valid`);\n\n return;\n }\n\n setPhoneList((prevState) =>\n prevState.map((state, j) => {\n if (i === j) {\n let isValid = true;\n\n if (\n phoneUtil.isPossibleNumber(phone) === false ||\n phoneUtil.isValidNumber(phone) === false\n ) {\n isValid = false;\n\n toast.error(`The phone #${i + 1} is not valid`);\n }\n\n /**\n * Checks if the number actually changes\n */\n const update =\n state.id && isValid\n ? lead.phones.some((p) => p.id === state.id && p.phone.number !== value)\n : false;\n\n return {\n ...state,\n update,\n phone: {\n ...state.phone,\n number: value,\n },\n };\n }\n\n return state;\n }),\n );\n }\n },\n [lead, setPhoneList],\n );\n\n const handleOnChangeCode = useCallback(\n (value, i) => {\n setPhoneList((prevState) =>\n prevState.map((phone, j) => {\n if (i === j) {\n return {\n ...phone,\n phone: {\n ...phone.phone,\n code: value,\n },\n };\n }\n\n return phone;\n }),\n );\n },\n [setPhoneList],\n );\n\n const handleBlur = useCallback(\n (e) => {\n const {\n target: { value, name },\n } = e;\n\n handleOnChangeInput(value, name);\n },\n [handleOnChangeInput],\n );\n\n const phones = useMemo(\n () =>\n phoneList.map((phone, i) => {\n if (phone.delete) {\n return null;\n }\n\n const label = `Phone Number ${i + 1}`;\n let icon = 'MobilePhoneIcon';\n let tooltip = 'Mobile phone number';\n\n if (phone.type === LeadPhoneType.UNREACHABLE) {\n icon = 'Alert';\n tooltip =\n \"This phone number is probably not valid, it couldn't be reached in previous attempts\";\n }\n\n if (phone.type === LeadPhoneType.LANDLINE) {\n icon = 'LandlineIcon';\n tooltip =\n \"This phone number has been detected as a landline, therefore it can't receive sms messages\";\n }\n\n return (\n \n handleOnChangeCode(value, i)}\n options={[\n {\n label: '+1',\n value: '1',\n },\n ]}\n />\n handleOnChangeNumber(e.target.value, i)}\n />\n \n \n \n handleDeleteInputPhone(i)}\n />\n \n );\n }),\n [phoneList, handleOnChangeCode, handleOnChangeNumber, handleDeleteInputPhone],\n );\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n handleOnChangeInput(value, 'gender')}\n />\n \n \n \n \n \n \n \n \n \n handleOnChangeInput(value || '', 'birthMonth')}\n options={BIRTHMONTH_OPTIONS}\n clearable\n />\n \n \n handleOnChangeInput(value || '', 'birthDay')}\n options={BIRTHDAY_OPTIONS}\n clearable\n />\n \n \n handleOnChangeInput(value || '', 'birthYear')}\n options={BIRTHYEAR_OPTIONS}\n clearable\n />\n \n \n \n \n \n \n handleOnChangeInput(value, 'campaign')}\n options={campaigns.map((campaign) => ({\n label: campaign.name,\n value: campaign.id,\n }))}\n />\n \n \n handleOnChangeInput(value, 'ifsScore')}\n options={\n activeAgency\n ? activeAgency.ifsScore.map((score) => ({\n label: score,\n value: score,\n }))\n : []\n }\n />\n \n \n \n \n \n \n \n ({\n label: `${user.firstName} ${user.lastName}`,\n value: user.id,\n imgUrl: user.avatar\n ? user.avatar.downloadUrl\n : 'https://randomuser.me/api/portraits/women/17.jpg',\n }))}\n placeholder=\"Assign users\"\n onChange={(value) => handleOnChangeInput(value, 'assignees')}\n options={users.map((user) => ({\n label: `${user.firstName} ${user.lastName}`,\n value: user.id,\n imgUrl: user.avatar\n ? user.avatar.downloadUrl\n : 'https://randomuser.me/api/portraits/women/17.jpg',\n }))}\n />\n \n \n {phones}\n \n \n Add New Phone Number\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n handleOnChangeInput(value, 'state')}\n options={STATES_OPTIONS}\n />\n \n {!isUpdate && (\n \n handleOnChangeInput(value, 'leadType')}\n options={LEAD_TYPE_OPTIONS}\n />\n \n )}\n {isUpdate && (\n \n handleOnChangeInput(value, 'amount')}\n />\n \n )}\n \n handleOnChangeInput(value, 'priority')}\n options={PRIORITY_OPTIONS}\n />\n \n \n handleOnChangeInput(value, 'creditScore')}\n />\n \n \n \n \n \n );\n};\n\nLeadForm.propTypes = {\n lead: PropTypes.object.isRequired,\n isUpdate: PropTypes.bool.isRequired,\n activeAgency: PropTypes.object.isRequired,\n phoneList: PropTypes.array.isRequired,\n campaigns: PropTypes.array.isRequired,\n handleOnChangeInput: PropTypes.func.isRequired,\n setPhoneList: PropTypes.func.isRequired,\n};\n\nexport default LeadForm;\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport * as R from 'ramda';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { createLead, updateLead } from '../leads-actions';\nimport LeadForm from './forms/LeadForm';\nimport { LEAD } from '../leads-model';\nimport {\n LEAD_TYPE_AUTO,\n LEAD_TYPE_COMMERCIAL_AUTO,\n LEAD_TYPE_HOME,\n LEAD_TYPE_LIFE,\n LEAD_TYPE_GENERAL_LIABILITY,\n LEAD_TYPE_WORKERS_COMPENSATION,\n LEAD_TYPE_EMPLOYEE_BENEFITS,\n} from '../../../shared/constants';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport * as toast from 'shared/components/toast/Toast';\nimport { getLeadPhoneNumberRelationInput } from '../leads-utils';\nimport { OnLeadCreateEvent, OnLeadsError, OnLeadsUpdateEvent } from '../leads-events';\n\nconst LeadFormDialog = ({\n isOpen,\n onCloseDialog,\n afterSubmit,\n lead,\n isUpdate,\n campaigns,\n activeAgency,\n}) => {\n const [fields, setFields] = useState(lead || R.clone(LEAD));\n const [phoneList, setPhoneList] = useState([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (lead) {\n setFields(lead);\n }\n }, [lead]);\n\n const handleCloseDialog = () => {\n isUpdate ? setFields(lead) : setFields(R.clone(LEAD));\n onCloseDialog();\n };\n\n const handleOnSubmit = () => {\n const {\n firstName,\n middleName,\n lastName,\n gender,\n birthMonth,\n birthDay,\n birthYear,\n campaign,\n email,\n assignees,\n firstAddress,\n secondAddress,\n zipCode,\n city,\n state,\n priority,\n leadType,\n creditScore,\n ifsScore,\n amount,\n } = fields;\n\n console.log({ phoneList });\n\n let leadLeadPhoneNumberRelation = getLeadPhoneNumberRelationInput(phoneList, isUpdate);\n\n console.log({ leadLeadPhoneNumberRelation });\n const dataLead = {\n firstName,\n middleName,\n lastName,\n gender,\n birthMonth,\n birthDay,\n birthYear,\n campaign,\n email,\n assignees: assignees.map((user) => (user.value ? user.value : user.id)),\n leadLeadPhoneNumberRelation,\n address: {\n street1: firstAddress,\n street2: secondAddress,\n zip: zipCode,\n city,\n state,\n },\n creditScore,\n priority,\n ifsScore,\n amount: amount ? amount : '0',\n };\n\n if (!isUpdate) {\n if (leadType === LEAD_TYPE_AUTO) {\n dataLead.leadLeadTypeAutoRelation = { create: {} };\n }\n\n if (leadType === LEAD_TYPE_COMMERCIAL_AUTO) {\n dataLead.leadLeadTypeCommercialAutoRelation = { create: {} };\n }\n\n if (leadType === LEAD_TYPE_HOME) {\n dataLead.leadLeadTypeHomeRelation = { create: {} };\n }\n\n if (leadType === LEAD_TYPE_LIFE) {\n dataLead.leadLeadTypeLifeRelation = { create: {} };\n }\n\n if (leadType === LEAD_TYPE_GENERAL_LIABILITY) {\n dataLead.leadLeadTypeGeneralLiabilityRelation = { create: {} };\n }\n\n if (leadType === LEAD_TYPE_WORKERS_COMPENSATION) {\n dataLead.leadLeadTypeWorkersCompensationRelation = { create: {} };\n }\n\n if (leadType === LEAD_TYPE_EMPLOYEE_BENEFITS) {\n dataLead.leadLeadTypeEmployeeBenefitRelation = { create: {} };\n }\n }\n\n setLoading(true);\n\n if (isUpdate) {\n updateLead(lead.id, {\n ...fields,\n phones: phoneList,\n });\n } else {\n console.log('datalead', dataLead);\n createLead(dataLead);\n }\n };\n\n useEffect(() => {\n if (!lead && campaigns.length > 0) {\n setFields({\n ...R.clone(LEAD),\n campaign: campaigns[0].id,\n });\n }\n }, [lead, campaigns]);\n\n const handleOnChangeInput = (value, name) => {\n const newLead = { ...fields };\n newLead[name] = value;\n\n if (name === 'assignees' && value === null) newLead[name] = [];\n if (name === 'users' && value === null) newLead[name] = [];\n if (name === 'phones' && value === null) newLead[name] = [];\n\n setFields(newLead);\n };\n\n // const handleOnChangePhones = (value, i) => {\n // let aux = [...phoneList];\n // aux[i].number = value;\n // setPhoneList(aux);\n // };\n\n useEventSubscription(OnLeadCreateEvent, () => {\n setLoading(false);\n setFields(R.clone(LEAD)); // set default values.\n onCloseDialog();\n afterSubmit(); // after create function from parent component.\n });\n\n useEventSubscription(OnLeadsError, (err) => {\n if (err) {\n setLoading(false);\n\n onErrorMixinFC(err);\n }\n });\n\n useEventSubscription(OnLeadsUpdateEvent, () => {\n onCloseDialog();\n setLoading(false);\n afterSubmit();\n\n toast.success('Lead Management', 'Lead Successfully Updated');\n });\n\n return (\n \n \n \n );\n};\n\nLeadFormDialog.propTypes = {\n lead: PropTypes.object,\n isUpdate: PropTypes.bool,\n afterSubmit: PropTypes.func,\n isOpen: PropTypes.bool.isRequired,\n campaigns: PropTypes.array.isRequired,\n activeAgency: PropTypes.object.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadFormDialog.defaultProps = {\n lead: null,\n isUpdate: false,\n afterSubmit: () => {},\n};\n\nexport default LeadFormDialog;\n","import styled from 'styled-components';\nimport { Card, Table } from '@8base/boost';\n\nconst MainCard = styled(Card)`\n margin: 20px 20px 20px 270px;\n`;\n/**\n * @param {object} props props\n * @param {boolean} props.withPadding if the body has to have padding\n * @returns {object} React component\n */\nconst Body = styled(Card.Body)`\n ${({ withPadding }) => (withPadding ? '' : 'padding: 0 !important;')}\n`;\nconst Footer = styled(Card.Footer)`\n display: flex;\n justify-content: flex-end;\n align-items: center;\n`;\nconst Header = styled(Card.Header)`\n display: flex;\n justify-content: space-between;\n`;\nconst CardTitle = styled.h3`\n font-size: 16px;\n font-weight: bold;\n line-height: 28px;\n`;\nconst PaginationWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n & > div > div > *::before {\n background-color: var(--color-primary);\n transition: all 0.2s;\n }\n\n & > div > span {\n display: inline-block;\n padding: 0.5rem 1.5rem;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n }\n`;\n\nconst TableBody = styled(Table.Body)`\n min-height: ${({ height }) => height};\n`;\nexport { MainCard as Card, Body, Header, CardTitle, PaginationWrapper, TableBody, Footer };\n","import React, { useState, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport { Button, Modal, Card, Icon } from '@8base/boost';\nimport { Header, CardTitle } from '../../my-account/components/Card';\nimport RadioInputField from '../../../shared/components/ui/inputs/RadioInputField';\nimport { PrimaryBtn } from '../../../shared/components/ui/buttons/PrimaryBtn';\n\nconst Body = styled(Card.Body)`\n min-width: 25vw;\n`;\n\nconst ButtonContainer = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst LeadAssignUserDialog = ({ users, isOpen, onClose, onAssignUsersToLeads, loading }) => {\n const [selectedUsers, setSelectedUsers] = useState([]);\n\n const handleSelectedUser = (userId) => {\n if (!loading) {\n if (selectedUsers.includes(userId)) {\n setSelectedUsers((prevSelectedUsers) =>\n prevSelectedUsers.filter((prevUserId) => prevUserId !== userId),\n );\n } else {\n setSelectedUsers((prevSelectedUsers) => [...prevSelectedUsers, userId]);\n }\n }\n };\n\n const handleSave = () => {\n if (selectedUsers.length && !loading) {\n onAssignUsersToLeads(selectedUsers);\n }\n };\n\n const handleClose = () => {\n if (!loading) {\n onClose();\n }\n };\n\n useEffect(() => {\n if (!isOpen) {\n setSelectedUsers([]);\n }\n }, [isOpen]);\n\n return (\n \n \n \n Assign Users\n \n \n \n \n \n {users.map((user) => (\n handleSelectedUser(user.id)}\n />\n ))}\n \n \n \n \n Cancel\n \n \n Save\n \n \n \n \n \n );\n};\n\nLeadAssignUserDialog.propTypes = {\n users: PropTypes.array.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onAssignUsersToLeads: PropTypes.func.isRequired,\n loading: PropTypes.bool.isRequired,\n};\n\nexport default LeadAssignUserDialog;\n","import React, { useMemo } from 'react';\nimport styled from 'styled-components';\nimport moment from 'moment';\nimport { PRIMARY, BLACK } from 'shared/constants/colors';\n\nconst Msg = styled.div`\n display: flex;\n width: 100%;\n flex-direction: column;\n align-items: ${(props) => (props.isLeadUser ? 'flex-start' : 'flex-end')};\n text-align: ${(props) => (props.isLeadUser ? 'flex-start' : 'flex-end')};\n // background-color: teal;\n`;\n\nconst MsgAuthor = styled.div`\n font-size: 0.9em;\n font-weight: bold;\n`;\n\nconst MsgText = styled.div`\n // font-size:1em;\n\n font-weight: 500;\n max-width: 70%;\n padding: 10px 15px;\n background-color: ${({ isLeadUser }) => (isLeadUser ? PRIMARY : BLACK)};\n border-radius: ${({ isLeadUser }) => (isLeadUser ? '15px 15px 15px 0' : '15px 15px 0 15px ')};\n color: #fff;\n`;\n\nconst MsgDate = styled.div`\n font-size: 0.75em;\n color: #aaa;\n margin-top: 5px;\n font-weight: 600;\n`;\n\n/**\n * @param {object} props - Component props.\n * @param {object} props.message - Message object.\n * @param {string} props.message.type - Type of the message.\n * @param {string} props.message.text - Content of the message.\n * @param {string} props.message.createdAt - Date when the message was created.\n * @param {object} props.lead - Lead object.\n * @param {string} props.lead.firstName - First name of the prospect.\n * @returns {React.ReactNode} Message component.\n */\nexport function Message({ message, lead }) {\n const isLeadUser = useMemo(() => {\n return message.type === 'INCOMING' ? true : false;\n }, [message]);\n\n const formattedDate = useMemo(() => {\n return moment(message.createdAt).format('MMM D, YYYY [at] h:mm A');\n }, [message]);\n\n return (\n \n {isLeadUser ? lead.firstName : 'you'}\n {message.text}\n {formattedDate}\n \n );\n}\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { LeadPhoneType } from '@cobuildlab/lead-volt-share';\nimport { useEvent } from '@cobuildlab/react-simple-state';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnLeadMessageCreate, OnLeadMessageCreateError } from '../../leads-store';\nimport { onPhoneNumberList } from '../../../phone-calls/phone-calls-events';\nimport { getBestPhoneNumber } from '../../../phone-calls/phone-calls-utils';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport { SelectField, TextAreaField, Card } from '@8base/boost';\nimport { DialogForm } from '../../../../shared/components';\nimport { getLeadPhoneNumbers } from '../../leads-utils';\nimport { createSms } from '../../leads-actions';\nimport { FileInput } from '@8base-react/file-input';\nimport PlusBtn from '../../../../shared/components/ui/buttons/PlusBtn';\nimport { FaMinusCircle } from 'react-icons/fa';\nimport * as Toast from '../../../../shared/components/toast/Toast';\nimport { useUser } from '../../../../shared/hooks/useUser';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport { OnApolloClient } from 'shared/session/session-events';\nimport gql from 'graphql-tag';\nimport { fetchSession } from 'modules/auth/auth.actions';\nimport { Message } from './Message';\n\nconst MsgContainer = styled.div`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n row-gap: 12px;\n`;\nconst MsgNumber = styled.div`\n grid-column: 1/-1;\n`;\nconst MsgBody = styled.div`\n grid-column: 1/-1;\n & textarea {\n height: 55px;\n }\n`;\n\nconst IconDelete = styled(FaMinusCircle)`\n width: 30px;\n cursor: pointer;\n color: #bababa;\n`;\n\nconst CardMargin = styled(Card)`\n margin: 20px 20px 20px 20px;\n`;\n\nconst Row = styled.div`\n display: flex;\n width: 100%;\n justify-content: space-between;\n margin-bottom: 5px;\n`;\n\nconst RowPhone = styled.div`\n display: flex;\n width: 100%;\n justify-content: space-between;\n`;\n\nconst MsgHistory = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n gap: 1em;\n`;\n\nconst TitleCardHeader = styled.p`\n font-size: 16px;\n line-height: 28px;\n`;\n\nconst TitlePhones = styled.p`\n font-size: 14px;\n line-height: 22px;\n`;\n\nconst TextBody = styled.p`\n font-size: 12px;\n text-aling: center;\n width: 100%;\n`;\n\nconst MsgForm = ({ onClose, isOpen, lead, agencyId, messages = [] }) => {\n // eslint-disable-next-line\n const client = OnApolloClient.get();\n const [msg, setMsg] = useState('');\n const [user] = useUser();\n const [numbers, setNumbers] = useState([]);\n const [selected, setSelected] = useState('');\n const [files, setFiles] = useState([]);\n const [loading, setLoading] = useState(false);\n const phoneNumbers = useEvent(onPhoneNumberList);\n const [userId, setUserId] = useState(null);\n\n const handlePhoneNumbersFrom = () => {\n if (\n user?.selectedAgency?.phoneNumbersRelation?.items &&\n user.selectedAgency.phoneNumbersRelation.items.length > 0\n ) {\n return user.selectedAgency.phoneNumbersRelation.items;\n }\n if (phoneNumbers.length > 0) return phoneNumbers;\n return [];\n };\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n const sessionData = await fetchSession();\n //console.log('session from msgform', sessionData);\n\n // Assuming the sessionData contains the user information\n const user = sessionData.user.id;\n setUserId(user); // Set the user state with the retrieved data\n //console.log('USER ID FROM MSG FORM', userId);\n } catch (error) {\n // Handle errors\n console.log('error fetching user in msg form', error);\n }\n };\n\n fetchData();\n }, []);\n\n useEffect(() => {\n const phones = getLeadPhoneNumbers(lead);\n\n setNumbers(phones);\n\n if (phones && phones.length > 0) {\n setSelected(phones[0].id);\n }\n }, [lead]);\n\n useSubscription(\n OnLeadMessageCreate,\n () => {\n setLoading(false);\n onClose();\n setMsg('');\n setFiles([]);\n },\n [onClose],\n );\n\n useSubscription(\n OnLeadMessageCreateError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n const QUERY_AGENCY_TYPE = gql`\n query FETCH_AGENCY_TYPE($id: ID) {\n user(id: $id) {\n selectedAgency {\n twilioBusinessType\n }\n }\n }\n `;\n\n const onSubmit = async () => {\n const phoneNumbersFrom = handlePhoneNumbersFrom();\n let agencyTypeQuery;\n\n if (phoneNumbersFrom.length === 0) {\n return Toast.error(\n 'This agency does not have any phone number, please buy one to send an sms',\n );\n }\n setLoading(true);\n\n const number = numbers.find((n) => n.id === selected);\n\n try {\n agencyTypeQuery = await client.query({\n query: QUERY_AGENCY_TYPE,\n fetchPolicy: 'no-cache',\n variables: { id: user.id },\n });\n } catch (e) {\n console.error('error on agency types query', e);\n }\n const agencyType = agencyTypeQuery?.data?.user?.selectedAgency?.twilioBusinessType;\n\n const from = getBestPhoneNumber(\n phoneNumbersFrom,\n number.phone.number,\n agencyType === 'Sole Proprietorship', //to determine if number used must be toll-free\n );\n console.log('from msg', from);\n createSms({\n text: msg,\n number: number.phone,\n lead: lead.id,\n user: user.id,\n from: from.id,\n agency: agencyId,\n leadPhoneNumber: number.id,\n files: files,\n });\n };\n\n const addFile = (value) => {\n const aux = [...files];\n aux.push(value);\n setFiles(aux);\n };\n\n const deleteFile = (i) => {\n const aux = files.filter((file) => {\n return file !== files[i];\n });\n\n setFiles(aux);\n };\n\n const fileList = files.map((file, i) => {\n return (\n \n {file.filename}\n deleteFile(i)} />\n \n );\n });\n\n const options = useMemo(\n () =>\n numbers\n .filter(({ type, phone }) => {\n if (!type) return !!phone.code && !!phone.number && phone.__typename === 'SmartPhone';\n return !!phone.code && !!phone.number && type === LeadPhoneType.MOBILE;\n })\n .map((phone) => ({\n label: `+${phone.phone.code} ${phone.phone.number}`,\n value: phone.id,\n })),\n [numbers],\n );\n\n const invalidOptions = useMemo(\n () =>\n numbers\n .filter(({ type, phone }) => {\n if (!type) return !!phone.code && !!phone.number && phone.__typename !== 'SmartPhone';\n return !!phone.code && !!phone.number && type !== LeadPhoneType.MOBILE;\n })\n .map((phone, i) => (\n \n \n +{phone.phone.code} {phone.phone.number}\n \n \n )),\n [numbers],\n );\n\n let invalidPhoneContent;\n if (invalidOptions.length) {\n invalidPhoneContent = (\n \n \n \n \n This numbers are invalid or unreachable\n \n \n {invalidOptions}\n \n \n );\n }\n\n return (\n onSubmit()}\n onCloseDialog={onClose}\n tabs={['Send text message', 'Messages']}>\n \n \n \n \n {invalidPhoneContent}\n \n setMsg(value),\n }}\n />\n \n \n \n Files \n {\n addFile(file);\n }}\n value={'input.value'}\n maxFiles={1}>\n {({ pick }) => pick()} />}\n \n \n \n \n {fileList.length < 1 ? There are no files : fileList}\n \n \n \n \n \n {messages.length > 0\n ? messages.map((message, idx) => {\n return ;\n })\n : 'No messages yet.'}\n \n \n );\n};\n\nMsgForm.defaultProps = {\n messages: [],\n};\n\nMsgForm.propTypes = {\n onClose: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n lead: PropTypes.object.isRequired,\n agencyId: PropTypes.string.isRequired,\n messages: PropTypes.array,\n};\n\nexport default MsgForm;\n","import { ValidationError } from '../../../shared/errors';\nimport { isValidString } from '../../../shared/validators';\n\n/**\n * Validate that the Note has all the fields necessaries with the right format.\n *\n * @param {object} note - the note to be validated\n */\nexport const createNoteValidator = (note) => {\n let errorMessages = [];\n\n if (!isValidString(note.title)) errorMessages.push('The Note must have a valid title.');\n\n if (!isValidString(note.text) || note.text.lenght > 245)\n errorMessages.push('The Note text must be valid, between 1 and 245 characters.');\n\n if (errorMessages.length !== 0) throw new ValidationError(errorMessages);\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const onLeadNoteUpdate = createEvent();\n\nexport const onLeadNoteDelete = createEvent();\n\nexport const OnFetchLeadNotes = createEvent();\n\nexport const OnFetchLeadNotesError = createEvent();\n\nexport const OnNoteCreateEvent = createEvent();\n\nexport const OnNoteError = createEvent();\n","import { createAction } from '@cobuildlab/react-simple-state';\nimport { error, log } from '@cobuildlab/pure-logger';\nimport {\n NOTE_CREATE_MUTATION,\n NOTE_UPDATE_MUTATION,\n NOTE_DELETE_MUTATION,\n FETCH_LEAD_NOTES,\n} from './leads-notes-queries';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport { sanitize8BaseReference } from 'shared/utils';\nimport { createNoteValidator } from './leads-notes-validators';\nimport {\n onLeadNoteUpdate,\n onLeadNoteDelete,\n OnFetchLeadNotes,\n OnFetchLeadNotesError,\n OnNoteCreateEvent,\n OnNoteError,\n} from './leads-notes-events';\n\n/**\n * Creates a lead note\n *\n * @param {object} note lead note\n * @returns {object} response data\n */\nexport const createNote = async (note) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n createNoteValidator(note);\n } catch (e) {\n error('createNote', e);\n return OnNoteError.dispatch(e);\n }\n\n sanitize8BaseReference(note, 'notesLeadRelation');\n\n try {\n response = await client.mutate({\n mutation: NOTE_CREATE_MUTATION,\n variables: { data: note },\n });\n } catch (e) {\n error('createNote', e);\n return OnNoteError.dispatch(e);\n }\n\n log('createNote', response);\n OnNoteCreateEvent.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Update a lead note\n *\n * @param {object} note lead note\n * @returns {object} response data\n */\nexport const updateNote = async (note) => {\n const client = OnApolloClient.get();\n\n let response;\n\n try {\n createNoteValidator(note);\n } catch (e) {\n error('createNote', e);\n return OnNoteError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: NOTE_UPDATE_MUTATION,\n variables: { data: note },\n });\n } catch (e) {\n error('updateNote', e);\n return OnNoteError.dispatch(e);\n }\n\n log('updateNote', response);\n onLeadNoteUpdate.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Delete a lead note\n *\n * @param {string} id lead note\n * @returns {object} response data\n */\nexport const deleteNote = async (id) => {\n const client = OnApolloClient.get();\n\n let response;\n\n try {\n response = await client.mutate({\n mutation: NOTE_DELETE_MUTATION,\n variables: { id },\n });\n } catch (e) {\n error('deleteNote', e);\n return OnNoteError.dispatch(e);\n }\n\n log('deleteNote', response);\n onLeadNoteDelete.dispatch(response.data);\n\n return response.data;\n};\n\n/**\n * Fetches the notes from the specified lead\n *\n * @param {string} lead - The lead id\n *\n * @returns {Promise} The request result\n */\nexport const fetchLeadNotes = createAction(\n OnFetchLeadNotes,\n OnFetchLeadNotesError,\n async (lead) => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_LEAD_NOTES,\n fetchPolicy: 'network-only',\n variables: {\n filterLeadNotes: {\n notesLeadRelation: {\n id: {\n equals: lead,\n },\n },\n },\n filterDispositionNotes: {\n notes: {\n is_not_empty: true,\n },\n lead: {\n id: {\n equals: lead,\n },\n },\n },\n },\n });\n\n return response.data;\n },\n);\n","import React, { useState, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport { TextAreaField, InputField } from '@8base/boost';\nimport { DialogForm } from '../../../../shared/components';\nimport { createNote, updateNote } from '../../leads-notes/leads-notes-actions';\n\nconst NoteContainer = styled.div`\n display: grid;\n grid-template-columns: 1fr;\n row-gap: 12px;\n column-gap: 15px;\n`;\n\nconst TextAreaContainer = styled.div`\n & textarea {\n height: 85px;\n }\n`;\n\nconst Noteform = ({ isOpen, onClose, leadId, note: selectedNote }) => {\n const [title, setTitle] = useState('');\n const [note, setNote] = useState('');\n const [loading, setLoading] = useState(false);\n const isUpdate = selectedNote;\n\n useEffect(() => {\n if (!selectedNote) return;\n\n setNote(selectedNote.text);\n setTitle(selectedNote.title);\n }, [selectedNote]);\n\n useEffect(() => {\n if (!isOpen) {\n setTitle('');\n setNote('');\n }\n }, [isOpen]);\n\n const noteCreateHandler = async () => {\n const data = {\n text: note,\n title,\n notesLeadRelation: leadId,\n };\n\n setLoading(true);\n\n const result = await createNote(data);\n\n setLoading(false);\n\n if (result) {\n onClose();\n setTitle('');\n setNote('');\n }\n };\n\n const noteUpdateHandler = async () => {\n const data = {\n text: note,\n title,\n id: selectedNote.id,\n };\n setLoading(true);\n\n const result = await updateNote(data);\n\n setLoading(false);\n\n if (result) {\n onClose();\n }\n };\n\n return (\n \n \n setTitle(value),\n }}\n />\n \n setNote(value),\n }}\n />\n \n\n {/* */}\n \n \n );\n};\n\nNoteform.propTypes = {\n leadId: PropTypes.string.isRequired,\n onClose: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n note: PropTypes.object,\n};\nNoteform.defaultProps = {\n note: null,\n};\nexport default Noteform;\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport { useHistory } from 'react-router-dom';\n\nimport { Menu, Icon, Dropdown, Table } from '@8base/boost';\nimport { DropdownBodyOnTable } from 'shared/components';\n\nimport informationIcon from 'shared/assets/images/information.svg';\nimport callIcon from 'shared/assets/images/call-green.svg';\n\nimport MsgForm from './forms/MsgForm';\nimport NoteForm from './forms/NoteForm';\nimport { PhoneNumber } from '../../phone-calls/Components/PhoneNumber';\nimport { getLeadFullName, getLeadPhoneNumbers } from '../leads-utils';\n\nconst ActionsCell = styled(Table.BodyCell)`\n display: flex;\n justify-content: space-around !important;\n`;\n\nconst CustomIcon = styled.img`\n width: 23px;\n height: 23px;\n cursor: pointer;\n min-width: 23px;\n`;\n\nconst MenuItem = styled(Menu.Item)`\n color: ${({ danger }) => (danger ? '#FF0000' : 'rgb(50, 60, 71)')}!important;\n &:hover {\n ${({ danger }) => (danger ? '' : 'color: #3db4aa !important;')}\n }\n`;\n\nconst LeadActions = ({ lead, onDelete, setLeadForTask, canDelete, agencyId }) => {\n const [isNoteModalOpen, setIsNoteModalOpen] = useState(false);\n const [isMsgModalOpen, setIsMsgModalOpen] = useState(false);\n const history = useHistory();\n\n let dropdown = (\n \n \n \n \n \n {({ closeDropdown }) => (\n \n {\n setIsMsgModalOpen((prev) => !prev);\n closeDropdown();\n }}>\n Send Message\n \n {\n setIsNoteModalOpen((prev) => !prev);\n closeDropdown();\n }}>\n Add Note\n \n {\n setLeadForTask(lead.id);\n closeDropdown();\n }}>\n Add Task\n \n \n )}\n \n \n );\n if (canDelete) {\n dropdown = (\n \n \n \n \n \n {({ closeDropdown }) => (\n \n {\n setIsMsgModalOpen((prev) => !prev);\n closeDropdown();\n }}>\n Send Message\n \n {\n setIsNoteModalOpen((prev) => !prev);\n closeDropdown();\n }}>\n Add Note\n \n {\n setLeadForTask(lead.id);\n closeDropdown();\n }}>\n Add Task\n \n {\n onDelete();\n closeDropdown();\n }}>\n Delete Lead\n \n \n )}\n \n \n );\n }\n const phones = getLeadPhoneNumbers(lead);\n return (\n <>\n \n {phones && phones.length > 0 && (\n \n \n \n )}\n history.push(`/leads/${lead.id}`)}\n alt=\"lead detail icon\"\n />\n {dropdown}\n {\n setIsMsgModalOpen(false);\n }}\n />\n {\n setIsNoteModalOpen(false);\n }}>\n \n >\n );\n};\n\nLeadActions.propTypes = {\n agencyId: PropTypes.string.isRequired,\n onDelete: PropTypes.func.isRequired,\n lead: PropTypes.object.isRequired,\n setLeadForTask: PropTypes.any.isRequired,\n canDelete: PropTypes.bool.isRequired,\n};\n\nexport default LeadActions;\n","import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react';\nimport { Card, Table, Dropdown, Menu, Pagination, Paper, Button, Icon } from '@8base/boost';\nimport { useHistory } from 'react-router-dom';\nimport SearchInput from '../email/components/SearchInput';\nimport { useAgencyLeads } from './hooks/useAgencyLeads';\nimport styled from 'styled-components';\nimport * as R from 'ramda';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { OnLeadMessageCreate } from './leads-store';\nimport { deleteLeads, fetchLeadTaskTypes, assignUsersToLeads } from './leads-actions';\nimport LeadCell from './components/LeadCell';\nimport LeadFilter from './components/LeadFilter';\nimport LeadsDialog from './components/LeadsDialog';\nimport LeadFormDialog from './components/LeadFormDialog';\nimport LeadAssignUserDialog from './components/LeadAssignUserDialog';\nimport { SORT_OPTIONS, TABLE_COLUMNS, ACTIVE_COLUMNS } from './leads-model';\nimport { fetchAgents } from '../agents/agents-actions';\nimport sortTableIcon from '../../shared/assets/images/table-sort-grey.svg';\nimport { canSeeBatchActions, canDeleteLeads, getColumnsSizes } from './leads-utils';\nimport TaskForm from './components/forms/TaskForm';\nimport {\n DropdownBodyOnTable,\n ItemFilter,\n RadioInputField,\n ListCardBody as ListCard,\n Loader,\n} from '../../shared/components';\nimport * as toast from '../../shared/components/toast/Toast';\nimport LeadActions from './components/LeadActions';\nimport { fetchCampaignsLight } from '../campaigns/campaigns-actions';\nimport { useLeadStages } from '../phone-calls/phone-calls-hooks';\nimport { useAgency } from '../../shared/hooks/useAgency';\nimport { useUser } from '../../shared/hooks/useUser';\nimport { onLeadDispositionCreate } from '../phone-calls/phone-calls-events';\nimport {\n OnAssignUserstoLeadError,\n OnAssignUserstoLeadEvent,\n OnDeleteLeadsResult,\n OnLeadCreateEvent,\n onTaskCreate,\n} from './leads-events';\nimport { useURLQuery } from '../../shared/hooks/useURLQuery';\nimport { OnCampaignsList } from 'modules/campaigns/campaign-events';\nimport { OnNoteCreateEvent } from './leads-notes/leads-notes-events';\n\nconst SortFilter = styled(ItemFilter)`\n & input {\n max-width: 180px !important;\n min-width: 120px !important;\n }\n`;\n\nconst TableBody = styled(Table.Body)`\n max-height: 50vh;\n height: 50vh;\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst CustomHeader = styled.div`\n width: 100px;\n text-transform: uppercase;\n height: 17px;\n color: #9b9b9b;\n font-family: 'Poppins';\n font-size: 11px;\n font-weight: bold;\n letter-spacing: 0.5px;\n line-height: 18px;\n`;\n\nconst CustomGrid = styled.div`\n display: grid;\n width: ${(props) => props.width};\n grid-template-columns: ${(props) => props.columns};\n column-gap: ${(props) => props.columnGap};\n grid-template-areas: ${(props) => props.areas};\n ${(props) => (props.alignItems ? `align-items:${props.alignItems} ` : '')};\n`;\n\nconst CustomGridCell = styled.div`\n grid-area: ${(props) => props.area};\n display: flex;\n ${(props) =>\n props.area === 'right'\n ? `\n align-items: center;\n justify-content: flex-end;\n > div {\n margin-left: 15px;\n }\n > button {\n margin-left: 15px;\n }\n `\n : `\n align-items: center;\n justify-content: flex-start;\n > div {\n margin-right: 15px;\n }\n `};\n`;\n\nconst PaginationContainer = styled.div`\n display: flex;\n justify-content: center;\n font-size: 1.2rem;\n padding: 0 1rem;\n & > div > div > *::before {\n background-color: var(--color-primary);\n transition: all 0.2s;\n }\n & > div > span {\n display: inline-block;\n padding: 0.5rem 1.5rem;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n }\n`;\n\nconst CustomBtn = styled.button`\n max-width: 200px;\n min-width: 130px;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n border-radius: 5px;\n padding: 8px 0px;\n box-sizing: border-box;\n cursor: pointer;\n border: 1px solid #d0d7dd;\n background-color: #ffffff;\n opacity: 0.9;\n color: #323c47;\n font-family: 'Poppins';\n font-size: 13px;\n line-height: 18px;\n text-align: center;\n font-weight: 400;\n & strong {\n font-weight: 600 !important;\n }\n &:focus {\n outline: none;\n }\n\n ${({ disabled }) => (disabled ? 'cursor: not-allowed;' : '')};\n`;\n\nconst CreateButton = styled(CustomBtn)`\n &:hover {\n box-shadow: 0 2px 4px 0 rgba(50, 50, 93, 0.2);\n }\n &:active {\n box-shadow: inset 0 1px 3px 0 rgba(50, 50, 93, 0.14), inset 0 4px 6px 0 rgba(51, 80, 107, 0.08);\n }\n > span:not(:last-child) {\n margin-right: 5px;\n }\n`;\n\nconst BtnText = styled.span`\n color: #3db4aa;\n font-size: 1.5rem;\n font-weight: 600;\n line-height: 2rem;\n`;\n\nconst ListCardBody = styled(ListCard)`\n padding: 0 !important;\n`;\n\nconst SortTableBtn = styled.div`\n display: flex;\n border-radius: 5px;\n border: solid 1px ${({ active }) => (active ? '#3db4aa' : '#d0d7dd')};\n width: 36px;\n height: 36px;\n box-sizing: border-box;\n justify-content: center;\n align-items: center;\n &::before {\n content: '';\n display: inline-block;\n height: 20px;\n width: 17px;\n background-color: ${({ active }) => (active ? '#3db4aa' : '#aeb7be')};\n -webkit-mask-image: url(${(props) => props.src});\n -webkit-mask-size: cover;\n mask-image: url(${(props) => props.src});\n mask-size: cover;\n }\n &:focus::before {\n background-color: #3db4aa;\n }\n`;\n\nconst SortTableConfirm = styled.div`\n border-top: 1px solid #d0d7dd;\n padding: 10px 15px;\n display: flex;\n align-items: center;\n justify-content: space-around;\n`;\nconst SortTableConfirmOptions = styled.span`\n color: ${(props) => (props.active ? '#3db4aa' : '#384A59')};\n cursor: pointer;\n`;\n\nconst SortTableMenu = styled(Menu)`\n padding-bottom: 0 !important;\n`;\n\nconst MenuItem = styled(Menu.Item)`\n color: #323c47 !important;\n padding: 0 !important;\n height: auto !important;\n`;\n\nconst RadioButton = styled.span`\n height: 22px;\n width: 22px;\n border: 1px solid #d0d7dd;\n border-radius: 4px;\n display: inline-block;\n position: absolute;\n left: 15px;\n &::after {\n height: 10px;\n width: 10px;\n content: '';\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: #3db4aa;\n opacity: 0;\n }\n`;\n\nconst RadioInput = styled.input`\n display: none;\n &:checked ~ label span::after {\n opacity: 1;\n }\n`;\n\nconst RadioLabel = styled.label`\n padding: 10px 30px 10px 50px;\n display: flex;\n align-items: center;\n width: 100%;\n cursor: pointer;\n`;\n\nconst HeaderCellContainer = styled.div`\n display: flex;\n align-items: center;\n font-weight: bold;\n`;\n\nconst BatchHeader = styled(CustomHeader)`\n height: auto;\n margin-left: 0 !important;\n`;\n\nconst TableRow = styled(Table.BodyRow)`\n ${(props) => (props.active ? `background-color: #fcfcfc !important` : '')};\n`;\n\nconst StyledHeaderCell = styled(Table.HeaderCell)`\n padding-left: 24px !important;\n`;\n\nconst StyledTableHeader = styled(Table.Header)`\n height: 36px !important;\n`;\n\nconst CardHeader = styled(Card.Header)`\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n`;\n\nconst LeadsView = () => {\n const history = useHistory();\n const agency = useAgency();\n const [sort, setSort] = useState('newest');\n const [assignUsersLoading, setAssignUsersLoading] = useState(false);\n const [deletingLead, setDeletingLead] = useState(false);\n const [selectedLeads, setSelectedLeads] = useState([]);\n const [selectedLead, setSelectedLead] = useState('');\n const [leadForTask, setLeadForTask] = useState();\n const [isOpenDelete, setIsOpenDelete] = useState(false);\n const [isOpenAssignUser, setIsOpenAssignUser] = useState(false);\n const [sortTableActive, setSortTableActive] = useState(false);\n const [tableColumns, setTableColumns] = useState(() => R.clone(TABLE_COLUMNS));\n const [activeColumns, setActiveColumns] = useState(() => R.clone(ACTIVE_COLUMNS));\n const [agents, setAgents] = useState([]);\n const [users, setUsers] = useState([]);\n const [isOpenForm, setIsOpenForm] = useState(false);\n const [isTaskModalOpen, setIsTaskModalOpen] = useState(false);\n // eslint-disable-next-line\n const [leadTaskTypeList, setLeadTaskTypeList] = useState([]);\n const [user] = useUser();\n const paginationCtnRef = useRef();\n const [campaigns, setCampaigns] = useState([]);\n const [query, setQuery] = useURLQuery();\n\n const { items, count, loading, error, page, setPage, refresh } = useAgencyLeads(\n agency.id,\n sort,\n query || {},\n );\n\n const onSubmitSearch = useCallback(\n (value) => {\n setQuery('/leads', {\n ...query,\n search: value || undefined,\n });\n },\n [query, setQuery],\n );\n\n const onSubmitFilters = useCallback(\n (filters) => {\n setQuery('/leads', {\n ...query,\n ...filters,\n });\n },\n [query, setQuery],\n );\n\n const onClearFilters = useCallback(() => {\n setQuery('/leads', {\n search: query.search || undefined,\n });\n }, [query.search, setQuery]);\n\n useEffect(() => {\n setSelectedLeads([]);\n }, [page]);\n\n useEffect(() => {\n if (error) {\n toast.error(error.message);\n }\n }, [error]);\n\n useEventSubscription(OnLeadCreateEvent, (data) => {\n if (data) {\n toast.success('Lead Management', 'Lead Successfully Created');\n }\n });\n\n useEventSubscription(OnDeleteLeadsResult, (data) => {\n if (data) {\n setDeletingLead(false);\n refresh();\n setIsOpenDelete(false);\n\n if (data) {\n const { success, errors } = data;\n\n if (errors) {\n toast.warn(`${errors} lead${errors > 1 ? 's' : ''} could not be deleted`);\n }\n\n if (success) {\n toast.success('Success', `${success} lead${success > 1 ? 's' : ''} successfully deleted`);\n }\n }\n }\n });\n\n useEventSubscription(OnAssignUserstoLeadEvent, ({ success }) => {\n setAssignUsersLoading(false);\n setIsOpenAssignUser(false);\n setSelectedLeads([]);\n refresh();\n toast.success('Lead Management', `Users assigned to lead${success > 1 ? 's' : ''}`);\n });\n\n useEventSubscription(OnAssignUserstoLeadError, ({ success, errors }) => {\n setAssignUsersLoading(false);\n setIsOpenAssignUser(false);\n setSelectedLeads([]);\n refresh();\n\n if (errors) {\n toast.warn(`${errors} lead${errors > 1 ? 's' : ''} could not assign users`);\n }\n\n if (success) {\n toast.success('Success', `${success} lead${success > 1 ? 's' : ''} successfully assigned`);\n }\n });\n\n useEventSubscription(OnNoteCreateEvent, () => {\n toast.success('Lead Management', 'Note Created!');\n refresh();\n });\n\n useEventSubscription(OnCampaignsList, (data) => {\n if (data) {\n setCampaigns(data?.campaignsList?.items || []);\n }\n });\n\n useEventSubscription(\n onTaskCreate,\n () => {\n toast.success('Lead Management', 'Task Created!');\n refresh();\n },\n [refresh],\n );\n\n useEventSubscription(\n OnLeadMessageCreate,\n (data) => {\n if (data !== null) {\n toast.success('Lead Management', 'Message sent successfully!');\n }\n refresh();\n },\n [refresh],\n );\n\n useEventSubscription(\n onLeadDispositionCreate,\n () => {\n refresh();\n },\n [refresh],\n );\n\n const handleOpenForm = () => setIsOpenForm(true);\n\n const handleCloseForm = () => setIsOpenForm(false);\n\n const leadCheckboxChangeHandler = (id) => {\n setSelectedLeads((oldSelectedList) => {\n let newSelectedList;\n if (oldSelectedList.includes(id)) {\n newSelectedList = oldSelectedList.filter((oldId) => oldId !== id);\n } else {\n newSelectedList = oldSelectedList.concat([id]);\n }\n return newSelectedList;\n });\n };\n\n const headerCheckboxHandler = useCallback(() => {\n setSelectedLeads((oldSelectedLeads) => {\n let newSelectedLeads;\n if (oldSelectedLeads.length === items.length) {\n newSelectedLeads = [];\n } else {\n newSelectedLeads = items.map((lead) => lead.id);\n }\n return newSelectedLeads;\n });\n }, [items]);\n\n const tableSortHandler = useCallback(\n (sortIdentifier) => {\n const newColumnList = { ...tableColumns };\n newColumnList[sortIdentifier] = { ...tableColumns[sortIdentifier] };\n newColumnList[sortIdentifier].active = !newColumnList[sortIdentifier].active;\n setTableColumns(newColumnList);\n },\n [tableColumns],\n );\n const confirmSortTableHandler = (closeDropdown) => {\n const newActiveList = [];\n for (const key in tableColumns) {\n const columnClone = { ...tableColumns[key] };\n if (columnClone.active) {\n newActiveList.push(columnClone.value);\n }\n }\n setActiveColumns(newActiveList);\n setSortTableActive(false);\n closeDropdown();\n };\n const cancelSortTableHandler = (closeDropdown) => {\n const newLeadsColumns = { ...tableColumns };\n for (const key in newLeadsColumns) {\n newLeadsColumns[key] = { ...tableColumns[key] };\n if (activeColumns.includes(newLeadsColumns[key].value)) {\n newLeadsColumns[key].active = true;\n }\n }\n setTableColumns(newLeadsColumns);\n setSortTableActive(false);\n closeDropdown();\n };\n\n const deleteLeadsHandler = (leads) => {\n setDeletingLead(true);\n\n let leadsToDelete;\n if (typeof leads === 'string') {\n leadsToDelete = [leads];\n setSelectedLead('');\n if (selectedLeads.includes(leads)) {\n setSelectedLeads((prevValue) => {\n return prevValue.filter((l) => l !== leads);\n });\n }\n } else {\n leadsToDelete = [...selectedLeads];\n setSelectedLeads([]);\n }\n\n deleteLeads(leadsToDelete);\n };\n const onDeleteLeads = useCallback(\n (leadId) => {\n if (leadId || selectedLeads.length > 0) {\n if (leadId) {\n setSelectedLead(leadId);\n }\n setIsOpenDelete(true);\n }\n },\n [selectedLeads],\n );\n\n const onAssignUsersLeads = useCallback(\n (leadId) => {\n if (leadId || selectedLeads.length > 0) {\n if (leadId) {\n setSelectedLead(leadId);\n }\n setIsOpenAssignUser(true);\n }\n },\n [selectedLeads],\n );\n\n const handleOnAssingUserClose = () => {\n if (selectedLead.length > 0) {\n setSelectedLead('');\n }\n\n setIsOpenAssignUser(false);\n };\n\n const handleAssingUsersToLeads = useCallback(\n async (selectedUsers) => {\n const filteredLeads = items.filter((lead) => selectedLeads.includes(lead.id));\n\n if (filteredLeads.length) {\n setAssignUsersLoading(true);\n assignUsersToLeads(filteredLeads, selectedUsers);\n }\n },\n [items, selectedLeads],\n );\n\n const handleOnYes = () => {\n if (selectedLead.length > 0) {\n deleteLeadsHandler(selectedLead);\n } else {\n deleteLeadsHandler(selectedLeads);\n }\n };\n const handleOnNo = () => {\n if (selectedLead.length > 0) {\n setSelectedLead('');\n }\n setIsOpenDelete(false);\n };\n\n const handleOnClickBtnCsv = () => {\n if (campaigns.length === 0) {\n toast.error('This operation is not possible without campaigns');\n } else {\n history.push('/leads/upload', {\n params: {\n previousPath: '/leads/upload',\n campaigns,\n agency,\n },\n });\n }\n };\n\n useEffect(() => {\n fetchLeadTaskTypes().then((data) => {\n setLeadTaskTypeList(data.leadTaskTypesList.items);\n });\n\n paginationCtnRef.current.children[0].children[3].childNodes[5].textContent = ' leads';\n }, [agency.id]);\n\n useEffect(() => {\n fetchCampaignsLight({\n filterData: { agency: agency.id },\n });\n\n fetchAgents({ agency: agency.id }).then((data) => {\n if (data.agentsList) {\n setAgents(data.agentsList.items.map((item) => item.user));\n setUsers(data.agentsList.items.map((item) => item.user));\n }\n });\n }, [agency.id]);\n\n const leadStages = useLeadStages();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const columnsSize = useMemo(() => getColumnsSizes(tableColumns), [activeColumns]);\n\n const headerCols = useMemo(\n () =>\n activeColumns.map((col) => {\n let icon;\n\n return (\n \n \n {col}\n {icon}\n \n \n );\n }),\n [activeColumns],\n );\n\n const tableHeader = useMemo(\n () => (\n \n \n {items && (\n \n )}\n \n {headerCols}\n Actions\n \n ),\n [columnsSize, headerCheckboxHandler, headerCols, items, selectedLeads.length],\n );\n\n const sortColumns = useMemo(\n () =>\n Object.entries(tableColumns).map(([identifier, column]) => {\n return (\n {}}>\n \n tableSortHandler(identifier)}>\n \n {column.value}\n \n \n );\n }),\n [tableColumns, tableSortHandler],\n );\n\n const batchActions = canSeeBatchActions(user, agency) && (\n <>\n Batch Actions\n \n Assign to Leads\n \n \n Delete Leads\n \n {/* Assign to agent */}\n >\n );\n\n const setTaskModal = useCallback((lead) => {\n setIsTaskModalOpen(true);\n setLeadForTask(lead);\n }, []);\n\n //console.log('selected leads', selectedLeads);\n return (\n \n \n \n \n \n \n \n \n \n \n {batchActions}\n \n \n setSortTableActive(!sortTableActive)}\n />\n \n \n {({ closeDropdown }) => (\n \n {sortColumns}\n \n {\n confirmSortTableHandler(closeDropdown);\n }}>\n Accept\n \n {\n cancelSortTableHandler(closeDropdown);\n }}>\n Cancel\n \n \n \n )}\n \n \n <>\n \n Upload CSV\n \n \n \n Create Lead\n \n >\n \n \n \n \n \n {tableHeader}\n {loading ? (\n \n ) : (\n {}} data={items}>\n {(lead, index) => {\n // const isLast = index === leadsList.length - 1;\n // const pageLoader = isLast && loadingPage ? : null;\n const columnList = activeColumns.map((columnName) => (\n \n ));\n return (\n <>\n \n \n {\n leadCheckboxChangeHandler(lead.id);\n }}\n />\n \n {columnList}\n {\n onDeleteLeads(lead.id);\n }}\n lead={lead}\n />\n \n >\n );\n }}\n \n )}\n {isTaskModalOpen && (\n {\n setLeadForTask();\n setIsTaskModalOpen(false);\n }}\n onClose={() => {\n setIsTaskModalOpen(false);\n setLeadForTask();\n }}\n />\n )}\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default LeadsView;\n","import React from 'react';\nimport { Text } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport Field from '../../../shared/components/Field';\nimport { getFieldProps } from '../leads-utils';\nimport PropTypes from 'prop-types';\n\nexport class CsvPreviewCell extends React.PureComponent {\n render() {\n const { rowIndex, columnIndex, style, data } = this.props;\n\n if (rowIndex === 0) {\n const content = columnIndex === 0 ? '' : data.headers[columnIndex - 1];\n\n return (\n \n \n {content}\n \n \n );\n } else if (columnIndex === 0) {\n return (\n \n \n {rowIndex}\n \n \n );\n }\n\n const value = data.rows[rowIndex - 1][columnIndex - 1];\n const header = data.headers[columnIndex - 1];\n const fieldProps = getFieldProps(header, data.campaignOptions, data.ifsOptions);\n\n const onChange = (val) =>\n data.onChange(rowIndex - 1, columnIndex - 1, { target: { value: val } });\n\n return (\n \n \n data.onChange(rowIndex - 1, columnIndex - 1, e)}\n onChange={fieldProps.type === 'select' || fieldProps.type === 'date' ? onChange : null}\n {...fieldProps}\n />\n \n \n );\n }\n}\n\nCsvPreviewCell.propTypes = {\n rowIndex: PropTypes.number.isRequired,\n columnIndex: PropTypes.number.isRequired,\n style: PropTypes.object.isRequired,\n data: PropTypes.shape({\n headers: PropTypes.arrayOf(PropTypes.string).isRequired,\n rows: PropTypes.arrayOf(PropTypes.string).isRequired,\n campaignOptions: PropTypes.array.isRequired,\n ifsOptions: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n }).isRequired,\n};\n","import React, { useEffect, useState, useCallback, useRef } from 'react';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport PropTypes from 'prop-types';\nimport { Modal, Row, SelectField, Heading, Column, Button, Icon, Text } from '@8base/boost';\nimport { VariableSizeGrid } from 'react-window';\nimport { PrimaryBtn } from 'shared/components';\nimport { LEAD_CSV_FORMATS } from '../../../shared/constants';\nimport { LEAD_TYPE_OPTIONS } from '../leads-model';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { Box } from '../../../shared/components/Box';\nimport { CsvPreviewCell } from './CsvPreviewCell';\nimport { OnLeadsError } from '../leads-events';\n\nconst { RICOCHET } = LEAD_CSV_FORMATS;\n\n/**\n * Leads Csv data preview in dialog\n *\n * @param {object} props props component\n * @param {boolean} props.isOpen bool value for dialog\n * @param {Function} props.onClose handle for close the dialog\n * @param {Array} props.csvData array of data\n * @param {boolean} props.loading loading for PrimaryBtn\n * @param {Array} props.csvColumns columns for table header\n * @param {Function} props.onBlurInput handle on blur for each field\n * @param {Function} props.onUploadCsv handle for upload the CSV\n * @param {Array} props.campaignOptions campaigns options for select\n * @param {Array} props.ifsScoresOptions ifs scores of the agency\n * @returns {React.ReactElement} component\n */\nconst LeadsCsvPreviewDialog = ({\n isOpen,\n onClose,\n csvData,\n loading,\n csvColumns,\n csvFormat,\n onBlurInput,\n onUploadCsv,\n campaignOptions,\n ifsScoresOptions,\n}) => {\n const [campaign, setCampaign] = useState(null);\n const [leadsType, setLeadsType] = useState(LEAD_TYPE_OPTIONS[0].value);\n const [uploading, setUploading] = useState(false);\n const [isMassiveUpload, setMassiveUpload] = useState(false);\n const [height, setHeight] = useState(0);\n const [width, setWidth] = useState(0);\n const worker = useRef(null);\n const ref = useRef(null);\n\n useEventSubscription(OnLeadsError, () => {\n setUploading(false);\n });\n\n useEffect(() => {\n if (isOpen && ref.current) {\n setWidth(ref.current.clientWidth);\n setHeight(ref.current.clientHeight);\n }\n }, [isOpen]);\n\n useEffect(() => {\n if (ref && ref.current) {\n let timeout = '';\n\n const onResize = () => {\n clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n setWidth(ref.current.clientWidth);\n setHeight(ref.current.clientHeight);\n }, 500);\n };\n\n window.addEventListener('resize', onResize);\n\n return () => {\n window.removeEventListener('resize', onResize);\n };\n }\n });\n\n useEffect(() => {\n if (window.Worker) {\n worker.current = new Worker('/workers/csv-validation.js');\n\n worker.current.addEventListener('message', ({ data }) => {\n setUploading(false);\n\n if (data.errors) {\n console.log('window.Worker data.errors', data.errors);\n const errors = [\n 'This may be because you selected a wrong format for the csv.',\n\n ...(data.errors?.arr || []),\n ];\n if (data.errors?.message) {\n errors.push(data.errors?.message);\n }\n\n return onErrorMixinFC({ arr: errors });\n }\n\n onUploadCsv(campaign, leadsType, data.leads);\n });\n\n return () => worker.current.terminate();\n }\n }, [campaign, leadsType, onUploadCsv]);\n\n useEffect(() => {\n if (!isOpen) {\n setUploading(false);\n }\n }, [isOpen]);\n\n useEffect(() => {\n setMassiveUpload(csvData.length > 2500);\n }, [csvData]);\n\n useEffect(() => {\n if (campaign === null && campaignOptions.length > 0) {\n setCampaign(campaignOptions[0].value);\n }\n }, [campaign, campaignOptions]);\n\n const onContinue = useCallback(() => {\n setUploading(true);\n\n if (worker.current) {\n worker.current.postMessage({\n headers: csvColumns,\n body: csvData,\n format: csvFormat,\n campaign,\n leadsType,\n });\n } else {\n setTimeout(() => onUploadCsv(campaign, leadsType, []), 1000);\n }\n }, [csvColumns, csvData, csvFormat, campaign, leadsType, onUploadCsv]);\n\n if (!isOpen) {\n return null;\n }\n\n const content = isMassiveUpload ? (\n \n \n Ready for uploading\n \n \n \n ) : (\n (index === 0 ? 50 : 250)}\n rowCount={csvData.length + 1}\n rowHeight={() => 50}\n height={height}\n width={width}\n itemData={{\n headers: csvColumns,\n rows: csvData,\n ifsOptions: ifsScoresOptions,\n campaignOptions: campaignOptions,\n onChange: onBlurInput,\n }}>\n {CsvPreviewCell}\n \n );\n\n return (\n \n \n \n Add Leads - Data Preview\n \n \n \n setCampaign(value),\n }}\n options={campaignOptions}\n />\n {csvFormat === RICOCHET && (\n \n )}\n \n \n {content}\n \n \n \n \n Cancel\n \n \n Upload CSV\n \n \n \n \n );\n};\n\nLeadsCsvPreviewDialog.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n csvData: PropTypes.array.isRequired,\n loading: PropTypes.bool.isRequired,\n csvColumns: PropTypes.array.isRequired,\n csvFormat: PropTypes.string.isRequired,\n onBlurInput: PropTypes.func.isRequired,\n onUploadCsv: PropTypes.func.isRequired,\n campaignOptions: PropTypes.array.isRequired,\n ifsScoresOptions: PropTypes.array.isRequired,\n};\n\nexport default LeadsCsvPreviewDialog;\n","import React, { useCallback, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDropzone } from 'react-dropzone';\nimport styled from 'styled-components';\nimport { fileToBase64 } from '../../shared/utils';\nimport { Text } from '@8base/boost';\nimport { Loader } from 'shared/components';\nimport { IconClose } from './ui/Icons';\n\nconst Dropzone = styled.div`\n width: 100%;\n padding: 30px;\n height: 100px;\n display: flex;\n cursor: pointer;\n position: relative;\n border-radius: 5px;\n align-items: center;\n box-sizing: border-box;\n justify-content: center;\n background-color: #ffffff;\n border: 1px dashed #d0d7dd;\n`;\n\nconst Label = styled.p`\n color: #878c93;\n font-size: 12px;\n line-height: 16px;\n margin-bottom: 5px;\n font-family: 'Poppins';\n`;\n\nconst TextDanger = styled(Text)`\n margin-top: 5px;\n`;\n\nconst TextDropzone = styled(Text)`\n color: #323c47;\n font-family: 'Poppins';\n font-size: 13px;\n letter-spacing: 0;\n line-height: 20px;\n font-weight: 600 !important;\n text-align: center;\n`;\n\nconst FileName = styled.span`\n margin-left: 6px;\n font-size: 16px;\n`;\n\nconst FileUpload = ({ text, label, accept, maxFiles, onChange, onClickRemoveFile }) => {\n const [files, setFiles] = useState([]);\n const [message, setMessage] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const onDrop = useCallback((acceptedFiles) => {\n // eslint-disable-next-line\n if (acceptedFiles.length <= maxFiles) {\n const newFiles = [];\n\n setIsLoading(true);\n acceptedFiles.forEach(async (file) => {\n const base64 = await fileToBase64(file);\n\n newFiles.push({\n ...file,\n preview: base64,\n });\n });\n\n setMessage('');\n setFiles(newFiles);\n onChange(acceptedFiles);\n } else {\n setMessage(`Only accept ${maxFiles} file${maxFiles > 1 ? 's' : ''}`);\n }\n // eslint-disable-next-line\n }, []);\n const handleOnClickClose = useCallback(\n (file) => {\n onClickRemoveFile();\n setIsLoading(false);\n setFiles(files.filter((_file) => file.preview !== _file.preview));\n },\n [files, onClickRemoveFile],\n );\n const { getRootProps, getInputProps } = useDropzone({ onDrop, accept });\n\n return (\n <>\n {label}\n {files.length ? (\n \n {files.map((file, key) => {\n return (\n \n handleOnClickClose(file)} />\n {file.path}\n \n );\n })}\n \n ) : (\n \n \n {isLoading ? : {text}}\n \n )}\n {message !== '' && {message}}\n >\n );\n};\n\nFileUpload.propTypes = {\n text: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n accept: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n maxFiles: PropTypes.number.isRequired,\n onClickRemoveFile: PropTypes.func.isRequired,\n};\n\nexport default FileUpload;\n","import React, { useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { PrimaryBtn } from 'shared/components';\nimport { Dialog, Button, Heading, Column, SelectField, Link } from '@8base/boost';\nimport FileUpload from '../../../shared/components/FileUpload';\nimport { LEAD_CSV_FORMATS, LEAD_CSV_FORMAT_OPTIONS } from '../../../shared/constants';\n\nimport leads from '../../../shared/assets/documents/csv/leads.csv';\nimport leads_drivers from '../../../shared/assets/documents/csv/leads_drivers.csv';\nimport leads_auto from '../../../shared/assets/documents/csv/leads_auto.csv';\nimport leads_auto_with_drivers from '../../../shared/assets/documents/csv/leads_auto_with_drivers.csv';\nimport leads_commercial_auto from '../../../shared/assets/documents/csv/leads_commercial_auto.csv';\nimport leads_commercial_auto_with_drivers from '../../../shared/assets/documents/csv/leads_commercial_auto_with_drivers.csv';\nimport leads_home from '../../../shared/assets/documents/csv/leads_home.csv';\nimport leads_home_with_drivers from '../../../shared/assets/documents/csv/leads_home_with_drivers.csv';\nimport leads_life from '../../../shared/assets/documents/csv/leads_life.csv';\nimport leads_life_with_drivers from '../../../shared/assets/documents/csv/leads_life_with_drivers.csv';\nimport leads_employee_benefits from '../../../shared/assets/documents/csv/leads_employee_benefits.csv';\nimport leads_employee_benefits_with_drivers from '../../../shared/assets/documents/csv/leads_employee_benefits_with_drivers.csv';\nimport leads_general_liability from '../../../shared/assets/documents/csv/leads_general_liability.csv';\nimport leads_general_liability_with_drivers from '../../../shared/assets/documents/csv/leads_general_liability_with_drivers.csv';\nimport leads_workers_compensation from '../../../shared/assets/documents/csv/leads_workers_compensation.csv';\nimport leads_workers_compensation_with_drivers from '../../../shared/assets/documents/csv/leads_workers_compensation_with_drivers.csv';\nimport leads_ricochet from '../../../shared/assets/documents/csv/leads_ricochet.csv';\n\nconst links = {\n [LEAD_CSV_FORMATS.STANDARD]: [\n {\n name: 'Leads',\n file: 'leads.csv',\n url: leads,\n },\n {\n name: 'Leads with Drivers',\n file: 'leads_drivers.csv',\n url: leads_drivers,\n },\n {\n name: 'Leads Type Auto',\n file: 'leads_auto.csv',\n url: leads_auto,\n },\n {\n name: 'Leads Type Auto with Drivers',\n file: 'leads_auto_with_drivers.csv',\n url: leads_auto_with_drivers,\n },\n {\n name: 'Leads Type Commercial Auto',\n file: 'leads_commercial_auto.csv',\n url: leads_commercial_auto,\n },\n {\n name: 'Leads Type Commercial Auto with Drivers',\n file: 'leads_commercial_auto_with_drivers.csv',\n url: leads_commercial_auto_with_drivers,\n },\n {\n name: 'Leads Type Home',\n file: 'leads_home.csv',\n url: leads_home,\n },\n {\n name: 'Leads Type Home with Drivers',\n file: 'leads_home_with_drivers.csv',\n url: leads_home_with_drivers,\n },\n {\n name: 'Leads Type Life',\n file: 'leads_life.csv',\n url: leads_life,\n },\n {\n name: 'Leads Type Life with Drivers',\n file: 'leads_life_with_drivers.csv',\n url: leads_life_with_drivers,\n },\n {\n name: 'Leads Type Employee Benefits',\n file: 'leads_employee_benefits.csv',\n url: leads_employee_benefits,\n },\n {\n name: 'Leads Type Employee Benefits with Drivers',\n file: 'leads_employee_benefits_with_drivers.csv',\n url: leads_employee_benefits_with_drivers,\n },\n {\n name: 'Leads Type General Liability',\n file: 'leads_general_liability.csv',\n url: leads_general_liability,\n },\n {\n name: 'Leads Type General Liability with Drivers',\n file: 'leads_general_liability_with_drivers.csv',\n url: leads_general_liability_with_drivers,\n },\n {\n name: 'Leads Type Workers Compensation',\n file: 'leads_workers_compensation.csv',\n url: leads_workers_compensation,\n },\n {\n name: 'Leads Type Workers Compensation with Drivers',\n file: 'leads_workers_compensation_with_drivers.csv',\n url: leads_workers_compensation_with_drivers,\n },\n ],\n [LEAD_CSV_FORMATS.RICOCHET]: [\n {\n name: 'Leads',\n file: 'leads_ricochet.csv',\n url: leads_ricochet,\n },\n ],\n};\n\n/**\n * Leads Csv upload in dialog\n *\n * @param {object} props props component\n * @param {boolean} props.isOpen bool value for dialog\n * @param {Function} props.onClose handle for close the dialog\n * @param {boolean} props.loading loading for PrimaryBtn\n * @param {Function} props.onClickContinue handle on click for btn continue\n * @param {Function} props.onChangeFileUpload handle on change for file upload\n * @param {Function} props.onClickRemoveFile handle on remove for file upload\n * @param {boolean} props.hasData bool value for check if has data CSV\n *\n * @returns {React.FC} The component to render\n */\nconst LeadsCsvUploadDialog = ({\n isOpen,\n onClose,\n loading,\n onClickContinue,\n onChangeFileUpload,\n onClickRemoveFile,\n hasData,\n}) => {\n const [format, setFormat] = useState(LEAD_CSV_FORMATS.STANDARD);\n\n const handleContinue = useCallback(() => {\n onClickContinue(format);\n }, [format, onClickContinue]);\n\n return (\n \n \n \n \n \n \n CSV Examples\n \n {links[format].map((link, key) => (\n \n {link.name}\n \n ))}\n \n \n \n \n \n Cancel\n \n \n Continue\n \n \n \n );\n};\n\nLeadsCsvUploadDialog.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n loading: PropTypes.bool.isRequired,\n onClickContinue: PropTypes.func.isRequired,\n onChangeFileUpload: PropTypes.func.isRequired,\n onClickRemoveFile: PropTypes.func.isRequired,\n hasData: PropTypes.bool.isRequired,\n};\n\nexport default LeadsCsvUploadDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Dialog, Progress } from '@8base/boost';\n\nconst LeadsCsvStatusUploadDialog = ({ isOpen, accumulatorLeads, totalLeads }) => {\n return (\n <>\n \n \n Uploading leads...\n Total completed: \n \n \n \n >\n );\n};\n\nLeadsCsvStatusUploadDialog.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n accumulatorLeads: PropTypes.number.isRequired,\n totalLeads: PropTypes.number.isRequired,\n};\n\nexport default LeadsCsvStatusUploadDialog;\n","import React, { useCallback, useState, useEffect } from 'react';\nimport { Row, Loader } from '@8base/boost';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport Papa from 'papaparse';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { createLeads, createLeadsFromRicochet } from '../leads-actions';\nimport { preprocessDataFromCsv } from '../leads-utils';\nimport { useSubscription as useSub } from '@cobuildlab/react-simple-state';\nimport LeadsCsvPreviewDialog from './LeadsCsvPreviewDialog';\nimport LeadsCsvUploadDialog from './LeadsCsvUploadDialog';\nimport LeadsCsvStatusUploadDialog from './LeadsCsvStatusUploadDialog';\nimport { onErrorMixinFC } from 'shared/mixins';\nimport * as toast from 'shared/components/toast/Toast';\nimport { LEAD_CSV_FORMATS } from '../../../shared/constants';\nimport {\n OnCsvUploadFinised,\n OnLeadsChunkBulkCreateEvent,\n OnLeadsError,\n OnValidatedLeadDataForUploadEvent,\n} from '../leads-events';\n\nconst { STANDARD, RICOCHET } = LEAD_CSV_FORMATS;\n\n/**\n * Leads CSV button with dialog upload and data preview.\n *\n * @param {object} props - Component props\n *\n * @returns {React.FC} Component to render\n */\nconst LeadsCsvDialogs = (props) => {\n // Dependencies\n const history = useHistory();\n const location = useLocation();\n // Data\n const [csvData, setCsvData] = useState([]);\n const [csvColumns, setCsvColumns] = useState([]);\n const [csvFormat, setCsvFormat] = useState(STANDARD);\n const [accumulatorLeads, setAccumulatorLeads] = useState(0);\n const [totalLeads, setTotalLeads] = useState(0);\n // Controls\n const [isOpenLoaderCSVDialog, setIsOpenLoaderCSVDialog] = useState(true);\n const [isOpenPreviewDialog, setIsOpenPreviewDialog] = useState(false);\n const [isOpenStatusUploadDialog, setIsOpenStatusUploadDialog] = useState(false);\n const [isLoadingPreview, setIsLoadingPreview] = useState(false);\n const [hasData, setHasData] = useState(false);\n const [loading, setLoading] = useState(true);\n\n // Verifies that data is obtained from the lead management\n // If don't, go to leads\n useEffect(() => {\n if (!location.state?.params) {\n history.replace('/leads');\n } else {\n setLoading(false);\n }\n }, [history, location]);\n\n const handleOnChangeFileUpload = useCallback(\n (files) => {\n const file = files[0];\n setIsLoadingPreview(true);\n Papa.parse(file, {\n complete: async (results) => {\n const columns = [...results.data[0]];\n\n // remove the rows with all the empty fields\n const data = [...results.data.slice(1).filter((row) => !row.every((e) => !e))];\n\n // const [newColumns, newData] = await getDataFromCsv(columns, data);\n\n setCsvData(data);\n setCsvColumns(columns);\n setHasData(true);\n },\n skipEmptyLines: true,\n });\n setIsLoadingPreview(false);\n },\n [setIsLoadingPreview],\n );\n\n const handleOnClickRemoveFile = useCallback(() => {\n setCsvData([]);\n setCsvColumns([]);\n setHasData(false);\n }, []);\n\n const handleOnBlurInput = useCallback(\n (rowIndex, keyIndex, event) => {\n const value = event.target.value;\n csvData[rowIndex][keyIndex] = value;\n },\n [csvData],\n );\n\n const handleOnUploadCsv = useCallback(\n (campaign, leadsType, leads) => {\n if (csvFormat === STANDARD) {\n createLeads(csvColumns, csvData, campaign, leads);\n } else if (csvFormat === RICOCHET) {\n createLeadsFromRicochet(csvColumns, csvData, campaign, leadsType, leads);\n }\n },\n [csvColumns, csvData, csvFormat],\n );\n\n const handleOnClosePreview = useCallback(() => {\n setIsOpenPreviewDialog(false);\n setCsvData([]);\n setCsvColumns([]);\n setHasData(false);\n setIsOpenLoaderCSVDialog(true);\n }, []);\n\n const handleOnClickContinue = useCallback(\n async (format) => {\n const { campaigns } = location.state?.params;\n\n if (csvData.length === 0) {\n toast.error('The file is empty');\n } else if (campaigns.length === 0) {\n toast.error('This operation is not possible without campaigns');\n } else {\n setIsLoadingPreview(true);\n const [csvNewColumns, csvNewData] = await preprocessDataFromCsv(csvColumns, csvData);\n setCsvData(csvNewData);\n setCsvColumns(csvNewColumns);\n setCsvFormat(format);\n setTimeout(() => {\n setIsLoadingPreview(false);\n setIsOpenLoaderCSVDialog(false);\n setIsOpenPreviewDialog(true);\n }, 1000);\n }\n },\n [location.state, csvData, csvColumns],\n );\n useSub(OnCsvUploadFinised, () => {\n setTimeout(() => {\n toast.success('Lead Management', `Leads created successfully!`);\n history.goBack();\n }, 2000);\n });\n\n useEventSubscription(OnLeadsChunkBulkCreateEvent, (response) => {\n if (response) {\n setAccumulatorLeads(accumulatorLeads + response.totalChunk);\n }\n });\n\n useEventSubscription(OnLeadsError, (err) => {\n if (err) {\n onErrorMixinFC(err);\n }\n });\n\n useEventSubscription(OnValidatedLeadDataForUploadEvent, () => {\n setTotalLeads(csvData.length);\n setIsOpenPreviewDialog(false);\n setIsOpenStatusUploadDialog(true);\n });\n\n if (loading) {\n return (\n \n \n \n );\n }\n\n const CAMPAIGNS_OPTIONS = location.state.params.campaigns.map((campaign) => ({\n label: campaign.name,\n value: campaign.id,\n }));\n\n return (\n <>\n \n ({\n label: score,\n value: score,\n }))\n : []\n }\n />\n \n >\n );\n};\n\nexport default LeadsCsvDialogs;\n","import { TASKS_INITIAL_STATUS, TASK_STATUS_CLOSED } from '../../shared/constants';\r\n\r\nexport default {\r\n id: null,\r\n title: '',\r\n description: '',\r\n leads: [],\r\n date: null,\r\n priority: null,\r\n agents: [],\r\n types: [],\r\n status: TASKS_INITIAL_STATUS,\r\n};\r\n\r\nexport const PRIORITIES = [\r\n { value: 1, label: 'LOW' },\r\n { value: 2, label: 'NORMAL' },\r\n { value: 3, label: 'HIGH' },\r\n { value: 4, label: 'VERY HIGH' },\r\n];\r\n\r\nexport const TABLE_COLUMNS = {\r\n TaskTitle: { active: true, value: 'Task Title', property: '' },\r\n Lead: { active: true, value: 'Lead', property: '' },\r\n Date: { active: true, value: 'Date', property: '' },\r\n Type: { active: true, value: 'Type', property: '' },\r\n Priority: { active: true, value: 'Priority', property: '' },\r\n AssignedTo: { active: true, value: 'Assigned To', property: '' },\r\n Description: { active: true, value: 'Description', property: '' },\r\n};\r\n\r\nexport const ACTIVE_COLUMNS = [\r\n 'Task Title',\r\n 'Lead',\r\n 'Date',\r\n 'Type',\r\n 'Priority',\r\n 'Assigned To',\r\n 'Description',\r\n];\r\n\r\nexport const FILTER_DATA = {\r\n assignedTo: '',\r\n onDate: '',\r\n onStatus: '',\r\n};\r\n\r\nexport const FILTER_CATEGORIES = {\r\n assignedTo: {\r\n title: 'Assigned to',\r\n placeholher: 'Select',\r\n identifier: 'assignedTo',\r\n options: [],\r\n },\r\n};\r\n\r\nexport const SORT_OPTIONS = [\r\n { label: 'Priority: Top First', value: 'top' },\r\n { label: 'Priority: Low First', value: 'low' },\r\n { label: 'Date: Newest First', value: 'newest' },\r\n { label: 'Date: Oldest First', value: 'oldest' },\r\n];\r\n\r\nexport const CALENDAR_EVENT_RENDER = (event) => {\r\n if (event.event._def.extendedProps.status === TASK_STATUS_CLOSED) {\r\n event.el.classList.add('fc-status-closed');\r\n }\r\n};\r\n\r\nexport const CALENDAR_EVENT_TIME_FORMAT = {\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n meridiem: false,\r\n hour12: false,\r\n};\r\n\r\nexport const CALENDAR_HEADER = {\r\n left: 'today prev,next',\r\n center: 'title',\r\n right: 'dayGridMonth,timeGridWeek createTask, toTasksList',\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Table } from '@8base/boost';\r\nimport { RadioInputField } from 'shared/components';\r\nimport styled from 'styled-components';\r\n\r\nconst StyledTableHeader = styled(Table.Header)`\r\n display: flex;\r\n`;\r\n\r\nconst HeaderCellContainer = styled.div`\r\n display: flex;\r\n align-items: center;\r\n`;\r\n\r\nconst TableHeader = (props) => {\r\n const { data, headers, columns, selectedTasks, headerCheckboxHandler } = props;\r\n\r\n const headerCols = headers.map((col) => {\r\n let icon;\r\n return (\r\n \r\n \r\n {col}\r\n {icon}\r\n \r\n \r\n );\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {headerCols}\r\n Actions\r\n \r\n );\r\n};\r\n\r\nTableHeader.propTypes = {\r\n headers: PropTypes.array.isRequired,\r\n columns: PropTypes.string.isRequired,\r\n selectedTasks: PropTypes.array.isRequired,\r\n data: PropTypes.array.isRequired,\r\n headerCheckboxHandler: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default TableHeader;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Dropdown, Menu, Icon } from '@8base/boost';\r\nimport { DropdownBodyOnTable } from 'shared/components';\r\nimport { IconInfo, IconCheck } from 'shared/components/ui/Icons';\r\nimport styled from 'styled-components';\r\n\r\nconst StyledIconInfo = styled(IconInfo)`\r\n width: 24px;\r\n height: 24px;\r\n cursor: pointer;\r\n min-width: 24px;\r\n`;\r\n\r\nconst StyledIconCheck = styled(IconCheck)`\r\n width: 24px;\r\n height: 24px;\r\n cursor: pointer;\r\n min-width: 24px;\r\n`;\r\n\r\nconst MenuItem = styled(Menu.Item)`\r\n color: ${({ danger }) => (danger ? '#FF0000' : 'rgb(50, 60, 71)')}!important;\r\n &:hover {\r\n ${({ danger }) => (danger ? '' : 'color: #3db4aa !important;')}\r\n }\r\n`;\r\n\r\nconst RowActions = ({ task, handleOnDeleteTask, handleInfoModal, handleOnChangeStatus }) => {\r\n const dropdown = (\r\n \r\n \r\n \r\n \r\n \r\n {({ closeDropdown }) => (\r\n \r\n {\r\n handleOnDeleteTask(task);\r\n closeDropdown();\r\n }}>\r\n Delete\r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n\r\n return (\r\n <>\r\n {\r\n handleInfoModal(task.id);\r\n }}\r\n />\r\n {\r\n handleOnChangeStatus(task);\r\n }}\r\n />\r\n {dropdown}\r\n >\r\n );\r\n};\r\n\r\nRowActions.propTypes = {\r\n task: PropTypes.object.isRequired,\r\n handleOnDeleteTask: PropTypes.func.isRequired,\r\n handleInfoModal: PropTypes.func.isRequired,\r\n handleOnChangeStatus: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default RowActions;\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Dropdown } from 'shared/components';\r\nimport { PRIORITIES } from '../lead-task-model';\r\nimport styled from 'styled-components';\r\nimport { updateLeadTask } from '../lead-task-actions';\r\n\r\nconst DropdownOption = styled.div`\r\n padding: 0px ${(props) => (props.isHead ? '0px' : '16px')};\r\n`;\r\nconst component = (priority) => (props) => {priority};\r\n\r\nconst PriorityCell = ({ rowData, value }) => {\r\n const [priority, setPriority] = useState(value);\r\n const handleOnChange = (value) => {\r\n setPriority(value);\r\n updateLeadTask({ id: rowData.id, priority: value.toString() });\r\n };\r\n\r\n return (\r\n {\r\n return {\r\n value: value,\r\n Component: component(label),\r\n };\r\n })}\r\n onChange={handleOnChange}\r\n />\r\n );\r\n};\r\n\r\nPriorityCell.propTypes = {\r\n value: PropTypes.string.isRequired,\r\n rowData: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default PriorityCell;\r\n","import React from 'react';\r\nimport { PropTypes } from 'prop-types';\r\nimport { Table, Text, Link } from '@8base/boost';\r\nimport styled from 'styled-components';\r\nimport PriorityCell from '../PriorityCell';\r\n\r\nconst TableBodyCell = styled(Table.BodyCell)`\r\n word-break: break-word !important;\r\n`;\r\n\r\nconst TableTextEllipsis = styled(Text)`\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n max-width: 200px;\r\n`;\r\n\r\nconst LeadCell = ({ columnName, task }) => {\r\n let cell;\r\n switch (columnName) {\r\n case 'ID':\r\n cell = (\r\n \r\n ID\r\n \r\n );\r\n break;\r\n case 'Task Title':\r\n cell = (\r\n \r\n {task.title}\r\n \r\n );\r\n break;\r\n case 'Lead': {\r\n const { lead } = task;\r\n\r\n cell = (\r\n \r\n {lead && (\r\n \r\n {`${lead.firstName} ${lead.lastName}`}\r\n \r\n )}\r\n \r\n );\r\n\r\n break;\r\n }\r\n case 'Date': {\r\n cell = {task.date};\r\n break;\r\n }\r\n case 'Type':\r\n cell = {task.type};\r\n break;\r\n case 'Priority':\r\n cell = (\r\n \r\n \r\n \r\n );\r\n break;\r\n case 'Assigned To':\r\n cell = {task.agentsFormat};\r\n break;\r\n case 'Description':\r\n cell = (\r\n \r\n \r\n {task.description}\r\n \r\n \r\n );\r\n break;\r\n default:\r\n cell = (\r\n \r\n default\r\n \r\n );\r\n }\r\n return cell;\r\n};\r\n\r\nLeadCell.PropTypes = {\r\n lead: PropTypes.object.isRequired,\r\n columnName: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default LeadCell;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Table } from '@8base/boost';\r\nimport { RadioInputField } from 'shared/components';\r\nimport RowActions from './RowActions';\r\nimport styled from 'styled-components';\r\nimport RowCell from './RowCell';\r\n\r\nconst TableRow = styled(Table.BodyRow)`\r\n ${(props) => (props.active ? `background-color: #fcfcfc !important` : '')};\r\n`;\r\n\r\nconst TableRows = (props) => {\r\n const {\r\n task,\r\n columns,\r\n selectedTasks,\r\n activeColumns,\r\n handleInfoModal,\r\n handleOnChangeStatus,\r\n handleOnDeleteTask,\r\n taskCheckboxChangeHandler,\r\n } = props;\r\n\r\n const Row = () => {\r\n const columnList = activeColumns.map((columnName) => (\r\n \r\n ));\r\n return (\r\n \r\n \r\n {\r\n taskCheckboxChangeHandler(task.id);\r\n }}\r\n />\r\n \r\n {columnList}\r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n return ;\r\n};\r\n\r\nTableRows.propTypes = {\r\n task: PropTypes.object.isRequired,\r\n columns: PropTypes.string.isRequired,\r\n selectedTasks: PropTypes.isRequired,\r\n activeColumns: PropTypes.array.isRequired,\r\n taskCheckboxChangeHandler: PropTypes.func.isRequired,\r\n handleInfoModal: PropTypes.func.isRequired,\r\n handleOnChangeStatus: PropTypes.func.isRequired,\r\n handleOnDeleteTask: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default TableRows;\r\n","import React from 'react';\r\nimport { Dialog, Grid, Button, Text, Paragraph, Heading, Link } from '@8base/boost';\r\nimport PropTypes from 'prop-types';\r\nimport PriorityCell from '../PriorityCell';\r\nimport moment from 'moment';\r\n\r\nconst InfoModal = ({\r\n task,\r\n updating,\r\n onClose,\r\n dialogTitle,\r\n isOpenInfoModal,\r\n updateTask,\r\n handleOnChangeStatus,\r\n}) => {\r\n const { lead } = task;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {task.title}\r\n \r\n \r\n Lead\r\n {lead && (\r\n \r\n {lead.firstName} {lead.lastName}\r\n \r\n )}\r\n \r\n \r\n Date\r\n \r\n \r\n \r\n Priority\r\n \r\n \r\n \r\n Task Type\r\n \r\n \r\n \r\n Assigned To\r\n \r\n \r\n \r\n Description\r\n \r\n \r\n \r\n \r\n \r\n \r\n {task.status === 'Closed' ? 'OPEN' : 'COMPLETE'}\r\n \r\n \r\n Close\r\n \r\n \r\n Update Task\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nInfoModal.propTypes = {\r\n updating: PropTypes.bool,\r\n onClose: PropTypes.func.isRequired,\r\n dialogTitle: PropTypes.string.isRequired,\r\n task: PropTypes.object,\r\n updateTask: PropTypes.func.isRequired,\r\n handleOnChangeStatus: PropTypes.func.isRequired,\r\n isOpenInfoModal: PropTypes.string.isRequired,\r\n};\r\n\r\nInfoModal.defaultProps = {\r\n updating: false,\r\n task: {},\r\n};\r\n\r\nexport default InfoModal;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Table } from '@8base/boost';\r\nimport Loader from '../../../../shared/components/ui/Loader';\r\nimport TaskForm from '../../../leads/components/forms/TaskForm';\r\nimport TableRows from './TableRows';\r\nimport InfoModal from './InfoModal';\r\nimport styled from 'styled-components';\r\n\r\nconst Body = styled(Table.Body)`\r\n min-height: 400px;\r\n`;\r\n\r\nconst TableBody = (props) => {\r\n const {\r\n users,\r\n leads,\r\n data,\r\n tasks,\r\n loading,\r\n taskFormIsOpen,\r\n columns,\r\n selectedTasks,\r\n handleInfoModal,\r\n activeColumns,\r\n taskCheckboxChangeHandler,\r\n handleOnChangeStatus,\r\n isOpenInfoModal,\r\n handleOnDeleteTask,\r\n onCloseInfoModal,\r\n openTaskFormDialog,\r\n closeTaskFormDialog,\r\n refetchTasks,\r\n } = props;\r\n\r\n return (\r\n <>\r\n {loading ? (\r\n \r\n ) : (\r\n \r\n {(task) => (\r\n <>\r\n \r\n \r\n {taskFormIsOpen && (\r\n task.id === t.id)}\r\n onSuccess={refetchTasks}\r\n isOpen={taskFormIsOpen}\r\n onClose={closeTaskFormDialog}\r\n />\r\n )}\r\n >\r\n )}\r\n \r\n )}\r\n >\r\n );\r\n};\r\n\r\nTableBody.propTypes = {\r\n users: PropTypes.array.isRequired,\r\n leads: PropTypes.object.isRequired,\r\n data: PropTypes.array.isRequired,\r\n tasks: PropTypes.array.isRequired,\r\n loading: PropTypes.bool.isRequired,\r\n taskFormIsOpen: PropTypes.bool.isRequired,\r\n columns: PropTypes.string.isRequired,\r\n selectedTasks: PropTypes.array.isRequired,\r\n activeColumns: PropTypes.array.isRequired,\r\n isOpenInfoModal: PropTypes.array.isRequired,\r\n taskCheckboxChangeHandler: PropTypes.func.isRequired,\r\n onCloseInfoModal: PropTypes.func.isRequired,\r\n handleInfoModal: PropTypes.func.isRequired,\r\n openTaskFormDialog: PropTypes.func.isRequired,\r\n closeTaskFormDialog: PropTypes.func.isRequired,\r\n handleOnChangeStatus: PropTypes.func.isRequired,\r\n handleOnDeleteTask: PropTypes.func.isRequired,\r\n refetchTasks: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default TableBody;\r\n","import React from 'react';\r\nimport { Table, Pagination } from '@8base/boost';\r\nimport PropTypes from 'prop-types';\r\nimport styled from 'styled-components';\r\n\r\nconst PaginationContainer = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n font-size: 1.2rem;\r\n padding: 0 1rem;\r\n\r\n & > div > div > *::before {\r\n background-color: var(--color-primary);\r\n transition: all 0.2s;\r\n }\r\n\r\n & > div > span {\r\n display: inline-block;\r\n padding: 0.5rem 1.5rem;\r\n border: solid 1px #d0d7dd;\r\n border-radius: 5px;\r\n }\r\n`;\r\n\r\nconst TableFooter = (props) => {\r\n const { data, page, handlePageChange } = props;\r\n\r\n return (\r\n \r\n \r\n {\r\n handlePageChange(page);\r\n }}\r\n defaultPage={1}\r\n total={data.length}\r\n page={page}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nTableFooter.propTypes = {\r\n data: PropTypes.array.isRequired,\r\n page: PropTypes.string.isRequired,\r\n handlePageChange: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default TableFooter;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Dropdown, Menu } from '@8base/boost';\r\nimport { DropdownBodyOnTable } from 'shared/components';\r\nimport sortTableIcon from '../../../../shared/assets/images/table-sort-grey.svg';\r\nimport styled from 'styled-components';\r\n\r\nconst CustomGridCell = styled.div`\r\n grid-area: ${(props) => props.area};\r\n ${(props) => (props.justifySelf ? `justify-self:${props.justifySelf} ` : '')};\r\n`;\r\n\r\nconst SortTableMenu = styled(Menu)`\r\n padding-bottom: 0 !important;\r\n`;\r\n\r\nconst SortTableBtn = styled.div`\r\n display: flex;\r\n border-radius: 5px;\r\n border: solid 1px ${({ active }) => (active ? '#3db4aa' : '#d0d7dd')};\r\n padding: 0.5rem 1rem;\r\n box-sizing: border-box;\r\n &::before {\r\n content: '';\r\n display: inline-block;\r\n height: 2.5rem;\r\n width: 2rem;\r\n\r\n background-color: ${({ active }) => (active ? '#3db4aa' : '#aeb7be')};\r\n -webkit-mask-image: url(${(props) => props.src});\r\n -webkit-mask-size: cover;\r\n mask-image: url(${(props) => props.src});\r\n mask-size: cover;\r\n }\r\n\r\n &:focus::before {\r\n background-color: #3db4aa;\r\n }\r\n`;\r\n\r\nconst SortTableConfirm = styled.div`\r\n border-top: 1px solid #d0d7dd;\r\n padding: 10px 15px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-around;\r\n`;\r\n\r\nconst SortTableConfirmOptions = styled.span`\r\n color: ${(props) => (props.active ? '#3db4aa' : '#384A59')};\r\n cursor: pointer;\r\n`;\r\n\r\nconst StyledDropdownBodyOnTable = styled(DropdownBodyOnTable)`\r\n transform: translate3d(1720px, 167px, 0px) !important;\r\n`;\r\n\r\nconst MenuItem = styled(Menu.Item)`\r\n color: #323c47 !important;\r\n padding: 0 !important;\r\n height: auto !important;\r\n`;\r\n\r\nconst RadioButton = styled.span`\r\n height: 22px;\r\n width: 22px;\r\n border: 1px solid #d0d7dd;\r\n border-radius: 4px;\r\n display: inline-block;\r\n position: absolute;\r\n left: 15px;\r\n\r\n &::after {\r\n height: 10px;\r\n width: 10px;\r\n content: '';\r\n display: block;\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n background-color: #3db4aa;\r\n opacity: 0;\r\n }\r\n`;\r\n\r\nconst RadioInput = styled.input`\r\n display: none;\r\n &:checked ~ label span::after {\r\n opacity: 1;\r\n }\r\n`;\r\n\r\nconst RadioLabel = styled.label`\r\n padding: 10px 30px 10px 50px;\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n cursor: pointer;\r\n`;\r\n\r\nconst OnTopHideShowColumns = (props) => {\r\n const {\r\n headers,\r\n hideShowColumns,\r\n tableSortHandler,\r\n handleHideShowColumns,\r\n confirmSortTableHandler,\r\n cancelSortTableHandler,\r\n } = props;\r\n\r\n const sortColumns = Object.entries(headers).map(([identifier, column]) => {\r\n return (\r\n {}}>\r\n \r\n tableSortHandler(identifier)}>\r\n \r\n {column.value}\r\n \r\n \r\n );\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ closeDropdown }) => (\r\n \r\n {sortColumns}\r\n \r\n {\r\n confirmSortTableHandler(closeDropdown);\r\n }}>\r\n Accept\r\n \r\n {\r\n cancelSortTableHandler(closeDropdown);\r\n }}>\r\n Cancel\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nOnTopHideShowColumns.propTypes = {\r\n headers: PropTypes.array.isRequired,\r\n hideShowColumns: PropTypes.bool.isRequired,\r\n tableSortHandler: PropTypes.func.isRequired,\r\n handleHideShowColumns: PropTypes.func.isRequired,\r\n confirmSortTableHandler: PropTypes.func.isRequired,\r\n cancelSortTableHandler: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default OnTopHideShowColumns;\r\n","import React from 'react';\r\nimport { YesNoDialog } from 'shared/components';\r\n\r\nconst DialogDeleteLeadTask = (props) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default DialogDeleteLeadTask;\r\n","import React from 'react';\r\nimport { YesNoDialog } from 'shared/components';\r\n\r\nconst DialogUpdateLeadTaskStatus = (props) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default DialogUpdateLeadTaskStatus;\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { Paper, Grid, SelectField, Table } from '@8base/boost';\r\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\r\nimport { onErrorMixinFC } from '../../shared/mixins';\r\nimport { SORT_OPTIONS, TABLE_COLUMNS, ACTIVE_COLUMNS } from './lead-task-model';\r\nimport * as R from 'ramda';\r\nimport { useAgency } from 'shared/hooks/useAgency';\r\nimport { useUser } from 'shared/hooks/useUser';\r\nimport TableHeader from './components/LeadTasksListTable/TableHeader';\r\nimport TableBody from './components/LeadTasksListTable/TableBody';\r\nimport TableFooter from './components/LeadTasksListTable/TableFooter';\r\nimport OnTopHideShowColumns from './components/LeadTasksListTable/OnTopHideShowColumns';\r\nimport { leadTaskMap, leadTaskMapTable } from './lead-task-utils';\r\nimport { fetchLeadTask, updateLeadTask, deleteLeadTask } from './lead-task-actions';\r\nimport { fetchLeadTaskTypes } from '../leads/leads-actions';\r\nimport { fetchLeads } from '../leads/leads-actions';\r\nimport { fetchManagerAndAgents } from '../users/user-actions';\r\nimport { fetchAgents } from '../agents/agents-actions';\r\nimport { SearchInput, Margin } from 'shared/components';\r\nimport { FILTER_DATA as FILTER_DATA_LEADS } from '../leads/leads-model';\r\nimport { FILTER_DATA, FILTER_CATEGORIES } from './lead-task-model';\r\nimport { TASKS_INITIAL_STATUS, TASK_STATUS_CLOSED } from '../../shared/constants';\r\nimport DialogDeleteLeadTask from './components/DialogDeleteLeadTask';\r\nimport DialogUpdateLeadTaskStatus from './components/DialogUpdateLeadTaskStatus';\r\nimport { getActiveAgency } from '../../shared/utils/agency-utils';\r\nimport * as toast from '../../shared/components/toast/Toast';\r\nimport { Link } from 'react-router-dom';\r\nimport styled from 'styled-components';\r\nimport { OnFetchManagerAndAgentUsersEvent } from 'modules/users/user-events';\r\nimport { OnLeadsListEvent } from 'modules/leads/leads-events';\r\nimport {\r\n OnLeadTaskDelete,\r\n OnLeadTaskError,\r\n OnLeadTaskList,\r\n OnLeadTaskUpdate,\r\n} from './lead-task-events';\r\nimport { OnAgentsError, OnAgentsListEvent } from 'modules/agents/agents-events';\r\n\r\nconst StyledLayout = styled(Grid.Layout)`\r\n padding: 16px;\r\n`;\r\n\r\nconst StyledBox = styled(Grid.Box)`\r\n display: grid;\r\n align-items: flex-end;\r\n justify-content: flex-end;\r\n flex-direction: row !important;\r\n`;\r\n\r\nconst ButtonLink = styled(Link)`\r\n display: flex;\r\n border-radius: 4px;\r\n border: solid 1px #d0d7dd;\r\n padding: 0.6rem 1rem;\r\n box-sizing: border-box;\r\n text-decoration: none;\r\n color: #2c3e50;\r\n`;\r\n\r\nconst columnsSize =\r\n '80px minmax(150px, 1fr) minmax(150px, 1fr) 125px 125px 125px 150px minmax(150px, 1fr) 150px';\r\n\r\nexport const LeadTaskView = () => {\r\n const agency = useAgency();\r\n const [user] = useUser();\r\n const [users, setUsers] = useState([]);\r\n const [leads, setLeads] = useState([]);\r\n const [page, setPage] = useState('');\r\n const [sort, setSort] = useState('');\r\n // eslint-disable-next-line no-unused-vars\r\n const [agents, setAgents] = useState([]);\r\n const [leadTasks, setLeadTasks] = useState([]);\r\n const [leadTaskForUpdateOrDelete, setLeadTaskForUpdateOrDelete] = useState(null);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [taskFormIsOpen, setTaskFormIsOpen] = useState(false);\r\n const [selectedTasks, setSelectedTasks] = useState([]);\r\n const [isOpenInfoModal, setIsOpenInfoModal] = useState([]);\r\n const [sortTableActive, setSortTableActive] = useState(false);\r\n const [statusDialogOpen, setStatusDialogOpen] = useState(false);\r\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\r\n const [tableColumns, setTableColumns] = useState(R.clone(TABLE_COLUMNS));\r\n const [activeColumns, setActiveColumns] = useState(R.clone(ACTIVE_COLUMNS));\r\n const [filterCategories, setFilterCategories] = useState(R.clone(FILTER_CATEGORIES));\r\n const [filters, setFilters] = useState({\r\n search: '',\r\n ...R.clone(FILTER_DATA),\r\n });\r\n\r\n const getTasks = useCallback(() => {\r\n const filterData = user.id\r\n ? {\r\n assignedTo: user.id,\r\n onStatus: TASKS_INITIAL_STATUS,\r\n agency: getActiveAgency().id,\r\n }\r\n : {};\r\n setIsLoading(true);\r\n fetchLeadTask({ filterData });\r\n }, [user.id]);\r\n\r\n const handleOnClickBtnSearch = () => {\r\n setIsLoading(true);\r\n const filterData = user.id\r\n ? {\r\n assignedTo: user.id,\r\n }\r\n : {};\r\n\r\n fetchLeadTask({ search: filters.search, filterData });\r\n };\r\n\r\n const handleExecuteSearch = (value) => {\r\n setSort(value);\r\n setIsLoading(true);\r\n fetchLeadTask({\r\n search: filters.search,\r\n sortData: sort,\r\n filterData: { ...R.clone(FILTER_DATA), assignedTo: user.id },\r\n });\r\n };\r\n\r\n const handleOnChange = (value) => {\r\n handleExecuteSearch(value);\r\n };\r\n\r\n const handlePageChange = (pageNum) => {\r\n const filterData = user.id\r\n ? {\r\n assignedTo: user.id,\r\n }\r\n : {};\r\n setIsLoading(true);\r\n setPage(pageNum);\r\n fetchLeadTask({ page: pageNum, filterData });\r\n setSelectedTasks([]);\r\n };\r\n const handleHideShowColumns = () => setSortTableActive(!sortTableActive);\r\n\r\n const taskCheckboxChangeHandler = (id) => {\r\n let newList;\r\n\r\n if (selectedTasks.includes(id)) {\r\n newList = selectedTasks.filter((oldId) => oldId !== id);\r\n } else {\r\n newList = [...selectedTasks, id];\r\n }\r\n setSelectedTasks(newList);\r\n };\r\n\r\n const headerCheckboxHandler = () => {\r\n let allTasks;\r\n\r\n if (selectedTasks.length === leadTasks.length) {\r\n allTasks = [];\r\n } else {\r\n allTasks = leadTasks.map((lead) => lead.id);\r\n }\r\n setSelectedTasks(allTasks);\r\n };\r\n const tableSortHandler = (sortIdentifier) => {\r\n const newColumnList = { ...tableColumns };\r\n newColumnList[sortIdentifier] = { ...tableColumns[sortIdentifier] };\r\n newColumnList[sortIdentifier].active = !newColumnList[sortIdentifier].active;\r\n setTableColumns(newColumnList);\r\n };\r\n\r\n const confirmSortTableHandler = (closeDropdown) => {\r\n const newActiveList = [];\r\n for (const key in tableColumns) {\r\n const columnClone = { ...tableColumns[key] };\r\n if (columnClone.active) {\r\n newActiveList.push(columnClone.value);\r\n }\r\n }\r\n setActiveColumns(newActiveList);\r\n setSortTableActive(false);\r\n closeDropdown();\r\n };\r\n\r\n const cancelSortTableHandler = (closeDropdown) => {\r\n const newLeadsColumns = { ...tableColumns };\r\n for (const key in newLeadsColumns) {\r\n newLeadsColumns[key] = { ...tableColumns[key] };\r\n if (activeColumns.includes(newLeadsColumns[key].value)) {\r\n newLeadsColumns[key].active = true;\r\n }\r\n }\r\n\r\n setTableColumns(newLeadsColumns);\r\n setSortTableActive(false);\r\n closeDropdown();\r\n };\r\n\r\n const handleInfoModal = (id) => {\r\n setLeadTaskForUpdateOrDelete(leadTasks.find((t) => id === t.id));\r\n setIsOpenInfoModal([...isOpenInfoModal, id]);\r\n };\r\n\r\n const openTaskFormDialog = () => {\r\n setTaskFormIsOpen(true);\r\n setIsOpenInfoModal([]);\r\n };\r\n\r\n const closeTaskFormDialog = () => {\r\n setTaskFormIsOpen(false);\r\n setIsOpenInfoModal([]);\r\n };\r\n\r\n const onCloseInfoModal = () => {\r\n setIsOpenInfoModal([]);\r\n };\r\n\r\n /**\r\n * Change the Task Status\r\n */\r\n\r\n const handleOnChangeStatus = (task) => {\r\n setLeadTaskForUpdateOrDelete(task);\r\n setStatusDialogOpen(!statusDialogOpen);\r\n };\r\n\r\n const handleChangeStatusYes = () => {\r\n handleChangeStatus(leadTaskForUpdateOrDelete);\r\n };\r\n\r\n const handleChangeStatusNo = () => {\r\n handleOnChangeStatus();\r\n };\r\n const handleChangeStatus = (leadTaskForUpdate) => {\r\n updateLeadTask({ id: leadTaskForUpdate.id, status: TASK_STATUS_CLOSED });\r\n handleChangeStatusNo();\r\n };\r\n\r\n /**\r\n * Delete the Task\r\n */\r\n\r\n const handleOnDeleteTask = (leadTaskForDelete = null) => {\r\n setDeleteDialogOpen(!deleteDialogOpen);\r\n if (leadTaskForDelete) setLeadTaskForUpdateOrDelete(leadTaskForDelete);\r\n };\r\n\r\n const handleDeleteTaskYes = () => {\r\n handleDeleteTask(leadTaskForUpdateOrDelete);\r\n };\r\n const handleDeleteTaskNo = () => {\r\n handleOnDeleteTask();\r\n };\r\n\r\n const handleDeleteTask = (leadTaskForDelete) => {\r\n deleteLeadTask(leadTaskForDelete.id);\r\n handleDeleteTaskNo();\r\n };\r\n\r\n const handleOnChangeFilter = (name, value) => {\r\n setFilters({\r\n ...filters,\r\n [name]: value,\r\n });\r\n };\r\n\r\n useSimpleSubscription(OnFetchManagerAndAgentUsersEvent, (data) => {\r\n if (data) {\r\n setUsers(data.usersList.items);\r\n setIsLoading(false);\r\n }\r\n });\r\n\r\n useSimpleSubscription(OnLeadsListEvent, (data) => {\r\n if (data) {\r\n setLeads(data.leadsList);\r\n setIsLoading(false);\r\n }\r\n });\r\n\r\n useSimpleSubscription(OnLeadTaskError, (err) => {\r\n if (err) {\r\n onErrorMixinFC(err);\r\n setIsLoading(false);\r\n }\r\n });\r\n\r\n useSimpleSubscription(OnLeadTaskList, (data) => {\r\n if (data) {\r\n setIsLoading(false);\r\n setLeadTasks(data.leadTasksList.items.map(leadTaskMap));\r\n }\r\n });\r\n\r\n useSimpleSubscription(OnLeadTaskUpdate, (data) => {\r\n if (data) {\r\n const updatedLeadTask = data.leadTaskUpdate;\r\n toast.success(`Task \"${updatedLeadTask.title}\" Updated!`);\r\n\r\n if (updatedLeadTask.status === TASK_STATUS_CLOSED) {\r\n setLeadTaskForUpdateOrDelete(null);\r\n }\r\n setIsLoading(true);\r\n getTasks();\r\n }\r\n });\r\n\r\n useSimpleSubscription(OnLeadTaskDelete, (data) => {\r\n if (data.leadTaskDelete.success) {\r\n setIsLoading(false);\r\n setLeadTaskForUpdateOrDelete(null);\r\n getTasks();\r\n toast.success('Task Deleted!');\r\n } else {\r\n setIsLoading(false);\r\n }\r\n });\r\n\r\n useSimpleSubscription(OnAgentsError, (err) => {\r\n if (err) {\r\n onErrorMixinFC(err);\r\n setIsLoading(false);\r\n }\r\n });\r\n\r\n useSimpleSubscription(OnAgentsListEvent, (data) => {\r\n if (data) {\r\n const filterCategoriesClone = R.clone(filterCategories);\r\n\r\n filterCategoriesClone.assignedTo.options = data.agentsList.items.map((agent) => ({\r\n label: `${agent.user.firstName} ${agent.user.lastName}`,\r\n value: agent.id,\r\n }));\r\n setFilterCategories(filterCategoriesClone);\r\n setAgents(\r\n data.agentsList.items.filter((agent) => {\r\n return agent.agency.id === agency.id;\r\n }),\r\n );\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n fetchManagerAndAgents(agency.id);\r\n fetchLeads(1, {\r\n ...R.clone(FILTER_DATA_LEADS),\r\n agency: agency.id,\r\n });\r\n setPage(1);\r\n }, [agency.id]);\r\n\r\n useEffect(() => {\r\n setIsLoading(true);\r\n fetchLeadTaskTypes();\r\n fetchAgents();\r\n }, [agency.id]);\r\n\r\n useEffect(() => {\r\n getTasks();\r\n }, [getTasks]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n handleOnChangeFilter('search', value)}\r\n placeholder=\"Search tasks\"\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n handleOnChange(value);\r\n },\r\n }}\r\n placeholder=\"Sort tasks by\"\r\n options={SORT_OPTIONS}\r\n />\r\n \r\n Tasks Calendar\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import React, { useState } from 'react';\nimport { OnSessionFetch } from '../session/session-events';\nimport { getUserAgencyRoles } from '../utils/agency-utils';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\n\n/**\n * High order component for pass by props all the user\n * data stored in the session.\n *\n * @param {React.Component} WrappedComponent component to add session data\n *\n * @returns {React.Component} wrapped component with the session data\n */\nconst withSession = (WrappedComponent) => (props) => {\n const {\n user: { selectedAgency },\n } = OnSessionFetch.get();\n const [agencyId, setAgencyId] = useState(selectedAgency && selectedAgency.id);\n const [userAgencyRoles, setUserAgencyRol] = useState(getUserAgencyRoles());\n const session = OnSessionFetch.get();\n\n useSubscription(\n OnSessionFetch,\n ({ user: { selectedAgency } }) => {\n const userAgencyRoles = getUserAgencyRoles();\n\n if (selectedAgency) {\n setAgencyId(selectedAgency.id);\n }\n\n if (userAgencyRoles) {\n setUserAgencyRol(userAgencyRoles);\n }\n },\n [],\n );\n\n return (\n \n );\n};\n\nexport default withSession;\n","import React from 'react';\r\nimport { Paragraph } from '@8base/boost';\r\nimport styled from 'styled-components';\r\nimport { PropTypes } from 'prop-types';\r\nimport { YesNoDialog } from '../../../../shared/components';\r\n\r\nconst BoldText = styled.span`\r\n font-weight: bold;\r\n`;\r\n\r\n/**\r\n * This Component is a Dialog to select yes or not\r\n * change the task status\r\n *\r\n * @param {boolean} isOpen - a boolean, could be true or false, true Open this dialog\r\n * @param {Function} onYes - Function To Proceed to the status change\r\n * @param {Function} onClose - Function To close this Dialog changing the isOpen Value\r\n */\r\n\r\nconst ChangeTaskStatus = ({ isOpen, onYes, onClose }) => {\r\n const text = (\r\n \r\n {`Are you sure you want to Change the Status of this Task?`}\r\n You can Change this later.\r\n \r\n );\r\n return (\r\n \r\n );\r\n};\r\n\r\nChangeTaskStatus.propTypes = {\r\n isOpen: PropTypes.bool.isRequired,\r\n onYes: PropTypes.func.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default React.memo(ChangeTaskStatus);\r\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Paper } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { useHistory } from 'react-router-dom';\nimport FullCalendar from '@fullcalendar/react';\nimport dayGridPlugin from '@fullcalendar/daygrid';\nimport interactionPlugin from '@fullcalendar/interaction';\nimport timeGridPlugin from '@fullcalendar/timegrid';\nimport { FILTER_DATA } from '../leads/leads-model';\nimport {\n CALENDAR_EVENT_RENDER,\n CALENDAR_EVENT_TIME_FORMAT,\n CALENDAR_HEADER,\n} from '../lead-task/lead-task-model';\nimport { fetchLeads } from '../leads/leads-actions';\nimport { fetchLeadTask, updateLeadTask, fetchLeadTaskDetail } from '../lead-task/lead-task-actions';\nimport { fetchManagerAndAgents } from '../users/user-actions';\nimport { TASK_STATUS_CLOSED, TASKS_INITIAL_STATUS } from '../../shared/constants';\nimport { leadTaskMapTable } from '../lead-task/lead-task-utils';\nimport withSession from '../../shared/hoc/withSession';\nimport Loader from '../../shared/components/ui/Loader';\nimport TaskForm from '../leads/components/forms/TaskForm';\nimport ChangeTaskStatus from './components/dialogs/ChangeTaskStatus';\nimport InfoModal from '../lead-task/components/LeadTasksListTable/InfoModal';\nimport '@fullcalendar/core/main.css';\nimport '@fullcalendar/daygrid/main.css';\nimport '@fullcalendar/timegrid/main.css';\nimport styled from 'styled-components';\nimport * as toast from '../../shared/components/toast/Toast';\nimport * as R from 'ramda';\nimport {\n OnLeadTaskDetails,\n OnLeadTaskList,\n OnLeadTaskUpdate,\n} from 'modules/lead-task/lead-task-events';\nimport { OnFetchManagerAndAgentUsersEvent } from 'modules/users/user-events';\nimport { OnLeadsListEvent } from 'modules/leads/leads-events';\n\nconst StyledPaper = styled(Paper)`\n margin: 25px;\n > .fc {\n z-index: 0;\n & .fc-event {\n cursor: pointer;\n }\n /* Calendar Header Sytles */\n > .fc-header-toolbar {\n padding: 25px 25px 0;\n & button.fc-button-primary {\n color: #fff;\n background-color: #fff;\n border-color: #cfd7de;\n color: #2c3e50;\n padding: 9px 15px;\n text-transform: capitalize;\n &.fc-button-active {\n background-color: #efefef;\n }\n }\n }\n & .fc-widget-header {\n background: #f4f7f9;\n border-color: #e8eff5;\n border-right: 0;\n border-left: 0;\n > table > thead > tr {\n color: #7d828c;\n font-size: 1.2rem;\n line-height: 1.6rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n > th {\n vertical-align: middle;\n height: 35px;\n }\n }\n }\n /** Week View Styles */\n & .fc-timeGridWeek-view > table {\n > tbody.fc-body {\n > tr > .fc-widget-content > .fc-day-grid > .fc-row.fc-week.fc-widget-content .fc-today {\n background: #e7eeed99;\n }\n & .fc-scroller.fc-time-grid-container > .fc-time-grid {\n & .fc-content-skeleton .fc-event {\n font-size: 0.95em;\n padding: 3px;\n border: 1px solid #3db4aa;\n background-color: #3db4aa;\n &.fc-status-closed {\n border: 1px solid lightgray;\n background-color: lightgray;\n > .fc-content > .fc-title {\n color: gray;\n }\n }\n }\n & td.fc-today {\n background: #e7eeed99;\n }\n & .fc-minor td {\n border-top-style: none;\n }\n }\n }\n }\n /** Month View Styles */\n & .fc-dayGridMonth-view > table {\n > thead.fc-head {\n border: 0;\n }\n > tbody.fc-body {\n & .fc-scroller.fc-day-grid-container {\n height: auto !important;\n & .fc-content-skeleton .fc-event {\n font-size: 1em;\n border: none;\n background: transparent;\n &.fc-status-closed > .fc-content > .fc-title {\n color: lightgray;\n }\n & .fc-time {\n font-weight: normal;\n color: #999;\n &:before {\n content: '';\n width: 10px;\n height: 10px;\n border-radius: 100%;\n background: #3db4aa;\n display: inline-block;\n margin-right: 5px;\n }\n &:after {\n content: ' :';\n }\n }\n & .fc-title {\n color: #333;\n }\n }\n }\n & .fc-day-grid {\n border-bottom: 0;\n > .fc-row.fc-week.fc-widget-content {\n max-height: 170px;\n }\n }\n & td {\n border-color: #e8eff5;\n &.fc-day-top {\n padding: 5px;\n > .fc-day-number {\n height: 22px;\n width: 23px;\n border-radius: 100%;\n margin: 0 auto;\n float: inherit;\n display: flex;\n justify-content: center;\n }\n }\n &.fc-today {\n background: #fff;\n > span.fc-day-number {\n background: #3db4aa;\n color: #fff;\n }\n }\n }\n }\n }\n }\n`;\n\n/**\n * This component Show a Calendar with all the Tasks in the system\n * could be open tasks or closed.\n *\n * @param {object} props - This Object come from the User Session from the HOC withSession\n */\n\nconst CalendarView = (props) => {\n const history = useHistory();\n const [tasks, setTasks] = useState([]);\n const [leads, setLeads] = useState([]);\n const [users, setUsers] = useState([]);\n const [loading, setLoading] = useState(true);\n const [modalData, setModalData] = useState();\n const [selectedTask, setSelectedTask] = useState();\n const [selectedDate, setSelectedDate] = useState();\n const [isOpenInfoModal, setIsOpenInfoModal] = useState([]);\n const [taskFormIsOpen, setTaskFormIsOpen] = useState(false);\n const [isOpenChangeTaskStatus, setIsOpenChangeTaskStatus] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [currentFilter] = useState({\n ...R.clone(FILTER_DATA),\n agency: props.activeAgencyId,\n });\n\n useEventSubscription(OnLeadTaskList, (data) => {\n setTasks(data.leadTasksList.items);\n setLoading(false);\n });\n\n useEventSubscription(OnLeadTaskDetails, (data) => {\n setModalData(leadTaskMapTable(data.leadTask));\n setSelectedTask(data.leadTask);\n handleInfoModal(data.leadTask.id);\n setLoading(false);\n });\n\n useEventSubscription(OnFetchManagerAndAgentUsersEvent, (data) => {\n setUsers(data.usersList.items);\n setLoading(false);\n });\n\n useEventSubscription(OnLeadsListEvent, (data) => {\n setLeads(data.leadsList);\n setLoading(false);\n });\n\n useEventSubscription(OnLeadTaskUpdate, (data) => {\n onCloseInfoModal();\n getTasks();\n toast.success('Success', 'Task successfully updated');\n setLoading(false);\n setUpdating(false);\n });\n\n /**\n * this constant is here because use a function from this component\n */\n const customButtons = {\n toTasksList: {\n text: 'Tasks List',\n click: () => {\n history.push('/tasks/list');\n },\n },\n createTask: {\n text: 'Create Task',\n click: () => {\n setSelectedDate();\n openTaskForm();\n },\n },\n };\n\n /**\n * Method for get the Tasks by the logged user\n */\n const getTasks = () => {\n const {\n user: { id },\n } = props.session;\n const filterData = id\n ? {\n assignedTo: id,\n }\n : {};\n\n fetchLeadTask({ filterData });\n };\n\n /**\n * This method obtain the\n */\n const getLeads = () => {\n const page = 1;\n fetchLeads(page, currentFilter);\n };\n\n /**\n * This Method Open the Task Form Dialog and Close the Info Modal\n */\n const openTaskFormDialog = () => {\n setIsOpenInfoModal([]);\n setTaskFormIsOpen(true);\n };\n\n /**\n * This Method Close Task Form Dialog and Clear the Selected Task\n */\n const closeTaskFormDialog = () => {\n onCloseInfoModal();\n setSelectedTask();\n setTaskFormIsOpen(false);\n };\n\n /**\n * This Method Assign the Id to he State to Open the Info Modal\n *\n * @param {string} id - The Task ID\n */\n const handleInfoModal = (id) => {\n setIsOpenInfoModal((state) => [...state, id]);\n };\n\n /**\n * This Method Close The Info Modal ans Clear the Selected Task\n */\n const onCloseInfoModal = () => {\n setSelectedTask();\n setIsOpenInfoModal([]);\n };\n\n /**\n * This method put the date data in the state\n *\n * @param {object} event - refer to the event click\n */\n const dateClick = (event) => {\n setSelectedDate(event);\n openTaskForm();\n };\n\n /**\n * This method get the task id from the event click\n * and make a call to the api to obtain the selected Task.\n *\n * @param {object} event - refer to the event click.\n */\n const eventClick = (event) => {\n fetchLeadTaskDetail(event.event._def.publicId);\n };\n\n /**\n * This method open the Task Form\n */\n const openTaskForm = () => {\n openTaskFormDialog();\n };\n\n /**\n * This method get the users belong to the current agency\n */\n const getTasksUsers = () => {\n fetchManagerAndAgents(props.activeAgencyId);\n };\n\n /**\n * Method to Open the Yes or No Change Status Dialog\n */\n const handleOnChangeStatus = () => {\n setIsOpenChangeTaskStatus(!isOpenChangeTaskStatus);\n };\n\n /**\n * On Yes Change Status Action\n */\n const handleChangeStatusYes = () => {\n setUpdating(true);\n handleChangeStatus(selectedTask);\n };\n\n /**\n * On No Change Status Action\n */\n const handleChangeStatusNo = () => {\n handleOnChangeStatus();\n };\n\n /**\n * This Method Change the State of the Task\n *\n * @param {object} task - the selected Task Object\n */\n const handleChangeStatus = (task) => {\n if (task.status === TASKS_INITIAL_STATUS) {\n updateLeadTask({ id: task.id, status: TASK_STATUS_CLOSED });\n } else {\n updateLeadTask({ id: task.id, status: TASKS_INITIAL_STATUS });\n }\n handleChangeStatusNo();\n };\n\n useEffect(() => {\n if (loading) {\n getTasks();\n getTasksUsers();\n getLeads();\n }\n });\n\n return (\n \n {loading ? (\n \n ) : (\n \n )}\n {taskFormIsOpen && (\n \n )}\n \n \n \n );\n};\n\nCalendarView.propTypes = {\n activeAgencyId: PropTypes.string.isRequired,\n session: PropTypes.object.isRequired,\n user: PropTypes.object.isRequired,\n id: PropTypes.string.isRequired,\n};\n\nexport default withSession(CalendarView);\n","import React, { useCallback, useRef } from 'react';\nimport SearchInput from '../../../email/components/SearchInput';\nimport { Transition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n transition-property: width, opacity;\n transition-duration: 0.7s;\n transition-timing-function: ease-out;\n ${({ state }) => {\n switch (state) {\n case 'entering':\n case 'entered':\n return `\n width: 315px;\n opacity: 1;\n `;\n case 'exiting':\n case 'exited':\n return `\n width: 0px;\n opacity: 0;\n `;\n default:\n break;\n }\n }}\n`;\n\n/**\n * Search input component customized for lead history parent\n *\n * @param {object} props - React component's prop object\n * @param {boolean} props.active - Makes the component appear or disappear\n * @param {Function} props.onSearch - Function to call when the search button is pressed\n *\n * @returns {React.FC} The component to render\n */\nfunction LeadHistorySearch({ active, onSearch }) {\n const timeoutRef = useRef(null);\n\n const handleChange = useCallback(\n (value) => {\n clearTimeout(timeoutRef.current);\n\n timeoutRef.current = setTimeout(() => onSearch(value), 500);\n },\n [onSearch],\n );\n\n return (\n \n {(state) => (\n \n \n \n )}\n \n );\n}\n\nLeadHistorySearch.propTypes = {\n active: PropTypes.bool,\n onSearch: PropTypes.func.isRequired,\n};\n\nLeadHistorySearch.defaultProps = {\n active: false,\n};\n\nexport default LeadHistorySearch;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchleadHistoryEvent = createEvent();\n\nexport const OnFetchleadHistoryError = createEvent();\n\nexport const OnFetchFullLeadhistoryEvent = createEvent();\n\nexport const OnFetchFullLeadhistoryError = createEvent();\n","import { FETCH_LEAD_HISTORY_QUERY_RESOLVER } from './leads-history-queries';\nimport { error, log } from '@cobuildlab/pure-logger';\nimport { RESULTS_PER_PAGE } from './leads-history-model';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport {\n OnFetchFullLeadhistoryError,\n OnFetchFullLeadhistoryEvent,\n OnFetchleadHistoryError,\n OnFetchleadHistoryEvent,\n} from './leads-history-events';\n\n/**\n * Fetches the lead history items\n *\n * @param {string} leadId - Id of the lead\n * @param {string} userId - Id of the user\n * @param {string} agencyId - Id of the agency\n * @param {string} type - Type filter for the history items\n * @param {number} page - Page to fetch the history items\n *\n * @returns {Promise} The request result\n */\nexport const fetchLeadHistory = async (leadId, userId, agencyId, type, page = 1) => {\n const client = OnApolloClient.get();\n const first = RESULTS_PER_PAGE;\n const skip = (page - 1) * first;\n const orderBy = 'createdAt_DESC';\n\n const filter = { lead: { id: { equals: leadId } } };\n\n if (type) {\n filter.entity = { equals: type };\n }\n\n try {\n const response = await client.query({\n query: FETCH_LEAD_HISTORY_QUERY_RESOLVER,\n fetchPolicy: 'network-only',\n variables: { filter, user: userId, agency: agencyId, first, skip, orderBy },\n });\n log('fetchLeadHistory', response.data);\n OnFetchleadHistoryEvent.dispatch(response.data);\n\n return response.data;\n } catch (err) {\n error('fetchLeadHistory', err);\n OnFetchleadHistoryError.dispatch(err);\n }\n};\n\n/**\n * Fetches the all lead history\n *\n * @param {string} leadId - The id of the lead\n * @param {string} userId - Id of the user\n * @param {string} agencyId - Id of the agency\n * @param {string} type - Type of history items to filter\n * @returns {Promise} The request result\n */\nexport const fetchFullLeadHistory = async (leadId, userId, agencyId, type) => {\n const client = OnApolloClient.get();\n let response = null;\n const orderBy = 'createdAt_DESC';\n const filter = { lead: { id: { equals: leadId } } };\n\n if (type) {\n filter.entity = { equals: type };\n }\n\n try {\n response = await client.query({\n query: FETCH_LEAD_HISTORY_QUERY_RESOLVER,\n variables: { filter, user: userId, agency: agencyId, orderBy },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchFullLeadHistory');\n return OnFetchFullLeadhistoryError.dispatch(e);\n }\n\n log('fetchFullLeadHistory', response.data);\n return OnFetchFullLeadhistoryEvent.dispatch(response.data);\n};\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport styled, { keyframes, css } from 'styled-components';\nimport { Transition } from 'react-transition-group';\nimport {\n Card,\n Row,\n Loader,\n Column,\n Dialog,\n Icon,\n SelectField,\n Grid,\n Switch,\n useModal,\n Pagination,\n} from '@8base/boost';\nimport LeadHistorySearch from './LeadHistorySearch';\nimport { Title } from '../../../../shared/components';\nimport PropTypes from 'prop-types';\nimport { ENTITY_SELECTOR_OPTIONS } from '../leads-history-model';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchLeadHistory, fetchFullLeadHistory } from '../leads-history-action';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport { getHistoryItem, filterItem } from '../leads-history-utils';\nimport FormValues from '../../../../shared/components/forms/FormValues';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport ReactJsonView from 'react-json-view';\nimport { customScrollBar } from '../../../../shared/css/mixins';\nimport { useParams } from 'react-router';\nimport {\n OnFetchFullLeadhistoryError,\n OnFetchFullLeadhistoryEvent,\n OnFetchleadHistoryError,\n OnFetchleadHistoryEvent,\n} from '../leads-history-events';\n\nconst Body = styled(Card.Body)`\n padding: 24px 0px !important;\n height: 100%;\n max-height: 100%;\n ${customScrollBar}\n display: flex;\n flex-direction: column;\n`;\n\nconst Container = styled.div`\n height: ${({ gap }) => (gap ? `calc(100vh - ${gap}px)` : 'auto')};\n max-height: ${({ gap }) => (gap ? `calc(100vh - ${gap}px)` : 'auto')};\n`;\n\nconst slideIn = keyframes`\n 0% {\n transform: translateX(100%);\n }\n 100% {\n transform: translateX(0);\n }\n`;\n\nconst slideOut = keyframes`\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(100%);\n }\n`;\n\nconst CustomColumn = styled(Column)`\n ${(props) =>\n props.mb &&\n `\n & > *:not(:last-child) {\n margin-bottom: ${props.mb}px !important;\n }\n `}\n`;\n\nconst animate = css`\n animation: 0.3s\n ${({ state }) => {\n switch (state) {\n case 'entering':\n return slideIn;\n case 'exiting':\n return slideOut;\n default:\n return '';\n }\n }}\n ease-in-out;\n`;\n\nconst SideBar = styled.div`\n position: fixed;\n background-color: #fff;\n width: 500px;\n max-width: 640px;\n top: 0;\n right: 0;\n height: 100vh;\n box-shadow: 0 0px 3px 3px rgba(50, 50, 93, 0.14);\n transition: width 1s;\n z-index: 2;\n ${(props) =>\n props.fullHistory &&\n `\n width: 640px;\n `}\n\n ${animate}\n`;\n\n/* const TouchableText = styled(Text)`\n font-family: Poppins !important;\n font-size: 13px !important;\n line-height: 20px !important;\n color: #3db4aa !important;\n font-weight: 400 !important;\n cursor: pointer !important;\n\n &:first-letter {\n text-transform: capitalize !important;\n }\n`;\n\n*/\n\nconst Section = styled(Card.Section)`\n padding: 12px 12px !important;\n`;\n\nconst PaginationContainer = styled.div`\n display: flex;\n justify-content: center;\n font-size: 1.2rem;\n padding: 0 1rem;\n margin-top: auto;\n width: 100%;\n & > div > div > *::before {\n background-color: var(--color-primary);\n transition: all 0.2s;\n }\n & > div > span {\n display: inline-block;\n padding: 0.5rem 1.5rem;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n }\n`;\n\nexport const modalId = 'lead-history-modal';\n\nexport const LeadHistory = (props) => {\n const { isOpen, args, closeModal } = useModal(modalId);\n const [items, setItems] = useState({ items: [], filtered: [] });\n const [loading, setLoading] = useState(true);\n const [fullHistory, setFullHistory] = useState(false);\n const [page, setPage] = useState(1);\n // const [load, setLoad] = useState({ completed: false });\n const [difference, setDifference] = useState(null);\n const [info, setInfo] = useState(null);\n const [type, setType] = useState('');\n const [gap, setGap] = useState(0);\n const [count, setCount] = useState(0);\n const bodyRef = useRef(null);\n const { id } = useParams();\n /**\n * Function called when the component is unmounted or\n * the close transition is completed\n */\n const onExited = () => {\n setType('');\n setItems({ items: [], filtered: [] });\n setPage(1);\n setCount(0);\n };\n\n /**\n * Fetches the paginated lead history based on\n * the actual id, page and type parameters\n */\n const fetch = useCallback(() => {\n if (isOpen) {\n if (args) {\n const { user, agency } = args;\n setLoading(true);\n fetchLeadHistory(id, user, agency, type, page);\n }\n }\n }, [args, page, type, isOpen, id]);\n\n /**\n * Effect that triggers everytime the id, page, or type\n * properties change\n */\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n /**\n * Effect that triggers when the full history state changes to true,\n * fetches all of the lead history items of the lead, filtered by the type of entity\n */\n useEffect(() => {\n if (fullHistory) {\n setItems({ items: [], filtered: [] });\n setLoading(true);\n const { lead, user, agency } = args;\n fetchFullLeadHistory(lead, user, agency, type);\n }\n }, [args, fullHistory, type]);\n\n /**\n * Effect that triggers when the component opens, makes the sidebar\n * take the available vertical space on screen\n */\n useEffect(() => {\n if (isOpen) {\n const { top } = bodyRef.current.getBoundingClientRect();\n setGap(top);\n }\n }, [isOpen]);\n\n // Subscriptions for handling data flow\n useEventSubscription(OnFetchleadHistoryEvent, ({ leadHistoriesResolver }) => {\n setItems((items) => ({\n items: [...leadHistoriesResolver.items],\n filtered: [...leadHistoriesResolver.items],\n }));\n setCount(leadHistoriesResolver.count);\n setLoading(false);\n });\n\n useEventSubscription(OnFetchleadHistoryError, () => {\n toast.error('Something happened while getting lead history');\n });\n\n useEventSubscription(OnFetchFullLeadhistoryEvent, ({ leadHistoriesResolver }) => {\n setItems({ items: leadHistoriesResolver.items, filtered: leadHistoriesResolver.items });\n setLoading(false);\n });\n\n useEventSubscription(OnFetchFullLeadhistoryError, (err) => {\n if (err) onErrorMixinFC(err);\n });\n\n /**\n * Filters the items already loaded by a search value parameter given\n */\n const handleSearch = useCallback(\n (value) => {\n setItems((state) => ({\n ...state,\n filtered: state.items.filter((item) => filterItem(value, item)),\n }));\n },\n [setItems],\n );\n\n /**\n * Enables/Disables the full history functionality and takes\n * actions based on that\n */\n const handleChange = useCallback(\n (value) => {\n setFullHistory(value);\n\n if (!value) {\n setItems({ items: [], filtered: [] });\n if (page === 1) {\n fetch();\n } else {\n setPage(1);\n }\n }\n },\n [fetch, page, setItems],\n );\n\n /**\n * Changes the entity type filter, and takes actions based on it\n */\n const handleTypeChange = useCallback(\n (type) => {\n if (!fullHistory) {\n setItems({ items: [], filtered: [] });\n setPage(1);\n }\n setType(type);\n },\n [fullHistory],\n );\n\n const history = items.filtered.map((item) =>\n getHistoryItem(item, true, fullHistory, setDifference, setInfo),\n );\n\n const columns = fullHistory ? 'minmax(35%, 1fr) 25% 130px' : '0px minmax(25%, 1fr) 130px';\n\n const paginationCtnRef = useRef(null);\n\n return (\n \n {(state) => (\n \n \n \n \n Lead History\n {\n closeModal(modalId);\n setFullHistory(false);\n }}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {!loading && history}\n {loading && (\n \n \n \n )}\n\n {\n // {!loading && !load.completed && (\n // \n // setPage(page + 1)}>Load more\n // \n //)\n }\n \n \n \n \n \n \n {difference !== null && (\n \n setDifference(null)} />\n \n \n \n \n )}\n {info !== null && (\n \n setInfo(null)} />\n \n \n \n \n )}\n \n )}\n \n );\n};\n\nLeadHistory.propTypes = {\n id: PropTypes.string.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { fetchLeadRecordings } from 'modules/leads/leads-actions';\nimport { LeadRecording } from '../types';\n\nconst initialState = {\n /**@type {LeadRecording[]}*/\n items: [],\n count: 0,\n loading: true,\n /**@type {Error | null}*/\n error: null,\n};\n\n/**\n * @param {string} leadId - Lead id to fetch recordings to.\n * @returns {{\n refresh: () => Promise;\n items: LeadRecording[];\n count: number;\n loading: boolean;\n error: Error | null;\n page: number;\n setPage: React.Dispatch>;\n}} - Logic to handle lead recordings pagination. */\nexport function useLeadRecordings(leadId) {\n const [page, setPage] = useState(1);\n const [queryState, setQueryState] = useState(initialState);\n\n const fetchLeadRecordingsData = useCallback(async () => {\n setQueryState((prevState) => ({ ...prevState, loading: true }));\n\n const leadRecordingsData = await fetchLeadRecordings(leadId, page);\n\n if (!leadRecordingsData?.phoneCallRecordingsList) {\n setQueryState((prevState) => ({\n ...prevState,\n error: new Error('Could not fetch lead recordings data'),\n }));\n return;\n }\n\n setQueryState((prevState) => ({\n ...prevState,\n items: leadRecordingsData.phoneCallRecordingsList.items,\n count: leadRecordingsData.phoneCallRecordingsList.count,\n loading: false,\n error: null,\n }));\n }, [leadId, page]);\n\n useEffect(() => {\n fetchLeadRecordingsData();\n }, [fetchLeadRecordingsData]);\n\n return { page, setPage, ...queryState, refresh: fetchLeadRecordingsData };\n}\n","import styled from 'styled-components';\n\nexport const PaginationContainer = styled.div`\n display: flex;\n justify-content: center;\n font-size: 1.2rem;\n`;\n","import React, { useMemo } from 'react';\nimport { Table } from '@8base/boost';\nimport styled from 'styled-components';\nimport moment from 'moment';\nimport AudioPlayer from 'react-h5-audio-player';\nimport { ColumnName, ColumnValue } from 'modules/leads/components/ColumnInfo';\nimport { formatPhoneNumber } from 'modules/phone-calls/phone-calls-utils';\nimport { CALL_TYPES } from 'modules/phone-calls/phone-calls-model';\n\nconst RecordingPlayerCell = styled(Table.BodyCell)`\n padding-left: 0px !important;\n`;\n\nconst DateContainer = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n`;\n\nconst StyledText = styled.text`\n word-break: auto-phrase;\n`;\n\n/**\n * @param {object} props - Component props.\n * @param {LeadRecording} props.leadRecording - Component props.\n * @param {string} props.tableCols - Number of columns of the table.\n * @returns {React.ReactNode} Recording Item component.\n */\nexport function RecordingItem({ leadRecording, tableCols }) {\n const callType = useMemo(() => (leadRecording.call ? CALL_TYPES.OUTBOUND : CALL_TYPES.INBOUND), [\n leadRecording,\n ]);\n\n const call = useMemo(() => {\n return callType === CALL_TYPES.OUTBOUND ? leadRecording.call : leadRecording.inboundCall;\n }, [leadRecording, callType]);\n\n const recordingDate = useMemo(() => {\n const now = moment().startOf('day');\n const created = moment(call.createdAt);\n const yesterday = now\n .clone()\n .subtract(1, 'days')\n .startOf('day');\n\n if (created.isSame(now, 'day')) return 'Today';\n if (created.isSame(yesterday, 'day')) return 'Yesterday';\n return created.format('DD-MM-YYYY');\n }, [call]);\n\n const recordingTime = useMemo(() => {\n return moment(call.createdAt).format('LT');\n }, [call]);\n\n const from = useMemo(() => {\n return callType === CALL_TYPES.OUTBOUND\n ? `${call.user.firstName} ${call.user.lastName} ${formatPhoneNumber(\n `+${call.from.number.code}${call.from.number.number}`,\n )}`\n : formatPhoneNumber(call.from);\n }, [call, callType]);\n\n const to = useMemo(() => {\n return callType === CALL_TYPES.OUTBOUND\n ? call.lead\n ? `${call.lead.firstName} ${call.lead.lastName} ${formatPhoneNumber(call.to)}`\n : formatPhoneNumber(call.to)\n : formatPhoneNumber(`+${call.to.number.code}${call.to.number.number}`);\n }, [call, callType]);\n\n return (\n \n \n \n {recordingDate}\n {recordingTime}\n \n \n \n {from}\n \n \n {to}\n \n\n \n \n \n \n );\n}\n","import styled, { css, keyframes } from 'styled-components';\n\nconst slideIn = keyframes`\n 0% {\n transform: translateX(100%);\n }\n 100% {\n transform: translateX(0);\n }\n`;\n\nconst slideOut = keyframes`\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(100%);\n }\n`;\n\nconst animate = css`\n animation: 0.3s\n ${({ state }) => {\n switch (state) {\n case 'entering':\n return slideIn;\n case 'exiting':\n return slideOut;\n default:\n return '';\n }\n }}\n ease-in-out;\n`;\n\nexport const SideBar = styled.div`\n display: flex;\n gap: 0.5em;\n flex-direction: column;\n position: fixed;\n background-color: #fff;\n height: 100%;\n width: 800px;\n max-width: 940px;\n top: 0;\n right: 0;\n height: 100vh;\n box-shadow: 0 0px 3px 3px rgba(50, 50, 93, 0.14);\n transition: width 1s;\n z-index: 2;\n ${animate}\n`;\n","import React, { useEffect, useMemo, useRef } from 'react';\nimport { Transition } from 'react-transition-group';\nimport { Card, Row, Column, Icon, Table, Pagination, useModal } from '@8base/boost';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { Title } from 'shared/components';\nimport { error as toastError } from 'shared/components/toast/Toast';\nimport { onErrorMixinFC } from 'shared/mixins';\nimport { OnFetchLeadRecordingsError } from '../leads-store';\nimport { useLeadRecordings } from './hooks/useLeadRecordings';\nimport { PaginationContainer } from './components/PaginationContainer';\nimport { RecordingItem } from './components/RecordingItem';\nimport { SideBar } from './components/SideBar';\n\nexport const leadRecordingsModalId = 'lead-recordings-modal';\n\n/**\n * @param {object} props - Component props.\n * @param {string} props.leadId - Lead id to fetch recordings for.\n * @returns {React.ReactNode} LeadRecordingsDrawer component\n */\nexport function LeadRecordingsDrawer({ leadId }) {\n const nodeRef = useRef(null);\n const { isOpen, closeModal } = useModal(leadRecordingsModalId);\n const {\n items: leadRecordings,\n loading: isLoadingLeadRecordings,\n count,\n page,\n setPage,\n error,\n } = useLeadRecordings(leadId);\n\n const tableCols = useMemo(() => '1fr 1fr 1fr 2fr', []);\n\n useSubscription(OnFetchLeadRecordingsError, (e) => {\n onErrorMixinFC(e);\n });\n\n useEffect(() => {\n if (!error) return;\n toastError(error.message);\n }, [error]);\n\n return (\n \n {(state) => (\n \n \n \n \n Lead Recordings\n {\n closeModal(leadRecordingsModalId);\n }}\n />\n \n \n \n\n \n \n Date\n From\n To\n Play\n \n\n \n {(leadRecording) => (\n \n )}\n \n\n \n \n \n \n \n \n \n )}\n \n );\n}\n","import React, { useState, useContext, useCallback, useEffect } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport {\n Row,\n Button,\n Text,\n Icon,\n Dropdown,\n Menu,\n Heading as BoostHeading,\n styled,\n useModal,\n} from '@8base/boost';\nimport { modalId as decisionModalId } from '../../../shared/components/dialog/DecisionDialog';\nimport { modalId } from '../leads-history/components/LeadHistory';\nimport {\n LeadRecordingsDrawer,\n leadRecordingsModalId,\n} from '../leads-recordings/LeadRecordingsDrawer';\nimport { PhoneNumber } from '../../phone-calls/Components/PhoneNumber';\nimport { formatPhoneNumber } from '../../phone-calls/phone-calls-utils';\nimport { Box } from '../../../shared/components/Box';\nimport { ComposeEmailContext } from '../../email/components/ComposeEmailProvider';\nimport { deleteLead } from '../leads-actions';\nimport { OnFetchLeadMessages, OnFetchLeadMessagesError, OnLeadMessageCreate } from '../leads-store';\nimport { fetchLeadMessages } from '../leads-actions';\nimport MsgForm from './forms/MsgForm';\nimport {\n IconCallGreen,\n IconChatGreen,\n IconComposeEmailGreen,\n IconRecordingGreen,\n} from '../../../shared/components/ui/Icons';\nimport PropTypes from 'prop-types';\nimport { useHistory } from 'react-router';\nimport * as toast from '../../../shared/components/toast/Toast';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { useUser } from 'shared/hooks/useUser';\nimport { OnDeleteLeadEvent } from '../leads-events';\n\nconst Heading = styled(BoostHeading)`\n opacity: 0.9;\n color: #323c47 !important;\n font-family: 'Poppins';\n display: inline-block;\n font-size: 22px !important;\n line-height: 24px !important;\n font-weight: 600 !important;\n white-space: nowrap;\n`;\n\nconst NavBar = styled(Row)`\n width: 100%;\n\n @media screen and (max-width: 1200px) {\n width: 100%;\n flex-wrap: wrap !important;\n }\n`;\n\nconst NavInfo = styled.div`\n width: 30%;\n display: flex;\n\n & > *:not(:last-child) {\n margin-right: 8px;\n }\n\n @media screen and (max-width: 1200px) {\n width: 100%;\n }\n`;\n\nconst NavActions = styled(Row)`\n width: 70%;\n\n @media screen and (max-width: 1200px) {\n width: 100%;\n justify-content: center !important;\n padding-bottom: 16px;\n }\n\n @media screen and (max-width: 870px) {\n flex-wrap: wrap !important;\n }\n`;\n\nconst NavItem = styled.div`\n padding: 0 10px;\n\n @media screen and (max-width: 870px) {\n width: 100%;\n padding: 10px 0px;\n }\n`;\n\nexport const LeadDetailsHeader = ({ lead }) => {\n const { onCompose } = useContext(ComposeEmailContext);\n const { openModal, closeModal } = useModal(modalId);\n const [messages, setMessages] = useState([]);\n const [loadingMessages, setLoadingLeadMessages] = useState(true);\n const [isOpen, setOpen] = useState(false);\n const agency = useAgency();\n const user = useUser();\n const history = useHistory();\n useEffect(() => {\n setLoadingLeadMessages(true);\n\n fetchLeadMessages(lead.id);\n }, [lead]);\n\n useSubscription(OnDeleteLeadEvent, () => {\n closeModal(decisionModalId);\n\n toast.success('Success', 'Lead deleted successfully');\n\n history.replace('/leads');\n });\n\n useSubscription(\n OnFetchLeadMessages,\n ({ sMSMessagesList }) => {\n setLoadingLeadMessages(false);\n setMessages(sMSMessagesList.items);\n },\n [],\n );\n\n useSubscription(\n OnFetchLeadMessagesError,\n (e) => {\n onErrorMixinFC(e);\n\n setMessages([]);\n\n setLoadingLeadMessages(false);\n },\n [],\n );\n\n useSubscription(\n OnLeadMessageCreate,\n () => {\n toast.success('Success', 'Message sent successfully');\n\n setLoadingLeadMessages(true);\n\n fetchLeadMessages(lead.id);\n },\n [lead],\n );\n\n const onDelete = useCallback(\n (callback) => {\n openModal(decisionModalId, {\n title: 'Delete Lead',\n text: 'Are you sure you want to delete this lead ?',\n confirmText: 'Yes, Delete',\n cancelText: 'Cancel',\n onClose: () => closeModal(decisionModalId),\n onCancel: () => closeModal(decisionModalId),\n onConfirm: () => deleteLead(lead.id),\n });\n\n callback();\n },\n [lead, openModal, closeModal],\n );\n\n const name = `${lead.firstName} ${lead.lastName}`;\n const [phone] = lead.leadLeadPhoneNumberRelation.items;\n\n return (\n \n \n \n {name}\n {phone && (\n \n {formatPhoneNumber(phone.phone.number)}\n \n )}\n \n \n \n openModal(leadRecordingsModalId, { customArg: 1 })}>\n {' '}\n Recordings\n \n \n {phone && (\n \n \n {' '}\n Call\n \n \n )}\n \n setOpen(true)}>\n {' '}\n Text\n \n \n \n \n onCompose({\n id: lead.id,\n to: lead.email,\n })\n }\n color=\"neutral\"\n variant=\"link\">\n {' '}\n Email\n \n \n \n \n openModal(modalId, {\n user: user[0].id,\n agency: agency.id,\n })\n }>\n {' '}\n History\n \n \n \n \n \n \n \n \n {({ closeDropdown: close }) => (\n \n onDelete(close)}>\n Delete Lead\n \n \n )}\n \n \n \n \n \n \n setOpen(false)}\n />\n \n );\n};\n\nLeadDetailsHeader.propTypes = {\n lead: PropTypes.shape({\n id: PropTypes.string.isRequired,\n email: PropTypes.string.isRequired,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n leadLeadPhoneNumberRelation: PropTypes.shape({\n items: PropTypes.arrayOf(PropTypes.object.isRequired),\n }),\n }).isRequired,\n};\n","import React, { useState, useEffect } from 'react';\nimport { Column, Input, Text } from '@8base/boost';\nimport { updateLeadAmount } from '../../leads-actions';\nimport { Box } from '../../../../shared/components/Box';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnUpdateLeadAmount, OnUpdateLeadAmountError } from '../../leads-store';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport PropTypes from 'prop-types';\n\n/**\n * LeadAmountForm - Component for handling the lead amount form.\n *\n * @param {object} props - The properties passed to the component.\n * @param {string} props.id - The identifier for the lead.\n * @param {string} [props.amount = '0'] - The amount associated with the lead.\n * @param {boolean} props.refresh - Indicates whether the form should refresh after an action.\n *\n * @returns {React.ReactNode} The form for managing the lead amount.\n */\nexport const LeadAmountForm = ({ id, amount = '0', refresh }) => {\n const [value, setValue] = useState(0);\n\n useEffect(() => {\n if (amount) {\n setValue(parseFloat(amount));\n }\n }, [amount]);\n\n useSubscription(\n OnUpdateLeadAmount,\n () => {\n toast.success('Success', 'Amount updated successfully');\n\n refresh();\n },\n [refresh],\n );\n\n useSubscription(\n OnUpdateLeadAmountError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n const handleUpdate = () => {\n const prev = amount ? parseFloat(amount) : 0;\n const next = value ? value : 0;\n\n if(next === prev) return;\n\n updateLeadAmount(id, String(next));\n };\n\n return (\n \n \n Amount\n \n \n \n );\n};\n\nLeadAmountForm.propTypes = {\n id: PropTypes.string.isRequired,\n amount: PropTypes.string,\n refresh: PropTypes.func.isRequired,\n};\n\nLeadAmountForm.defaultProps = {\n amount: '0',\n};\n","import React, { useState, useMemo, useCallback, useEffect } from 'react';\nimport { Column, Select, Text } from '@8base/boost';\nimport { Box } from '../../../../shared/components/Box';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport {\n OnFetchLeadStages,\n OnFetchLeadStagesError,\n OnSetLeadStage,\n OnSetLeadStageError,\n} from '../../leads-stage/leads-stage-store';\nimport { fetchLeadStages, assignLeadStage } from '../../leads-stage/leads-stage-action';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\n\nexport const LeadStageForm = ({ id, stage, refresh }) => {\n const [stages, setStages] = useState([]);\n const [value, setValue] = useState(stage);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n fetchLeadStages();\n }, []);\n\n const onChange = useCallback(\n (selected) => {\n setLoading(true);\n setValue(selected);\n\n assignLeadStage(id, selected);\n },\n [id],\n );\n\n useSubscription(\n OnFetchLeadStages,\n ({ leadStagesList }) => {\n setStages(leadStagesList.items);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchLeadStagesError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnSetLeadStage,\n () => {\n setLoading(false);\n refresh();\n\n toast.success('Success', 'Lead stage updated successfuly');\n },\n [refresh],\n );\n\n useSubscription(\n OnSetLeadStageError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const options = useMemo(\n () =>\n stages.map((stage) => ({\n label: stage.name,\n value: stage.id,\n })),\n [stages],\n );\n\n return (\n \n \n Stage\n \n \n \n );\n};\n\nLeadStageForm.propTypes = {\n id: PropTypes.string.isRequired,\n stage: PropTypes.string,\n refresh: PropTypes.func.isRequired,\n};\n\nLeadStageForm.defaultProps = {\n stage: '',\n};\n","import React, { useState, useMemo, useCallback, useEffect } from 'react';\nimport { Column, Select, Text } from '@8base/boost';\nimport { Box } from '../../../../shared/components/Box';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnUpdateLeadCampaign, OnUpdateLeadCampaignError } from '../../leads-store';\nimport { updateLeadCampaign } from '../../leads-actions';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\n\nexport const LeadCampaignForm = ({ id, campaign, campaigns, refresh }) => {\n const [value, setValue] = useState(campaign);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n setLoading(false);\n }, [campaign]);\n\n const onChange = useCallback(\n (selected) => {\n setLoading(true);\n setValue(selected);\n\n updateLeadCampaign(id, selected);\n },\n [id],\n );\n\n useSubscription(\n OnUpdateLeadCampaign,\n () => {\n setLoading(false);\n refresh();\n\n toast.success('Success', 'Lead campaign updated successfuly');\n },\n [refresh],\n );\n\n useSubscription(\n OnUpdateLeadCampaignError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const options = useMemo(\n () =>\n campaigns.map((stage) => ({\n label: stage.name,\n value: stage.id,\n })),\n [campaigns],\n );\n\n return (\n \n \n Campaign\n \n \n \n );\n};\n\nLeadCampaignForm.propTypes = {\n id: PropTypes.string.isRequired,\n campaign: PropTypes.string.isRequired,\n campaigns: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n name: PropTypes.string,\n }),\n ).isRequired,\n refresh: PropTypes.func.isRequired,\n};\n","import React, { useState, useCallback, useMemo, useEffect } from 'react';\nimport { Column, Input, Text, Icon, Dropdown, Menu, Checkbox, Button } from '@8base/boost';\nimport { getAssignedUsersLabel } from '../../../users/user-utils';\nimport { Box } from '../../../../shared/components/Box';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnUpdateLeadAssignees, OnUpdateLeadAssigneesError } from '../../leads-store';\nimport { updateLeadAssignees } from '../../leads-actions';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\n\nexport const LeadAssigneesForm = ({ id, assignees, users, refresh }) => {\n const [selected, setSelected] = useState(assignees);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n setSelected(assignees);\n }, [assignees]);\n\n const onSelect = useCallback((user, checked) => {\n if (checked) {\n setSelected((prevState) => [...prevState, user]);\n } else {\n setSelected((prevState) => prevState.filter((u) => u.id !== user.id));\n }\n }, []);\n\n const onAccept = (callback) => {\n setLoading(true);\n\n updateLeadAssignees(\n id,\n selected.map((user) => user.id),\n );\n\n callback();\n };\n\n useSubscription(\n OnUpdateLeadAssignees,\n () => {\n setLoading(false);\n\n toast.success('Success', 'Users assigned correctly to lead');\n\n refresh();\n },\n [refresh],\n );\n\n useSubscription(\n OnUpdateLeadAssigneesError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const value = getAssignedUsersLabel(assignees);\n\n const options = useMemo(\n () =>\n users.map((user) => (\n \n sel.id === user.id)}\n onChange={(value) => onSelect(user, value)}\n />\n \n )),\n [users, selected, onSelect],\n );\n\n return (\n \n \n Assigned To\n \n \n }\n />\n \n \n {({ closeDropdown: close }) => (\n \n \n {options}\n \n \n onAccept(close)}>\n Accept\n \n \n Cancel\n \n \n \n )}\n \n \n \n \n );\n};\n\nLeadAssigneesForm.propTypes = {\n id: PropTypes.string.isRequired,\n assignees: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n firstName: PropTypes.string,\n lastName: PropTypes.string,\n }),\n ).isRequired,\n users: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n firstName: PropTypes.string,\n lastName: PropTypes.string,\n }),\n ).isRequired,\n refresh: PropTypes.func.isRequired,\n};\n","import React, { useState, useMemo, useContext } from 'react';\nimport { Row, Heading, Grid, Text, Button } from '@8base/boost';\nimport { Box } from '../../../../shared/components/Box';\nimport { ColumnInfo } from '../ColumnInfo';\nimport { formatContactData, leadDetailMap } from '../../lead-details-utils';\nimport LeadFormDialog from '../LeadFormDialog';\nimport { ComposeEmailContext } from '../../../email/components/ComposeEmailProvider';\nimport { useAgency } from '../../../../shared/hooks/useAgency';\nimport PropTypes from 'prop-types';\n\nexport const LeadInfoCard = ({ lead, users, campaigns, refresh }) => {\n const { onCompose } = useContext(ComposeEmailContext);\n const [isOpen, setOpen] = useState(false);\n const agency = useAgency();\n\n const data = useMemo(\n () =>\n formatContactData(lead).map((row, i) => (\n \n \n {row.map((column, j) => (\n \n {column.label}\n {column.isTextContact ? (\n column.label === 'Email' ? (\n onCompose(lead)}>\n {column.value}\n \n ) : (\n {column.value}\n )\n ) : (\n column.value\n )}\n \n ))}\n \n \n )),\n [lead, onCompose],\n );\n\n return (\n \n \n \n Contact Information\n setOpen(true)}>\n Update Lead Info\n \n \n \n \n \n {data}\n \n \n setOpen(false)}\n />\n \n );\n};\n\nLeadInfoCard.propTypes = {\n lead: PropTypes.object.isRequired,\n users: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n }),\n ).isRequired,\n campaigns: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n }),\n ).isRequired,\n refresh: PropTypes.func.isRequired,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Form,\n Grid,\n InputField,\n styled,\n SelectField,\n CheckboxField,\n DateInputField,\n} from '@8base/boost';\nimport { Margin } from 'shared/components';\n\nconst GridBoxFlexEnd = styled(Grid.Box)`\n justify-content: flex-end;\n`;\n\n/**\n * Form with fields\n *\n * @param {object} props component props\n * @param {object} props.data data\n * @param {object} props.rows rows with fields\n * @param {Function} props.onChangeInput handle for onChange input\n * @returns {React.Component} - Input Component\n */\nconst FormFields = ({ data, rows, onChangeInput }) => {\n return (\n \n \n \n {rows.map((row, rowIndex) => {\n const columnSize = (100 / row.length).toFixed(2);\n const gapSize = 16 * (row.length - 1);\n const columns = `repeat(${row.length -\n 1}, ${columnSize}%) calc(${columnSize}% - ${gapSize}px)`;\n\n return (\n \n {row.map((field, fieldIndex) => {\n let inputFiled;\n\n if (field.type === 'text') {\n inputFiled = (\n onChangeInput(value, field.key),\n }}\n />\n );\n }\n\n if (field.type === 'number') {\n inputFiled = (\n onChangeInput(value, field.key),\n }}\n />\n );\n }\n\n if (field.type === 'date') {\n inputFiled = (\n onChangeInput(value, field.key),\n }}\n />\n );\n }\n\n if (field.type === 'datetime') {\n inputFiled = (\n onChangeInput(value, field.key),\n }}\n withTime\n />\n );\n }\n\n if (field.type === 'select') {\n inputFiled = (\n onChangeInput(value, field.key),\n }}\n options={field.options}\n />\n );\n }\n\n if (field.type === 'checkbox') {\n inputFiled = (\n \n onChangeInput(value, field.key),\n }}\n />\n \n );\n }\n\n return {inputFiled};\n })}\n \n );\n })}\n \n \n \n );\n};\n\nFormFields.propTypes = {\n rows: PropTypes.array.isRequired,\n data: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n};\n\nexport default FormFields;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport FormFields from '../../../../shared/components/forms/FormFields';\n\nconst LeadTypeAutoForm = ({ leadTypeData, onChangeInput }) => {\n const rows = [\n [\n {\n key: 'alternate',\n label: 'Alternate',\n type: 'text',\n },\n {\n key: 'otherInfo',\n label: 'Other Info',\n type: 'text',\n },\n ],\n [\n {\n key: 'currentBodilyInjuryCoverages',\n label: 'Current Bodily Injury Coverages',\n type: 'text',\n },\n {\n key: 'currentPropertyDamageCoverages',\n label: 'Current Property Damage Coverages',\n type: 'text',\n },\n ],\n ];\n\n return ;\n};\n\nLeadTypeAutoForm.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n};\n\nexport default LeadTypeAutoForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadTypeAutoForm from './LeadTypeAutoForm';\n\nconst LeadTypeAutoFormDialog = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadTypeData,\n onCloseDialog,\n onChangeInput,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadTypeAutoFormDialog.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadTypeAutoFormDialog.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadTypeAutoFormDialog;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnleadsAutoUpdateEvent = createEvent();\n\nexport const OnleadsAutoError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport { LEAD_TYPE_AUTO_UPDATE_MUTATION } from './leads-type-auto-queries';\nimport { leadAutoValidations } from './leads-type-auto-utils';\nimport { OnleadsAutoError, OnleadsAutoUpdateEvent } from './leads-type-auto-events';\n\n/**\n * Update a lead type auto\n *\n * @param {object} leadAuto lead type auto\n * @returns {object} response data\n */\nexport const updateLeadAuto = async (leadAuto) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadAutoValidations(leadAuto);\n } catch (e) {\n error('updateLeadAuto', e);\n\n return OnleadsAutoError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEAD_TYPE_AUTO_UPDATE_MUTATION,\n variables: { data: leadAuto },\n });\n } catch (e) {\n error('updateLeadAuto', e);\n\n return OnleadsAutoError.dispatch(e);\n }\n\n log('updateLeadAuto', response);\n OnleadsAutoUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport { Card, Row, Loader } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport { Title, ButtonWithoutIcon } from 'shared/components';\n\nconst Body = styled(Card.Body)`\n max-height: 576px;\n\n &::-webkit-scrollbar {\n width: 8px; /* Tamaño del scroll en vertical */\n height: 8px; /* Tamaño del scroll en horizontal */\n }\n &::-webkit-scrollbar-thumb,\n &::-webkit-scrollbar-track {\n transition: all 1s ease-in-out;\n }\n &::-webkit-scrollbar-thumb {\n background: #ccc;\n border-radius: 4px;\n }\n &:hover::-webkit-scrollbar-thumb:hover {\n background: #b3b3b3;\n box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.2);\n }\n &::-webkit-scrollbar-thumb:active {\n background-color: #999999;\n }\n &::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 4px;\n }\n &::-webkit-scrollbar-track:hover,\n &::-webkit-scrollbar-track:active {\n background: #d4d4d4;\n }\n`;\n\nconst PaperInfo = ({ title, loading, btnText, children, onClickBtn }) => {\n const content = loading ? (\n \n \n \n ) : (\n children\n );\n\n return (\n \n \n \n {title}\n \n \n \n {content}\n \n );\n};\n\nPaperInfo.propTypes = {\n title: PropTypes.string.isRequired,\n loading: PropTypes.bool,\n btnText: PropTypes.string.isRequired,\n onClickBtn: PropTypes.func.isRequired,\n children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]).isRequired,\n};\n\nPaperInfo.defaultProps = {\n loading: false,\n};\n\nexport default PaperInfo;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as R from 'ramda';\nimport LeadTypeAutoFormDialog from './LeadTypeAutoDialogForm';\nimport { updateLeadAuto } from '../leads-type-auto-actions';\nimport { onErrorMixinFC, onChangeDataHookMixin } from '../../../../shared/mixins';\nimport { formatData, leadAutoMap, leadAutoCreateMap } from '../leads-type-auto-utils';\nimport { ColumnInfo, ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport PaperInfo from '../../components/PaperInfo';\nimport { OnleadsAutoError, OnleadsAutoUpdateEvent } from '../leads-type-auto-events';\n\nconst LeadTypeAutoInfo = ({ leadTypeData }) => {\n const [loading, setLoading] = useState(false);\n const [leadTypeInfo, setLeadTypeInfo] = useState(R.clone(leadTypeData));\n const [leadTypeFields, setLeadTypeFields] = useState(leadAutoMap(R.clone(leadTypeData)));\n const [isOpenForm, setIsOpenForm] = useState(false);\n const handleOnSubmitForm = () => {\n const leadAutoToUpdate = {\n id: leadTypeFields.id,\n ...leadAutoCreateMap(leadTypeFields),\n };\n\n setLoading(true);\n updateLeadAuto(leadAutoToUpdate);\n };\n const handleOnChangeInput = (value, key) => {\n onChangeDataHookMixin(leadTypeFields, setLeadTypeFields, key, value);\n };\n\n useEventSubscription(OnleadsAutoUpdateEvent, (data) => {\n if (data) {\n setLoading(false);\n setIsOpenForm(false);\n setLeadTypeInfo(data.leadTypeAutoUpdate);\n }\n });\n\n useEventSubscription(OnleadsAutoError, (err) => {\n if (err) {\n setLoading(false);\n onErrorMixinFC(err);\n }\n });\n\n return (\n <>\n setIsOpenForm(true)}>\n \n {leadTypeInfo &&\n formatData(leadTypeInfo).map((row, i) => {\n return (\n \n \n {row.map((column, j) => {\n return (\n \n {column.label}\n {column.value}\n \n );\n })}\n \n \n );\n })}\n \n \n setIsOpenForm(false)}\n />\n >\n );\n};\n\nLeadTypeAutoInfo.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n};\n\nexport default LeadTypeAutoInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport FormFields from '../../../../shared/components/forms/FormFields';\n\n/**\n * Lead type commercial auto form\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n * @param {Function} props.onChangeInput handle for onChange input\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeCommercialAutoForm = ({ leadTypeData, onChangeInput }) => {\n const rows = [\n [\n {\n key: 'businessName',\n label: 'Company Name',\n type: 'text',\n },\n {\n key: 'name',\n label: 'Name',\n type: 'text',\n },\n ],\n [\n {\n key: 'yearsInBusiness',\n label: 'Years in Business',\n type: 'number',\n },\n {\n key: 'numberOfEmployees',\n label: 'Number Of Employees',\n type: 'number',\n },\n ],\n [\n {\n key: 'businessType',\n label: 'Business Type',\n type: 'text',\n },\n {\n key: 'coverageAmount',\n label: 'Coverage Amount',\n type: 'number',\n },\n ],\n [\n {\n key: 'payroll',\n label: 'Payroll',\n type: 'text',\n },\n {\n key: 'sales',\n label: 'Sales',\n type: 'text',\n },\n ],\n [\n {\n key: 'numberOfVehicles',\n label: 'Number Of Vehicles',\n type: 'number',\n },\n {\n key: 'numberOfDrivers',\n label: 'Number Of Drivers',\n type: 'number',\n },\n ],\n ];\n\n return ;\n};\n\nLeadTypeCommercialAutoForm.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n};\n\nexport default LeadTypeCommercialAutoForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadTypeCommercialAutoForm from './LeadTypeCommercialAutoForm';\n\nconst LeadTypeCommercialAutoFormDialog = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadTypeData,\n onCloseDialog,\n onChangeInput,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadTypeCommercialAutoFormDialog.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadTypeCommercialAutoFormDialog.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadTypeCommercialAutoFormDialog;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnLeadsCommercialAutoUpdateEvent = createEvent();\n\nexport const OnLeadsCommercialAutoError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport {\n OnLeadsCommercialAutoError,\n OnLeadsCommercialAutoUpdateEvent,\n} from './leads-type-commercial-auto-events';\nimport { LEADS_TYPE_COMMERCIAL_AUTO_UPDATE_MUTATION } from './leads-type-commercial-auto-queries';\nimport { leadCommercialAutoValidations } from './leads-type-commercial-auto-utils';\n\n/**\n * Update a lead type commercial auto\n *\n * @param {object} leadCommercialAuto lead type commercial auto\n * @returns {object} response data\n */\nexport const updateLeadCommercialAuto = async (leadCommercialAuto) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadCommercialAutoValidations(leadCommercialAuto);\n } catch (e) {\n error('updateLeadCommercialAuto', e);\n\n return OnLeadsCommercialAutoError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEADS_TYPE_COMMERCIAL_AUTO_UPDATE_MUTATION,\n variables: { data: leadCommercialAuto },\n });\n } catch (e) {\n error('updateLeadCommercialAuto', e);\n\n return OnLeadsCommercialAutoError.dispatch(e);\n }\n\n log('updateLeadCommercialAuto', response);\n OnLeadsCommercialAutoUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as R from 'ramda';\nimport LeadTypeCommercialAutoFormDialog from './LeadTypeCommercialAutoDialogForm';\nimport { updateLeadCommercialAuto } from '../leads-type-commercial-auto-actions';\nimport { onErrorMixinFC, onChangeDataHookMixin } from '../../../../shared/mixins';\nimport {\n formatData,\n leadCommercialAutoMap,\n leadCommercialAutoCreateMap,\n} from '../leads-type-commercial-auto-utils';\nimport { ColumnInfo, ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport PaperInfo from '../../components/PaperInfo';\nimport {\n OnLeadsCommercialAutoError,\n OnLeadsCommercialAutoUpdateEvent,\n} from '../leads-type-commercial-auto-events';\n\nconst LeadTypeCommercialAutoInfo = ({ leadTypeData }) => {\n const [loading, setLoading] = useState(false);\n const [leadTypeInfo, setLeadTypeInfo] = useState(R.clone(leadTypeData));\n const [leadTypeFields, setLeadTypeFields] = useState(\n leadCommercialAutoMap(R.clone(leadTypeData)),\n );\n const [isOpenForm, setIsOpenForm] = useState(false);\n const handleOnSubmitForm = () => {\n const leadCommercialAutoToUpdate = {\n id: leadTypeFields.id,\n ...leadCommercialAutoCreateMap(leadTypeFields),\n };\n\n setLoading(true);\n updateLeadCommercialAuto(leadCommercialAutoToUpdate);\n };\n const handleOnChangeInput = (value, key) => {\n onChangeDataHookMixin(leadTypeFields, setLeadTypeFields, key, value);\n };\n\n useEventSubscription(OnLeadsCommercialAutoUpdateEvent, (data) => {\n setLoading(false);\n setIsOpenForm(false);\n setLeadTypeInfo(data.leadTypeCommercialAutoUpdate);\n });\n\n useEventSubscription(OnLeadsCommercialAutoError, (err) => {\n setLoading(false);\n onErrorMixinFC(err);\n });\n\n return (\n <>\n setIsOpenForm(true)}>\n \n {leadTypeInfo &&\n formatData(leadTypeInfo).map((row, i) => {\n return (\n \n \n {row.map((column, j) => {\n return (\n \n {column.label}\n {column.value}\n \n );\n })}\n \n \n );\n })}\n \n \n setIsOpenForm(false)}\n />\n >\n );\n};\n\nLeadTypeCommercialAutoInfo.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n};\n\nexport default LeadTypeCommercialAutoInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Grid, InputField, DateInputField } from '@8base/boost';\n\n/**\n * Lead type form\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n * @param {Function} props.onChangeInput handle for onChange input\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeGeneralLiabilityForm = ({ leadTypeData, onChangeInput }) => {\n return (\n \n \n \n \n \n onChangeInput(value, 'natureOfBusiness'),\n }}\n />\n \n \n onChangeInput(value, 'companyName'),\n }}\n />\n \n \n \n \n onChangeInput(value, 'grossSales'),\n }}\n />\n \n \n onChangeInput(value, 'numberOfEmployees'),\n }}\n />\n \n \n \n \n onChangeInput(value, 'payroll'),\n }}\n />\n \n \n onChangeInput(value, 'policyExpirationDate'),\n }}\n />\n \n \n \n \n \n );\n};\n\nLeadTypeGeneralLiabilityForm.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n};\n\nexport default LeadTypeGeneralLiabilityForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadTypeGeneralLiabilityForm from './LeadTypeGeneralLiabilityForm';\n\n/**\n * Lead type dialog that contains the form\n *\n * @param {object} props component props\n * @param {boolean} props.isOpen dialog open value\n * @param {boolean} props.isUpdate bool for change the title of the dialog\n * @param {boolean} props.loading bool for indicates if the request is loading\n * @param {Function} props.onSubmit handle for on submit form\n * @param {object} props.leadTypeData lead type data\n * @param {Function} props.onCloseDialog handle for close the dialog\n * @param {Function} props.onChangeInput handle on change for the fields\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeGeneralLiabilityFormDialog = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadTypeData,\n onCloseDialog,\n onChangeInput,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadTypeGeneralLiabilityFormDialog.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadTypeGeneralLiabilityFormDialog.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadTypeGeneralLiabilityFormDialog;\n","import { ValidationError } from '../../../shared/errors';\nimport { isValidString, isValidNumber } from '../../../shared/validators';\n\nconst leadGeneralLiabilityMessage = 'The lead type must have a ';\nconst leadGeneralLiabilityMessageValid = `${leadGeneralLiabilityMessage} valid`;\nconst messages = {\n natureOfBusiness: leadGeneralLiabilityMessageValid + ' nature of business',\n companyName: leadGeneralLiabilityMessageValid + ' company name',\n grossSales: leadGeneralLiabilityMessageValid + ' gross sales',\n numberOfEmployees: leadGeneralLiabilityMessageValid + ' number of employees',\n payroll: leadGeneralLiabilityMessageValid + ' payroll',\n};\n\n/**\n * Validate that the lead type has all the fields necessaries with the right format.\n *\n * @param {object} leadGeneralLiability - the lead type type to be validated\n */\nexport const updateLeadGeneralLiabilityValidator = (leadGeneralLiability) => {\n let errorMessages = [];\n\n if (!isValidString(leadGeneralLiability.natureOfBusiness))\n errorMessages.push(messages.natureOfBusiness);\n\n if (!isValidString(leadGeneralLiability.companyName)) errorMessages.push(messages.companyName);\n\n if (!isValidNumber(leadGeneralLiability.grossSales)) errorMessages.push(messages.grossSales);\n\n if (!isValidNumber(leadGeneralLiability.numberOfEmployees))\n errorMessages.push(messages.numberOfEmployees);\n\n if (errorMessages.length !== 0) throw new ValidationError(errorMessages);\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnLeadsGeneralLiabilityUpdateEvent = createEvent();\n\nexport const OnLeadsGeneralLiabilityError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from 'shared/session/session-events';\nimport { LEAD_TYPE_GENERAL_LIABILITY_UPDATE_MUTATION } from './leads-type-general-liability-queries';\nimport { updateLeadGeneralLiabilityValidator } from './leads-type-general-liability-validators';\nimport {\n OnLeadsGeneralLiabilityError,\n OnLeadsGeneralLiabilityUpdateEvent,\n} from './leads-type-general-liability-events';\n\n/**\n * Update a lead type\n *\n * @param {object} leadGeneralLiability lead type\n * @returns {object} response data\n */\nexport const updateLeadGeneralLiability = async (leadGeneralLiability) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n updateLeadGeneralLiabilityValidator(leadGeneralLiability);\n } catch (e) {\n error('updateGeneralLiability', e);\n\n return OnLeadsGeneralLiabilityError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEAD_TYPE_GENERAL_LIABILITY_UPDATE_MUTATION,\n variables: { data: leadGeneralLiability },\n });\n } catch (e) {\n error('updateGeneralLiability', e);\n\n return OnLeadsGeneralLiabilityError.dispatch(e);\n }\n\n log('updateGeneralLiability', response);\n OnLeadsGeneralLiabilityUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid } from '@8base/boost';\nimport * as R from 'ramda';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport LeadTypeGeneralLiabilityFormDialog from './LeadTypeGeneralLiabilityDialogForm';\nimport { updateLeadGeneralLiability } from '../leads-type-general-liability-actions';\nimport { onErrorMixinFC, onChangeDataHookMixin } from '../../../../shared/mixins';\nimport {\n formatData,\n leadGeneralLiabilityMap,\n leadGeneralLiabilityCreateMap,\n} from '../leads-type-general-liability-utils';\nimport { ColumnInfo, ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport PaperInfo from '../../components/PaperInfo';\nimport {\n OnLeadsGeneralLiabilityError,\n OnLeadsGeneralLiabilityUpdateEvent,\n} from '../leads-type-general-liability-events';\n\n/**\n * Lead type table info component\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeGeneralLiabilityInfo = ({ leadTypeData }) => {\n const [loading, setLoading] = useState(false);\n const [leadTypeInfo, setLeadTypeInfo] = useState(R.clone(leadTypeData));\n const [leadTypeFields, setLeadTypeFields] = useState(\n leadGeneralLiabilityMap(R.clone(leadTypeData)),\n );\n const [isOpenForm, setIsOpenForm] = useState(false);\n const handleOnSubmitForm = () => {\n const leadTypeToUpdate = {\n id: leadTypeFields.id,\n ...leadGeneralLiabilityCreateMap(leadTypeFields),\n };\n\n setLoading(true);\n updateLeadGeneralLiability(leadTypeToUpdate);\n };\n const handleOnChangeInput = (value, key) => {\n onChangeDataHookMixin(leadTypeFields, setLeadTypeFields, key, value);\n };\n\n useEventSubscription(OnLeadsGeneralLiabilityUpdateEvent, (data) => {\n setLoading(false);\n setIsOpenForm(false);\n setLeadTypeInfo(data.leadTypeGeneralLiabilityUpdate);\n });\n\n useEventSubscription(OnLeadsGeneralLiabilityError, (err) => {\n setLoading(false);\n onErrorMixinFC(err);\n });\n\n return (\n <>\n setIsOpenForm(true)}>\n \n {leadTypeInfo &&\n formatData(leadTypeInfo).map((row, i) => {\n return (\n \n \n {row.map((column, j) => {\n return (\n \n {column.label}\n {column.value}\n \n );\n })}\n \n \n );\n })}\n \n \n setIsOpenForm(false)}\n />\n >\n );\n};\n\nLeadTypeGeneralLiabilityInfo.propTypes = {\n leadTypeData: PropTypes.array.isRequired,\n};\n\nexport default LeadTypeGeneralLiabilityInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { BIRTHDAY_OPTIONS, BIRTHYEAR_OPTIONS, BIRTHMONTH_OPTIONS } from '../../leads-model';\nimport FormFields from '../../../../shared/components/forms/FormFields';\n\n/**\n * Lead type life form\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n * @param {Function} props.onChangeInput handle for onChange input\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeLifeForm = ({ leadTypeData, onChangeInput }) => {\n const rows = [\n [\n {\n key: 'lifeInsuranceInformation',\n label: 'Life Insurance Information',\n type: 'text',\n },\n {\n key: 'policyType',\n label: 'Policy Type',\n type: 'text',\n },\n ],\n [\n {\n key: 'birthMonth',\n label: 'Date of Birth',\n type: 'select',\n options: BIRTHMONTH_OPTIONS,\n },\n {\n key: 'birthDay',\n label: '',\n type: 'select',\n options: BIRTHDAY_OPTIONS,\n },\n {\n key: 'birthYear',\n label: '',\n type: 'select',\n options: BIRTHYEAR_OPTIONS,\n },\n ],\n [\n {\n key: 'heightFeet',\n label: 'Height Feet',\n type: 'text',\n },\n {\n key: 'heightInches',\n label: 'Height Inches',\n type: 'text',\n },\n ],\n [\n {\n key: 'age',\n label: 'Age',\n type: 'text',\n },\n {\n key: 'weight',\n label: 'Weight',\n type: 'text',\n },\n ],\n [\n {\n key: 'term',\n label: 'Term',\n type: 'text',\n },\n {\n key: 'faceAmount',\n label: 'Face Amount',\n type: 'text',\n },\n ],\n [\n {\n key: 'telemarketerName',\n label: 'Telemarketer Name',\n type: 'text',\n },\n {\n key: 'callbackTime',\n label: 'Callback Time',\n type: 'text',\n },\n ],\n [\n {\n key: 'beneficiary',\n label: 'Beneficiary',\n type: 'text',\n },\n {\n key: 'callbackTime',\n label: 'Callback Time',\n type: 'text',\n },\n ],\n [\n {\n key: 'spouse',\n label: 'Spouse',\n type: 'checkbox',\n },\n {\n key: 'spouseAge',\n label: 'Spouse Age',\n type: 'text',\n },\n ],\n [\n {\n key: 'code',\n label: 'Code',\n type: 'text',\n },\n {\n key: 'driveRecording',\n label: 'Drive Recording',\n type: 'text',\n },\n ],\n [\n {\n key: 'knownMedicalCondition',\n label: 'Known Medical Condition',\n type: 'checkbox',\n },\n {\n key: 'smoke',\n label: 'Smoke',\n type: 'checkbox',\n },\n ],\n [\n {\n key: 'bankAccount',\n label: 'Bank Account',\n type: 'checkbox',\n },\n ],\n ];\n\n return ;\n};\n\nLeadTypeLifeForm.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n};\n\nexport default LeadTypeLifeForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadTypeLifeForm from './LeadTypeLifeForm';\n\n/**\n * Lead type life dialog that contains the form\n *\n * @param {object} props component props\n * @param {boolean} props.isOpen dialog open value\n * @param {boolean} props.isUpdate bool for change the title of the dialog\n * @param {boolean} props.loading bool for indicates if the request is loading\n * @param {Function} props.onSubmit handle for on submit form\n * @param {object} props.leadTypeData lead type life data\n * @param {Function} props.onCloseDialog handle for close the dialog\n * @param {Function} props.onChangeInput handle on change for the fields\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeLifeFormDialog = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadTypeData,\n onCloseDialog,\n onChangeInput,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadTypeLifeFormDialog.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadTypeLifeFormDialog.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadTypeLifeFormDialog;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnLeadsLifeUpdateEvent = createEvent();\n\nexport const OnLeadsLifeError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from 'shared/session/session-events';\nimport { LEAD_TYPE_LIFE_UPDATE_MUTATION } from './leads-type-life-queries';\nimport { leadLifeValidations } from './leads-type-life-utils';\nimport { OnLeadsLifeError, OnLeadsLifeUpdateEvent } from './leads-type-life-events';\n\n/**\n * Update a lead type life\n *\n * @param {object} leadLife lead type life\n * @returns {object} response data\n */\nexport const updateLeadLife = async (leadLife) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadLifeValidations(leadLife);\n } catch (e) {\n error('updateLeadLife', e);\n\n return OnLeadsLifeError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEAD_TYPE_LIFE_UPDATE_MUTATION,\n variables: { data: leadLife },\n });\n } catch (e) {\n error('updateLeadLife', e);\n\n return OnLeadsLifeError.dispatch(e);\n }\n\n log('updateLeadLife', response);\n OnLeadsLifeUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as R from 'ramda';\nimport LeadTypeLifeFormDialog from './LeadTypeLifeDialogForm';\nimport { updateLeadLife } from '../leads-type-life-actions';\nimport { onErrorMixinFC, onChangeDataHookMixin } from '../../../../shared/mixins';\nimport { formatData, leadLifeMap, leadLifeCreateMap } from '../leads-type-life-utils';\nimport { ColumnInfo, ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport PaperInfo from '../../components/PaperInfo';\nimport { OnLeadsLifeError, OnLeadsLifeUpdateEvent } from '../leads-type-life-events';\n\n/**\n * Lead type life table info component\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeLifeInfo = ({ leadTypeData }) => {\n const [loading, setLoading] = useState(false);\n const [leadTypeInfo, setLeadTypeInfo] = useState(R.clone(leadTypeData));\n const [leadTypeFields, setLeadTypeFields] = useState(leadLifeMap(R.clone(leadTypeData)));\n const [isOpenForm, setIsOpenForm] = useState(false);\n const handleOnSubmitForm = () => {\n const leadLifeToUpdate = {\n id: leadTypeFields.id,\n ...leadLifeCreateMap(leadTypeFields),\n };\n\n setLoading(true);\n updateLeadLife(leadLifeToUpdate);\n };\n const handleOnChangeInput = (value, key) => {\n onChangeDataHookMixin(leadTypeFields, setLeadTypeFields, key, value);\n };\n\n useEventSubscription(OnLeadsLifeUpdateEvent, (data) => {\n setLoading(false);\n setIsOpenForm(false);\n setLeadTypeInfo(data.leadTypeLifeUpdate);\n });\n\n useEventSubscription(OnLeadsLifeError, (err) => {\n setLoading(false);\n onErrorMixinFC(err);\n });\n\n return (\n <>\n setIsOpenForm(true)}>\n \n {leadTypeInfo &&\n formatData(leadTypeInfo).map((row, i) => {\n return (\n \n \n {row.map((column, j) => {\n return (\n \n {column.label}\n {column.value}\n \n );\n })}\n \n \n );\n })}\n \n \n setIsOpenForm(false)}\n />\n >\n );\n};\n\nLeadTypeLifeInfo.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n};\n\nexport default LeadTypeLifeInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport FormFields from '../../../../shared/components/forms/FormFields';\nimport { STATES_OPTIONS, YES_OR_NOT } from '../../leads-model';\nimport { Grid, styled, InputField, DateInputField } from '@8base/boost';\nimport { Margin } from 'shared/components';\n\nconst BtnAdd = styled.button`\n margin-top: 10px;\n display: flex;\n align-items: center;\n background: transparent;\n outline: none;\n cursor: pointer;\n`;\n\nconst BtnPlusChar = styled.p`\n box-sizing: border-box;\n height: 16px;\n width: 16px;\n border: 0.67px solid #3db4aa;\n border-radius: 100px;\n color: #3db4aa;\n font-size: 16px;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-right: 8px;\n`;\n\nconst BtnText = styled.p`\n color: #3db4aa;\n font-family: Poppins;\n font-size: 12px;\n letter-spacing: 0.18px;\n line-height: 20px;\n`;\n\nconst BtnDelete = styled.button`\n margin-top: 28px;\n height: 20px;\n width: 20px;\n border: 1px solid #eb4235;\n border-radius: 100px;\n background: transparent;\n outline: none;\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst BtnLess = styled.p`\n margin-left: 2px;\n height: 20px;\n width: 20px;\n color: #eb4235;\n font-size: 18px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst ClaimRow = ({ index, claim, onChangeClaim, onDeleteClaim }) => {\n return (\n <>\n \n onChangeClaim('type', index, value),\n }}\n />\n \n \n onChangeClaim('date', index, value),\n }}\n />\n \n \n onChangeClaim('amount', index, value),\n }}\n />\n \n \n onDeleteClaim(index)}>\n -\n \n \n >\n );\n};\n\nClaimRow.propTypes = {\n index: PropTypes.number.isRequired,\n claim: PropTypes.object.isRequired,\n onChangeClaim: PropTypes.func.isRequired,\n onDeleteClaim: PropTypes.func.isRequired,\n};\n\n/**\n * Lead type home form\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n * @param {Function} props.onChangeInput handle for onChange input\n * @returns {React.Component} - Form Component\n */\nconst LeadTypeHomeForm = ({\n leadTypeData,\n onChangeInput,\n onAddNewClaim,\n onChangeClaim,\n onDeleteClaim,\n}) => {\n const rows = [\n [\n {\n key: 'bestTimeToContact',\n label: 'Best Time To Contact',\n type: 'datetime',\n },\n {\n key: 'dob',\n label: 'DOB',\n type: 'date',\n },\n {\n key: 'otherInfo',\n label: 'Other Info',\n type: 'text',\n },\n ],\n [\n {\n key: 'timeAtCurrentResidence',\n label: 'Time At Current Residence',\n type: 'text',\n },\n {\n key: 'timeAtPreviousResidence',\n label: 'Time At Previous Residence',\n type: 'text',\n },\n {\n key: 'sauna',\n label: 'Sauna',\n type: 'text',\n },\n ],\n [\n {\n key: 'woodBurningStove',\n label: 'Wood Burning Stove',\n type: 'text',\n },\n {\n key: 'smokerInHousehold',\n label: 'Smoker in Household',\n type: 'text',\n },\n {\n key: 'sumpPump',\n label: 'Sump Pump',\n type: 'text',\n },\n ],\n [\n {\n key: 'copperWaterPipes',\n label: 'Copper Water Pipes',\n type: 'text',\n },\n {\n key: 'brushHazardWithin500Feet',\n label: 'Brush Hazard Within 500 Feet',\n type: 'text',\n },\n {\n key: 'homeValue',\n label: 'Home Value',\n type: 'text',\n },\n ],\n [\n {\n key: 'comments',\n label: 'Comments',\n type: 'text',\n },\n {\n key: 'burglarAlarm',\n label: 'Burglar Alarm',\n type: 'text',\n },\n {\n key: 'deadBolts',\n label: 'Deadbolts',\n type: 'text',\n },\n ],\n [\n {\n key: 'fireAlarm',\n label: 'Fire Alarm',\n type: 'text',\n },\n {\n key: 'fireExtinguishers',\n label: 'Fire Extinguishers',\n type: 'text',\n },\n {\n key: 'mannedSecurityStation',\n label: 'Manned Security Station',\n type: 'text',\n },\n ],\n [\n {\n key: 'monitoredBurglarAlarm',\n label: 'Monitored Burglar Alarm',\n type: 'text',\n },\n {\n key: 'smokeDetectors',\n label: 'Smoke Detectors',\n type: 'text',\n },\n {\n key: 'tennisCourts',\n label: 'Tennis Courts',\n type: 'text',\n },\n ],\n [\n {\n key: 'centralHeatingAir',\n label: 'Central Heating Air',\n type: 'text',\n },\n {\n key: 'cathedralVaultedCeilings',\n label: 'Cathedral Vaulted Ceilings',\n type: 'text',\n },\n {\n key: 'hardwoodFloors',\n label: 'Hardwood Floors',\n type: 'text',\n },\n ],\n [\n {\n key: 'enclosedPorchPatio',\n label: 'Enclosed Porch Patio',\n type: 'text',\n },\n {\n key: 'swimmingPool',\n label: 'Swimming Pool',\n type: 'text',\n },\n {\n key: 'fencedInPool',\n label: 'Fenced In Pool',\n type: 'text',\n },\n ],\n [\n {\n key: 'hotTub',\n label: 'Hot Tub',\n type: 'text',\n },\n {\n key: 'indoorSprinklers',\n label: 'Indoor Sprinklers',\n type: 'text',\n },\n {\n key: 'coverageNeededOnHouse',\n label: 'Coverage Needed On House',\n type: 'text',\n },\n ],\n [\n {\n key: 'coverageNeededOnContents',\n label: 'Coverage Needed On Contents',\n type: 'text',\n },\n {\n key: 'requestedLiability',\n label: 'Requested Liability',\n type: 'text',\n },\n {\n key: 'requestedDeductible',\n label: 'Requested Deductible',\n type: 'text',\n },\n ],\n [\n {\n key: 'credit',\n label: 'Credit',\n type: 'text',\n },\n {\n key: 'numberOfClaims',\n label: 'Number Of Claims',\n type: 'number',\n },\n {\n key: 'frequencyOfPayment',\n label: 'Frequency Of Payment',\n type: 'text',\n },\n ],\n [\n {\n key: 'premium',\n label: 'Premium',\n type: 'text',\n },\n {\n key: 'currentInsuranceCompany',\n label: 'Current Insurance Company',\n type: 'text',\n },\n {\n key: 'insuredSince',\n label: 'Insured Since',\n type: 'date',\n },\n ],\n [\n {\n key: 'policyExpiration',\n label: 'Policy Expiration',\n type: 'date',\n },\n {\n key: 'continuouslyInsured',\n label: 'Continuously Insured',\n type: 'select',\n options: YES_OR_NOT,\n },\n {\n key: 'timeWithCurrentCompany',\n label: 'Time With Current Company',\n type: 'text',\n },\n ],\n [\n {\n key: 'countyToBeInsured',\n label: 'County To Be Insured',\n type: 'text',\n },\n {\n key: 'servicePanelType',\n label: 'Service Panel Type',\n type: 'text',\n },\n {\n key: 'wiringType',\n label: 'Wiring Type',\n type: 'text',\n },\n ],\n [\n {\n key: 'ageOfRoof',\n label: 'Age Of Roof',\n type: 'text',\n },\n {\n key: 'floodPlain',\n label: 'Flood Plain',\n type: 'text',\n },\n {\n key: 'businessConductedOnPremises',\n label: 'Business Conducted On Premises',\n type: 'text',\n },\n ],\n [\n {\n key: 'heatType',\n label: 'Heat Type',\n type: 'text',\n },\n {\n key: 'fireplaces',\n label: 'Fireplaces',\n type: 'text',\n },\n {\n key: 'garageType',\n label: 'Garage Type',\n type: 'text',\n },\n ],\n [\n {\n key: 'roofing',\n label: 'Roofing',\n type: 'text',\n },\n {\n key: 'foundationType',\n label: 'Foundation Type',\n type: 'text',\n },\n {\n key: 'fireStationProximity',\n label: 'Fire Station Proximity',\n type: 'text',\n },\n ],\n [\n {\n key: 'fireHydrantProximity',\n label: 'Fire Hydrant Proximity',\n type: 'text',\n },\n {\n key: 'homeUpgrades',\n label: 'Home Upgrades',\n type: 'select',\n options: YES_OR_NOT,\n },\n {\n key: 'homeUpgradesDescribed',\n label: 'Home Upgrades Described',\n type: 'text',\n },\n ],\n [\n {\n key: 'dwellingType',\n label: 'Dwelling Type',\n type: 'text',\n },\n {\n key: 'occupancyStatus',\n label: 'Occupancy Status',\n type: 'text',\n },\n {\n key: 'dogType',\n label: 'Dog Type',\n type: 'text',\n },\n ],\n [\n {\n key: 'squareFootage',\n label: 'Square Footage',\n type: 'text',\n },\n {\n key: 'stories',\n label: 'Stories',\n type: 'text',\n },\n {\n key: 'bedrooms',\n label: 'Bedrooms',\n type: 'text',\n },\n ],\n [\n {\n key: 'porches',\n label: 'Porches',\n type: 'text',\n },\n {\n key: 'constructionType',\n label: 'Construction Type',\n type: 'text',\n },\n {\n key: 'bathrooms',\n label: 'Bathrooms',\n type: 'text',\n },\n {\n key: 'yearBuilt',\n label: 'Year Built',\n type: 'text',\n },\n ],\n [\n {\n key: 'addressLineToBeInsured',\n label: 'Address To Be Insured',\n type: 'text',\n },\n {\n key: 'cityToBeInsured',\n label: 'City To Be Insured',\n type: 'text',\n },\n {\n key: 'stateToBeInsured',\n label: 'State To Be Insured',\n type: 'select',\n options: STATES_OPTIONS,\n },\n {\n key: 'zipToBeInsured',\n label: 'Zip To Be Insured',\n type: 'text',\n },\n ],\n [\n {\n key: 'newPurchase',\n label: 'New Purchase',\n type: 'checkbox',\n },\n {\n key: 'currentlyInsured',\n label: 'Currently Insured',\n type: 'checkbox',\n },\n ],\n ];\n\n return (\n <>\n \n \n \n {leadTypeData.claims.map((claim, claimIndex) => {\n return (\n \n );\n })}\n \n \n +\n Add Claim\n \n \n \n \n >\n );\n};\n\nLeadTypeHomeForm.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onAddNewClaim: PropTypes.func.isRequired,\n onChangeClaim: PropTypes.func.isRequired,\n onDeleteClaim: PropTypes.func.isRequired,\n};\n\nexport default LeadTypeHomeForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadTypeHomeForm from './LeadTypeHomeForm';\n\n/**\n * Lead type home dialog that contains the form\n *\n * @param {object} props component props\n * @param {boolean} props.isOpen dialog open value\n * @param {boolean} props.isUpdate bool for change the title of the dialog\n * @param {boolean} props.loading bool for indicates if the request is loading\n * @param {Function} props.onSubmit handle for on submit form\n * @param {object} props.leadTypeData lead type home data\n * @param {Function} props.onCloseDialog handle for close the dialog\n * @param {Function} props.onChangeInput handle on change for the fields\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeHomeFormDialog = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadTypeData,\n onCloseDialog,\n onChangeInput,\n onAddNewClaim,\n onChangeClaim,\n onDeleteClaim,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadTypeHomeFormDialog.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n onAddNewClaim: PropTypes.func.isRequired,\n onChangeClaim: PropTypes.func.isRequired,\n onDeleteClaim: PropTypes.func.isRequired,\n};\n\nLeadTypeHomeFormDialog.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadTypeHomeFormDialog;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnLeadsHomeUpdateEvent = createEvent();\n\nexport const OnLeadsHomeError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from 'shared/session/session-events';\nimport { OnLeadsHomeError, OnLeadsHomeUpdateEvent } from './leads-type-home-events';\nimport { LEAD_TYPE_HOME_UPDATE_MUTATION } from './leads-type-home-queries';\nimport { leadHomeValidations } from './leads-type-home-utils';\n\n/**\n * Update a lead type home\n *\n * @param {object} leadHome lead type home\n * @returns {object} response data\n */\nexport const updateLeadHome = async (leadHome) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadHomeValidations(leadHome);\n } catch (e) {\n error('updateLeadHome', e);\n\n return OnLeadsHomeError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEAD_TYPE_HOME_UPDATE_MUTATION,\n variables: { data: leadHome },\n });\n } catch (e) {\n error('updateLeadHome', e);\n\n return OnLeadsHomeError.dispatch(e);\n }\n\n log('updateLeadHome', response);\n OnLeadsHomeUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as R from 'ramda';\nimport LeadTypeHomeFormDialog from './LeadTypeHomeDialogForm';\nimport { updateLeadHome } from '../leads-type-home-actions';\nimport { onErrorMixinFC, onChangeDataHookMixin } from '../../../../shared/mixins';\nimport { formatData, leadHomeMap, leadHomeCreateMap } from '../leads-type-home-utils';\nimport { ColumnInfo, ColumnName, ColumnValue, RowHeader } from '../../components/ColumnInfo';\nimport PaperInfo from '../../components/PaperInfo';\nimport { capitalize } from '../../../../shared/utils';\nimport { OnLeadsHomeError, OnLeadsHomeUpdateEvent } from '../leads-type-home-events';\n\n/**\n * Lead type home table info component\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeHomeInfo = ({ leadTypeData }) => {\n const [loading, setLoading] = useState(false);\n const [leadTypeInfo, setLeadTypeInfo] = useState(R.clone(leadTypeData));\n const [leadTypeFields, setLeadTypeFields] = useState(leadHomeMap(R.clone(leadTypeData)));\n const [isOpenForm, setIsOpenForm] = useState(false);\n\n const handleOnSubmitForm = () => {\n const leadHomeToUpdate = {\n id: leadTypeFields.id,\n ...leadHomeCreateMap(leadTypeFields),\n };\n\n setLoading(true);\n updateLeadHome(leadHomeToUpdate);\n };\n\n const handleOnChangeInput = (value, key) => {\n onChangeDataHookMixin(leadTypeFields, setLeadTypeFields, key, value);\n };\n\n const handleOnAddNewClaim = () => {\n const newClaim = { type: '', date: '', amount: '' };\n const newLeadHomeData = R.clone(leadTypeFields);\n\n newLeadHomeData.claims.push(newClaim);\n\n setLeadTypeFields(newLeadHomeData);\n };\n\n const handleOnChangeClaim = (key, index, value) => {\n const newClaims = R.clone(leadTypeFields.claims);\n\n newClaims[index - 1][key] = value;\n\n setLeadTypeFields({\n ...leadTypeFields,\n claims: newClaims,\n });\n };\n const handleOnDeleteClaim = (index) => {\n let newClaims = R.clone(leadTypeFields.claims);\n\n newClaims = newClaims.filter((claim, claimIndex) => claimIndex !== index - 1);\n\n setLeadTypeFields({\n ...leadTypeFields,\n claims: newClaims,\n });\n };\n\n useEventSubscription(OnLeadsHomeUpdateEvent, (data) => {\n setLoading(false);\n setIsOpenForm(false);\n setLeadTypeInfo(data.leadTypeHomeUpdate);\n });\n\n useEventSubscription(OnLeadsHomeError, (err) => {\n setLoading(false);\n onErrorMixinFC(err);\n });\n\n return (\n <>\n setIsOpenForm(true)}>\n \n {leadTypeInfo &&\n formatData(leadTypeInfo).map((row, i) => {\n return (\n \n \n {row.map((column, j) => {\n return (\n \n {column.label}\n {column.value}\n \n );\n })}\n \n \n );\n })}\n \n {leadTypeFields.claims.map((claim, claimIndex) => {\n return (\n <>\n Claim #{claimIndex + 1}\n \n {Object.keys(claim).map((key) => {\n return (\n \n {capitalize(key)}\n {claim[key]}\n \n );\n })}\n \n >\n );\n })}\n \n setIsOpenForm(false)}\n />\n >\n );\n};\n\nLeadTypeHomeInfo.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n};\n\nexport default LeadTypeHomeInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport FormFields from '../../../../shared/components/forms/FormFields';\n\n/**\n * Lead type workers compensation form\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n * @param {Function} props.onChangeInput handle for onChange input\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeWorkersCompensationForm = ({ leadTypeData, onChangeInput }) => {\n const rows = [\n [\n {\n key: 'annualPayroll',\n label: 'Annual Payroll',\n type: 'number',\n },\n {\n key: 'companyName',\n label: 'Company Name',\n type: 'text',\n },\n ],\n [\n {\n key: 'natureOfBusiness',\n label: 'Nature Of Business',\n type: 'text',\n },\n {\n key: 'numberOfEmployees',\n label: 'Number Of Employees',\n type: 'number',\n },\n ],\n [\n {\n key: 'policyExpirationDate',\n label: 'Policy Expiration Date',\n type: 'date',\n },\n ],\n ];\n\n return ;\n};\n\nLeadTypeWorkersCompensationForm.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n};\n\nexport default LeadTypeWorkersCompensationForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadTypeWorkersCompensationForm from './LeadTypeWorkersCompensationForm';\n\n/**\n * Lead type workers compensation dialog that contains the form\n *\n * @param {object} props component props\n * @param {boolean} props.isOpen dialog open value\n * @param {boolean} props.isUpdate bool for change the title of the dialog\n * @param {boolean} props.loading bool for indicates if the request is loading\n * @param {Function} props.onSubmit handle for on submit form\n * @param {object} props.leadTypeData lead type workers compensation data\n * @param {Function} props.onCloseDialog handle for close the dialog\n * @param {Function} props.onChangeInput handle on change for the fields\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeWorkersCompensationFormDialog = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadTypeData,\n onCloseDialog,\n onChangeInput,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadTypeWorkersCompensationFormDialog.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadTypeWorkersCompensationFormDialog.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadTypeWorkersCompensationFormDialog;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnLeadsWorkersCompensationUpdateEvent = createEvent();\n\nexport const OnLeadsWorkersCompensationError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from 'shared/session/session-events';\nimport { LEAD_TYPE_WORKERS_COMPENSATION_UPDATE_MUTATION } from './leads-type-workers-compensation-queries';\nimport { leadWorkersCompensationValidations } from './leads-type-workers-compensation-utils';\nimport {\n OnLeadsWorkersCompensationError,\n OnLeadsWorkersCompensationUpdateEvent,\n} from './leads-type-workers-compensation-events';\n\n/**\n * Update a lead type workers compensation\n *\n * @param {object} leadWorkersCompensation lead type workers compensation\n * @returns {object} response data\n */\nexport const updateLeadWorkersCompensation = async (leadWorkersCompensation) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadWorkersCompensationValidations(leadWorkersCompensation);\n } catch (e) {\n error('updateWorkersCompensation', e);\n\n return OnLeadsWorkersCompensationError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEAD_TYPE_WORKERS_COMPENSATION_UPDATE_MUTATION,\n variables: { data: leadWorkersCompensation },\n });\n } catch (e) {\n error('updateWorkersCompensation', e);\n\n return OnLeadsWorkersCompensationError.dispatch(e);\n }\n\n log('updateWorkersCompensation', response);\n OnLeadsWorkersCompensationUpdateEvent.dispatch(response.data);\n\n return response.data;\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as R from 'ramda';\nimport LeadTypeWorkersCompensationFormDialog from './LeadTypeWorkersCompensationDialogForm';\nimport { updateLeadWorkersCompensation } from '../leads-type-workers-compensation-actions';\nimport { onErrorMixinFC, onChangeDataHookMixin } from '../../../../shared/mixins';\nimport {\n formatData,\n leadWorkersCompensationMap,\n leadWorkersCompensationCreateMap,\n} from '../leads-type-workers-compensation-utils';\nimport { ColumnInfo, ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport PaperInfo from '../../components/PaperInfo';\nimport {\n OnLeadsWorkersCompensationError,\n OnLeadsWorkersCompensationUpdateEvent,\n} from '../leads-type-workers-compensation-events';\n\n/**\n * Lead type workers compensation table info component\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeWorkersCompensationInfo = ({ leadTypeData }) => {\n const [loading, setLoading] = useState(false);\n const [leadTypeInfo, setLeadTypeInfo] = useState(R.clone(leadTypeData));\n const [leadTypeFields, setLeadTypeFields] = useState(\n leadWorkersCompensationMap(R.clone(leadTypeData)),\n );\n const [isOpenForm, setIsOpenForm] = useState(false);\n const handleOnSubmitForm = () => {\n const leadWorkersCompensationToUpdate = {\n id: leadTypeFields.id,\n ...leadWorkersCompensationCreateMap(leadTypeFields),\n };\n\n setLoading(true);\n updateLeadWorkersCompensation(leadWorkersCompensationToUpdate);\n };\n const handleOnChangeInput = (value, key) => {\n onChangeDataHookMixin(leadTypeFields, setLeadTypeFields, key, value);\n };\n\n useEventSubscription(OnLeadsWorkersCompensationUpdateEvent, (data) => {\n setLoading(false);\n setIsOpenForm(false);\n setLeadTypeInfo(data.leadTypeWorkersCompensationUpdate);\n });\n\n useEventSubscription(OnLeadsWorkersCompensationError, (err) => {\n setLoading(false);\n onErrorMixinFC(err);\n });\n\n return (\n <>\n setIsOpenForm(true)}>\n \n {leadTypeInfo &&\n formatData(leadTypeInfo).map((row, i) => {\n return (\n \n \n {row.map((column, j) => {\n return (\n \n {column.label}\n {column.value}\n \n );\n })}\n \n \n );\n })}\n \n \n setIsOpenForm(false)}\n />\n >\n );\n};\n\nLeadTypeWorkersCompensationInfo.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n};\n\nexport default LeadTypeWorkersCompensationInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport FormFields from '../../../../shared/components/forms/FormFields';\n\nconst LeadTypeEmployeeBenefitsForm = ({ leadTypeData, onChangeInput }) => {\n const rows = [\n [\n {\n key: 'annualPayroll',\n label: 'Annual Payroll',\n type: 'text',\n },\n {\n key: 'companyName',\n label: 'Company Name',\n type: 'text',\n },\n ],\n [\n {\n key: 'natureOfBusiness',\n label: 'Nature Of Business',\n type: 'text',\n },\n {\n key: 'numberOfEmployees',\n label: 'Number Of Employees',\n type: 'text',\n },\n ],\n ];\n\n return ;\n};\n\nLeadTypeEmployeeBenefitsForm.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n};\n\nexport default LeadTypeEmployeeBenefitsForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadTypeEmployeeBenefitsForm from './LeadTypeEmployeeBenefitsForm';\n\n/**\n * Lead type employee benefits dialog that contains the form\n *\n * @param {object} props component props\n * @param {boolean} props.isOpen dialog open value\n * @param {boolean} props.isUpdate bool for change the title of the dialog\n * @param {boolean} props.loading bool for indicates if the request is loading\n * @param {Function} props.onSubmit handle for on submit form\n * @param {object} props.leadTypeData lead type employee benefits data\n * @param {Function} props.onCloseDialog handle for close the dialog\n * @param {Function} props.onChangeInput handle on change for the fields\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeEmployeeBenefitsFormDialog = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadTypeData,\n onCloseDialog,\n onChangeInput,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadTypeEmployeeBenefitsFormDialog.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadTypeData: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadTypeEmployeeBenefitsFormDialog.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadTypeEmployeeBenefitsFormDialog;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnLeadsEmployeeBenefitsUpdateEvent = createEvent();\n\nexport const OnLeadsEmployeeBenefitsError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from 'shared/session/session-events';\nimport { LEAD_TYPE_EMPLOYEE_BENEFITS_UPDATE_MUTATION } from './leads-type-employee-benefits-queries';\nimport { leadEmployeeBenefitsValidations } from './leads-type-employee-benefits-utils';\nimport {\n OnLeadsEmployeeBenefitsError,\n OnLeadsEmployeeBenefitsUpdateEvent,\n} from './leads-type-employee-benefits-events';\n\n/**\n * Update a lead type employee benefits\n *\n * @param {object} leadEmployeeBenefits lead type employee benefits\n * @returns {object} response data\n */\nexport const updateLeadEmployeeBenefits = async (leadEmployeeBenefits) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadEmployeeBenefitsValidations(leadEmployeeBenefits);\n } catch (e) {\n error('updateEmployeeBenefits', e);\n\n return OnLeadsEmployeeBenefitsError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEAD_TYPE_EMPLOYEE_BENEFITS_UPDATE_MUTATION,\n variables: { data: leadEmployeeBenefits },\n });\n } catch (e) {\n error('updateEmployeeBenefits', e);\n\n return OnLeadsEmployeeBenefitsError.dispatch(e);\n }\n\n log('updateEmployeeBenefits', response);\n OnLeadsEmployeeBenefitsUpdateEvent.dispatch(response.data);\n return response.data;\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as R from 'ramda';\nimport LeadTypeEmployeeBenefitsFormDialog from './LeadTypeEmployeeBenefitsDialogForm';\nimport { updateLeadEmployeeBenefits } from '../leads-type-employee-benefits-actions';\nimport { onErrorMixinFC, onChangeDataHookMixin } from '../../../../shared/mixins';\nimport {\n formatData,\n leadEmployeeBenefitsMap,\n leadEmployeeBenefitsCreateMap,\n} from '../leads-type-employee-benefits-utils';\nimport { ColumnInfo, ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport PaperInfo from '../../components/PaperInfo';\nimport {\n OnLeadsEmployeeBenefitsError,\n OnLeadsEmployeeBenefitsUpdateEvent,\n} from '../leads-type-employee-benefits-events';\n\n/**\n * Lead type employee benefits table info component\n *\n * @param {object} props component props\n * @param {object} props.leadTypeData data\n *\n * @returns {React.FC} The react component\n */\nconst LeadTypeEmployeeBenefitsInfo = ({ leadTypeData }) => {\n const [loading, setLoading] = useState(false);\n const [leadTypeInfo, setLeadTypeInfo] = useState(R.clone(leadTypeData));\n const [leadTypeFields, setLeadTypeFields] = useState(\n leadEmployeeBenefitsMap(R.clone(leadTypeData)),\n );\n const [isOpenForm, setIsOpenForm] = useState(false);\n const handleOnSubmitForm = () => {\n const leadEmployeeBenefitsToUpdate = {\n id: leadTypeFields.id,\n ...leadEmployeeBenefitsCreateMap(leadTypeFields),\n };\n\n setLoading(true);\n updateLeadEmployeeBenefits(leadEmployeeBenefitsToUpdate);\n };\n const handleOnChangeInput = (value, key) => {\n onChangeDataHookMixin(leadTypeFields, setLeadTypeFields, key, value);\n };\n\n useEventSubscription(OnLeadsEmployeeBenefitsUpdateEvent, (data) => {\n setLoading(false);\n setIsOpenForm(false);\n setLeadTypeInfo(data.leadTypeEmployeeBenefitUpdate);\n });\n\n useEventSubscription(OnLeadsEmployeeBenefitsError, (err) => {\n setLoading(false);\n onErrorMixinFC(err);\n });\n\n return (\n <>\n setIsOpenForm(true)}>\n \n {leadTypeInfo &&\n formatData(leadTypeInfo).map((row, i) => {\n return (\n \n \n {row.map((column, j) => {\n return (\n \n {column.label}\n {column.value}\n \n );\n })}\n \n \n );\n })}\n \n \n setIsOpenForm(false)}\n />\n >\n );\n};\n\nLeadTypeEmployeeBenefitsInfo.propTypes = {\n leadTypeData: PropTypes.object.isRequired,\n};\n\nexport default LeadTypeEmployeeBenefitsInfo;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport {} from '@8base/boost';\nimport { TextContact, PriorityBadge, OptionsDropdown } from '../../../shared/components';\nimport moment from 'moment';\nimport { TextContactHeader } from 'shared/components/ui/text/TextContact';\n\nconst MiniCardContainer = styled.div`\n padding: 8px 16px;\n`;\n\nconst MiniCardHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst MiniCardTitle = styled.span`\n & span {\n font-weight: 600 !important;\n }\n`;\n\nconst MiniCardFooter = styled.div`\n display: flex;\n margin-top: 20px;\n`;\n\nconst TypeBox = styled.div`\n margin-right: auto;\n color: #9b9b9b;\n border-radius: 5px;\n padding: 2px 10px;\n font-size: 11px;\n background-color: #f4f5f6;\n display: flex;\n align-items: center;\n`;\n\nconst MiniCard = ({ data, options, canSeeOptions }) => {\n const { createdAt, title, priority, description, type, notes, createdBy } = data;\n const formatedDate = moment(createdAt).format('MM/DD/YYYY, hh:mm a');\n const firstName = createdBy?.firstName || '';\n const lastName = createdBy?.lastName || '';\n\n let typeBox;\n if (type) {\n typeBox = {type.name};\n }\n\n let priorityBadge;\n if (priority) {\n priorityBadge = ;\n }\n\n let optionsDropdown;\n if (canSeeOptions) {\n optionsDropdown = ;\n }\n\n return (\n \n \n \n {`${notes ? 'Disposition Note' : 'Lead Note'}`}\n \n {`${title || notes}`}\n \n {`${firstName} ${lastName} ${formatedDate}`}\n \n \n {optionsDropdown}\n \n {description}\n \n {typeBox}\n {priorityBadge}\n \n \n );\n};\n\nMiniCard.defaultProps = {\n canSeeOptions: false,\n};\n\nMiniCard.propTypes = {\n data: PropTypes.object.isRequired,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n danger: PropTypes.bool,\n }),\n ).isRequired,\n canSeeOptions: PropTypes.bool,\n};\n\nexport default MiniCard;\n","import React, { useEffect, useMemo, useState, useCallback } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport PropTypes from 'prop-types';\nimport { Row, Heading, Icon, Loader, useModal } from '@8base/boost';\nimport NoteForm from './forms/NoteForm';\nimport { modalId } from '../../../shared/components/dialog/DecisionDialog';\nimport { fetchLeadNotes, deleteNote } from '../leads-notes/leads-notes-actions';\nimport { canSeeTaskAndNotesOptions } from '../lead-details-utils';\nimport {\n OnFetchLeadNotes,\n OnFetchLeadNotesError,\n onLeadNoteUpdate,\n onLeadNoteDelete,\n OnNoteCreateEvent,\n OnNoteError,\n} from '../leads-notes/leads-notes-events';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { Box } from '../../../shared/components/Box';\nimport NoteItem from './MiniCardNotes';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport * as toast from '../../../shared/components/toast/Toast';\n\nconst LeadNotes = ({ id }) => {\n const [notes, setNotes] = useState([]);\n const [loading, setLoading] = useState(true);\n const [selected, setSelected] = useState(null);\n const [isOpen, setOpen] = useState(false);\n const { openModal, closeModal } = useModal(modalId);\n const [user] = useUser();\n const agency = useAgency();\n\n useEffect(() => {\n setLoading(true);\n\n fetchLeadNotes(id);\n }, [id]);\n\n const onCreate = useCallback(() => {\n setSelected(null);\n setOpen(true);\n }, []);\n\n const onUpdate = useCallback((note) => {\n setSelected(note);\n setOpen(true);\n }, []);\n\n const onDelete = useCallback(\n (note) => {\n openModal(modalId, {\n title: 'Delete note',\n text: 'Are you sure you want to delete this note ?',\n confirmText: 'Yes, Delete',\n cancelText: 'Cancel',\n onCancel: () => closeModal(modalId),\n onClose: () => closeModal(modalId),\n onConfirm: () => deleteNote(note.id),\n });\n },\n [openModal, closeModal],\n );\n\n const onClose = useCallback(() => {\n setOpen(false);\n setSelected(null);\n }, []);\n\n useSubscription(\n OnFetchLeadNotes,\n ({ leadNotesList, leadDispositionsList }) => {\n setNotes([...leadNotesList.items, ...leadDispositionsList.items]);\n\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchLeadNotesError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(OnNoteCreateEvent, () => {\n toast.success('Success', 'Note created successfully');\n\n setLoading(true);\n\n fetchLeadNotes(id);\n });\n\n useSubscription(\n onLeadNoteUpdate,\n () => {\n toast.success('Success', 'Note updated successfully');\n\n setLoading(true);\n\n fetchLeadNotes(id);\n },\n [],\n );\n\n useSubscription(\n onLeadNoteDelete,\n () => {\n toast.success('Success', 'Note deleted successfully');\n\n closeModal(modalId);\n\n setLoading(true);\n\n fetchLeadNotes(id);\n },\n [closeModal],\n );\n\n useSubscription(OnNoteError, (err) => {\n onErrorMixinFC(err);\n });\n\n const items = useMemo(\n () =>\n notes.map((note) => (\n onUpdate(note),\n },\n {\n label: 'Delete',\n onClick: () => onDelete(note),\n danger: true,\n },\n ]}\n canSeeOptions={canSeeTaskAndNotesOptions(user, agency)}\n data={note}\n />\n )),\n [notes, user, agency, onUpdate, onDelete],\n );\n\n const content = loading ? (\n \n \n \n ) : (\n items\n );\n\n return (\n \n \n \n Notes\n \n \n \n \n {content}\n \n \n \n );\n};\n\nLeadNotes.propTypes = {\n id: PropTypes.string.isRequired,\n};\n\nexport default LeadNotes;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { PropTypes } from 'prop-types';\nimport {} from '@8base/boost';\nimport { TextContact, PriorityBadge, OptionsDropdown } from '../../../shared/components';\nimport moment from 'moment';\n\nconst MiniCardContainer = styled.div`\n padding: 8px 16px;\n`;\n\nconst MiniCardHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst MiniCardTitle = styled.span`\n & span {\n font-weight: 600 !important;\n }\n`;\n\nconst MiniCardFooter = styled.div`\n display: flex;\n margin-top: 20px;\n`;\n\nconst TypeBox = styled.div`\n margin-right: auto;\n color: #9b9b9b;\n border-radius: 5px;\n padding: 2px 10px;\n font-size: 11px;\n background-color: #f4f5f6;\n display: flex;\n align-items: center;\n`;\n\nconst MiniCard = ({ data, options, canSeeOptions }) => {\n const { date, title, priority, description, type } = data;\n const formatedDate = moment(date).format('MM/DD/YYYY');\n\n let typeBox;\n if (type) {\n typeBox = {type.name};\n }\n\n let priorityBadge;\n if (priority) {\n priorityBadge = ;\n }\n\n let optionsDropdown;\n if (canSeeOptions) {\n optionsDropdown = ;\n }\n\n return (\n \n \n \n {`${title} - ${formatedDate}`}\n \n {optionsDropdown}\n \n {description}\n \n {typeBox}\n {priorityBadge}\n \n \n );\n};\n\nMiniCard.defaultProps = {\n canSeeOptions: false,\n};\n\nMiniCard.propTypes = {\n data: PropTypes.object.isRequired,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n danger: PropTypes.bool,\n }),\n ).isRequired,\n canSeeOptions: PropTypes.bool,\n};\n\nexport default MiniCard;\n","import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { Heading, Row, Icon, Loader, useModal } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport TaskForm from './forms/TaskForm';\nimport { fetchLeadTasks } from '../leads-actions';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnFetchLeadTasks, OnFetchLeadTasksError } from '../leads-store';\nimport { canSeeTaskAndNotesOptions } from '../lead-details-utils';\nimport { deleteLeadTask } from '../../lead-task/lead-task-actions';\nimport TaskItem from './MiniCard';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { modalId } from '../../../shared/components/dialog/DecisionDialog';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport { onTaskCreate, onTaskUpdateEvent } from '../leads-events';\nimport { OnLeadTaskDelete } from 'modules/lead-task/lead-task-events';\n\nconst LeadTasks = ({ id, users }) => {\n const [tasks, setTasks] = useState([]);\n const [loading, setLoading] = useState(true);\n const [isOpen, setOpen] = useState(false);\n const [selected, setSelected] = useState(null);\n const { openModal, closeModal } = useModal(modalId);\n const [user] = useUser();\n const agency = useAgency();\n\n useEffect(() => {\n setLoading(true);\n\n fetchLeadTasks(id);\n }, [id]);\n\n const onCreate = useCallback(() => {\n setSelected(null);\n setOpen(true);\n }, []);\n\n const onUpdate = useCallback((task) => {\n setSelected(task);\n setOpen(true);\n }, []);\n\n const onDelete = useCallback(\n (task) => {\n openModal(modalId, {\n title: 'Delete Task',\n text: 'Are you sure you want to delete this task ?',\n confirmText: 'Yes, Delete',\n cancelText: 'Cancel',\n onClose: () => closeModal(modalId),\n onCancel: () => closeModal(modalId),\n onConfirm: () => deleteLeadTask(task.id),\n });\n },\n [openModal, closeModal],\n );\n\n const onClose = useCallback(() => {\n setOpen(false);\n setSelected(null);\n }, []);\n\n useSubscription(\n OnFetchLeadTasks,\n ({ leadTasksList }) => {\n setTasks(leadTasksList.items);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchLeadTasksError,\n (e) => {\n setLoading(false);\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(onTaskCreate, () => {\n setLoading(true);\n\n fetchLeadTasks(id);\n });\n\n useSubscription(onTaskUpdateEvent, () => {\n setLoading(true);\n\n fetchLeadTasks(id);\n });\n\n useSubscription(OnLeadTaskDelete, () => {\n setLoading(true);\n\n fetchLeadTasks(id);\n\n closeModal(modalId);\n });\n\n const items = useMemo(\n () =>\n tasks.map((task) => (\n onUpdate(task),\n },\n {\n label: 'Delete',\n onClick: () => onDelete(task),\n danger: true,\n },\n ]}\n canSeeOptions={canSeeTaskAndNotesOptions(user, agency)}\n key={task.id}\n data={task}\n />\n )),\n [tasks, user, agency, onUpdate, onDelete],\n );\n\n const content = loading ? (\n \n \n \n ) : (\n items\n );\n\n return (\n \n \n \n Tasks\n \n \n \n \n {content}\n \n {isOpen && (\n \n )}\n \n );\n};\n\nLeadTasks.propTypes = {\n id: PropTypes.string.isRequired,\n users: PropTypes.arrayOf(PropTypes.object).isRequired,\n};\n\nexport default LeadTasks;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Grid } from '@8base/boost';\nimport { GENDER_OPTIONS, STATES_OPTIONS } from '../../leads-model';\nimport Field from '../../../../shared/components/Field';\n\nconst sections = [\n {\n title: 'Personal Data',\n rows: [\n [\n {\n label: 'First Name',\n type: 'text',\n key: 'firstName',\n },\n {\n label: 'Last Name',\n type: 'text',\n key: 'lastName',\n },\n {\n label: 'Email',\n type: 'text',\n key: 'email',\n },\n ],\n [\n {\n label: 'Birth Date',\n type: 'date',\n key: 'birthDate',\n },\n {\n label: 'Gender',\n type: 'select',\n key: 'gender',\n options: GENDER_OPTIONS,\n },\n {\n label: 'Marital Status',\n type: 'select',\n key: 'maritalStatus',\n options: [\n { label: 'WIDOW', value: 'WIDOW' },\n { label: 'SINGLE', value: 'SINGLE' },\n { label: 'MARRIED', value: 'MARRIED' },\n ],\n },\n ],\n [\n {\n label: 'Age First Licensed',\n type: 'date',\n key: 'ageFirstLicensed',\n },\n {\n label: 'Licensed State',\n type: 'select',\n key: 'licensedState',\n options: STATES_OPTIONS,\n },\n {\n label: 'Licensed Status',\n type: 'text',\n key: 'licenseStatus',\n },\n ],\n [\n {\n label: 'Fulltime Student',\n type: 'checkbox',\n key: 'fullTimeStudent',\n },\n {\n label: 'Education',\n type: 'text',\n key: 'education',\n },\n {\n label: 'Occupation',\n type: 'text',\n key: 'occupation',\n },\n ],\n [\n {\n label: 'Relationship To Applicant',\n type: 'text',\n key: 'relationshipToApplicant',\n },\n {\n label: 'Credit Rating',\n type: 'text',\n key: 'creditRating',\n },\n ],\n ],\n },\n {\n title: 'Contact Data',\n rows: [\n [\n {\n label: 'Cell Phone',\n type: 'text',\n key: 'cellPhone',\n },\n {\n label: 'Daytime Phone',\n type: 'text',\n key: 'daytimePhone',\n },\n {\n label: 'Evening Phone',\n type: 'text',\n key: 'eveningPhone',\n },\n ],\n [\n {\n label: 'Preferred Contact Number',\n type: 'text',\n key: 'preferredContactNumber',\n },\n {\n label: 'Preferred Contact Time',\n type: 'date',\n key: 'preferredContactTime',\n },\n ],\n ],\n },\n {\n title: 'Vehicle Data',\n rows: [\n [\n {\n label: 'Make Of Vehicle',\n type: 'text',\n key: 'makeOfVehicle',\n },\n {\n label: 'Model Of Vehicle',\n type: 'text',\n key: 'modelOfVehicle',\n },\n {\n label: 'Year Of Vehicle',\n type: 'text',\n key: 'yearOfVehicle',\n },\n ],\n [\n {\n label: 'Trim',\n type: 'text',\n key: 'trim',\n },\n {\n label: 'Style',\n type: 'text',\n key: 'style',\n },\n {\n label: 'Ownership',\n type: 'text',\n key: 'ownership',\n },\n ],\n [\n {\n label: 'Primary Use',\n type: 'text',\n key: 'primaryUse',\n },\n {\n label: 'Average One Way Mileage',\n type: 'text',\n key: 'averageOneWayMileage',\n },\n {\n label: 'Annual Mileage',\n type: 'text',\n key: 'annualMileage',\n },\n ],\n [\n {\n label: 'Vehicle Parking',\n type: 'text',\n key: 'vehicleParking',\n },\n {\n label: 'Anti Lock Breaks',\n type: 'text',\n key: 'antiLockBreaks',\n },\n {\n label: 'Security System',\n type: 'text',\n key: 'securitySystem',\n },\n ],\n [\n {\n label: 'salvagedVehicle',\n type: 'text',\n key: 'salvagedVehicle',\n },\n ],\n ],\n },\n {\n title: 'Residence Data',\n rows: [\n [\n {\n label: 'Years At Current Residence',\n type: 'text',\n key: 'yearsAtCurrentResidence',\n },\n {\n label: 'City',\n type: 'text',\n key: 'city',\n },\n {\n label: 'State',\n type: 'text',\n key: 'state',\n },\n ],\n [\n {\n label: 'Address Line 1',\n type: 'text',\n key: 'street1',\n },\n {\n label: 'Address Line 2',\n type: 'text',\n key: 'street2',\n },\n {\n label: 'zip',\n type: 'text',\n key: 'zip',\n },\n ],\n ],\n },\n {\n title: 'Insurance Data',\n rows: [\n [\n {\n label: 'Insurance Company',\n type: 'text',\n key: 'insuranceCompany',\n },\n {\n label: 'Continuously Insured Years',\n type: 'text',\n key: 'continuouslyInsuredYears',\n },\n {\n label: 'Continuously Insured Months',\n type: 'text',\n key: 'continuouslyInsuredMonths',\n },\n ],\n [\n {\n label: 'Current Insurance Company Years',\n type: 'text',\n key: 'currentInsuranceCompanyYears',\n },\n {\n label: 'Current Insurance Company Months',\n type: 'text',\n key: 'currentInsuranceCompanyMonths',\n },\n {\n label: 'Insured In The Past 30 Days',\n type: 'checkbox',\n key: 'insuredPast30Days',\n },\n ],\n ],\n },\n {\n title: 'Other Data',\n rows: [\n [\n {\n label: 'Years In Field',\n type: 'text',\n key: 'yearsInField',\n },\n {\n label: 'Policy Expiration Date',\n type: 'text',\n key: 'policyExpirationDate',\n },\n {\n label: 'How Many Incidents Past 5 Years',\n type: 'text',\n key: 'howManyIncidentsInThePast5Years',\n },\n ],\n [\n {\n label: 'Incidents Past 5 Years',\n type: 'text',\n key: 'incidentsPast5Years',\n },\n {\n label: 'Violations Past 5 Years',\n type: 'text',\n key: 'violationsPast5Years',\n },\n {\n label: 'Activity Past 5 Years',\n type: 'text',\n key: 'activityPast5Years',\n },\n ],\n [\n {\n label: 'Vin',\n type: 'text',\n key: 'vin',\n },\n {\n label: 'Tickets Accidents Claims Past 3 Years',\n type: 'checkbox',\n key: 'ticketsAccidentsClaimsPast3Years',\n },\n {\n label: 'Additional Drivers',\n type: 'checkbox',\n key: 'additionalDrivers',\n },\n ],\n [\n {\n label: 'Additional Vehicles',\n type: 'checkbox',\n key: 'additionalVehicles',\n },\n {\n label: 'Completed Behind The Wheel',\n type: 'checkbox',\n key: 'completedBehindTheWheel',\n },\n {\n label: 'Current Bodily Injury Coverages',\n type: 'text',\n key: 'currentBodilyInjuryCoverages',\n },\n ],\n [\n {\n label: 'Current Property Damage Coverages',\n type: 'text',\n key: 'currentPropertyDamageCoverages',\n },\n {\n label: 'Current Coverage Level',\n type: 'text',\n key: 'currentCoverageLevel',\n },\n {\n label: 'Coverage Level',\n type: 'text',\n key: 'coverageLevel',\n },\n ],\n [\n {\n label: 'Current Comprehensive Deductible',\n type: 'text',\n key: 'currentComprehensiveDeductible',\n },\n {\n label: 'Current Collision Deductible',\n type: 'text',\n key: 'currentCollisionDeductible',\n },\n {\n label: 'Filling Required',\n type: 'text',\n key: 'fillingRequired',\n },\n ],\n [\n {\n label: 'Bankruptcy In Past 5 Years',\n type: 'checkbox',\n key: 'bankruptcyInPast5Years',\n },\n {\n label: 'Multiple Policy Discount',\n type: 'text',\n key: 'multiplePolicyDiscount',\n },\n {\n label: 'eNewsletter',\n type: 'text',\n key: 'eNewsletter',\n },\n ],\n [\n {\n label: 'Suspended Or Revoked In The Past 5 Years',\n type: 'checkbox',\n key: 'suspendedOrRevokedInThePast5Years',\n },\n {\n label: 'DUIDWI In The Past 5 Years',\n type: 'date',\n key: 'dUIDWIInThePast5Years',\n },\n {\n label: 'Date Of DUIDWI',\n type: 'date',\n key: 'dateOfDUIDWI',\n },\n ],\n [\n {\n label: 'Desired Collision Coverage',\n type: 'text',\n key: 'desiredCollisionCoverage',\n },\n {\n label: 'Desired Comprehensive Coverage',\n type: 'text',\n key: 'desiredComprehensiveCoverage',\n },\n {\n label: 'Average Days Per Week Used',\n type: 'text',\n key: 'averageDaysPerWeekUsed',\n },\n ],\n [\n {\n label: 'Primary Driver',\n type: 'text',\n key: 'primaryDriver',\n },\n ],\n ],\n },\n];\n\n/**\n * Lead driver form\n *\n * @param {object} props component props\n * @param {object} props.leadDriver lead driver data\n * @param {Function} props.onBlurInput handle on blur for the fields\n * @returns {React.ReactElement} component\n */\nconst LeadDriverForm = ({ leadDriver, onBlurInput }) => {\n return (\n \n {sections.map((section, i) => {\n return (\n \n {section.title}\n \n {section.rows.map((row, j) => {\n return (\n \n {row.map((field, k) => {\n return (\n \n {\n onBlurInput(field.key, { target: { value } });\n },\n }\n : {})}\n />\n \n );\n })}\n \n );\n })}\n \n \n );\n })}\n \n );\n};\n\nLeadDriverForm.propTypes = {\n leadDriver: PropTypes.object.isRequired,\n onBlurInput: PropTypes.func.isRequired,\n};\n\nexport default LeadDriverForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DialogForm } from 'shared/components';\nimport LeadDriverForm from './LeadDriverForm';\n\n/**\n * Lead driver dialog that contains the form\n *\n * @param {object} props component props\n * @param {boolean} props.isOpen dialog open value\n * @param {boolean} props.isUpdate bool for change the title of the dialog\n * @param {boolean} props.loading bool for indicates if the request is loading\n * @param {Function} props.onSubmit handle for on submit form\n * @param {object} props.leadDriver lead driver data\n * @param {Function} props.onCloseDialog handle for close the dialog\n * @param {Function} props.onBlurInput handle on change for the fields\n * @returns {React.ReactElement} component\n */\nconst LeadDriverDialogForm = ({\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n leadDriver,\n onCloseDialog,\n onBlurInput,\n}) => {\n return (\n \n \n \n );\n};\n\nLeadDriverDialogForm.propTypes = {\n isUpdate: PropTypes.bool,\n isOpen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n leadDriver: PropTypes.object.isRequired,\n onBlurInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nLeadDriverDialogForm.defaultProps = {\n isUpdate: false,\n};\n\nexport default LeadDriverDialogForm;\n","import moment from 'moment';\n\nexport const LEAD_DRIVER = {\n // Personal Data\n firstName: '',\n lastName: '',\n email: '',\n birthDate: moment().format('YYYY-MM-DD'),\n gender: '',\n maritalStatus: '',\n ageFirstLicensed: moment().format('YYYY-MM-DD'),\n licensedState: '',\n licenseStatus: '',\n fullTimeStudent: false,\n education: '',\n occupation: '',\n creditRating: 0,\n relationshipToApplicant: '',\n // Contact Data\n cellPhone: '',\n daytimePhone: '',\n eveningPhone: '',\n preferredContactNumber: '',\n preferredContactTime: moment().format('YYYY-MM-DD'),\n // Vehicle Data\n makeOfVehicle: '',\n modelOfVehicle: '',\n yearOfVehicle: 0,\n trim: '',\n style: '',\n ownership: '',\n primaryUse: '',\n averageOneWayMileage: 0,\n annualMileage: 0,\n vehicleParking: '',\n antiLockBreaks: '',\n securitySystem: '',\n salvagedVehicle: '',\n // Residence Data\n yearsAtCurrentResidence: 0,\n city: '',\n state: '',\n street1: '',\n street2: '',\n zip: '',\n // Insurance Data\n insuranceCompany: '',\n continuouslyInsuredYears: 0,\n continuouslyInsuredMonths: 0,\n currentInsuranceCompanyYears: 0,\n currentInsuranceCompanyMonths: 0,\n insuredPast30Days: false,\n // Other Data\n yearsInField: 0,\n policyExpirationDate: moment().format('YYYY-MM-DD'),\n howManyIncidentsInThePast5Years: 0,\n incidentsPast5Years: '',\n violationsPast5Years: '',\n activityPast5Years: '',\n vin: '',\n ticketsAccidentsClaimsPast3Years: true,\n additionalDrivers: false,\n additionalVehicles: false,\n completedBehindTheWheel: false,\n currentBodilyInjuryCoverages: '',\n currentPropertyDamageCoverages: '',\n currentCoverageLevel: '',\n coverageLevel: '',\n currentComprehensiveDeductible: 0,\n currentCollisionDeductible: '',\n fillingRequired: '',\n bankruptcyInPast5Years: false,\n multiplePolicyDiscount: '',\n eNewsletter: 0,\n suspendedOrRevokedInThePast5Years: false,\n dUIDWIInThePast5Years: moment().format('YYYY-MM-DD'),\n dateOfDUIDWI: moment().format('YYYY-MM-DD'),\n desiredCollisionCoverage: 0,\n desiredComprehensiveCoverage: 0,\n averageDaysPerWeekUsed: 0,\n primaryDriver: '',\n};\n","import Flux from '@cobuildlab/flux-state';\nimport { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchLeadDrivers = createEvent();\n\nexport const OnFetchLeadDriversError = createEvent();\n\n/**\n * Event that triggers an error.\n *\n * @type {string}\n */\nexport const LEAD_DRIVER_ERROR_EVENT = 'onLeadDriverError';\n\n/**\n * Event that triggers a Lead Driver create event.\n *\n * @type {string}\n */\nexport const LEAD_DRIVER_CREATE_EVENT = 'onLeadDriverCreate';\n\n/**\n * Event that triggers a Lead Driver update event.\n *\n * @type {string}\n */\nexport const LEAD_DRIVER_UPDATE_EVENT = 'onLeadDriverUpdate';\n\n/**\n * Event that triggers a Lead Driver delete event.\n *\n * @type {string}\n */\nexport const LEAD_DRIVER_DELETE_EVENT = 'onLeadDriverDelete';\n\nclass LeadDriverStore extends Flux.DashStore {\n constructor() {\n super();\n this.addEvent(LEAD_DRIVER_ERROR_EVENT);\n this.addEvent(LEAD_DRIVER_UPDATE_EVENT);\n this.addEvent(LEAD_DRIVER_CREATE_EVENT);\n this.addEvent(LEAD_DRIVER_DELETE_EVENT);\n }\n}\n\nexport default new LeadDriverStore();\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnLeadDriverCreateEvent = createEvent();\n\nexport const OnLeadDriverCreateError = createEvent();\n\nexport const OnLeadDriverUpdateEvent = createEvent();\n\nexport const OnLeadDriverDeleteEvent = createEvent();\n\nexport const OnLeadDriverError = createEvent();\n","import { createAction } from '@cobuildlab/react-simple-state';\nimport { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport {\n LEAD_DRIVER_UPDATE_MUTATION,\n LEAD_DRIVER_CREATE_MUTATION,\n LEAD_DRIVER_DELETE_MUTATION,\n FETCH_LEAD_DRIVERS,\n} from './leads-drivers-queries';\nimport { OnFetchLeadDrivers, OnFetchLeadDriversError } from './leads-drivers-store';\nimport { sanitize8BaseReference } from '../../../shared/utils';\nimport { leadDriverValidations } from './leads-drivers-utils';\nimport {\n OnLeadDriverCreateError,\n OnLeadDriverCreateEvent,\n OnLeadDriverDeleteEvent,\n OnLeadDriverError,\n OnLeadDriverUpdateEvent,\n} from './leads-driver-events';\n\n/**\n * Fetches the drivers for the specified lead\n *\n * @param {string} id - The lead id\n *\n * @returns {Promise} The request result\n */\nexport const fetchLeadDrivers = createAction(\n OnFetchLeadDrivers,\n OnFetchLeadDriversError,\n async (id) => {\n const client = OnApolloClient.get();\n\n const { data } = await client.query({\n query: FETCH_LEAD_DRIVERS,\n fetchPolicy: 'network-only',\n variables: {\n id,\n },\n });\n\n return {\n leadDriversList: {\n items: data.lead.drivers.items,\n },\n };\n },\n);\n\n/**\n * Creates a lead driver\n *\n * @param {object} leadDriver lead driver to create\n * @returns {object} response data\n */\nexport const createLeadDriver = async (leadDriver) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadDriverValidations(leadDriver);\n } catch (e) {\n error('createLeadDriver', e);\n\n return OnLeadDriverError.dispatch(e);\n }\n\n sanitize8BaseReference(leadDriver, 'driversLeadRelation');\n\n try {\n response = await client.mutate({\n mutation: LEAD_DRIVER_CREATE_MUTATION,\n variables: { data: leadDriver },\n });\n } catch (e) {\n error('createLeadDriver', e);\n\n return OnLeadDriverCreateError.dispatch(response.data);\n }\n\n log('createLeadDriver', response);\n OnLeadDriverCreateEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Update a lead driver\n *\n * @param {object} leadDriver lead driver to update\n * @returns {object} response data\n */\nexport const updateLeadDriver = async (leadDriver) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n leadDriverValidations(leadDriver);\n } catch (e) {\n error('updateLeadDriver', e);\n\n return OnLeadDriverError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: LEAD_DRIVER_UPDATE_MUTATION,\n variables: { data: leadDriver },\n });\n } catch (e) {\n error('updateLeadDriver', e);\n\n return OnLeadDriverError.dispatch(e);\n }\n\n log('updateLeadDriver', response);\n OnLeadDriverUpdateEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Delete a lead driver\n *\n * @param {string} leadDriverId lead driver id to delete\n * @returns {object} response data\n */\nexport const deleteLeadDriver = async (leadDriverId) => {\n const client = OnApolloClient.get();\n let response;\n\n try {\n response = await client.mutate({\n mutation: LEAD_DRIVER_DELETE_MUTATION,\n variables: { data: { id: leadDriverId } },\n });\n } catch (e) {\n error('deleteLeadDriver', e);\n\n return OnLeadDriverError.dispatch(e);\n }\n\n log('deleteLeadDriver', response);\n OnLeadDriverDeleteEvent.dispatch(response.data);\n\n return response.data;\n};\n","import React, { useEffect, useState } from 'react';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport PropTypes from 'prop-types';\nimport PaperInfo from '../../components/PaperInfo';\nimport { styled, Grid } from '@8base/boost';\nimport { RowHeader, ColumnInfo, ColumnName, ColumnValue } from '../../components/ColumnInfo';\nimport { IconTrash, IconUpdate } from '../../../../shared/components/ui/Icons';\nimport { TextContact, YesNoDialog } from '../../../../shared/components';\nimport * as R from 'ramda';\nimport LeadDriverDialogForm from './LeadDriverDialogForm';\nimport { formatDriversData, driverMap, driverCreateMap } from '../leads-drivers-utils';\nimport { LEAD_DRIVER } from '../leads-drivers-model';\nimport {\n fetchLeadDrivers,\n updateLeadDriver,\n createLeadDriver,\n deleteLeadDriver,\n} from '../leads-drivers-actions';\nimport { OnFetchLeadDrivers, OnFetchLeadDriversError } from '../leads-drivers-store';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport * as toast from 'shared/components/toast/Toast';\nimport {\n OnLeadDriverCreateEvent,\n OnLeadDriverDeleteEvent,\n OnLeadDriverError,\n OnLeadDriverUpdateEvent,\n} from '../leads-driver-events';\n\nconst DriverHeader = styled(RowHeader)`\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n`;\n\nconst StyledMargin = styled.div`\n display: flex;\n justify-content: flex-end;\n margin: 0 6px;\n\n > img {\n margin: 0 5px;\n }\n`;\n\nconst LeadDriverInfo = ({ id }) => {\n const [drivers, setDrivers] = useState([]);\n const [loading, setLoading] = useState(true);\n const [leadDriver, setLeadDriver] = useState(R.clone(LEAD_DRIVER));\n const [isOpenLeadDriverForm, setIsOpenLeadDriverForm] = useState(false);\n const [loadingLeadDriver, setLoadingLeadDriver] = useState(false);\n const [loadingDeleteDriver, setLoadingDeleteDriver] = useState(false);\n const [isUpdateLeadDriver, setIsUpdateLeadDriver] = useState(false);\n const [isOpenLeadDriverDelete, setIsOpenLeadDriverDelete] = useState(false);\n\n useEffect(() => {\n setLoading(true);\n\n fetchLeadDrivers(id);\n }, [id]);\n\n useEventSubscription(\n OnFetchLeadDrivers,\n ({ leadDriversList }) => {\n setDrivers(leadDriversList.items);\n setLoading(false);\n },\n [],\n );\n\n useEventSubscription(\n OnFetchLeadDriversError,\n (e) => {\n onErrorMixinFC(e);\n setLoading(false);\n },\n [],\n );\n\n const handleOnBlur = (key, event) => {\n leadDriver[key] = event.target.value;\n };\n\n const handleOnSubmitLeadDriver = () => {\n const dataLeadDriver = driverCreateMap(leadDriver);\n\n setLoadingLeadDriver(true);\n\n if (isUpdateLeadDriver) {\n dataLeadDriver.id = leadDriver.id;\n\n updateLeadDriver(dataLeadDriver);\n } else {\n dataLeadDriver.driversLeadRelation = id;\n\n createLeadDriver(dataLeadDriver);\n }\n };\n const handleOnYesLeadDriverDelete = () => {\n setLoadingDeleteDriver(true);\n deleteLeadDriver(leadDriver.id);\n };\n const handleOnNoLeadDriverDelete = () => {\n setLeadDriver(R.clone(LEAD_DRIVER));\n setIsOpenLeadDriverDelete(false);\n };\n\n useEventSubscription(OnLeadDriverCreateEvent, () => {\n setLoadingLeadDriver(false);\n setIsOpenLeadDriverForm(false);\n\n setLoading(true);\n\n fetchLeadDrivers(id);\n\n toast.success('Lead Management', 'Lead Driver Successfully Created');\n });\n\n useEventSubscription(OnLeadDriverUpdateEvent, () => {\n setLoadingLeadDriver(false);\n setIsOpenLeadDriverForm(false);\n setIsUpdateLeadDriver(false);\n setLeadDriver(R.clone(LEAD_DRIVER));\n\n setLoading(true);\n\n fetchLeadDrivers(id);\n\n toast.success('Lead Management', 'Lead Driver Successfully Updated');\n });\n\n useEventSubscription(OnLeadDriverError, (err) => {\n onErrorMixinFC(err);\n setLoadingLeadDriver(false);\n });\n\n useEventSubscription(OnLeadDriverDeleteEvent, (err) => {\n setLeadDriver(R.clone(LEAD_DRIVER));\n setIsOpenLeadDriverDelete(false);\n setLoadingDeleteDriver(false);\n\n setLoading(true);\n\n fetchLeadDrivers(id);\n\n toast.success('Lead Management', 'Lead Driver Successfully Delete');\n });\n\n return (\n <>\n setIsOpenLeadDriverForm(true)}>\n {formatDriversData(drivers).map((driver, driverIndex) => {\n const driverData = drivers[driverIndex];\n const driverMapped = driverMap(driverData);\n\n return (\n \n \n {driver.header}\n \n {\n setLeadDriver(driverMapped);\n setIsOpenLeadDriverDelete(true);\n }}\n />\n {\n setLeadDriver(driverMapped);\n setIsUpdateLeadDriver(true);\n setIsOpenLeadDriverForm(true);\n }}\n />\n \n \n \n {driver.rows.map((row, rowIndex) => {\n return (\n \n \n {row.map((column, columnIndex) => {\n return (\n \n {column.label}\n \n {column.isTextContact ? (\n {column.value}\n ) : (\n column.value\n )}\n \n \n );\n })}\n \n \n );\n })}\n \n \n );\n })}\n \n {\n setIsOpenLeadDriverForm(false);\n setIsUpdateLeadDriver(false);\n setLeadDriver(R.clone(LEAD_DRIVER));\n }}\n />\n \n >\n );\n};\n\nLeadDriverInfo.propTypes = {\n id: PropTypes.string.isRequired,\n};\n\nexport default LeadDriverInfo;\n","import React, { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport { Box } from '../../shared/components/Box';\nimport { useHistory, useLocation, useParams } from 'react-router-dom';\nimport { Loader, Row, Text } from '@8base/boost';\nimport { LeadDetailsHeader } from './components/LeadDetailsHeader';\nimport { LeadAmountForm } from './components/forms/LeadAmountForm';\nimport { LeadStageForm } from './components/forms/LeadStageForm';\nimport { LeadCampaignForm } from './components/forms/LeadCampaignForm';\nimport { LeadAssigneesForm } from './components/forms/LeadAssigneesForm';\nimport { LeadInfoCard } from './components/forms/LeadInfoCard';\nimport LeadTypeAutoInfo from './leads-type-auto/components/LeadTypeAutoInfo';\nimport LeadTypeCommercialAutoInfo from './leads-type-commercial-auto/components/LeadTypeCommercialAutoInfo';\nimport LeadTypeGeneralLiabilityInfo from './leads-type-general-liability/components/LeadTypeGeneralLiabilityInfo';\nimport LeadTypeLifeInfo from './leads-type-life/components/LeadTypeLifeInfo';\nimport LeadTypeHomeInfo from './leads-type-home/components/LeadTypeHomeInfo';\nimport LeadTypeWorkersCompensationInfo from './leads-type-workers-compensation/components/LeadTypeWorkersCompensationInfo';\nimport LeadTypeEmployeeBenefitsInfo from './leads-type-employee-benefits/components/LeadTypeEmployeeBenefitsInfo';\nimport DecisionDialog from '../../shared/components/dialog/DecisionDialog';\nimport {\n OnFetchLeadEvent,\n OnFetchLeadEventError,\n OnFetchCampaigns,\n OnFetchCampaignsError,\n} from './leads-store';\nimport { fetchLeadDetails, fetchAgencyCampaigns } from './leads-actions';\nimport { fetchAgencyAgents } from './../users/user-actions';\nimport { onErrorMixinFC } from '../../shared/mixins';\nimport * as toast from 'shared/components/toast/Toast';\nimport LeadNotes from './components/LeadNotes';\nimport LeadTasks from './components/LeadTasks';\nimport LeadDriverInfo from './leads-drivers/components/LeadDriverInfo';\nimport { LeadHistory } from './leads-history/components/LeadHistory';\nimport { useAgency } from '../../shared/hooks/useAgency';\nimport { OnFetchAgents, OnFetchAgentsError } from '../users/user-events';\nimport moment from 'moment';\n\nconst LeadDetailsView = () => {\n const { id } = useParams();\n const agency = useAgency();\n const [lead, setLead] = useState(null);\n const [loading, setLoading] = useState(true);\n const [campaigns, setCampaigns] = useState([]);\n const [users, setUsers] = useState([]);\n const history = useHistory();\n\n const fetch = useCallback(() => {\n fetchLeadDetails(id);\n }, [id]);\n\n const leadLastCalled = useMemo(() => {\n return lead?.callCadence?.lastCalled\n ? moment(lead.callCadence.lastCalled).format('MM-DD-YYYY - LT')\n : 'Lead has not been called yet';\n }, [lead]);\n\n useEffect(() => {\n setLoading(true);\n\n fetch();\n }, [fetch]);\n\n useEffect(() => {\n fetchAgencyCampaigns(agency.id);\n fetchAgencyAgents(agency.id);\n }, [agency]);\n\n useSimpleSubscription(\n OnFetchLeadEvent,\n (data) => {\n if (data.lead) {\n setLead(data.lead);\n setLoading(false);\n } else {\n toast.warn('The lead you tried to reach does not exist');\n\n history.replace('/dashboard');\n }\n },\n [],\n );\n\n useSimpleSubscription(\n OnFetchLeadEventError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSimpleSubscription(\n OnFetchCampaigns,\n ({ campaignsList }) => {\n setCampaigns(campaignsList.items);\n },\n [],\n );\n\n useSimpleSubscription(\n OnFetchCampaignsError,\n (e) => {\n toast.error('Could not get campaigns: ' + e.message);\n },\n [],\n );\n\n useSimpleSubscription(\n OnFetchAgents,\n ({ usersList }) => {\n setUsers(usersList.items);\n },\n [],\n );\n\n useSimpleSubscription(\n OnFetchAgentsError,\n (e) => {\n toast.error('Could not get users in agency: ' + e.message);\n },\n [],\n );\n\n if (loading) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n \n \n \n \n \n \n Created: \n {moment(lead.createdAt).format('MM-DD-YYYY - LT')}\n \n \n Last Update: \n {moment(lead.updatedAt).format('MM-DD-YYYY - LT')}\n \n \n Last Called: \n {leadLastCalled}\n \n \n \n \n \n \n \n {/* LEAD TYPES */}\n {lead.leadLeadTypeAutoRelation && (\n \n )}\n {lead.leadLeadTypeCommercialAutoRelation && (\n \n )}\n {lead.leadLeadTypeGeneralLiabilityRelation && (\n \n )}\n {lead.leadLeadTypeLifeRelation && (\n \n )}\n {lead.leadLeadTypeHomeRelation && (\n \n )}\n {lead.leadLeadTypeWorkersCompensationRelation && (\n \n )}\n {lead.leadLeadTypeEmployeeBenefitRelation && (\n \n )}\n \n \n \n \n \n );\n};\n\nexport default LeadDetailsView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport StyledBadge from '../../../../shared/components/ui/StyledBadge';\n\nexport const Status = ({ status }) => {\n let priority;\n if (status === 'APPROVED') {\n priority = 1;\n } else if (status === 'PENDING') {\n priority = 2;\n } else if (status === 'EXPIRED') {\n priority = 3;\n } else if (status === 'REJECTED') {\n priority = 4;\n }\n return {status};\n};\nStatus.propTypes = {\n status: PropTypes.string.isRequired,\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnCreateInvitationCompanyEvent = createEvent();\n\nexport const OnCreateInvitationCompanyError = createEvent();\n\nexport const OnDeleteinvitationEvent = createEvent();\n\nexport const OnDeleteinvitationError = createEvent();\n\nexport const OnResendInvitationEvent = createEvent();\n\nexport const OnResendInvitationError = createEvent();\n\nexport const OnInvitationListEvent = createEvent();\n\nexport const OnInvitationListError = createEvent();\n\nexport const OnCreateInvitationEvent = createEvent();\n\nexport const OnCreateInvitationError = createEvent();\n","import { OnApolloClient, OnSessionFetch } from '../../../shared/session/session-events';\nimport { error, log } from '@cobuildlab/pure-logger';\nimport {\n QUERY_INVITATIONS,\n CREATE_INVITATION,\n RESEND_INVITATION,\n DELETE_INVITATION,\n CREATE_INVITATION_COMPANY,\n} from './invitations-queries';\nimport {\n createAgencyInvitationValidator,\n createCompanyInvitationValidator,\n} from '@cobuildlab/lead-volt-share';\nimport { normalize8baseReferenceConnect } from '@cobuildlab/8base-utils';\nimport {\n OnCreateInvitationCompanyError,\n OnCreateInvitationCompanyEvent,\n OnCreateInvitationError,\n OnCreateInvitationEvent,\n OnDeleteinvitationError,\n OnDeleteinvitationEvent,\n OnInvitationListError,\n OnInvitationListEvent,\n OnResendInvitationError,\n OnResendInvitationEvent,\n} from './invitation-events';\n\nexport const fetchInvitationList = async (agencyId, pageSize, queryOffset) => {\n const client = OnApolloClient.get();\n const variables = { agencyId: agencyId, limit: pageSize, offset: queryOffset };\n try {\n const response = await client.query({\n query: QUERY_INVITATIONS,\n fetchPolicy: 'network-only',\n variables,\n });\n OnInvitationListEvent.dispatch(response.data);\n return response.data;\n } catch (e) {\n return OnInvitationListError.dispatch(e);\n }\n};\n\nexport const createInvitation = async (data) => {\n const client = OnApolloClient.get();\n const { user } = OnSessionFetch.get();\n let response = null;\n\n try {\n createAgencyInvitationValidator(user, data);\n } catch (e) {\n error('createInvitation', e);\n\n return OnCreateInvitationError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: CREATE_INVITATION,\n variables: { data },\n });\n } catch (e) {\n error('createInvitation', e);\n\n return OnCreateInvitationError.dispatch(e);\n }\n\n log('createInvitation', response.data);\n OnCreateInvitationEvent.dispatch(response.data);\n\n return response.data;\n};\n\nexport const deleteInvitation = async (invitationId) => {\n const client = OnApolloClient.get();\n try {\n const response = await client.mutate({\n mutation: DELETE_INVITATION,\n variables: { id: invitationId },\n });\n OnDeleteinvitationEvent.dispatch(response.data);\n return response.data;\n } catch (e) {\n return OnDeleteinvitationError.dispatch(e);\n }\n};\nexport const resendInvitation = async (invitationId, resend) => {\n const client = OnApolloClient.get();\n try {\n const response = await client.mutate({\n mutation: RESEND_INVITATION,\n variables: { id: invitationId, resend },\n });\n OnResendInvitationEvent.dispatch(response.data);\n return response.data;\n } catch (e) {\n return OnResendInvitationError.dispatch(e);\n }\n};\n\nexport const createInvitationCompany = async (data) => {\n const client = OnApolloClient.get();\n const { user } = OnSessionFetch.get();\n let response = null;\n\n try {\n createCompanyInvitationValidator(user, data);\n } catch (e) {\n error('createInvitationCompany', e);\n return OnCreateInvitationCompanyError.dispatch(response.data);\n }\n\n normalize8baseReferenceConnect(data, 'company');\n\n try {\n response = await client.mutate({\n mutation: CREATE_INVITATION_COMPANY,\n variables: { data },\n });\n } catch (e) {\n error('companyInvitationCompany', e);\n return OnCreateInvitationCompanyError.dispatch(response.data);\n }\n\n OnCreateInvitationCompanyEvent.dispatch(response.data);\n return response.data;\n};\n","import React, { useState, useCallback } from 'react';\nimport moment from 'moment';\nimport { Dropdown, Pagination, Icon, Table, Menu, Dialog, Paragraph, Button } from '@8base/boost';\nimport * as toast from 'shared/components/toast/Toast';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport { Status } from './Status';\nimport { deleteInvitation, resendInvitation } from '../invitations-actions';\nimport { deleteCompanyInvitation } from '../../../company-invitation/company-invitation-actions';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport {\n OnDeleteinvitationError,\n OnDeleteinvitationEvent,\n OnResendInvitationError,\n OnResendInvitationEvent,\n} from '../invitation-events';\nimport {\n OnDeleteCompanyInvitationError,\n OnDeleteCompanyInvitationEvent,\n} from 'modules/company/campany-events';\n\nconst tableColumns = '80px minmax(250px,1fr) 150px 200px 100px';\n\nconst PaginationWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n & > div > div > *::before {\n background-color: var(--color-primary);\n transition: all 0.2s;\n }\n\n & > div > span {\n display: inline-block;\n padding: 0.5rem 1.5rem;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n }\n`;\n\nconst TableBody = styled(Table.Body)`\n min-height: ${({ height }) => height};\n`;\n\nexport const InvitationsList = ({\n loading,\n page,\n pageSize,\n total,\n handleChange,\n offset,\n invitations,\n refetch,\n CompanyInvitationList,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [menuOpen, setMenuOpen] = useState('');\n const [invitation, setInvitation] = useState('');\n const [loadingDelete, setLoadingDelete] = useState(false);\n const [loadingResend, setLoadingResend] = useState(false);\n const deleteModal = useCallback((id) => {\n setInvitation(id);\n setIsOpen(true);\n }, []);\n\n useEventSubscription(OnDeleteinvitationEvent, () => {\n setInvitation('');\n setIsOpen(false);\n refetch('network-only');\n toast.success('Invitation deleted successfully');\n setLoadingDelete(false);\n });\n\n useEventSubscription(OnDeleteinvitationError, (err) => {\n toast.error(`${JSON.stringify(err)}`);\n setLoadingDelete(false);\n });\n\n useEventSubscription(OnDeleteCompanyInvitationEvent, () => {\n setInvitation('');\n setIsOpen(false);\n refetch('network-only');\n toast.success('Invitation deleted successfully');\n setLoadingDelete(false);\n });\n\n useEventSubscription(OnDeleteCompanyInvitationError, (error) => {\n toast.error(`${JSON.stringify(error)}`);\n setLoadingDelete(false);\n });\n\n useEventSubscription(OnResendInvitationEvent, () => {\n toast.success('Invitation was resend successfully');\n setMenuOpen('');\n setLoadingDelete(false);\n });\n\n useEventSubscription(OnResendInvitationError, (error) => {\n toast.error(`${JSON.stringify(error)}`);\n setLoadingDelete(false);\n });\n\n const deleteInvitationAction = useCallback(() => {\n setLoadingDelete(true);\n if (CompanyInvitationList) {\n deleteCompanyInvitation(invitation);\n } else {\n deleteInvitation(invitation);\n }\n }, [invitation, CompanyInvitationList]);\n\n const resendInvitationAction = useCallback((invitation) => {\n setLoadingResend(true);\n resendInvitation(invitation, moment().format('x'));\n }, []);\n\n const height = `${pageSize * 47}px`;\n\n return (\n <>\n \n \n #\n Email\n Status\n Updated At\n Actions\n \n \n {(item, i) => (\n \n {i + 1 + offset}\n {item.email}\n \n \n \n {moment(item.updatedAt).format('MM/DD/YYYY HH:mm')}\n \n {item.status === 'APPROVED' || item.status === 'REJECTED' ? (\n '-'\n ) : (\n setMenuOpen((id) => (id === item.id ? '' : item.id))}>\n \n \n \n \n \n deleteModal(item.id)}>Delete\n {!CompanyInvitationList ? (\n resendInvitationAction(item.id)}\n loading={loadingResend}>\n Resend\n \n ) : (\n ''\n )}\n \n \n \n )}\n \n \n )}\n \n \n \n \n \n \n \n \n setIsOpen(false)} />\n \n Are you sure about delete this invitation\n \n \n setIsOpen(false)}>\n Cancel\n \n \n Delete\n \n \n \n >\n );\n};\n\nInvitationsList.propTypes = {\n loading: PropTypes.bool.isRequired,\n page: PropTypes.number.isRequired,\n pageSize: PropTypes.number.isRequired,\n total: PropTypes.number.isRequired,\n handleChange: PropTypes.func.isRequired,\n offset: PropTypes.number.isRequired,\n invitations: PropTypes.arrayOf(PropTypes.object).isRequired,\n refetch: PropTypes.func.isRequired,\n CompanyInvitationList: PropTypes.bool,\n};\n\nInvitationsList.defaultProps = {\n CompanyInvitationList: false,\n};\n","export const USER_INVITATION_TYPES = [\n { value: 'MANAGER', label: 'Manager' },\n { value: 'AGENT', label: 'Agent' },\n];\n\nexport const PAGE_SIZE = 10;\n","import React, { useState, useCallback } from 'react';\nimport * as toast from 'shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\nimport { Button, Form, SelectField, InputField, Dialog } from '@8base/boost';\nimport { hasError } from 'apollo-client/core/ObservableQuery';\nimport { createInvitation } from '../invitations-actions';\nimport { USER_INVITATION_TYPES } from '../invitations-model';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport { OnCreateInvitationError, OnCreateInvitationEvent } from '../invitation-events';\n\nexport const Invitation = ({ close, isOpen, agencyId, agencyName, refetch }) => {\n const formDefault = {\n type: '',\n email: '',\n };\n const [form, setForm] = useState(formDefault);\n const [formErrors, setFormErrors] = useState({\n type: {},\n email: {},\n });\n const [loading, setLoading] = useState(false);\n const handleChange = useCallback(({ target }) => {\n const { value, name } = target;\n setFormErrors((state) => ({ ...state, [name]: {} }));\n setForm((state) => ({ ...state, [name]: value }));\n }, []);\n\n const handleSelectChange = useCallback((type) => {\n setFormErrors((state) => ({ ...state, type: {} }));\n setForm((state) => ({ ...state, type }));\n }, []);\n\n useEventSubscription(OnCreateInvitationEvent, () => {\n refetch('network-only');\n setForm(formDefault);\n close();\n toast.success('Success', 'Invitation send successfully');\n setLoading(false);\n });\n\n useEventSubscription(OnCreateInvitationError, (error) => {\n onErrorMixinFC(error);\n setLoading(false);\n });\n\n const saveInvitation = useCallback(() => {\n const data = {\n ...form,\n agency: {\n connect: {\n id: agencyId,\n },\n },\n };\n\n setLoading(true);\n createInvitation(data);\n }, [form, agencyId]);\n\n const disabledSubmit = hasError(formErrors);\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n Cancel\n \n \n Send\n \n \n \n >\n );\n};\nInvitation.propTypes = {\n close: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n agencyId: PropTypes.string.isRequired,\n agencyName: PropTypes.string.isRequired,\n refetch: PropTypes.func.isRequired,\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport * as toast from 'shared/components/toast/Toast';\nimport { useHistory } from 'react-router-dom';\nimport { Card, Loader, Row } from '@8base/boost';\nimport { OnSessionFetch } from '../../../shared/session/session-events';\nimport { InvitationsList } from './components/InvitationsList';\nimport { Invitation } from './components/Invitation';\nimport { fetchInvitationList } from './invitations-actions';\nimport { PAGE_SIZE } from './invitations-model';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { Box } from '../../../shared/components/Box';\nimport { CreateButton } from 'shared/components';\nimport { OnInvitationListError, OnInvitationListEvent } from './invitation-events';\n\nexport const InvitationsView = () => {\n const [user, setUser] = useState(null);\n const [page, setPage] = useState(1);\n const [modal, setModal] = useState(false);\n const [loadingUser, setLoadingUser] = useState(true);\n const history = useHistory();\n const [invitations, setInvitations] = useState([]);\n const [loading, setLoading] = useState(false);\n const [total, setTotal] = useState(0);\n const agency = useAgency();\n\n useEffect(() => {\n const user = OnSessionFetch.get().user;\n const validUser = user?.userAdminRelation.count > 0;\n const userRole = user.userAgencyUserRelation.items[0].roles[0];\n\n if (!validUser && userRole !== 'MANAGER') {\n history.goBack();\n } else {\n setLoadingUser(false);\n setUser(user);\n }\n }, [history]);\n\n const userId = user?.id;\n\n const queryOffset = (page - 1) * PAGE_SIZE;\n\n useEventSubscription(OnInvitationListEvent, (data) => {\n const {\n agencyInvitationsList: { count, items },\n } = data;\n setInvitations(items);\n setTotal(count);\n setLoading(false);\n });\n useEventSubscription(OnInvitationListError, (data) => {\n toast.error(JSON.stringify(data));\n setLoading(false);\n });\n const fetchInviations = useCallback(() => {\n setLoading((state) => !state);\n fetchInvitationList(agency.id, PAGE_SIZE, queryOffset);\n }, [agency, queryOffset]);\n\n useEffect(() => {\n if (!userId) {\n return;\n }\n fetchInviations();\n }, [userId, fetchInviations]);\n\n const handlePageChange = useCallback((value) => {\n setPage(value);\n }, []);\n\n const closeModal = useCallback(() => {\n setModal(false);\n }, []);\n\n const refetch = fetchInviations;\n\n if (loadingUser) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n \n setModal((modal) => !modal)}\n text=\"Create Invitation\"\n />\n \n \n \n \n \n \n \n \n );\n};\n","import React, { useCallback } from 'react';\nimport { Table, Dropdown, Menu, Icon, Tag as BoostTag } from '@8base/boost';\nimport { DropdownBodyOnTable } from '../../../../shared/components';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst MenuItem = styled(Menu.Item)`\n color: ${({ danger }) => (danger ? '#FF0000' : 'rgb(50, 60, 71)')}!important;\n &:hover {\n ${({ danger }) => (danger ? '' : 'color: #3db4aa !important;')}\n }\n`;\n\nconst Tag = styled(BoostTag)`\n ${(props) => {\n switch (props.status) {\n case 'active':\n return `\n color: #3DB4AA !important;\n background-color: rgba(61, 180, 170, .1) !important;\n border-color: rgba(61, 180, 170, .4) !important;\n `;\n case 'invited':\n return `\n color: #62ABFE !important;\n background-color: rgba(98, 171, 254, .1) !important;\n border-color: rgba(98, 171, 254, .4) !important;\n `;\n case 'inactive':\n return `\n color: #FF0606 !important;\n background-color: rgba(255, 6, 6, .1) !important;\n border-color: rgba(255, 6, 6, .4) !important;\n `;\n default:\n return `\n color: #3DB4AA !important;\n background-color: rgba(61, 180, 170, .1) !important;\n border-color: rgba(61, 180, 170, .4) !important;\n `;\n }\n }}\n`;\n\n/**\n * Admin table row compnent\n *\n * @param {object} props - The component's prop object\n * @param {number} props.index - The number of the row in the table\n * @param {object} props.admin - The user object to display the data from\n * @param {Function} props.onDelete - Callback that is triggered when the delete button is clicked\n *\n * @returns {React.FC} The component to render\n */\nconst AdminsTableRow = ({ index, admin, onDelete }) => {\n const handleDelete = useCallback(\n (callback) => {\n onDelete(admin);\n callback();\n },\n [admin, onDelete],\n );\n\n return (\n <>\n {index}\n \n {admin.user.firstName} {admin.user.lastName}\n \n {admin.user.email}\n \n {admin.user.status}\n \n \n \n \n \n \n \n {({ closeDropdown }) => (\n \n handleDelete(closeDropdown)}>\n Delete\n \n \n )}\n \n \n \n >\n );\n};\n\nAdminsTableRow.propTypes = {\n index: PropTypes.number.isRequired,\n admin: PropTypes.shape({\n user: PropTypes.shape({\n id: PropTypes.string.isRequired,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n email: PropTypes.string.isRequired,\n status: PropTypes.array.isRequired,\n }).isRequired,\n __typename: PropTypes.string.isRequired,\n }).isRequired,\n onDelete: PropTypes.func.isRequired,\n};\n\nexport default AdminsTableRow;\n","import React, { useState, useCallback } from 'react';\nimport { Table } from '@8base/boost';\nimport AdminsTableRow from './AdminsTableRow';\nimport PropTypes from 'prop-types';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport YesNoDialog from '../../../../shared/components/YesNoDialog';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport { fetchCompany } from '../../../company/company-actions';\nimport { removeAdminFromCompany } from '../../../users/user-actions';\nimport styled from 'styled-components';\nimport { OnAdminDeletedError, OnAdminDeletedEvent } from 'modules/users/user-events';\n\nconst Body = styled(Table.Body)`\n min-height: 335px;\n`;\n\nconst columns = '68px repeat(3 , 1fr) 105px';\n\nconst AdminsTable = ({ user, companyId, admins, page, onUsersCount, setLoaderUpdate }) => {\n const [deleteModal, setDeleteModal] = useState({ open: false, selected: {}, loading: false });\n\n useEventSubscription(OnAdminDeletedError, (err) => {\n setDeleteModal((state) => ({ ...state, open: false, loading: false }));\n onErrorMixinFC(err);\n });\n\n useEventSubscription(OnAdminDeletedEvent, () => {\n setDeleteModal({ open: false, selected: {}, loading: false });\n setLoaderUpdate(true);\n fetchCompany(companyId, user.id);\n });\n\n const handleDeleteClick = useCallback(\n (admin) =>\n setDeleteModal({\n open: true,\n selected: admin,\n }),\n [],\n );\n\n const handleDelete = useCallback(async () => {\n const admin = deleteModal.selected;\n setDeleteModal((state) => ({ ...state, loading: true }));\n removeAdminFromCompany(admin);\n }, [deleteModal]);\n\n return (\n \n \n #\n NAME\n EMAIL\n STATUS\n ACTIONS\n \n \n {(admin, i) => (\n \n \n \n )}\n \n setDeleteModal((state) => ({ ...state, open: false }))}\n onYes={handleDelete}\n onNo={() => setDeleteModal((state) => ({ ...state, open: false }))}\n isLoading={deleteModal.loading}\n />\n \n );\n};\n\nAdminsTable.propTypes = {\n user: PropTypes.object.isRequired,\n companyId: PropTypes.string.isRequired,\n admins: PropTypes.array.isRequired,\n page: PropTypes.number.isRequired,\n onUsersCount: PropTypes.func.isRequired,\n setLoaderUpdate: PropTypes.func.isRequired,\n};\n\nexport default AdminsTable;\n","import React, { useState, useCallback } from 'react';\nimport * as toast from 'shared/components/toast/Toast';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { Button, Form, InputField, Dialog } from '@8base/boost';\nimport { hasError } from 'apollo-client/core/ObservableQuery';\nimport PropTypes from 'prop-types';\nimport { createInvitationCompany } from './../../invitations/invitations-actions';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport {\n OnCreateInvitationCompanyError,\n OnCreateInvitationCompanyEvent,\n} from 'modules/my-account/invitations/invitation-events';\n\nexport const Invitation = ({ onClose, isOpen, companyId, companyName }) => {\n const formDefault = {\n email: '',\n };\n const [form, setForm] = useState(formDefault);\n const [formErrors, setFormErrors] = useState({\n email: {},\n });\n const [loading, setLoading] = useState(false);\n const handleChange = useCallback(({ target }) => {\n const { value, name } = target;\n setFormErrors((state) => ({ ...state, [name]: {} }));\n setForm((state) => ({ ...state, [name]: value }));\n }, []);\n\n useEventSubscription(OnCreateInvitationCompanyEvent, () => {\n setForm(formDefault);\n onClose();\n toast.success('Success', 'Invitation send successfully');\n setLoading(false);\n });\n\n useEventSubscription(OnCreateInvitationCompanyError, (err) => {\n onErrorMixinFC(err);\n setLoading(false);\n });\n\n const saveInvitation = useCallback(() => {\n const data = {\n ...form,\n company: companyId,\n };\n\n setLoading(true);\n createInvitationCompany(data);\n }, [form, companyId]);\n\n const disabledSubmit = hasError(formErrors);\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n Cancel\n \n \n Send\n \n \n \n >\n );\n};\nInvitation.propTypes = {\n onClose: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n companyId: PropTypes.string.isRequired,\n companyName: PropTypes.string.isRequired,\n};\n","import React, { useCallback, useState, useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport {\n Button,\n Card,\n Column,\n Dialog,\n Grid,\n Form,\n InputField,\n Pagination,\n Paragraph,\n Row,\n SelectField,\n Loader,\n} from '@8base/boost';\nimport { fetchCompanies, updateCompany } from '../../company/company-actions';\nimport AdminsTable from './components/AdminsTable';\nimport { Invitation } from './components/Invitation';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { OnSessionFetch } from '../../../shared/session/session-events';\nimport { CreateButton, PrimaryBtn } from '../../../shared/components';\nimport { Box } from '../../../shared/components/Box';\nimport * as toast from 'shared/components/toast/Toast';\nimport styled from 'styled-components';\nimport {\n OnCompanyfetched,\n OnCompanyUpdated,\n OnfetchCompanyList,\n} from 'modules/company/campany-events';\n\nconst CardHeaderWithButton = styled(Card.Header)`\n display: flex;\n justify-content: flex-end;\n`;\n\nconst CardTitle = styled.h3`\n font-size: 16px;\n font-weight: bold;\n line-height: 28px;\n margin-right: 20px !important;\n`;\n\nconst CardBody = styled(Card.Body)`\n padding: 0 !important;\n`;\n\nconst ColumnLeft = styled(Grid.Box)`\n padding-right: 10px !important;\n`;\n\nconst ColumnRight = styled(Grid.Box)`\n padding-left: 10px !important;\n`;\n//for updating companies in settings\nconst CompanyView = () => {\n const defaultPageSize = 10;\n const agency = useAgency();\n const [user, setUser] = useState(null);\n const [isOpenUpdate, setIsOpenUpdate] = useState(false);\n const [loaderUpdate, setLoaderUpdate] = useState(false);\n const [isInviteModalOpen, setisInviteModalOpen] = useState(false);\n const [data, setData] = useState({\n company: null,\n companies: [],\n options: [],\n total: 0,\n page: 1,\n loading: true,\n });\n // Form\n const [companyId, setCompanyId] = useState('');\n const [companyName, setCompanyName] = useState('');\n const history = useHistory();\n\n const handleOpenUpdate = () => setIsOpenUpdate(true);\n const handleCloseUpdate = () => setIsOpenUpdate(false);\n\n const handleSubmit = () => {\n setLoaderUpdate(true);\n\n const companyData = {\n id: companyId,\n name: companyName,\n };\n\n updateCompany(companyData, user.id);\n };\n\n const initOptionsSelectCompany = (companies) => {\n return companies.map((company) => {\n return { label: company.name, value: company.id };\n });\n };\n\n useEffect(() => {\n const user = OnSessionFetch.get().user;\n const validUser = user?.userAdminRelation.count > 0;\n if (!validUser) {\n history.goBack();\n } else {\n setUser(user);\n const companyIds = user.userAdminRelation.items.map((companyData) => companyData.company.id);\n fetchCompanies({ companyIds }, user.id);\n }\n }, [history, data.page, setUser]);\n\n useEventSubscription(OnfetchCompanyList, ({ companiesList }) => {\n const options = initOptionsSelectCompany(companiesList.items);\n let company = null;\n let total = 0;\n\n if (options.length === 1) {\n setCompanyId(options[0].value);\n setCompanyName(options[0].label);\n company = companiesList.items[0];\n total = company.adminCompanyRelation.count;\n } else if (options.length > 1) {\n const companyOfActiveAgency = companiesList.items.find(\n (company) => company.id === agency.company.id,\n );\n setCompanyId(companyOfActiveAgency.id);\n setCompanyName(companyOfActiveAgency.name);\n company = companyOfActiveAgency;\n total = companyOfActiveAgency.adminCompanyRelation.count;\n }\n\n setData((state) => ({\n ...state,\n companies: companiesList.items,\n loading: false,\n company,\n total,\n options,\n }));\n });\n\n useEventSubscription(OnCompanyfetched, ({ company }) => {\n setLoaderUpdate(false);\n setData((state) => {\n const companies = state.companies.map((currentCompany) =>\n currentCompany.id === company.id ? company : currentCompany,\n );\n return {\n ...state,\n companies: companies,\n options: initOptionsSelectCompany(companies),\n company: company,\n total: company.adminCompanyRelation.count,\n page: 1,\n };\n });\n toast.success('Company', 'Admin successfully removed from company');\n });\n\n useEventSubscription(OnCompanyUpdated, ({ companyUpdate }) => {\n setLoaderUpdate(false);\n handleCloseUpdate();\n toast.success('Company', 'Updated Successfully!');\n setData((state) => {\n const companiesWithCompanyUpdated = state.companies.map((company) =>\n company.id === companyUpdate.id ? companyUpdate : company,\n );\n return {\n ...state,\n companies: companiesWithCompanyUpdated,\n options: initOptionsSelectCompany(companiesWithCompanyUpdated),\n company: companyUpdate,\n total: companyUpdate.adminCompanyRelation.count,\n page: 1,\n };\n });\n });\n\n const handlePageChange = useCallback((page) => {\n setData((state) => ({ ...state, page }));\n }, []);\n\n const handleTotalChange = useCallback((total) => {\n setData((state) => ({ ...state, total: total }));\n }, []);\n\n const handleSelectChange = useCallback(\n (value) => {\n setCompanyId(value);\n setCompanyName(data.options.find((option) => option.value === value).label);\n setData((state) => {\n const company = state.companies.find((company) => company.id === value);\n return {\n ...state,\n company: company,\n total: company.adminCompanyRelation.count,\n page: 1,\n };\n });\n },\n [data.options],\n );\n\n let admins = data.company ? data.company.adminCompanyRelation.items : [];\n\n if (admins.length > 0 && data.total > 0) {\n admins = admins.slice((data.page - 1) * defaultPageSize, data.page * defaultPageSize);\n }\n\n let renderInputCompany = null;\n if (data.options.length === 1) {\n renderInputCompany = (\n \n );\n } else {\n renderInputCompany = (\n \n );\n }\n\n if (data.loading) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n \n Company\n {renderInputCompany}\n \n \n \n \n \n \n \n setCompanyName(e.target.value)}\n input={{\n name: 'companyName',\n type: 'text',\n value: companyName,\n }}\n />\n \n \n \n \n \n \n \n \n \n \n Save Changes\n \n \n \n \n \n \n setisInviteModalOpen(true)}\n text=\"Create Company's Admin\"\n disabled={data.company ? false : true}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n Are you sure update the changes?\n \n \n \n Cancel\n \n \n Update\n \n \n \n setisInviteModalOpen(false)}\n companyId={data.company ? data.company.id : null}\n companyName={data.company ? data.company.name : ''}\n />\n \n \n );\n};\n\nexport default CompanyView;\n","import React, { useState, useCallback } from 'react';\r\nimport * as toast from 'shared/components/toast/Toast';\r\nimport PropTypes from 'prop-types';\r\nimport { Button, Form, SelectField, InputField, Dialog } from '@8base/boost';\r\nimport { hasError } from 'apollo-client/core/ObservableQuery';\r\nimport { createCompanyInvitation } from '../../../company-invitation/company-invitation-actions';\r\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\r\nimport { onErrorMixinFC } from '../../../../shared/mixins';\r\nimport {\r\n OnCreateCompanyInvitationError,\r\n OnCreateCompanyInvitationEvent,\r\n} from 'modules/company/campany-events';\r\n\r\nconst formDefault = {\r\n company: '',\r\n email: '',\r\n};\r\n\r\nexport const Invitation = ({ close, companies, isOpen, refetch }) => {\r\n const [form, setForm] = useState(formDefault);\r\n const [formErrors, setFormErrors] = useState({\r\n company: {},\r\n email: '',\r\n });\r\n const [loading, setLoading] = useState(false);\r\n const handleChange = useCallback(({ target }) => {\r\n const { value, name } = target;\r\n setFormErrors((state) => ({ ...state, [name]: {} }));\r\n setForm((state) => ({ ...state, [name]: value }));\r\n }, []);\r\n\r\n const companyOptions = companies.map((item) => {\r\n return { value: item.company.id, label: item.company.name };\r\n });\r\n\r\n const handleSelectChange = useCallback((company) => {\r\n setFormErrors((state) => ({ ...state, company: {} }));\r\n setForm((state) => ({ ...state, company }));\r\n }, []);\r\n\r\n useEventSubscription(OnCreateCompanyInvitationEvent, () => {\r\n refetch('network-only');\r\n setForm(formDefault);\r\n close();\r\n toast.success('Invitation Management', 'Invitation send successfully');\r\n setLoading(false);\r\n });\r\n\r\n useEventSubscription(OnCreateCompanyInvitationError, (err) => {\r\n onErrorMixinFC(err);\r\n setLoading(false);\r\n });\r\n\r\n const saveInvitation = useCallback(() => {\r\n setLoading(true);\r\n createCompanyInvitation(form);\r\n }, [form]);\r\n\r\n const disabledSubmit = hasError(formErrors);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Cancel\r\n \r\n \r\n Send\r\n \r\n \r\n \r\n >\r\n );\r\n};\r\n\r\nInvitation.propTypes = {\r\n close: PropTypes.func.isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n companies: PropTypes.array.isRequired,\r\n refetch: PropTypes.func.isRequired,\r\n};\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport * as toast from 'shared/components/toast/Toast';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { Card, Row, Loader } from '@8base/boost';\r\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\r\nimport { OnSessionFetch } from '../../../shared/session/session-events';\r\nimport { InvitationsList } from '../invitations/components/InvitationsList';\r\nimport { Invitation } from './components/Invitation';\r\nimport { fetchCompanyInvitationList } from '../../company-invitation/company-invitation-actions';\r\nimport { PAGE_SIZE } from '../invitations/invitations-model';\r\nimport { CreateButton } from 'shared/components';\r\nimport { Box } from '../../../shared/components/Box';\r\nimport styled from 'styled-components';\r\nimport {\r\n OnCompanyinvitationError,\r\n OnCompanyinvitationListEvent,\r\n} from 'modules/company-invitation/company-invitation-events';\r\n\r\nconst CardTitle = styled.h3`\r\n font-size: 16px;\r\n font-weight: bold;\r\n line-height: 28px;\r\n`;\r\n\r\nconst CompanyInvitationsView = () => {\r\n const [user, setUser] = useState(null);\r\n const [page, setPage] = useState(1);\r\n const [modal, setModal] = useState(false);\r\n const [companies, setCompanies] = useState('');\r\n const [loadingUser, setLoadingUser] = useState(true);\r\n const history = useHistory();\r\n const [invitations, setInvitations] = useState([]);\r\n const [loading, setLoading] = useState(false);\r\n const [total, setTotal] = useState(0);\r\n useEffect(() => {\r\n const user = OnSessionFetch.get().user;\r\n const validUser = user?.userAdminRelation.count > 0;\r\n if (!validUser) {\r\n history.goBack();\r\n } else {\r\n setLoadingUser(false);\r\n setUser(user);\r\n setCompanies(user.userAdminRelation.items);\r\n }\r\n }, [history]);\r\n\r\n const userId = user?.id;\r\n\r\n const queryOffset = (page - 1) * PAGE_SIZE;\r\n\r\n useEventSubscription(OnCompanyinvitationListEvent, (data) => {\r\n const {\r\n companyInvitationsList: { count, items },\r\n } = data;\r\n setInvitations(items);\r\n setTotal(count);\r\n setLoading(false);\r\n });\r\n\r\n useEventSubscription(OnCompanyinvitationError, (err) => {\r\n toast.error(JSON.stringify(err));\r\n setLoading(false);\r\n });\r\n\r\n const fetchCompanyInvitations = useCallback(\r\n (fetchPolicy = 'cache-first') => {\r\n setLoading((state) => !state);\r\n fetchCompanyInvitationList(userId, PAGE_SIZE, queryOffset, fetchPolicy);\r\n },\r\n [userId, queryOffset],\r\n );\r\n useEffect(() => {\r\n if (!userId) {\r\n return;\r\n }\r\n fetchCompanyInvitations();\r\n // eslint-disable-next-line\r\n }, [userId]);\r\n const handlePageChange = useCallback(\r\n (value) => {\r\n setPage(value);\r\n setLoading((state) => !state);\r\n fetchCompanyInvitationList(userId, PAGE_SIZE, (value - 1) * PAGE_SIZE, 'no-cache');\r\n },\r\n [userId],\r\n );\r\n\r\n const closeModal = useCallback(() => {\r\n setModal(false);\r\n }, []);\r\n\r\n const refetch = fetchCompanyInvitations;\r\n\r\n if (loadingUser) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Company Invitations\r\n setModal((modal) => !modal)}\r\n text=\"Create Invitation\"\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CompanyInvitationsView;\r\n","export const TABLE_COLUMNS = [{ name: 'Name' }, { name: 'Campaigns' }];\n\nexport const VENDOR = {\n name: '',\n};\n","import { Table, styled } from '@8base/boost';\n\nexport const StyledHeaderCell = styled(Table.HeaderCell)`\n padding-left: 16px !important;\n padding-right: 6px !important;\n`;\n\nexport const StyledTableBody = styled(Table.Body)`\n max-height: 50vh;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nexport const StyledCell = styled(Table.BodyCell)`\n padding: 8px 16px !important;\n`;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, InputField, Grid } from '@8base/boost';\n\n/**\n * Vendor form\n *\n * @param {object} props component props\n * @param {object} props.vendor data\n * @param {Function} props.onChangeInput handle for onChange input\n * @param {Function} props.onSubmit handle on submit\n * @returns {React.ReactElement} component\n */\nconst VendorForm = ({ vendor, onChangeInput, onSubmit }) => {\n return (\n {\n event.preventDefault();\n onSubmit();\n }}>\n \n \n \n onChangeInput('name', value),\n }}\n />\n \n \n \n \n );\n};\n\nVendorForm.propTypes = {\n vendor: PropTypes.object.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n};\n\nexport default VendorForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport DialogForm from '../../../shared/components/dialog/DialogForm';\nimport VendorForm from './VendorForm';\n\nconst VendorFormDialog = ({\n vendor,\n isOpen,\n isUpdate,\n loading,\n onSubmit,\n campaigns,\n onChangeInput,\n onCloseDialog,\n}) => {\n return (\n \n \n \n );\n};\n\nVendorFormDialog.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n isUpdate: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n vendor: PropTypes.object.isRequired,\n campaigns: PropTypes.array.isRequired,\n onChangeInput: PropTypes.func.isRequired,\n onCloseDialog: PropTypes.func.isRequired,\n};\n\nexport default VendorFormDialog;\n","/**\n * Map for the form fields.\n *\n * @param {object} vendor data\n * @returns {object} vendor mapped\n */\nexport const vendorMap = (vendor) => {\n return {\n ...vendor,\n campaigns: vendor.vendorCampaignRelation.items.map((campaign) => ({\n value: campaign.id,\n label: campaign.name,\n })),\n };\n};\n\n/**\n * Map for table\n *\n * @param {Array} vendors data\n * @returns {Array} mapped vendors\n */\nexport const vendorsMap = (vendors) => {\n return vendors.map((vendor) => ({\n id: vendor.id,\n name: vendor.name,\n campaigns: vendor.vendorCampaignRelation.count,\n }));\n};\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Paper, Grid, Row, styled, Table } from '@8base/boost';\nimport { SearchInput, Loader, TextEllipsis } from 'shared/components';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport { onChangeDataHookMixin, onErrorMixinFC } from '../../shared/mixins';\nimport { TABLE_COLUMNS, VENDOR } from './vendors-model';\nimport { fetchVendors, createVendor, updateVendor, deleteVendor } from './vendors-actions';\nimport { IconTrash, IconUpdate } from '../../shared/components/ui/Icons';\nimport {\n StyledHeaderCell,\n StyledTableBody,\n StyledCell,\n} from '../../shared/components/tables/CustomTable';\nimport VendorFormDialog from './components/VendorFormDialog';\nimport * as R from 'ramda';\nimport withSession from '../../shared/hoc/withSession';\nimport { vendorMap, vendorsMap } from './vendors-utils';\nimport YesNoDialog from '../../shared/components/YesNoDialog';\nimport { CreateButton } from 'shared/components';\nimport { Box } from '../../shared/components/Box';\nimport {\n OnVendorCreateEvent,\n OnVendorDeleteEvent,\n OnVendorsError,\n OnVendorsEvent,\n OnVendorUpdateEvent,\n} from './vendors-events';\n\nconst StyledLayout = styled(Grid.Layout)`\n padding: 16px;\n`;\n\n/**\n * Vendors view\n *\n * @param {object} props components props\n * @param {string} props.activeAgencyId active agency ID\n *\n * @returns {React.FC} The react component\n */\nconst VendorsView = ({ activeAgencyId }) => {\n const [filters, setFilters] = useState({ search: '', agency: activeAgencyId });\n const [loading, setLoading] = useState(false);\n const [loadingForm, setLoadingForm] = useState(false);\n const [vendors, setVendors] = useState([]);\n const [isOpenForm, setIsOpenForm] = useState(false);\n const [isUpdateForm, setIsUpdateForm] = useState(false);\n const [vendor, setVendor] = useState(R.clone(VENDOR));\n const [isOpenDelete, setIsOpenDelete] = useState(false);\n const handleOnClickBtnSearch = () => {\n setLoading(true);\n fetchVendors(filters);\n };\n const handleOnSubmitForm = () => {\n setLoadingForm(true);\n\n if (isUpdateForm) {\n updateVendor({\n id: vendor.id,\n name: vendor.name,\n });\n } else {\n createVendor(vendor);\n }\n };\n const handleOnChangeInput = (key, value) => {\n onChangeDataHookMixin(vendor, setVendor, key, value);\n };\n const handleOnYesDelete = () => {\n setLoading(true);\n setIsOpenDelete(false);\n deleteVendor(vendor.id);\n };\n const handleOnNoDelete = () => {\n setVendor(R.clone(VENDOR));\n setIsOpenDelete(false);\n };\n const handleVendorEvent = () => {\n setIsOpenForm(false);\n setLoadingForm(false);\n setLoading(true);\n fetchVendors(filters);\n setVendor(R.clone(VENDOR));\n };\n const columnsSize = '45% 45% 10%';\n const ignoreColumns = ['id'];\n\n useEffect(() => {\n setLoading(true);\n fetchVendors(filters);\n }, []);\n\n useSimpleSubscription(OnVendorsEvent, (data) => {\n if (data) {\n setLoading(false);\n setVendors(data.vendorsList.items);\n }\n });\n\n useSimpleSubscription(OnVendorsError, (e) => {\n if (e) {\n setLoading(false);\n setLoadingForm(false);\n onErrorMixinFC(e);\n }\n });\n\n useSimpleSubscription(OnVendorCreateEvent, (data) => {\n if (data) handleVendorEvent();\n });\n\n useSimpleSubscription(OnVendorUpdateEvent, (data) => {\n if (data) {\n handleVendorEvent();\n setIsUpdateForm(false);\n }\n });\n\n useSimpleSubscription(OnVendorDeleteEvent, () => {\n fetchVendors(filters);\n setVendor(R.clone(VENDOR));\n });\n\n return (\n \n \n \n \n onChangeDataHookMixin(filters, setFilters, 'search', value)}\n placeholder=\"Search Vendors\"\n />\n \n \n setIsOpenForm(true)}\n text=\"Create Vendor\"\n />\n \n \n \n \n {TABLE_COLUMNS.map((column, index) => {\n return {column.name};\n })}\n Actions\n \n {loading ? (\n \n ) : (\n \n {(row, index) => (\n \n {Object.keys(row)\n .filter((key) => ignoreColumns.indexOf(key) === -1)\n .map((key, index) => {\n if (\n TABLE_COLUMNS[index] &&\n TABLE_COLUMNS[index].customBodyRender !== undefined\n ) {\n const { customBodyRender } = TABLE_COLUMNS[index];\n const CustomCellValue = customBodyRender(row, row[key]);\n\n return (\n \n \n \n );\n }\n\n return (\n \n {row[key]}\n \n );\n })}\n \n {\n setIsUpdateForm(true);\n setIsOpenForm(true);\n setVendor(vendorMap(vendors[index]));\n }}\n />\n {\n setVendor(row);\n setIsOpenDelete(true);\n }}\n />\n \n \n )}\n \n )}\n \n {\n setIsOpenForm(false);\n setIsUpdateForm(false);\n setVendor(R.clone(VENDOR));\n }}\n />\n \n \n \n );\n};\n\nVendorsView.propTypes = {\n activeAgencyId: PropTypes.string.isRequired,\n};\n\nexport default withSession(VendorsView);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport StyledBadge from '../../../../shared/components/ui/StyledBadge';\n\n/**\n * @param {object} props Props\n * @param {boolean} props.status status boolean\n * @returns {object} react component\n */\nexport function PhoneStatus({ status }) {\n const priority = status ? 1 : 4;\n const text = status ? 'ACTIVE' : 'INACTIVE';\n\n return {text};\n}\nPhoneStatus.propTypes = {\n status: PropTypes.bool.isRequired,\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Dialog, Button, Paragraph } from '@8base/boost';\nimport { deletePhoneNumber } from '../phone-numbers-actions';\n\n/**\n * @param {object} props Props\n * @param {boolean} props.isOpen To show or not\n * @param {Function} props.close Close callback\n * @param {string} props.id Id to delete\n * @returns {object} React componet\n *\n */\nfunction DeleteNumberModal({ isOpen, close, id }) {\n const [loading, setLoading] = useState(false);\n return (\n \n \n \n Are you sure about deleting this number?\n This action can't be undone.\n \n \n \n Cancel\n \n {\n deletePhoneNumber(id);\n setLoading(true);\n }}\n loading={loading}>\n Delete\n \n \n \n );\n}\n\nDeleteNumberModal.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n close: PropTypes.func.isRequired,\n id: PropTypes.string.isRequired,\n};\n\nexport default DeleteNumberModal;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Icon, Loader } from '@8base/boost';\nimport styled from 'styled-components';\nimport { updatePhoneNumber } from '../phone-numbers-actions';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { OnPhoneNumberUpdateError, OnPhoneNumberUpdateEvent } from '../phone-numbers-events';\n\nconst Span = styled.span`\n display: flex;\n justify-content: center;\n align-items: center;\n min-width: 20px;\n`;\n/**\n *\n * @typedef {object} PhoneNumber\n * @property {{code:string,number:string}} number\n * @property {number} priority\n * @property {string} id\n */\n/**\n * @param {object} props Props\n * @param {PhoneNumber} props.number Props\n * @returns {object} React Component\n */\nfunction PhoneNumberPriority({ number }) {\n const [loading, setLoading] = useState(false);\n const { priority, id, number: phoneNumber } = number;\n const canBeUp = priority > 1;\n const canBeDown = priority < 10;\n const priorityUp = priority - 1;\n const priorityDown = priority + 1;\n\n useEventSubscription(OnPhoneNumberUpdateEvent, () => {\n setLoading(false);\n });\n useEventSubscription(OnPhoneNumberUpdateError, () => {\n setLoading(false);\n });\n if (loading) {\n return ;\n }\n return (\n <>\n {canBeDown ? (\n {\n setLoading(true);\n updatePhoneNumber(id, {\n priority: priorityDown,\n number: phoneNumber,\n });\n }}>\n \n \n ) : (\n \n )}\n {priority}\n {canBeUp ? (\n {\n setLoading(true);\n updatePhoneNumber(number.id, {\n priority: priorityUp,\n number: phoneNumber,\n });\n }}>\n \n \n ) : (\n \n )}\n >\n );\n}\n\nPhoneNumberPriority.propTypes = {\n number: PropTypes.object.isRequired,\n};\n\nexport default PhoneNumberPriority;\n","import React, { useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { Pagination, Table, Dropdown, Icon, Menu } from '@8base/boost';\nimport { usePhoneNumbersList } from '../phone-numbers-hooks';\nimport { formatPhoneNumber } from '../../../phone-calls/phone-calls-utils';\nimport { PhoneStatus } from './PhoneStatus';\nimport { TableBody, PaginationWrapper } from '../../components/Card';\nimport styled from 'styled-components';\nimport { updatePhoneNumber } from '../phone-numbers-actions';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as toast from 'shared/components/toast/Toast';\nimport DeleteNumberModal from './DeleteNumberModal';\nimport PhoneNumberPriority from './PhoneNumberPriority';\nimport {\n OnPhoneNumberDeleteError,\n OnPhoneNumberDeleteEvent,\n OnPhoneNumberUpdateError,\n OnPhoneNumberUpdateEvent,\n OnPurchasedPhoneNumbersEvent,\n} from '../phone-numbers-events';\nconst tableColumns = '80px minmax(150px,1fr) minmax(250px,1fr) minmax(150px,1fr) minmax(150px,1fr)';\nconst PAGE_SIZE = 10;\n\nconst BodyCell = styled(Table.BodyCell)`\n justify-content: center !important;\n`;\nconst HeaderCell = styled(Table.HeaderCell)`\n justify-content: center !important;\n`;\n/**\n * @param {object} props Props\n * @param {string} props.agency Agency id\n * @returns {object} React Component\n */\nfunction PhoneNumbersList({ agency }) {\n const [page, setPage] = useState(1);\n const [deleteModal, setDeleteModal] = useState('');\n const queryOffset = (page - 1) * PAGE_SIZE;\n const [menuOpen, setMenuOpen] = useState('');\n const [numbers, loading, total, refetch] = usePhoneNumbersList(agency, PAGE_SIZE, queryOffset);\n\n // to pass up in the tree the refecth function so the list can be updated when an phone number is added\n\n const openMenu = useCallback((itemId) => {\n setMenuOpen((id) => (id === itemId ? '' : itemId));\n }, []);\n\n const closeDeleteModal = useCallback(() => {\n setDeleteModal('');\n }, []);\n\n useEventSubscription(OnPurchasedPhoneNumbersEvent, (numbers) => {\n refetch();\n });\n useEventSubscription(OnPhoneNumberUpdateEvent, () => {\n toast.success('Updated successfully');\n refetch();\n });\n useEventSubscription(OnPhoneNumberUpdateError, (e) => {\n toast.error(`Failed to update ${JSON.stringify(e)}`);\n });\n\n useEventSubscription(OnPhoneNumberDeleteEvent, () => {\n toast.success('Delete successfully');\n refetch();\n closeDeleteModal();\n });\n\n useEventSubscription(OnPhoneNumberDeleteError, (e) => {\n toast.error(`Failed to delete ${JSON.stringify(e)}`);\n closeDeleteModal();\n });\n\n const shouldShowDeleteModal = deleteModal !== '';\n\n return (\n <>\n \n \n #\n Number\n Status\n Priority\n Actions\n \n \n {(item, i) => (\n \n {i + 1 + queryOffset}\n {formatPhoneNumber(`${item.number.code}${item.number.number}`)}\n \n \n \n \n \n \n \n openMenu(item.id)}>\n \n \n \n \n \n \n updatePhoneNumber(item.id, {\n status: !item.status,\n number: item.number,\n })\n }>\n {item.status ? 'Deactivate' : 'Activate'}\n \n setDeleteModal(item.id)}>Delete\n \n \n \n \n \n )}\n \n \n \n \n \n \n \n {shouldShowDeleteModal && (\n \n )}\n >\n );\n}\n\nPhoneNumbersList.defaultProps = {\n setRefetch: () => null,\n};\nPhoneNumbersList.propTypes = {\n agency: PropTypes.string.isRequired,\n};\n\nexport default PhoneNumbersList;\n","import { useState, useEffect, useCallback } from 'react';\nimport { fetchPhoneNumbersList, fetchTwilioPhoneNumbersList } from './phone-numbers-actions';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport * as toast from 'shared/components/toast/Toast';\nimport { fetchSession } from '../../auth/auth.actions';\nimport {\n OnPhoneNumbersListError,\n OnPhoneNumbersListEvent,\n OnTwilioPhonenumbersListError,\n OnTwilioPhonenumbersListEvent,\n} from './phone-numbers-events';\n\n/**\n * @typedef {object} PhoneNumber\n * @property {object.<{number:string,code:string}>} number Phone number object with code and number properties\n * @property {number} priority priority of the phone number\n * @property {boolean} status status active/inactive\n * @property {string} id Id of the phone\n */\n/**\n * @typedef {[Array., boolean,number]} HookState array\n * @param {string} agency Agency Id\n * @param {number} pageSize Page size\n * @param {number} queryOffset Offset\n * @returns {HookState} Hook array\n */\nexport function usePhoneNumbersList(agency, pageSize, queryOffset) {\n const [numbers, setNumbers] = useState([]);\n const [count, setCount] = useState(0);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n if (!agency) {\n return;\n }\n fetchPhoneNumbersList(agency, pageSize, queryOffset);\n }, [agency, pageSize, queryOffset]);\n const refetch = useCallback(\n (fetchPolicy = 'network-only') => {\n fetchPhoneNumbersList(agency, pageSize, queryOffset, fetchPolicy);\n fetchSession();\n },\n [agency, pageSize, queryOffset],\n );\n useEventSubscription(OnPhoneNumbersListEvent, (data) => {\n const {\n phoneNumbersList: { items, count },\n } = data;\n setLoading(false);\n setCount(count);\n setNumbers(items);\n });\n useEventSubscription(OnPhoneNumbersListError, (data) => {\n toast.error(JSON.stringify(data));\n setLoading(false);\n });\n return [numbers, loading, count, refetch];\n}\n/**\n * @typedef {object} TwilioPhoneNumber\n * @property {string} friendlyName Formated phone number (555) 555-5555\n * @property {string} phoneNumber Phone number +15555555555\n * @property {string} region Phone region NJ\n */\n/**\n * @typedef {[Array., boolean,Function]} TwilioHookState array\n * @returns {TwilioHookState} Hook state\n */\nexport function useTwilioPhoneNumbersList(type) {\n const [{ numbers, loading }, setState] = useState({\n numbers: [],\n loading: true,\n });\n\n useEffect(() => {\n console.log('FROM useTwilioPhoneNumbersList', type);\n setState((state) => ({ ...state, loading: true }));\n fetchTwilioPhoneNumbersList(null, type);\n }, [type]);\n\n const refetch = useCallback(\n (search) => {\n setState((state) => ({ ...state, loading: true }));\n fetchTwilioPhoneNumbersList(search, type);\n },\n [type],\n );\n\n useEventSubscription(OnTwilioPhonenumbersListEvent, (phoneNumbers) => {\n setState((state) => ({\n ...state,\n loading: false,\n numbers: phoneNumbers,\n }));\n });\n\n useEventSubscription(OnTwilioPhonenumbersListError, () => {\n toast.error('Error loading phone numbers');\n setState((state) => ({ ...state, loading: false }));\n });\n return [numbers, loading, refetch];\n}\n","import React, { useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, InputField, Row } from '@8base/boost';\n\n/**\n * @param {object} props Props\n * @returns {object} React component\n */\nfunction SearchBarNumbers({ search: searchAction }) {\n const [search, setSearch] = useState('');\n const handleSearchChange = useCallback(({ target }) => {\n const { value } = target;\n setSearch(value);\n }, []);\n\n return (\n \n \n searchAction(search)}>\n Search\n \n \n );\n}\n\nSearchBarNumbers.propTypes = {\n search: PropTypes.func.isRequired,\n};\n\nexport default SearchBarNumbers;\n","import React, { memo } from 'react';\nimport PropTypes from 'prop-types';\nimport { Table, Checkbox } from '@8base/boost';\nimport { ALL_PHONE_NUMBERS } from '../phone-numbers-model';\n\n/**\n * @param {object} props props\n * @param {Function} props.handleChange Handle change\n * @param {Array} props.numbers Numbers array\n * @param {Array} props.selectedNumbers Selacted Numbers array\n * @param {boolean} props.loading Loading state\n * @returns {object} React component\n */\nfunction AvailablePhoneNumberList({ handleChange, numbers, selectedNumbers, loading }) {\n const allSelected = selectedNumbers.length === numbers.length && !loading;\n return (\n \n \n \n handleChange(value, ALL_PHONE_NUMBERS)}\n />\n \n Number\n Friendly Number\n Region\n \n\n \n {(item, i) => (\n \n \n handleChange(value, item.phoneNumber)}\n checked={selectedNumbers.includes(item.phoneNumber)}\n />\n \n {item.phoneNumber}\n {item.friendlyName}\n {item.region}\n \n )}\n \n \n );\n}\nAvailablePhoneNumberList.propTypes = {\n handleChange: PropTypes.func.isRequired,\n numbers: PropTypes.arrayOf(PropTypes.object).isRequired,\n selectedNumbers: PropTypes.arrayOf(PropTypes.string).isRequired,\n loading: PropTypes.bool.isRequired,\n};\nexport default memo(AvailablePhoneNumberList);\n","export const ALL_PHONE_NUMBERS = 'ALL';\n","import gql from 'graphql-tag';\n\nexport const SubscriptionPlanItemFragment = gql`\n fragment SubscriptionPlanItemFragment on SubscriptionPlanItem {\n id\n name\n price\n initialQuantity\n stripePriceId\n description\n }\n`;\n\nexport const FETCH_SUBSCRIPTION_PLAN_ITEMS = gql`\n query FetchSubscriptionPlanItems(\n $filter: SubscriptionPlanItemFilter\n $first: Int\n $skip: Int\n $orderBy: [SubscriptionPlanItemOrderBy]\n ) {\n subscriptionPlanItemsList(filter: $filter, first: $first, skip: $skip, orderBy: $orderBy) {\n items {\n ...SubscriptionPlanItemFragment\n }\n }\n }\n ${SubscriptionPlanItemFragment}\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnSubItemFetchByName = createEvent();\n\nexport const OnSubItemFetchByNameError = createEvent();\n","import { FETCH_SUBSCRIPTION_PLAN_ITEMS } from './subscription-plan-item-queries';\nimport { OnSubItemFetchByName, OnSubItemFetchByNameError } from './subscription-plan-item-events';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport { error, log } from '@cobuildlab/pure-logger';\n\n/**\n * Fetches a subscription item by its name\n *\n * @param {string} name - The subscription item name to search\n *\n * @returns {Promise} The request result\n */\nexport const fetchSubscriptionItemByName = async (name) => {\n const client = OnApolloClient.get();\n const first = 1;\n const skip = 0;\n const filter = { name: { equals: name } };\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_SUBSCRIPTION_PLAN_ITEMS,\n variables: { first, skip, filter },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchSubscriptionItemByName', e);\n\n return OnSubItemFetchByNameError.dispatch(e);\n }\n\n log('fetchSubscriptionItemByName', response.data);\n\n return OnSubItemFetchByName.dispatch(response.data);\n};\n","export const SUBSCRIPTION_ITEMS = {\n PHONE_NUMBER: 'Phone Number',\n};\n","import React, { useCallback, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Row, Modal, Card, Icon } from '@8base/boost';\nimport { useTwilioPhoneNumbersList } from '../phone-numbers-hooks';\nimport { ALL_PHONE_NUMBERS } from '../phone-numbers-model';\nimport SearchBarNumbers from './SearchBarNumbers';\nimport AvailablePhoneNumberList from './AvailablePhoneNumberList';\nimport { parsePhoneNumber, getPhoneNumbersString } from '../phone-numbers-utils';\nimport { purchasePhoneNumbers } from '../phone-numbers-actions';\nimport { useSubscriptionItem } from '../../../subscription-plan/subscription-plan-item/subscription-plan-item-hooks';\nimport { SUBSCRIPTION_ITEMS } from '../../../subscription-plan/subscription-plan-item/subscription-plan-item-model';\nimport * as toast from 'shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { Header, CardTitle } from '../../components/Card';\nimport styled from 'styled-components';\nimport {\n OnPurchasedPhoneNumbersError,\n OnPurchasedPhoneNumbersEvent,\n} from '../phone-numbers-events';\nimport { OnApolloClient } from 'shared/session/session-events';\nimport gql from 'graphql-tag';\n\nconst { PHONE_NUMBER } = SUBSCRIPTION_ITEMS;\n\nconst Body = styled(Card.Body)`\n max-height: 60vh;\n`;\n\nconst AGENCY_STATUS_QUERY = gql`\n query agency_status($id: ID) {\n agency(id: $id) {\n twilioBusinessType\n }\n }\n`;\n/**\n * @param {object} props Props\n * @param {Function} props.close Function to close the modal\n * @param {boolean} props.isOpen Boolean to show or hide the modal\n * @returns {object} React component\n */\nfunction AddPhoneNumbers({ close, isOpen, user, agency, company }) {\n const [selectedNumbers, setSelectedNumbers] = useState([]);\n const [purchasing, setPurchasing] = useState(false);\n const { item, loading: loadingItem, error } = useSubscriptionItem(PHONE_NUMBER);\n const [phoneType, setPhoneType] = useState('Local');\n const [numbers, loading, search] = useTwilioPhoneNumbersList(phoneType);\n\n const changePhoneType = (type) => {\n console.log('PHONE TYPE CHANGED');\n if (type === 'Toll-Free') {\n setPhoneType('Toll-Free');\n } else {\n setPhoneType('Local');\n }\n };\n\n useEffect(() => {\n console.log('phoneType', phoneType);\n }, [phoneType]);\n\n useEffect(() => {\n if (error) {\n onErrorMixinFC(error);\n }\n }, [error]);\n\n const handlePhonesChange = useCallback(\n (value, number) => {\n if (number === ALL_PHONE_NUMBERS) {\n if (value) {\n const allNumbers = numbers.map((item) => item.phoneNumber);\n setSelectedNumbers(allNumbers);\n } else {\n setSelectedNumbers([]);\n }\n } else {\n if (value) {\n setSelectedNumbers((currentNumbers) => [...currentNumbers, number]);\n } else {\n // filter the current array to remove the selected number\n setSelectedNumbers((currentNumbers) => currentNumbers.filter((num) => num !== number));\n }\n }\n },\n [numbers],\n );\n const purchase = useCallback(() => {\n const parsedNumbers = selectedNumbers.map((item) => parsePhoneNumber(item));\n\n setPurchasing(true);\n purchasePhoneNumbers({ user, agency, company, item: item.id }, parsedNumbers);\n }, [selectedNumbers, user, agency, company, item]);\n\n useEventSubscription(OnPurchasedPhoneNumbersEvent, (numbers) => {\n const string = getPhoneNumbersString(numbers);\n\n toast.success(`The numbers ${string} were purchased successfully`);\n\n setPurchasing(false);\n close();\n });\n useEventSubscription(OnPurchasedPhoneNumbersError, (error) => {\n if (Array.isArray(error)) {\n const string = getPhoneNumbersString(error);\n\n toast.error(`The numbers ${string} are not available anymore`);\n } else {\n onErrorMixinFC(error);\n }\n\n setPurchasing(false);\n });\n\n return (\n <>\n \n \n \n Phone Numbers\n \n \n \n \n \n \n \n changePhoneType('Local')}>\n Local Phone Numbers\n \n changePhoneType('Toll-Free')}>\n Toll-Free Phone Numbers\n \n \n \n \n \n \n \n \n \n Cancel\n \n \n Purchase\n \n \n \n \n \n >\n );\n}\n\nAddPhoneNumbers.propTypes = {\n close: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n user: PropTypes.string.isRequired,\n agency: PropTypes.string.isRequired,\n company: PropTypes.string.isRequired,\n};\n\nexport default AddPhoneNumbers;\n","import { useState, useEffect } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchSubscriptionItemByName } from './subscription-plan-item-actions';\nimport { OnSubItemFetchByName, OnSubItemFetchByNameError } from './subscription-plan-item-events';\n\n/**\n * Hook that returns the subscription item by its name\n *\n * @param {string} itemName - The item name\n *\n * @returns {object} The hook state\n */\nexport function useSubscriptionItem(itemName) {\n const [name, setName] = useState(itemName);\n const [state, setState] = useState({\n item: null,\n loading: true,\n error: null,\n setName,\n });\n\n useEffect(() => {\n setState((state) => ({\n ...state,\n loading: true,\n }));\n\n fetchSubscriptionItemByName(name);\n }, [name]);\n\n useSubscription(\n OnSubItemFetchByName,\n ({ subscriptionPlanItemsList }) => {\n const [item] = subscriptionPlanItemsList.items;\n\n setState((state) => ({\n ...state,\n item: item,\n loading: false,\n error: null,\n }));\n },\n [],\n );\n\n useSubscription(\n OnSubItemFetchByNameError,\n (e) => {\n setState((state) => ({\n ...state,\n item: null,\n loading: false,\n error: e,\n }));\n },\n [],\n );\n\n return state;\n}\n","import React, { useState, useCallback } from 'react';\nimport { Card, Row } from '@8base/boost';\nimport { Body } from '../components/Card';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport PhoneNumbersList from './components/PhoneNumbersList';\nimport AddPhoneNumbers from './components/AddPhoneNumbers';\nimport { CreateButton } from 'shared/components';\nimport { Box } from '../../../shared/components/Box';\n\n/**\n * View of the phone numbers management in settings\n *\n * @returns {object} Phone numbers view component\n */\nexport default function PhoneNumberView() {\n const [showModal, setShowModal] = useState(false);\n const agency = useAgency();\n const [user] = useUser();\n\n const closeModal = useCallback(() => {\n setShowModal(false);\n }, []);\n\n const openModal = useCallback(() => {\n setShowModal(true);\n }, []);\n\n return (\n \n \n \n \n \n \n \n \n \n \n {showModal && (\n \n )}\n \n \n );\n}\n","import { ValidationError } from '../../../shared/errors';\nimport { isValidString } from '../../../shared/validators';\n\nexport const updateUserSignatureValidator = (data) => {\n let errorMessages = [];\n if (data.isEnableSignature && !isValidString(data.signature)) {\n errorMessages.push('Signature can not be empty.');\n }\n if (data.signature.length > 2000) {\n errorMessages.push('Very long Signature');\n }\n\n if (errorMessages.length !== 0) throw new ValidationError(errorMessages);\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnUserSignatureUpdateEvent = createEvent();\n\nexport const OnUserSignatureUpdateError = createEvent();\n\nexport const OnTestConnectEvent = createEvent();\n\nexport const OnTestConnectError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { UPDATE_USER } from '../../auth/queries';\nimport { OnApolloClient, OnSessionFetch } from '../../../shared/session/session-events';\nimport { updateUserSignatureValidator } from './email-validators';\nimport {\n OnTestConnectError,\n OnTestConnectEvent,\n OnUserSignatureUpdateError,\n OnUserSignatureUpdateEvent,\n} from './email-events';\n\n/**\n * Update user signature\n *\n * @param {object} data - the fields to update the user signature\n */\nexport const updateUserSignature = async (data) => {\n const client = OnApolloClient.get();\n const user = OnSessionFetch.get().user;\n data.id = user.id;\n let response;\n\n try {\n updateUserSignatureValidator(data);\n } catch (e) {\n error('updateUserSignature', e);\n console.log(e);\n return OnUserSignatureUpdateError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: UPDATE_USER,\n variables: { data },\n });\n } catch (e) {\n error('updateUserSignature', e);\n return OnUserSignatureUpdateError.dispatch(e);\n }\n\n log('updateUserSignature', response);\n OnUserSignatureUpdateEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Tests the connection with the give parameters\n *\n * @param {object} data - Data sent to the endpoint to test the connection\n * @param {string} type - The type of service to be tested\n *\n * @returns {Promise} The request result\n */\nexport const testConnection = async (data, type = 'inbound') => {\n let response = null;\n\n try {\n response = await fetch(\n `${process.env.REACT_APP_WORKSPACE_ENDPOINT}/webhook/email/test/${type}/connection`,\n {\n method: 'POST',\n body: JSON.stringify(data),\n },\n );\n } catch (e) {\n error('testConnection', e);\n\n return OnTestConnectError.dispatch(e);\n }\n\n if (response.status !== 200) {\n error('testConnection');\n\n return OnTestConnectError.dispatch();\n }\n\n log('testConnection');\n OnTestConnectEvent.dispatch();\n};\n","import React, { useState, useCallback } from 'react';\nimport { Button, Icon } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { testConnection } from '../../my-account/email/email-actions';\nimport * as Toast from '../../../shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\nimport { OnTestConnectError, OnTestConnectEvent } from 'modules/my-account/email/email-events';\n\n/**\n * Renders a button used to test SMTP, POP and IMAP connections\n *\n * @param {object} props - The compoment props\n * @param {object} props.data - The connection parameters\n * @param {string} props.type - Type of connection, either \"inbound\" or \"outbound\"\n *\n * @returns {React.FC} The component to render\n */\nfunction TestConnectionButton({ data, type, disabled }) {\n const [loading, setLoading] = useState();\n const [color, setColor] = useState('neutral');\n\n const handleClick = useCallback(() => {\n setLoading(true);\n setColor('neutral');\n\n testConnection(data, type);\n }, [data, type]);\n\n useEventSubscription(OnTestConnectEvent, () => {\n setLoading(false);\n setColor('success');\n\n setTimeout(() => setColor('neutral'), 5000);\n\n Toast.success('Success', `Connected successfully to client`);\n });\n\n useEventSubscription(OnTestConnectError, () => {\n setLoading(false);\n setColor('danger');\n\n setTimeout(() => setColor('neutral'), 5000);\n\n Toast.error(`The connection with the client failed`);\n });\n\n let text = 'Test Connection';\n\n if (color === 'success') {\n text = 'Success';\n } else if (color === 'danger') {\n text = 'Wrong Credentials';\n }\n\n return (\n \n {color === 'success' && }\n {color === 'danger' && }\n {text}\n \n );\n}\n\nTestConnectionButton.propTypes = {\n data: PropTypes.object.isRequired,\n type: PropTypes.string.isRequired,\n disabled: PropTypes.bool,\n};\n\nTestConnectionButton.defaultProps = {\n disabled: false,\n};\n\nexport default TestConnectionButton;\n","import gql from 'graphql-tag';\n\nexport const InboundFragment = gql`\n fragment InboundFragment on EmailInboundService {\n id\n description\n protocol\n server\n port\n connection\n username\n password\n active\n }\n`;\n\nexport const INBOUND_SERVICE_SETTINGS_QUERY = gql`\n query FetchInboundServiceSettings($first: Int, $filter: EmailInboundServiceFilter) {\n emailInboundServicesList(first: $first, filter: $filter) {\n items {\n ...InboundFragment\n }\n }\n }\n ${InboundFragment}\n`;\n\nexport const CREATE_INBOUND_SERVICE_MUTATION = gql`\n mutation CreateEmailInboundService($data: EmailInboundServiceCreateInput!) {\n emailInboundServiceCreate(data: $data) {\n ...InboundFragment\n }\n }\n ${InboundFragment}\n`;\n\nexport const UPDATE_INBOUND_SERVICE_MUTATION = gql`\n mutation UpdateEmailInboundService($data: EmailInboundServiceUpdateInput!) {\n emailInboundServiceUpdate(data: $data) {\n ...InboundFragment\n }\n }\n ${InboundFragment}\n`;\n\nexport const UPDATE_MANY_INBOUND_SERVICES = gql`\n mutation UpdateEmailInboundServices(\n $data: EmailInboundServiceUpdateByFilterInput!\n $filter: EmailInboundServiceFilter!\n ) {\n emailInboundServiceUpdateByFilter(data: $data, filter: $filter) {\n count\n }\n }\n`;\n","import gql from 'graphql-tag';\n\nexport const OutboundFragment = gql`\n fragment OutboundFragment on EmailOutboundService {\n id\n description\n server\n port\n connection\n username\n password\n active\n fallback\n }\n`;\n\nexport const QUERY_OUTBOUND_SERVICE_SETTINGS = gql`\n query FetchOutboundEmailServices($first: Int, $filter: EmailOutboundServiceFilter) {\n emailOutboundServicesList(first: $first, filter: $filter) {\n items {\n ...OutboundFragment\n }\n }\n }\n ${OutboundFragment}\n`;\n\nexport const CREATE_OUTBOUND_SERVICE_MUTATION = gql`\n mutation CreateOutboundEmailService($data: EmailOutboundServiceCreateInput!) {\n emailOutboundServiceCreate(data: $data) {\n ...OutboundFragment\n }\n }\n ${OutboundFragment}\n`;\n\nexport const DISABLE_EMAIL_SERVICES = gql`\n mutation DisableEmailServices($agency: ID!, $user: ID!) {\n emailOutboundServiceUpdateByFilter(\n filter: { user: { id: { equals: $user } }, agency: { id: { equals: $agency } } }\n data: { active: [{ set: false }] }\n ) {\n count\n }\n emailInboundServiceUpdateByFilter(\n filter: { user: { id: { equals: $user } }, agency: { id: { equals: $agency } } }\n data: { active: [{ set: false }] }\n ) {\n count\n }\n gmailServiceUpdateByFilter(\n filter: { user: { id: { equals: $user } }, agency: { id: { equals: $agency } } }\n data: { active: [{ set: false }] }\n ) {\n count\n }\n outlookServiceUpdateByFilter(\n filter: { user: { id: { equals: $user } }, agency: { id: { equals: $agency } } }\n data: { active: [{ set: false }] }\n ) {\n count\n }\n }\n`;\n\nexport const DISABLE_THIRD_PARTY_SERVICES = gql`\n mutation DisableThirdPartyServices($agency: ID!, $user: ID!) {\n gmailServiceUpdateByFilter(\n filter: { user: { id: { equals: $user } }, agency: { id: { equals: $agency } } }\n data: { active: [{ set: false }] }\n ) {\n count\n }\n outlookServiceUpdateByFilter(\n filter: { user: { id: { equals: $user } }, agency: { id: { equals: $agency } } }\n data: { active: [{ set: false }] }\n ) {\n count\n }\n }\n`;\n\nexport const UPDATE_OUTBOUND_SERVICE_MUTATION = gql`\n mutation UpdateOutboundEmailService($data: EmailOutboundServiceUpdateInput!) {\n emailOutboundServiceUpdate(data: $data) {\n ...OutboundFragment\n }\n }\n ${OutboundFragment}\n`;\n\nexport const UPDATE_MANY_OUTBOUND_SERVICES = gql`\n mutation UpdateOuboundEmailServices(\n $data: EmailOutboundServiceUpdateByFilterInput!\n $filter: EmailOutboundServiceFilter!\n ) {\n emailOutboundServiceUpdateByFilter(data: $data, filter: $filter) {\n count\n }\n }\n`;\n\nexport const FETCH_GMAIL_SERVICE = gql`\n query FetchGmailServices(\n $filter: GmailServiceFilter\n $first: Int\n $skip: Int\n $sort: [GmailServiceSort!]\n ) {\n gmailServicesList(filter: $filter, first: $first, skip: $skip, sort: $sort) {\n items {\n id\n active\n profile {\n id\n name\n email\n avatar\n }\n }\n }\n }\n`;\n\nexport const CREATE_GMAIL_SERVICE = gql`\n mutation CreateGmailService($data: GmailServiceCreateInput!) {\n gmailServiceCreate(data: $data) {\n id\n active\n profile {\n id\n name\n email\n avatar\n }\n }\n }\n`;\n\nexport const UPDATE_GMAIL_SERVICE = gql`\n mutation UpdateGmailSerivce(\n $filter: GmailServiceKeyFilter\n $data: GmailServiceUpdateInput!\n $force: Boolean\n ) {\n gmailServiceUpdate(filter: $filter, data: $data, force: $force) {\n id\n active\n profile {\n id\n name\n email\n avatar\n }\n }\n }\n`;\n\nexport const LOGOUT_FROM_GMAIL_SERVICE = gql`\n mutation LogoutFromGmailService($agency: ID!) {\n googleLogout(agency: $agency) {\n id\n active\n profile {\n id\n name\n email\n avatar\n }\n }\n }\n`;\n\nexport const FETCH_GOOGLE_AUTH_URL = gql`\n query FetchGoogleAuthUrl($agency: ID!, $from: AuthFrom!) {\n googleAuthUrl(agency: $agency, from: $from) {\n url\n }\n }\n`;\n\nexport const EXCHANGE_CODE_FOR_TOKENS = gql`\n mutation ExchangeGoogleCodeForToken($agency: ID!, $code: String!, $from: AuthFrom!) {\n googleExchangeTokens(agency: $agency, code: $code, from: $from) {\n id\n active\n name\n email\n avatar\n accessToken\n refreshToken\n }\n }\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchInboundService = createEvent();\n\nexport const OnFetchInboundServiceError = createEvent();\n\nexport const OnUpdateInboundService = createEvent();\n\nexport const OnUpdateInboundServiceError = createEvent();\n\nexport const OnDisableInboundServices = createEvent();\n\nexport const OnDisableInboundServicesError = createEvent();\n","export const CONNECTION_SECURITY_OPTIONS = [\n {\n label: 'None',\n value: 'None',\n },\n {\n label: 'TLS',\n value: 'TLS',\n },\n];\n\nexport const PROTOCOL_OPTIONS = [\n {\n label: 'POP',\n value: 'POP',\n },\n {\n label: 'IMAP',\n value: 'IMAP',\n },\n];\n","import { ValidationError } from '../../../shared/errors';\nimport { isValidString, isValidInteger } from '../../../shared/validators';\nimport { CONNECTION_SECURITY_OPTIONS, PROTOCOL_OPTIONS } from './inbound-model';\n\n/**\n * Validates the input when creating a outbound service\n *\n * @param {object} service - The service object\n * @param {string} service.id - Indicates the identifier of the service to update\n * @param {boolean} service.active - Indicates if the current configuration is active\n * @param {number} service.priority - This email service priority\n * @param {string} service.server - The service smtp server\n * @param {number} service.port - The service smtp port\n * @param {string} service.connection - The service authentication option\n * @param {string} service.username - The authentication username\n * @param {string} service.password - The authentication password\n *\n * @returns {void}\n */\nexport const updateInboundServiceValidation = (service) => {\n const errors = [];\n\n if (!isValidString(service.id)) errors.push('The outbound service identifier is not correct');\n\n if (!service.active) {\n if (errors.length > 0) throw new ValidationError(errors);\n\n return;\n }\n\n if (!isValidString(service.server)) errors.push('The server must be a valid string');\n\n if (!isValidInteger(service.port)) errors.push('The port has to be an integer bigger than zero');\n\n if (CONNECTION_SECURITY_OPTIONS.every((con) => con.value !== service.connection))\n errors.push('The connection must be a valid option');\n\n if (PROTOCOL_OPTIONS.every((con) => con.value !== service.protocol))\n errors.push('The protocol must be a valid option');\n\n if (!isValidString(service.username)) errors.push('The username must be a valid string');\n\n if (!isValidString(service.password)) errors.push('The password must be a valid string');\n\n if (errors.length > 0) throw new ValidationError(errors);\n};\n","import { createAction } from '@cobuildlab/react-simple-state';\nimport {\n INBOUND_SERVICE_SETTINGS_QUERY,\n CREATE_INBOUND_SERVICE_MUTATION,\n UPDATE_INBOUND_SERVICE_MUTATION,\n UPDATE_MANY_INBOUND_SERVICES,\n} from './inbound-queries';\nimport {\n QUERY_OUTBOUND_SERVICE_SETTINGS,\n CREATE_OUTBOUND_SERVICE_MUTATION,\n DISABLE_THIRD_PARTY_SERVICES,\n} from '../outbound/outbound-queries';\nimport {\n OnFetchInboundService,\n OnFetchInboundServiceError,\n OnUpdateInboundService,\n OnUpdateInboundServiceError,\n OnDisableInboundServices,\n OnDisableInboundServicesError,\n} from './inbound-store';\nimport { updateInboundServiceValidation } from './inbound-validation';\nimport { OnApolloClient } from '../../../shared/session/session-events';\n\n/**\n * Fetches an inbound service binded to a agency\n *\n * @param {string} agencyId - The agency id\n * @param {string} userId - The user id\n *\n * @returns {Promise} The action result\n */\nexport const fetchInboundServices = createAction(\n OnFetchInboundService,\n OnFetchInboundServiceError,\n async (agencyId, userId) => {\n const client = OnApolloClient.get();\n const first = 1;\n const filter = {\n agency: { id: { equals: agencyId } },\n user: { id: { equals: userId } },\n };\n\n const {\n data: { emailInboundServicesList },\n } = await client.query({\n query: INBOUND_SERVICE_SETTINGS_QUERY,\n fetchPolicy: 'network-only',\n variables: {\n first,\n filter,\n },\n });\n\n const {\n data: { emailOutboundServicesList },\n } = await client.query({\n query: QUERY_OUTBOUND_SERVICE_SETTINGS,\n fetchPolicy: 'network-only',\n variables: {\n first,\n filter,\n },\n });\n\n let [inbound] = emailInboundServicesList.items;\n let [outbound] = emailOutboundServicesList.items;\n\n if (!outbound) {\n await client.mutate({\n mutation: CREATE_OUTBOUND_SERVICE_MUTATION,\n variables: {\n data: {\n description: 'Example connection configuration',\n server: 'smtp.example.com',\n port: 465,\n connection: 'None',\n active: false,\n agency: { connect: { id: agencyId } },\n user: { connect: { id: userId } },\n },\n },\n });\n }\n\n if (!inbound) {\n const {\n data: { emailInboundServiceCreate },\n } = await client.mutate({\n mutation: CREATE_INBOUND_SERVICE_MUTATION,\n variables: {\n data: {\n active: false,\n description: 'Example connection configuration',\n server: 'imap.example.com',\n protocol: 'IMAP',\n port: 993,\n connection: 'TLS',\n agency: { connect: { id: agencyId } },\n user: { connect: { id: userId } },\n },\n },\n });\n\n inbound = emailInboundServiceCreate;\n }\n\n return { emailInboundService: inbound };\n },\n);\n\n/**\n * Updates the email inbound service configuration\n *\n * @param {object} data - The inbound service object to update\n * @param {string} userId - The user id\n * @param {string} agencyId - The agency id\n *\n * @returns {Promise} - The action result\n */\nexport const updateInboundService = createAction(\n OnUpdateInboundService,\n OnUpdateInboundServiceError,\n async (data, userId, agencyId) => {\n const client = OnApolloClient.get();\n\n updateInboundServiceValidation(data);\n\n await client.mutate({\n mutation: DISABLE_THIRD_PARTY_SERVICES,\n variables: {\n user: userId,\n agency: agencyId,\n },\n });\n\n const response = await client.mutate({\n mutation: UPDATE_INBOUND_SERVICE_MUTATION,\n variables: { data },\n });\n\n return response.data;\n },\n);\n\n/**\n * Disable all inbound services\n *\n * @param {string} userId - The user id\n * @param {string} agencyId - The agency id\n *\n * @returns {Promise} The request result\n */\nexport const disableInboundServices = createAction(\n OnDisableInboundServices,\n OnDisableInboundServicesError,\n async (userId, agencyId) => {\n const client = OnApolloClient.get();\n\n await client.mutate({\n mutation: DISABLE_THIRD_PARTY_SERVICES,\n variables: {\n user: userId,\n agency: agencyId,\n },\n });\n\n await client.mutate({\n mutation: UPDATE_MANY_INBOUND_SERVICES,\n variables: {\n filter: {\n user: { id: { equals: userId } },\n agency: { id: { equals: agencyId } },\n },\n data: {\n active: [{ set: false }],\n },\n },\n });\n },\n);\n","import React, { useState, useEffect } from 'react';\nimport TestConnectionButton from '../../../email/components/TestConnectionButton';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchInboundServices, updateInboundService } from '../inbound-actions';\nimport { PROTOCOL_OPTIONS, CONNECTION_SECURITY_OPTIONS } from '../inbound-model';\nimport { Box } from '../../../../shared/components/Box';\nimport {\n Card as BoostCard,\n Row as BoostRow,\n Grid,\n SelectField,\n Column,\n Form,\n Radio,\n InputField,\n Button,\n styled,\n} from '@8base/boost';\nimport {\n OnFetchInboundService,\n OnFetchInboundServiceError,\n OnUpdateInboundService,\n OnUpdateInboundServiceError,\n} from '../inbound-store';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport { useAgency } from '../../../../shared/hooks/useAgency';\nimport { useUser } from '../../../../shared/hooks/useUser';\nimport PropTypes from 'prop-types';\n\nconst Card = styled(BoostCard)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\nconst Row = styled(BoostRow)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\nconst initialForm = {\n id: null,\n active: false,\n description: '',\n protocol: 'POP',\n server: '',\n port: 0,\n connection: 'None',\n username: '',\n password: '',\n loading: false,\n};\n\nexport const InboundForm = ({ type, setType }) => {\n const [form, setForm] = useState(initialForm);\n const [loading, setLoading] = useState(true);\n const agency = useAgency();\n const [user] = useUser();\n\n useEffect(() => {\n setLoading(true);\n\n fetchInboundServices(agency.id, user.id);\n }, [agency.id, user.id]);\n\n useSubscription(\n OnFetchInboundService,\n ({ emailInboundService }) => {\n setLoading(false);\n\n setForm((prevState) => ({\n ...prevState,\n ...emailInboundService,\n }));\n\n if (emailInboundService.active) {\n setType('CUSTOM');\n }\n },\n [],\n );\n\n useSubscription(\n OnFetchInboundServiceError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnUpdateInboundService,\n ({ emailInboundServiceUpdate }) => {\n setForm((prevState) => ({\n ...prevState,\n ...emailInboundServiceUpdate,\n }));\n\n setLoading(false);\n\n toast.success('Success', 'Email inbound service updated');\n },\n [],\n );\n\n useSubscription(\n OnUpdateInboundServiceError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const handleSubmit = () => {\n setLoading(true);\n\n updateInboundService(\n {\n id: form.id,\n active: true,\n description: form.description,\n protocol: form.protocol,\n server: form.server,\n port: form.port,\n connection: form.connection,\n username: form.username,\n password: form.password,\n },\n user.id,\n agency.id,\n );\n };\n\n const isCustom = type === 'CUSTOM';\n\n return (\n \n \n e.preventDefault()}>\n \n \n \n setType('CUSTOM')} />\n \n \n \n Connection Information\n \n \n setForm({ ...form, protocol: value }),\n }}\n stretch={false}\n />\n setForm({ ...form, description: value }),\n }}\n />\n setForm({ ...form, server: value }),\n }}\n stretch\n />\n setForm({ ...form, port: value }),\n }}\n width={10}\n />\n \n \n \n \n Security and Authentication\n \n \n setForm({ ...form, connection: value }),\n }}\n stretch={false}\n />\n setForm({ ...form, username: value }),\n }}\n stretch\n />\n setForm({ ...form, password: value }),\n }}\n stretch\n />\n \n \n \n \n \n \n \n \n \n \n \n \n Save\n \n \n \n \n );\n};\n\nInboundForm.propTypes = {\n type: PropTypes.string.isRequired,\n setType: PropTypes.func.isRequired,\n};\n","import gql from 'graphql-tag';\n\nexport const FETCH_OUTLOOK_SERVICES = gql`\n query FetchOurlookServices(\n $filter: OutlookServiceFilter\n $first: Int\n $skip: Int\n $sort: [OutlookServiceSort!]\n ) {\n outlookServicesList(filter: $filter, first: $first, skip: $skip, sort: $sort) {\n count\n items {\n id\n active\n profile {\n id\n name\n email\n }\n }\n }\n }\n`;\n\nexport const CREATE_OUTLOOK_SERVICE = gql`\n mutation CreateOulookService($data: OutlookServiceCreateInput!) {\n outlookServiceCreate(data: $data) {\n id\n active\n profile {\n id\n name\n email\n }\n }\n }\n`;\n\nexport const UPDATE_OUTLOOK_SERVICE = gql`\n mutation UpdateOutlookService(\n $data: OutlookServiceUpdateInput!\n $filter: OutlookServiceKeyFilter\n ) {\n outlookServiceUpdate(data: $data, filter: $filter) {\n id\n active\n profile {\n id\n name\n email\n }\n }\n }\n`;\n\nexport const FETCH_AZURE_AUTH_URL = gql`\n query FetchAzureAuthUrl($agency: ID!, $from: AuthFrom!) {\n azureAuthUrl(agency: $agency, from: $from) {\n url\n }\n }\n`;\n\nexport const EXCHANGE_CODE_FOR_TOKENS = gql`\n mutation ExchangeOutlookCodeForTokens($agency: ID!, $code: String!, $from: AuthFrom!) {\n azureExchangeTokens(agency: $agency, code: $code, from: $from) {\n id\n active\n profile {\n id\n name\n email\n }\n }\n }\n`;\n\nexport const LOGOUT_FROM_AZURE = gql`\n mutation LogoutFromAzure($agency: ID!) {\n azureLogout(agency: $agency) {\n id\n active\n profile {\n id\n name\n email\n }\n }\n }\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnAzureAuthUrl = createEvent();\n\nexport const OnAzureAuthUrlError = createEvent();\n\nexport const OnFetchOutlookService = createEvent();\n\nexport const OnFetchOutlookServiceError = createEvent();\n\nexport const OnEnableOutlookService = createEvent();\n\nexport const OnEnableOutlookServiceError = createEvent();\n\nexport const OnExchangeOutlookCode = createEvent();\n\nexport const OnExchangeOutlookCodeError = createEvent();\n\nexport const OnAzureLogout = createEvent();\n\nexport const OnAzureLogoutError = createEvent();\n","import { createAction } from '@cobuildlab/react-simple-state';\nimport {\n CREATE_OUTLOOK_SERVICE,\n FETCH_AZURE_AUTH_URL,\n FETCH_OUTLOOK_SERVICES,\n UPDATE_OUTLOOK_SERVICE,\n EXCHANGE_CODE_FOR_TOKENS,\n LOGOUT_FROM_AZURE,\n} from './azure-queries';\nimport { DISABLE_EMAIL_SERVICES } from '../settings/outbound/outbound-queries';\nimport {\n OnAzureAuthUrl,\n OnAzureAuthUrlError,\n OnFetchOutlookService,\n OnFetchOutlookServiceError,\n OnEnableOutlookService,\n OnEnableOutlookServiceError,\n OnExchangeOutlookCode,\n OnExchangeOutlookCodeError,\n OnAzureLogout,\n OnAzureLogoutError,\n} from './azure-events';\nimport { OnApolloClient } from '../../shared/session/session-events';\n\n/**\n * Fetches the user's outlook service in the\n * specified agency\n *\n * @param {string} user - The id of the user\n * @param {string} agency - The id of the agency\n *\n * @returns {Promise} The outlook service object\n */\nexport const fetchOutlookService = createAction(\n OnFetchOutlookService,\n OnFetchOutlookServiceError,\n async (user, agency) => {\n const client = OnApolloClient.get();\n\n const {\n data: { outlookServicesList },\n } = await client.query({\n query: FETCH_OUTLOOK_SERVICES,\n fetchPolicy: 'network-only',\n variables: {\n first: 1,\n filter: {\n user: { id: { equals: user } },\n agency: { id: { equals: agency } },\n },\n },\n });\n\n let [service] = outlookServicesList.items;\n\n if (!service) {\n const {\n data: { outlookServiceCreate },\n } = await client.mutate({\n mutation: CREATE_OUTLOOK_SERVICE,\n variables: {\n data: {\n user: { connect: { id: user } },\n agency: { connect: { id: agency } },\n active: false,\n },\n },\n });\n\n service = outlookServiceCreate;\n }\n\n return { outlookService: service || null };\n },\n);\n\nexport const enableOutlookService = createAction(\n OnEnableOutlookService,\n OnEnableOutlookServiceError,\n async (id, user, agency) => {\n const client = OnApolloClient.get();\n\n await client.mutate({\n mutation: DISABLE_EMAIL_SERVICES,\n variables: {\n user,\n agency,\n },\n });\n\n const response = await client.mutate({\n mutation: UPDATE_OUTLOOK_SERVICE,\n variables: {\n filter: { id },\n data: { active: true },\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Fetches the authorization url for\n * microsoft azure services\n *\n * @param {string} agency - The agency id\n * @param {string} from - The page fetching from \"inbound\" or \"outbound\"\n *\n * @returns {Promise} The authorization url\n */\nexport const fetchAzureAuthUrl = createAction(\n OnAzureAuthUrl,\n OnAzureAuthUrlError,\n async (agency, from) => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_AZURE_AUTH_URL,\n fetchPolicy: 'network-only',\n variables: {\n agency,\n from,\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Exchanges outlook code for access and refresh tokens\n *\n * @param {string} code - The authorization code\n * @param {string} agency - The agency id\n * @param {string} from - Either \"inbound\" or \"outbound\"\n *\n * @returns {Promise} The outlook service object\n */\nexport const exchangeOutlookCode = createAction(\n OnExchangeOutlookCode,\n OnExchangeOutlookCodeError,\n async (code, agency, from) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: EXCHANGE_CODE_FOR_TOKENS,\n variables: {\n code,\n agency,\n from,\n },\n });\n\n return response.data;\n },\n);\n\nexport const logoutFromAzure = createAction(OnAzureLogout, OnAzureLogoutError, async (agency) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: LOGOUT_FROM_AZURE,\n variables: {\n agency,\n },\n });\n\n return response.data;\n});\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { MicrosoftButton } from '../../../../shared/components/MicrosoftButton';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport {\n Card as BoostCard,\n Grid,\n Radio,\n Row as BoostRow,\n InputField,\n Button,\n styled,\n} from '@8base/boost';\nimport {\n enableOutlookService,\n fetchAzureAuthUrl,\n fetchOutlookService,\n exchangeOutlookCode,\n logoutFromAzure,\n} from '../../../email/azure-actions';\nimport {\n OnAzureAuthUrl,\n OnAzureAuthUrlError,\n OnEnableOutlookService,\n OnEnableOutlookServiceError,\n OnFetchOutlookService,\n OnFetchOutlookServiceError,\n OnExchangeOutlookCode,\n OnExchangeOutlookCodeError,\n OnAzureLogoutError,\n OnAzureLogout,\n} from '../../../email/azure-events';\nimport { useAgency } from '../../../../shared/hooks/useAgency';\nimport { useUser } from '../../../../shared/hooks/useUser';\nimport { useURLQuery } from '../../../../shared/hooks/useURLQuery';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\n\nconst Card = styled(BoostCard)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\nconst Row = styled(BoostRow)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\nexport const MicrosoftServiceForm = ({ from, type, setType }) => {\n const [service, setService] = useState(null);\n const [loading, setLoading] = useState(false);\n const [redirecting, setRedirecting] = useState(false);\n const [saving, setSaving] = useState(false);\n const [exiting, setExiting] = useState(false);\n const [query] = useURLQuery();\n const agency = useAgency();\n const [user] = useUser();\n\n useEffect(() => {\n setLoading(true);\n\n if (query.code) {\n /**\n * [0] The service used either \"google\" or \"azure\"\n * [1] The agency that started the auth flow\n */\n const state = query.state.split(',');\n\n if (state[0] === 'azure') {\n exchangeOutlookCode(query.code, state[1], from);\n } else {\n fetchOutlookService(user.id, agency.id);\n }\n } else {\n fetchOutlookService(user.id, agency.id);\n }\n }, [agency, user, from, query]);\n\n useSubscription(\n OnAzureAuthUrl,\n ({ azureAuthUrl }) => {\n window.location.href = azureAuthUrl.url;\n },\n [],\n );\n\n useSubscription(\n OnAzureAuthUrlError,\n (e) => {\n setRedirecting(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnFetchOutlookService,\n ({ outlookService }) => {\n setService(outlookService);\n setLoading(false);\n\n if (outlookService && outlookService.active) {\n setType('MICROSOFT');\n }\n },\n [],\n );\n\n useSubscription(\n OnFetchOutlookServiceError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnEnableOutlookService,\n ({ outlookServiceUpdate }) => {\n setService(outlookServiceUpdate);\n setSaving(false);\n\n toast.success('Success', 'Outlook service enabled successfuly');\n },\n [],\n );\n\n useSubscription(\n OnEnableOutlookServiceError,\n (e) => {\n setSaving(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnExchangeOutlookCode,\n ({ azureExchangeTokens }) => {\n console.log('process.env.NODE_ENV', process.env.NODE_ENV);\n\n if (process.env.NODE_ENV === 'test') {\n setService(azureExchangeTokens);\n setLoading(false);\n } else {\n window.location.href = `${window.location.origin}${window.location.pathname}`;\n }\n },\n [],\n );\n\n useSubscription(\n OnExchangeOutlookCodeError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnAzureLogout,\n ({ azureLogout }) => {\n setService(azureLogout);\n setExiting(false);\n setType('NONE');\n\n toast.success('Success', 'Logged out from azure successfuly');\n },\n [setType],\n );\n\n useSubscription(\n OnAzureLogoutError,\n (e) => {\n setExiting(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const onSignIn = useCallback(() => {\n if (!loading) {\n setRedirecting(true);\n\n fetchAzureAuthUrl(agency.id, from);\n }\n }, [agency, from, loading]);\n\n const onSave = useCallback(() => {\n setSaving(true);\n\n enableOutlookService(service.id, user.id, agency.id);\n }, [service, user.id, agency.id]);\n\n const onSignOut = useCallback(() => {\n setExiting(true);\n\n logoutFromAzure(agency.id);\n }, [agency]);\n\n const isSelected = type === 'MICROSOFT';\n\n const { profile } = service || {};\n\n return (\n \n \n \n \n setType('MICROSOFT')}\n />\n \n \n \n \n \n \n \n \n \n \n \n {(loading || (service && !service.profile)) && (\n \n Sign in with Microsoft\n \n )}\n {service && service.profile && (\n <>\n \n Save\n \n \n Logout\n \n >\n )}\n \n \n \n );\n};\n\nMicrosoftServiceForm.propTypes = {\n from: PropTypes.oneOf(['inbound', 'outbound']).isRequired,\n type: PropTypes.string.isRequired,\n setType: PropTypes.func.isRequired,\n};\n","import React, { useState, useCallback } from 'react';\nimport { InboundForm } from './components/InboundForm';\n// import { GmailServiceForm } from '../outbound/components/GmailServiceForm';\nimport { MicrosoftServiceForm } from '../outbound/components/MicrosoftServiceForm';\nimport { Box } from '../../../shared/components/Box';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { disableInboundServices } from './inbound-actions';\nimport { OnDisableInboundServices, OnDisableInboundServicesError } from './inbound-store';\nimport { Card as BoostCard, Row, Grid, Text, Radio, Loader, Column, styled } from '@8base/boost';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport * as toast from '../../../shared/components/toast/Toast';\n\nconst Card = styled(BoostCard)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\nconst InboundService = () => {\n const [loading, setLoading] = useState(false);\n const [type, setType] = useState('NONE');\n const agency = useAgency();\n const [user] = useUser();\n\n const handleTypeChange = useCallback(\n (value) => {\n if (!loading) {\n setType(value);\n\n if (value === 'NONE') {\n setLoading(true);\n\n disableInboundServices(user.id, agency.id);\n }\n }\n },\n [agency, user, loading],\n );\n\n useSubscription(\n OnDisableInboundServices,\n () => {\n setLoading(false);\n\n toast.success('Success', 'Inbound services disabled completely');\n },\n [],\n );\n\n useSubscription(\n OnDisableInboundServicesError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n return (\n \n \n {/* */}\n \n \n \n \n \n \n handleTypeChange('NONE')}\n />\n \n \n \n Disabled\n {loading && }\n \n \n \n \n \n \n \n );\n};\n\nexport default InboundService;\n","import React from 'react';\nimport { Icon, Text as BoostText, Row, styled } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport PropTypes from 'prop-types';\n\nconst Text = styled(BoostText)`\n font-size: 12px !important;\n`;\n\nexport const GmailServiceItem = ({ service, selected, setSelected }) => {\n const { profile } = service;\n\n return (\n setSelected(service)}>\n \n {service.id === selected?.id && }\n \n \n {profile.name} {`<${profile.email}>`}\n \n \n \n );\n};\n\nGmailServiceItem.propTypes = {\n service: PropTypes.shape({\n id: PropTypes.string.isRequired,\n profile: PropTypes.shape({\n name: PropTypes.string.isRequired,\n email: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n selected: PropTypes.string.isRequired,\n setSelected: PropTypes.func.isRequired,\n};\n","import React from 'react';\nimport { Icon, Text as BoostText, Row, styled } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport PropTypes from 'prop-types';\n\nconst Text = styled(BoostText)`\n font-size: 12px !important;\n`;\n\nexport const OutlookServiceItem = ({ service, selected, setSelected }) => {\n const { profile } = service;\n\n return (\n setSelected(service)}>\n \n {service.id === selected?.id && }\n \n \n {profile.name} {`<${profile.email}>`}\n \n \n \n );\n};\n\nOutlookServiceItem.propTypes = {\n service: PropTypes.shape({\n id: PropTypes.string.isRequired,\n profile: PropTypes.shape({\n name: PropTypes.string.isRequired,\n email: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n selected: PropTypes.string.isRequired,\n setSelected: PropTypes.func.isRequired,\n};\n","import React from 'react';\nimport { Icon, Text as BoostText, Row, styled } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport PropTypes from 'prop-types';\n\nconst Text = styled(BoostText)`\n font-size: 12px !important;\n`;\n\nexport const OutboundServiceItem = ({ service, selected, setSelected }) => {\n return (\n setSelected(service)}>\n \n {service.id === selected?.id && }\n \n \n {service.server} {`<${service.username}>`}\n \n \n \n );\n};\n\nOutboundServiceItem.propTypes = {\n service: PropTypes.shape({\n id: PropTypes.string.isRequired,\n server: PropTypes.string.isRequired,\n username: PropTypes.string.isRequired,\n }).isRequired,\n selected: PropTypes.string.isRequired,\n setSelected: PropTypes.func.isRequired,\n};\n","import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchAvailableEmailServices, setAgencyEmailService } from '../email-actions';\nimport {\n OnFetchAvailableEmailServices,\n OnFetchAvailableEmailServicesError,\n OnSetAgencyEmailServiceError,\n} from '../email-store';\nimport { Dialog, Row, Button, useModal, Loader, styled } from '@8base/boost';\nimport { GmailServiceItem } from './GmailServiceItem';\nimport { OutlookServiceItem } from './OutlookServiceItem';\nimport { OutboundServiceItem } from './OutboundServiceItem';\nimport { Box } from '../../../shared/components/Box';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { EmailServiceTypename } from '@cobuildlab/lead-volt-share';\nimport PropTypes from 'prop-types';\n\nconst Body = styled(Dialog.Body)`\n min-height: 300px;\n`;\n\nexport const modalId = 'email-service-dialog';\n\nexport const ChooseServiceDialog = ({ agency }) => {\n const { isOpen, args, closeModal } = useModal(modalId);\n const [selected, setSelected] = useState(null);\n const [services, setServices] = useState([]);\n const [loading, setLoading] = useState(true);\n const [submitting, setSubmitting] = useState(false);\n\n const onSubmit = useCallback(() => {\n setSubmitting(true);\n\n let type = 'outbound';\n\n if (selected.__typename === EmailServiceTypename.GMAIL) {\n type = 'gmail';\n }\n\n if (selected.__typename === EmailServiceTypename.OUTLOOK) {\n type = 'outlook';\n }\n\n setAgencyEmailService(args.agencyEmailServiceId, selected.id, type);\n }, [args, selected]);\n\n useEffect(() => {\n if (isOpen && args) {\n setLoading(true);\n setSelected(args.selected);\n\n fetchAvailableEmailServices(agency);\n } else {\n setSubmitting(false);\n }\n }, [isOpen, args, agency]);\n\n useSubscription(\n OnFetchAvailableEmailServices,\n ({ agencyAvailableEmailServices }) => {\n setServices(agencyAvailableEmailServices.items);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchAvailableEmailServicesError,\n (e) => {\n onErrorMixinFC(e);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(OnSetAgencyEmailServiceError, (e) => {\n onErrorMixinFC(e);\n setLoading(false);\n });\n\n const items = useMemo(\n () =>\n services.map((service) => {\n if (service.__typename === 'GmailService') {\n return (\n \n );\n }\n\n if (service.__typename === 'OutlookService') {\n return (\n \n );\n }\n\n return (\n \n );\n }),\n [services, selected, setSelected],\n );\n\n const content = loading ? (\n \n \n \n ) : (\n items\n );\n\n return (\n \n closeModal(modalId)} />\n \n {content}\n \n \n \n \n Save\n \n \n \n \n );\n};\n\nChooseServiceDialog.propTypes = {\n agency: PropTypes.string.isRequired,\n};\n","import React from 'react';\nimport { Column, Text as BoostText, Icon, Button, styled } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport PropTypes from 'prop-types';\n\nconst Text = styled(BoostText)`\n font-size: 12px !important;\n`;\n\nexport const AgencyEmailServiceInfo = ({ service, onChange }) => {\n if (service.outlook) {\n return (\n \n \n \n {service.outlook.profile.name}\n {`<${service.outlook.profile.email}>`}\n \n Change\n \n \n \n );\n }\n\n if (service.gmail) {\n return (\n \n \n \n {service.gmail.profile.name}\n {`<${service.gmail.profile.email}>`}\n \n Change\n \n \n \n );\n }\n\n return (\n \n \n \n {service.outbound.server}\n {`<${service.outbound.username}>`}\n \n Change\n \n \n \n );\n};\n\nAgencyEmailServiceInfo.propTypes = {\n service: PropTypes.shape({\n outlook: PropTypes.shape({\n profile: PropTypes.shape({\n name: PropTypes.string,\n email: PropTypes.string.isRequired,\n }).isRequired,\n }),\n gmail: PropTypes.shape({\n profile: PropTypes.shape({\n name: PropTypes.string,\n email: PropTypes.string.isRequired,\n }).isRequired,\n }),\n outbound: PropTypes.shape({\n server: PropTypes.string.isRequired,\n username: PropTypes.string.isRequired,\n }),\n }).isRequired,\n onChange: PropTypes.func.isRequired,\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { ChooseServiceDialog, modalId } from './ChooseServiceDialog';\nimport { fetchAgencyEmailService } from '../email-actions';\nimport {\n OnFetchAgencyEmailService,\n OnFetchAgencyEmailServiceError,\n OnSetAgencyEmailService,\n} from '../email-store';\nimport { Card, Column, Row, Text, Button, Heading, useModal } from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport * as toast from '../../../shared/components/toast/Toast';\nimport { AgencyEmailServiceInfo } from './AgencyEmailServiceInfo';\nimport { onErrorMixinFC } from '../../../shared/mixins';\n\nexport const AgencyEmailService = () => {\n const [loading, setLoading] = useState(true);\n const [service, setService] = useState(null);\n const { openModal, closeModal } = useModal(modalId);\n const agency = useAgency();\n\n useEffect(() => {\n setLoading(true);\n\n fetchAgencyEmailService(agency.id);\n }, [agency]);\n\n const onSelect = useCallback(() => {\n openModal(modalId, {\n agencyEmailServiceId: service.id,\n selected: service.outbound || service.gmail || service.outlook || null,\n });\n }, [service, openModal]);\n\n useSubscription(\n OnFetchAgencyEmailService,\n ({ agencyEmailService }) => {\n setService(agencyEmailService);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnFetchAgencyEmailServiceError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnSetAgencyEmailService,\n ({ agencyEmailServiceUpdate }) => {\n setService(agencyEmailServiceUpdate);\n closeModal(modalId);\n\n toast.success('Success', 'Agency email service set successfully');\n },\n [],\n );\n\n let hasService = false;\n\n if (service) {\n hasService = service.outbound || service.gmail || service.outlook;\n }\n\n return (\n \n \n \n \n \n Default agency email service\n \n You need to select a default email service from the ones active to be used as the\n default service to send the automated emails from\n \n \n \n {hasService ? (\n \n ) : (\n \n Select\n \n )}\n \n \n \n \n );\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnGmailServiceFetch = createEvent();\n\nexport const OnGmailServiceFetchError = createEvent();\n\nexport const OnGmailServiceUpdate = createEvent();\n\nexport const OnGmailServiceUpdateError = createEvent();\n\nexport const OnGoogleAuthUrl = createEvent();\n\nexport const OnGoogleAuthUrlError = createEvent();\n\nexport const OnExchangeToken = createEvent();\n\nexport const OnExchangeTokenError = createEvent();\n\nexport const OnFetchOutboundService = createEvent();\n\nexport const OnFetchOutboundServiceError = createEvent();\n\nexport const OnUpdateOutboundService = createEvent();\n\nexport const OnUpdateOutboundServiceError = createEvent();\n\nexport const OnDisableEmailService = createEvent();\n\nexport const OnDisableEmailServiceError = createEvent();\n\nexport const OnGoogleLogoutEvent = createEvent();\n\nexport const OnGoogleLogoutEventError = createEvent();\n","export const CONNECTION_SECURITY_OPTIONS = [\n {\n label: 'None',\n value: 'None',\n },\n {\n label: 'TLS (STARTTLS)',\n value: 'TLS (STARTTLS)',\n },\n {\n label: 'SSL/TLS',\n value: 'SSL/TLS',\n },\n];\n","import { ValidationError } from '../../../shared/errors';\nimport { isValidString, isValidInteger } from '../../../shared/validators';\nimport { CONNECTION_SECURITY_OPTIONS } from './outbound-model';\n\n/**\n * Validates the input when creating a outbound service\n *\n * @param {object} service - The service object\n * @param {string} service.id - Indicates the identifier of the service to update\n * @param {boolean} service.active - Indicates if the current configuration is active\n * @param {string} service.server - The service smtp server\n * @param {number} service.port - The service smtp port\n * @param {string} service.connection - The service authentication option\n * @param {string} service.username - The authentication username\n * @param {string} service.password - The authentication password\n *\n * @returns {void}\n */\nexport const updateOutboundServiceValidation = (service) => {\n const errors = [];\n\n if (!isValidString(service.id)) errors.push('The outbound service identifier is not correct');\n\n if (!service.active) {\n if (errors.length > 0) throw new ValidationError(errors);\n\n return;\n }\n\n if (!isValidString(service.server)) errors.push('The server must be a valid string');\n\n if (!isValidInteger(service.port)) errors.push('The port has to be an integer bigger than zero');\n\n if (CONNECTION_SECURITY_OPTIONS[service.connection])\n errors.push('The connection must be a valid option');\n\n if (!isValidString(service.username)) errors.push('The username must be a valid string');\n\n if (!isValidString(service.password)) errors.push('The password must be a valid string');\n\n if (errors.length > 0) throw new ValidationError(errors);\n};\n","import { createAction } from '@cobuildlab/react-simple-state';\nimport {\n QUERY_OUTBOUND_SERVICE_SETTINGS,\n CREATE_OUTBOUND_SERVICE_MUTATION,\n UPDATE_OUTBOUND_SERVICE_MUTATION,\n FETCH_GMAIL_SERVICE,\n FETCH_GOOGLE_AUTH_URL,\n EXCHANGE_CODE_FOR_TOKENS,\n DISABLE_THIRD_PARTY_SERVICES,\n CREATE_GMAIL_SERVICE,\n UPDATE_GMAIL_SERVICE,\n DISABLE_EMAIL_SERVICES,\n UPDATE_MANY_OUTBOUND_SERVICES,\n LOGOUT_FROM_GMAIL_SERVICE,\n} from './outbound-queries';\nimport {\n INBOUND_SERVICE_SETTINGS_QUERY,\n CREATE_INBOUND_SERVICE_MUTATION,\n} from '../inbound/inbound-queries';\nimport {\n OnGmailServiceFetch,\n OnGmailServiceFetchError,\n OnGmailServiceUpdate,\n OnGmailServiceUpdateError,\n OnGoogleAuthUrl,\n OnGoogleAuthUrlError,\n OnExchangeToken,\n OnExchangeTokenError,\n OnFetchOutboundService,\n OnFetchOutboundServiceError,\n OnUpdateOutboundService,\n OnUpdateOutboundServiceError,\n OnDisableEmailService,\n OnDisableEmailServiceError,\n OnGoogleLogoutEvent,\n OnGoogleLogoutEventError,\n} from './outbound-store';\nimport { updateOutboundServiceValidation } from './outbound-validation';\nimport { OnApolloClient } from '../../../shared/session/session-events';\n\n/**\n * Fetches an outbound service binded to a agency\n *\n * @param {string} agencyId - The agency id\n * @param {string} userId - The user id\n *\n * @returns {Promise} The action result\n */\nexport const fetchOutboundServices = createAction(\n OnFetchOutboundService,\n OnFetchOutboundServiceError,\n async (agencyId, userId) => {\n const client = OnApolloClient.get();\n const first = 1;\n const filter = {\n agency: { id: { equals: agencyId } },\n user: { id: { equals: userId } },\n };\n\n const {\n data: { emailOutboundServicesList },\n } = await client.query({\n query: QUERY_OUTBOUND_SERVICE_SETTINGS,\n fetchPolicy: 'network-only',\n variables: {\n first,\n filter,\n },\n });\n\n const {\n data: { emailInboundServicesList },\n } = await client.query({\n query: INBOUND_SERVICE_SETTINGS_QUERY,\n fetchPolicy: 'network-only',\n variables: {\n first,\n filter,\n },\n });\n\n let [inbound] = emailInboundServicesList.items;\n let [outbound] = emailOutboundServicesList.items;\n\n if (!inbound) {\n await client.mutate({\n mutation: CREATE_INBOUND_SERVICE_MUTATION,\n variables: {\n data: {\n active: false,\n description: 'Example connection configuration',\n server: 'imap.example.com',\n protocol: 'IMAP',\n port: 993,\n connection: 'TLS',\n agency: { connect: { id: agencyId } },\n user: { connect: { id: userId } },\n },\n },\n });\n }\n\n if (!outbound) {\n const {\n data: { emailOutboundServiceCreate },\n } = await client.mutate({\n mutation: CREATE_OUTBOUND_SERVICE_MUTATION,\n variables: {\n data: {\n description: 'Example connection configuration',\n server: 'smtp.example.com',\n port: 465,\n connection: 'None',\n active: false,\n agency: { connect: { id: agencyId } },\n user: { connect: { id: userId } },\n },\n },\n });\n\n outbound = emailOutboundServiceCreate;\n }\n\n return { emailOutboundService: outbound };\n },\n);\n\n/**\n * Updates the email outbound service configuration\n *\n * @param {object} service - The outbound service object to update\n *\n * @returns {Promise} - The action result\n */\nexport const updateOutboundService = createAction(\n OnUpdateOutboundService,\n OnUpdateOutboundServiceError,\n async (data, userId, agencyId) => {\n const client = OnApolloClient.get();\n\n updateOutboundServiceValidation(data);\n\n await client.mutate({\n mutation: DISABLE_THIRD_PARTY_SERVICES,\n variables: {\n user: userId,\n agency: agencyId,\n },\n });\n\n const response = await client.mutate({\n mutation: UPDATE_OUTBOUND_SERVICE_MUTATION,\n variables: { data },\n });\n\n return response.data;\n },\n);\n\n/**\n * Fetches the specified user gmail configuration in the current agency\n *\n * @param {string} user - The user id\n * @param {string} agency - The agency id\n *\n * @returns {Promise} The service object\n */\nexport const fetchGmailService = createAction(\n OnGmailServiceFetch,\n OnGmailServiceFetchError,\n async (user, agency) => {\n const client = OnApolloClient.get();\n\n const first = 1;\n const filter = {\n user: { id: { equals: user } },\n agency: { id: { equals: agency } },\n };\n\n const {\n data: { gmailServicesList },\n } = await client.query({\n query: FETCH_GMAIL_SERVICE,\n fetchPolicy: 'network-only',\n variables: {\n filter,\n first,\n },\n });\n\n let [service] = gmailServicesList.items;\n\n if (!service) {\n const {\n data: { gmailServiceCreate },\n } = await client.mutate({\n mutation: CREATE_GMAIL_SERVICE,\n variables: {\n data: {\n active: false,\n user: { connect: { id: user } },\n agency: { connect: { id: agency } },\n },\n },\n });\n\n service = gmailServiceCreate;\n }\n\n return service || null;\n },\n);\n\n/**\n * Enables the gmail service\n *\n * @param {string} id - The gmail service string\n * @param {string} userId - The user id\n * @param {string} agencyId - The agency id\n *\n * @returns {Promise} The gmail service object\n */\nexport const enableGmailService = createAction(\n OnGmailServiceUpdate,\n OnGmailServiceUpdateError,\n async (id, userId, agencyId) => {\n const client = OnApolloClient.get();\n\n const filter = { id };\n const data = { active: true };\n\n await client.mutate({\n mutation: DISABLE_EMAIL_SERVICES,\n variables: {\n user: userId,\n agency: agencyId,\n },\n });\n\n const response = await client.mutate({\n mutation: UPDATE_GMAIL_SERVICE,\n variables: {\n filter,\n data,\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Fetches google authorization url\n *\n * @param {string} agency - The agency id\n *\n * @returns {Promise} The auth url\n */\nexport const fetchGoogleAuthUrl = createAction(\n OnGoogleAuthUrl,\n OnGoogleAuthUrlError,\n async (agency, from) => {\n const client = OnApolloClient.get();\n\n const response = await client.query({\n query: FETCH_GOOGLE_AUTH_URL,\n fetchPolicy: 'network-only',\n variables: {\n agency,\n from,\n },\n });\n\n return response.data;\n },\n);\n\n/**\n * Exchanges the specified auth code for an access and refresh tokens\n *\n * @param {string} agency - The agency id\n * @param {string} code - The authorization code\n *\n * @returns {Promise} The gmailService object\n */\nexport const exchangeCodeForTokens = createAction(\n OnExchangeToken,\n OnExchangeTokenError,\n async (agency, from, code) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: EXCHANGE_CODE_FOR_TOKENS,\n variables: {\n agency,\n code,\n from,\n },\n });\n\n return response.data;\n },\n);\n\nexport const logoutFromGoogle = createAction(\n OnGoogleLogoutEvent,\n OnGoogleLogoutEventError,\n async (agency) => {\n const client = OnApolloClient.get();\n\n const response = await client.mutate({\n mutation: LOGOUT_FROM_GMAIL_SERVICE,\n variables: {\n agency,\n },\n });\n\n return response.data;\n },\n);\n\nexport const disableOutboundServices = createAction(\n OnDisableEmailService,\n OnDisableEmailServiceError,\n async (userId, agencyId) => {\n const client = OnApolloClient.get();\n\n await client.mutate({\n mutation: DISABLE_THIRD_PARTY_SERVICES,\n variables: {\n user: userId,\n agency: agencyId,\n },\n });\n\n await client.mutate({\n mutation: UPDATE_MANY_OUTBOUND_SERVICES,\n variables: {\n filter: {\n user: { id: { equals: userId } },\n agency: { id: { equals: agencyId } },\n },\n data: {\n active: [{ set: false }],\n },\n },\n });\n },\n);\n","import React, { useState, useEffect } from 'react';\nimport TestConnectionButton from '../../../email/components/TestConnectionButton';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { updateOutboundService, fetchOutboundServices } from '../outbound-actions';\nimport { CONNECTION_SECURITY_OPTIONS } from '../outbound-model';\nimport { Box } from '../../../../shared/components/Box';\nimport {\n Card as BoostCard,\n Row as BoostRow,\n Grid,\n SelectField,\n Column,\n Switch,\n Form,\n Radio,\n InputField,\n Button,\n styled,\n} from '@8base/boost';\nimport {\n OnFetchOutboundService,\n OnFetchOutboundServiceError,\n OnUpdateOutboundService,\n OnUpdateOutboundServiceError,\n} from '../outbound-store';\nimport * as toast from '../../../../shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport { useAgency } from '../../../../shared/hooks/useAgency';\nimport { useUser } from '../../../../shared/hooks/useUser';\nimport PropTypes from 'prop-types';\n\nconst Card = styled(BoostCard)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\nconst Row = styled(BoostRow)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\nconst initialForm = {\n id: null,\n active: false,\n description: '',\n server: '',\n port: 0,\n connection: 'None',\n username: '',\n password: '',\n fallback: false,\n};\n\nexport const OutboundForm = ({ type, setType }) => {\n const [form, setForm] = useState(initialForm);\n const [loading, setLoading] = useState(true);\n const agency = useAgency();\n const [user] = useUser();\n\n useEffect(() => {\n setLoading(true);\n fetchOutboundServices(agency.id, user.id);\n }, [agency.id, user.id]);\n\n useSubscription(\n OnFetchOutboundService,\n ({ emailOutboundService }) => {\n setLoading(false);\n\n setForm((prevState) => ({\n ...prevState,\n ...emailOutboundService,\n }));\n\n if (emailOutboundService.active) {\n setType('CUSTOM');\n }\n },\n [],\n );\n\n useSubscription(\n OnFetchOutboundServiceError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnUpdateOutboundService,\n ({ emailOutboundServiceUpdate }) => {\n setForm((prevState) => ({\n ...prevState,\n ...emailOutboundServiceUpdate,\n }));\n\n setLoading(false);\n\n toast.success('Success', 'Email outbound service updated');\n },\n [],\n );\n\n useSubscription(\n OnUpdateOutboundServiceError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const handleSubmit = () => {\n setLoading(true);\n\n updateOutboundService(\n {\n id: form.id,\n active: true,\n description: form.description,\n server: form.server,\n port: form.port,\n connection: form.connection,\n username: form.username,\n password: form.password,\n fallback: form.fallback,\n },\n user.id,\n agency.id,\n );\n };\n\n const isCustom = type === 'CUSTOM';\n\n return (\n \n \n e.preventDefault()}>\n \n \n \n setType('CUSTOM')} />\n \n \n \n Connection Information\n \n \n setForm({ ...form, description: value }),\n }}\n />\n setForm({ ...form, server: value }),\n }}\n stretch\n />\n setForm({ ...form, port: value }),\n }}\n width={10}\n />\n \n setForm({ ...form, fallback: !form.fallback })}\n />\n \n \n \n \n \n Security and Authentication\n \n \n setForm({ ...form, connection: value }),\n }}\n stretch={false}\n />\n setForm({ ...form, username: value }),\n }}\n />\n setForm({ ...form, password: value }),\n }}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n Save\n \n \n \n \n );\n};\n\nOutboundForm.propTypes = {\n type: PropTypes.string.isRequired,\n setType: PropTypes.func.isRequired,\n};\n","import React, { useCallback, useState } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { Box } from '../../../shared/components/Box';\nimport { AgencyEmailService } from '../../email/components/AgencyEmailService';\nimport { OutboundForm } from './components/OutboundForm';\n// import { GmailServiceForm } from './components/GmailServiceForm';\nimport { MicrosoftServiceForm } from './components/MicrosoftServiceForm';\nimport { disableOutboundServices } from './outbound-actions';\nimport { Card as BoostCard, Row, Loader, Text, Radio, Column, Grid, styled } from '@8base/boost';\nimport { OnDisableEmailService, OnDisableEmailServiceError } from './outbound-store';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { useUser } from '../../../shared/hooks/useUser';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport * as toast from '../../../shared/components/toast/Toast';\n\nconst Card = styled(BoostCard)`\n ${(props) => props.fullWidth && `width: 100%;`}\n`;\n\n/**\n * Created the Outbound service configuration page\n *\n * @returns {React.Component} The component to render\n */\nfunction OutboundService() {\n const [type, setType] = useState('NONE');\n const [loading, setLoading] = useState(false);\n const agency = useAgency();\n const [user] = useUser();\n\n useSubscription(\n OnDisableEmailService,\n () => {\n setLoading(false);\n\n toast.success('Success', 'Outbound services disabled completely');\n },\n [],\n );\n\n useSubscription(\n OnDisableEmailServiceError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const handleTypeChange = useCallback(\n (value) => {\n if (!loading) {\n setType(value);\n\n if (value === 'NONE') {\n setLoading(true);\n\n disableOutboundServices(user.id, agency.id);\n }\n }\n },\n [agency, user, loading],\n );\n\n return (\n \n \n \n {/* */}\n \n \n \n \n \n \n handleTypeChange('NONE')}\n />\n \n \n \n Disabled\n {loading && }\n \n \n \n \n \n \n \n );\n}\n\nexport default OutboundService;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnFetchPhoneCallSettingEvent = createEvent();\n\nexport const OnFetchPhoneCallSettingError = createEvent();\n\nexport const OnCreatePhoneCallSettingEvent = createEvent();\n\nexport const OnCreatePhoneCallSettingError = createEvent();\n\nexport const OnUpdatePhoneCallSettingEvent = createEvent();\n\nexport const OnUpdatePhoneCallSettingError = createEvent();\n","import gql from 'graphql-tag';\n\nexport const FETCH_PHONE_CALL_SETTING = gql`\n query FetchPhoneCallSettings($id: ID) {\n phoneCallSetting(id: $id) {\n id\n automaticCalls\n recordCalls\n forwardingPhoneNumber {\n code\n number\n }\n timeToForward\n campignAssineeFilter\n agency {\n id\n name\n }\n voicemail\n callCadenceConfig\n }\n }\n`;\n\nexport const FETCH_PHONE_CALL_SETTING_LIST = gql`\n query FetchPhoneCallSettingsList($filter: PhoneCallSettingFilter, $first: Int) {\n phoneCallSettingsList(filter: $filter, first: $first) {\n items {\n id\n automaticCalls\n recordCalls\n campignAssineeFilter\n timeToForward\n forwardingPhoneNumber {\n code\n number\n }\n agency {\n id\n name\n }\n voicemail\n callCadenceConfig\n }\n }\n }\n`;\n\nexport const CREATE_PHONE_CALL_SETTING = gql`\n mutation CreatePhoneCallSettings($data: PhoneCallSettingCreateInput!) {\n phoneCallSettingCreate(data: $data) {\n id\n automaticCalls\n recordCalls\n campignAssineeFilter\n timeToForward\n forwardingPhoneNumber {\n code\n number\n }\n agency {\n id\n name\n }\n callCadenceConfig\n }\n }\n`;\n\nexport const UPDATE_PHONE_CALL_SETTING = gql`\n mutation UpdatePhoneCallSetting($data: PhoneCallSettingUpdateInput!) {\n phoneCallSettingUpdate(data: $data) {\n id\n automaticCalls\n recordCalls\n campignAssineeFilter\n timeToForward\n forwardingPhoneNumber {\n code\n number\n }\n agency {\n id\n name\n }\n callCadenceConfig\n }\n }\n`;\n\nexport const QUERY_CAMPAIGNS_LIST = gql`\n query campaingList($agency: ID!, $offset: Int!, $limit: Int!) {\n campaignsList(filter: { agency: { id: { equals: $agency } } }, skip: $offset, first: $limit) {\n items {\n id\n name\n status\n automaticCalls\n priority\n agents {\n items {\n name\n }\n }\n createdAt\n }\n count\n }\n }\n`;\n","import { log, error } from '@cobuildlab/pure-logger';\nimport { OnApolloClient } from '../../../../shared/session/session-events';\nimport {\n OnCreatePhoneCallSettingError,\n OnCreatePhoneCallSettingEvent,\n OnFetchPhoneCallSettingError,\n OnFetchPhoneCallSettingEvent,\n OnUpdatePhoneCallSettingError,\n OnUpdatePhoneCallSettingEvent,\n} from './phone-calls-settings-events';\nimport {\n FETCH_PHONE_CALL_SETTING_LIST,\n UPDATE_PHONE_CALL_SETTING,\n CREATE_PHONE_CALL_SETTING,\n} from './phone-calls-settings-queries';\n\n/**\n * Finds phone call configuration filtering by agency\n *\n * @param {string} id - The agency id to find the configuration\n *\n * @returns {Promise} The request result\n */\nexport const fetchPhoneCallSettingByAgency = async (id) => {\n const client = OnApolloClient.get();\n const filter = { agency: { id: { equals: id } } };\n const first = 1;\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_PHONE_CALL_SETTING_LIST,\n fetchPolicy: 'network-only',\n variables: { filter, first },\n });\n } catch (e) {\n error('fetchPhoneCallSettingByAgency', e);\n\n OnFetchPhoneCallSettingError.dispatch(e);\n return;\n }\n\n const { 0: configuration } = response.data.phoneCallSettingsList.items;\n\n log('fetchPhoneCallSettingByAgency', configuration);\n\n OnFetchPhoneCallSettingEvent.dispatch(configuration);\n\n return configuration;\n};\n\n/**\n * Creates a new Phone Call Configuration for the specified agency\n *\n * @param {object} config - The configuration data to store\n * @param {boolean} config.automaticCalls - Turns On/Off automatic calls\n * @param {boolean} config.recordCalls - Turns On/Off call recording\n * @param {string} config.agency - Agency related to this configuration\n *\n * @returns {Promise} Request result\n */\nexport const createPhoneCallSetting = async (config) => {\n const client = OnApolloClient.get();\n const data = {\n automaticCalls: config.automaticCalls,\n recordCalls: config.recordCalls,\n agency: { connect: { id: config.agency } },\n };\n\n let response = null;\n\n try {\n response = await client.mutate({\n mutation: CREATE_PHONE_CALL_SETTING,\n variables: { data },\n });\n } catch (e) {\n error('createPhoneCallSetting', e);\n\n OnCreatePhoneCallSettingError.dispatch(e);\n return;\n }\n\n log('createPhoneCallSetting', response.data);\n\n OnCreatePhoneCallSettingEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Updates a Phone Call Configuration object\n *\n * @param {object} config - The configuration data to store\n * @param {string} config.id - Id of the configuration to update\n * @param {boolean} config.automaticCalls - Turns On/Off automatic calls\n * @param {boolean} config.recordCalls - Turns On/Off call recording\n *\n * @returns {Promise} Request result\n */\nexport const updatePhoneCallSetting = async (config) => {\n const client = OnApolloClient.get();\n\n let response = null;\n\n try {\n response = await client.mutate({\n mutation: UPDATE_PHONE_CALL_SETTING,\n variables: { data: config },\n });\n } catch (e) {\n error('updatePhoneCallSetting', e);\n\n OnUpdatePhoneCallSettingError.dispatch(response.data);\n\n return;\n }\n\n log('updatePhoneCallSetting', response.data);\n\n OnUpdatePhoneCallSettingEvent.dispatch(response.data);\n return response.data;\n};\n","import React, { useCallback, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Table, Switch } from '@8base/boost';\nimport { PRIORITIES } from '../../../../shared/constants';\nimport { updateCampaign } from '../../../campaigns/campaigns-actions';\nimport moment from 'moment';\n\n/**\n *\n * @typedef {object} data\n * @property {string} name Name of the campaign\n * @property {string} priority Priority of the campaign\n * @property {string} createdAt Created date of the campaign\n * @property {string} id Id of the campaign\n * @property {boolean} automaticCalls if the setting if active\n * @property {object} agents Agents object\n * @property {Array} agents.items Agents array\n *\n */\n/**\n * @param {object} props props\n * @param {string} props.columns columns widths string\n * @param {data} props.data Campaign object\n * @returns {React.FC} React component\n */\nfunction CampaignListItem({ columns, data }) {\n const {\n name,\n automaticCalls,\n priority,\n id,\n createdAt,\n agents: { items: agents },\n } = data;\n const [active, setActive] = useState(automaticCalls);\n const shouldShowAgents = agents.length > 0;\n const [firstAgents, ...rest] = agents;\n const agentsText =\n shouldShowAgents && `${firstAgents?.name} ${rest.length > 0 && `& ${rest.length} more... `}`;\n\n const handleChange = useCallback(\n (value) => {\n setActive(value);\n updateCampaign(\n {\n id,\n automaticCalls: value,\n },\n false,\n );\n },\n [id],\n );\n\n return (\n \n {name}\n {PRIORITIES[priority - 1]}\n {moment(createdAt).format('MM-DD-YYYY, hh:mm a')}\n {shouldShowAgents ? agentsText : ' - '}\n \n \n \n \n );\n}\n\nCampaignListItem.propTypes = {\n columns: PropTypes.string.isRequired,\n data: PropTypes.shape({\n name: PropTypes.string,\n automaticCalls: PropTypes.bool,\n priority: PropTypes.string,\n id: PropTypes.string,\n createdAt: PropTypes.string,\n agents: PropTypes.shape({\n items: PropTypes.array,\n }),\n }).isRequired,\n};\n\nexport default CampaignListItem;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { Table, Row, Pagination } from '@8base/boost';\nimport { useList } from '../../../../shared/utils/useList';\nimport { QUERY_CAMPAIGNS_LIST } from '../phone-calls-settings/phone-calls-settings-queries';\nimport CampaignListItem from './CampaignListItem';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport * as toast from 'shared/components/toast/Toast';\nimport { OnCampaignUpdate } from 'modules/campaigns/campaign-events';\n\nconst columns = '1fr minmax(100px,130px) 1fr minmax(100px,180px) minmax(100px,180px)';\nconst pageSize = 10;\n\nconst Body = styled(Table.Body)`\n min-height: ${10 * 53}px;\n`;\n/**\n * @param {object} props props\n * @param {string} props.agency agency id\n * @returns {object} React component\n */\nfunction CampaignsList({ agency }) {\n const [page, setPage] = useState(1);\n const offset = (page - 1) * pageSize;\n\n const {\n data: { items, count },\n loading,\n } = useList('campaignsList', QUERY_CAMPAIGNS_LIST, {\n agency,\n limit: pageSize,\n offset,\n });\n useSimpleSubscription(OnCampaignUpdate, (data) => {\n if (data) {\n toast.success(`Campaign \"${data.campaignUpdate.name}\" updated successfully`);\n }\n });\n\n return (\n <>\n \n \n Name\n Priority\n Created\n Agents\n Automatic Calls\n \n \n {(item) => }\n \n \n \n \n \n \n \n >\n );\n}\n\nCampaignsList.propTypes = {\n agency: PropTypes.string.isRequired,\n};\n\nexport default CampaignsList;\n","import { useQuery } from '@apollo/react-hooks';\nimport { onErrorMixinFC } from '../mixins';\n\n/**\n *\n * @typedef {object} listOject\n * @property {object} data\n * @property {Function} refetch\n * @property {boolean} loading\n */\n/**\n *\n * A function that allows you to refetch the query and optionally pass in new variables\n *\n * @param {string} namespace the object key that returns the query\n * @param {string} query the query must be a list that returs a items array and count key\n * @param {object} variables variables\n * @returns {listOject} variables variables\n */\nexport function useList(namespace, query, variables) {\n const { data, refetch, loading } = useQuery(query, {\n variables,\n onError: (error) => {\n onErrorMixinFC(error);\n },\n });\n\n const newData = data ? data[namespace] : { items: [], count: 0 };\n\n return {\n data: newData,\n refetch,\n loading,\n };\n}\n","/**\n * Deafult state of the phone calls settings form\n * this must match the default field values in the PhoneCallSetting table\n */\nexport const INITIAL_SETTINGS = {\n loading: false,\n id: '',\n recordCalls: false,\n automaticCalls: false,\n callsDelay: 1,\n campignAssineeFilter: true,\n timeToForward: 0,\n forwardingPhoneNumber: {code: '1', number: ''},\n callCadenceConfig: {\n day1: 6,\n day2To7: 18,\n day8To30: 69,\n day31To89: 30,\n },\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport {\n Card,\n Column,\n Switch,\n Row,\n Loader,\n Heading,\n Button,\n Form,\n Grid,\n InputField,\n Input,\n Label,\n} from '@8base/boost';\nimport Field from 'shared/components/Field';\nimport {\n fetchPhoneCallSettingByAgency,\n createPhoneCallSetting,\n updatePhoneCallSetting,\n} from './phone-calls-settings/phone-calls-settings-actions';\nimport * as Toast from '../../../shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { fetchSession } from '../../auth/auth.actions';\nimport CampaignsList from './components/CampaignsList';\nimport { Body } from '../../my-account/components/Card';\nimport { OnSessionFetch } from '../../../shared/session/session-events';\nimport { INITIAL_SETTINGS } from './phone-calls-settings/phone-calls-settings-model';\nimport { Box } from '../../../shared/components/Box';\nimport { OnCreateVoiceMailMessageEvent } from 'modules/phone-calls/voice-mail-message/voice-mail-message-events';\nimport {\n OnCreatePhoneCallSettingError,\n OnCreatePhoneCallSettingEvent,\n OnFetchPhoneCallSettingError,\n OnFetchPhoneCallSettingEvent,\n OnUpdatePhoneCallSettingError,\n OnUpdatePhoneCallSettingEvent,\n} from './phone-calls-settings/phone-calls-settings-events';\n\n// const initialForm = {\n// loading: false,\n// id: '',\n// recordCalls: false,\n// automaticCalls: false,\n// };\n\n/**\n * Phone call settings view\n *\n * @returns {React.FC} The component to render\n */\nfunction PhoneCallSettings() {\n const agency = useAgency();\n const [form, setForm] = useState(INITIAL_SETTINGS);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n setLoading(true);\n\n fetchPhoneCallSettingByAgency(agency.id);\n }, [agency.id]);\n\n useSimpleSubscription(OnCreateVoiceMailMessageEvent, () =>\n Toast.success('Success', 'Voice mail message created successfully'),\n );\n\n useSimpleSubscription(OnFetchPhoneCallSettingEvent, (configuration) => {\n if (configuration) {\n console.log('configuration', configuration);\n setForm({\n ...form,\n ...configuration,\n });\n\n setLoading(false);\n } else {\n //TODO: Create a trigger after agency create to a settings record for every new agency\n createPhoneCallSetting({\n ...INITIAL_SETTINGS,\n agency: agency.id,\n });\n }\n });\n\n useSimpleSubscription(OnCreatePhoneCallSettingEvent, ({ phoneCallSettingCreate }) => {\n setLoading(false);\n setForm({\n ...form,\n ...phoneCallSettingCreate,\n });\n });\n\n useSimpleSubscription(OnUpdatePhoneCallSettingEvent, () => {\n Toast.success('Success!', 'Configuration updated successfully');\n fetchSession();\n });\n\n useSimpleSubscription(OnSessionFetch, () => {\n setForm((state) => ({ ...state, loading: false }));\n });\n\n useSimpleSubscription(OnFetchPhoneCallSettingError, onErrorMixinFC);\n\n useSimpleSubscription(OnCreatePhoneCallSettingError, onErrorMixinFC);\n\n useSimpleSubscription(OnUpdatePhoneCallSettingError, onErrorMixinFC);\n\n const handleChange = useCallback((key, value) => {\n setForm((state) => ({ ...state, [key]: value }));\n }, []);\n\n function removeTypenameRecursively(obj) {\n if (obj === null || obj === undefined) {\n return obj;\n } else if (Array.isArray(obj)) {\n return obj.map(removeTypenameRecursively);\n } else if (typeof obj === 'object') {\n const { __typename, ...rest } = obj;\n Object.keys(rest).forEach((key) => {\n rest[key] = removeTypenameRecursively(rest[key]);\n });\n return rest;\n }\n return obj;\n }\n\n const handleSubmit = useCallback(() => {\n const { loading, agency, ...data } = form;\n const cleanData = {\n ...removeTypenameRecursively(data),\n timeToForward: parseInt(data.timeToForward, 10) || 0, // Fallback to 0 if NaN\n };\n console.log('CLEAN DATA', cleanData);\n updatePhoneCallSetting(cleanData);\n\n setForm({ ...form, loading: true });\n }, [form]);\n\n const handleCadenceChange = useCallback((name, value) => {\n setForm((prevState) => ({\n ...prevState,\n callCadenceConfig: {\n ...prevState.callCadenceConfig,\n [name]: value,\n },\n }));\n }, []);\n\n const handleForwardingPhoneChange = useCallback((value) => {\n setForm((prevState) => ({\n ...prevState,\n forwardingPhoneNumber: {\n code: '1',\n number: value,\n },\n }));\n }, []);\n useEffect(() => {\n console.log('form', removeTypenameRecursively(form));\n }, [form]);\n\n if (loading) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n \n \n \n Forwarding Phone Number\n \n Incoming calls will be directed to this phone number when no agents are online\n \n\n \n null}\n options={[\n {\n label: '+1',\n value: '1',\n },\n ]}\n />\n handleForwardingPhoneChange(value)}\n />\n \n \n Seconds before forwarding call to physical phone number. (Leave at 0 to disable\n forwarding)\n \n handleChange('timeToForward', value)}\n />\n handleChange('automaticCalls', value)}\n />\n handleChange('recordCalls', value)}\n />\n handleChange('campignAssineeFilter', value)}\n />\n handleChange('voicemail', value)}\n />\n \n \n Call Cadence\n \n \n \n handleCadenceChange('day1', value),\n }}\n />\n \n \n handleCadenceChange('day2To7', value),\n }}\n />\n \n \n handleCadenceChange('day8To30', value),\n }}\n />\n \n \n handleCadenceChange('day31To89', value),\n }}\n />\n \n \n \n \n \n \n \n \n \n \n Save Configuration\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default PhoneCallSettings;\n","export const PUBLIC = 'PUBLIC';\n\nexport const PRIVATE = 'PRIVATE';\n\nexport const VOICE_MESSAGE_TYPE_OPTIONS = [\n { label: 'Public', value: PUBLIC },\n { label: 'Private', value: PRIVATE },\n];\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Table, CheckboxField, Dropdown, Icon, Menu } from '@8base/boost';\nimport AudioPlayer from 'react-h5-audio-player';\nimport { useSubscription } from '@cobuildlab/react-flux-state';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport voiceMailMessageStore, {\n UPDATE_VOICE_MAIL_MESSAGE_EVENT,\n UPDATE_VOICE_MAIL_MESSAGE_EVENT_ERROR,\n} from '../../../phone-calls/voice-mail-message/voice-mail-message-store';\nimport { updateVoiceMailMessage } from '../../../phone-calls/voice-mail-message/voice-mail-message-actions';\nimport { useUser } from '../../../../shared/hooks/useUser';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport 'react-h5-audio-player/lib/styles.css';\nimport { PRIVATE, PUBLIC } from '../../../phone-calls/voice-mail-message/voice-mail-message-model';\n\nconst PlayerCell = styled(Table.BodyCell)`\n padding-left: 0px !important;\n`;\n\nconst MenuItem = styled(Menu.Item)`\n color: ${({ danger }) => (danger ? '#FF0000' : 'rgb(50, 60, 71)')}!important;\n &:hover {\n ${({ danger }) => (danger ? '' : 'color: #3db4aa !important;')}\n }\n`;\n\n/**\n * Row item of the VoiceMailMessagesTable component\n *\n * @param {object} props - The component's prop object\n * @param {object} props.message - The voice mail message\n * @param {string} props.message.id - The id of the voice mail message\n * @param {string} props.message.name - The name of the voice mail message\n * @param {string} props.message.url - The url pointing to the voice mail audio file (.mp3 would be appended to it)\n * @param {boolean} props.message.active - Indicates if the current voice mail message is available for use\n * @param {string} props.columns - css grid layout columns property\n * @param {Function} props.onUpdate - Callback function to execute when the \"Update\" menu item is clicked\n * @param {Function} props.onDelete - Callback function to execute when the \"Delete\" menu item is clicked\n *\n * @returns {React.FC} The component to render\n */\nfunction VoiceMailMessageItem({ message, columns, onDelete, onUpdate }) {\n const [user] = useUser();\n const [active, setActive] = useState(message.active);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n setActive(message.active);\n }, [message.active]);\n\n useSubscription(\n voiceMailMessageStore,\n UPDATE_VOICE_MAIL_MESSAGE_EVENT,\n ({ voiceMailMessageUpdate }) => {\n if (message.id === voiceMailMessageUpdate.id) setLoading(false);\n },\n );\n\n useSubscription(voiceMailMessageStore, UPDATE_VOICE_MAIL_MESSAGE_EVENT_ERROR, onErrorMixinFC);\n\n const handleChange = useCallback(\n (value) => {\n setActive(value);\n setLoading(true);\n\n updateVoiceMailMessage({\n id: message.id,\n name: message.name,\n active: value,\n file: message.audio,\n });\n },\n [message.id, message.audio, message.name],\n );\n\n return (\n \n {message.name}\n \n \n \n \n \n \n \n {user.id === message.createdBy.id && (\n \n \n \n \n \n \n onUpdate(message)}>Update\n onDelete(message)} danger>\n Delete\n \n \n \n \n )}\n \n \n );\n}\n\nVoiceMailMessageItem.propTypes = {\n message: PropTypes.shape({\n id: PropTypes.string.isRequired,\n type: PropTypes.oneOf([PRIVATE, PUBLIC]).isRequired,\n name: PropTypes.string.isRequired,\n audio: PropTypes.shape({\n id: PropTypes.string.isRequired,\n filename: PropTypes.string.isRequired,\n downloadUrl: PropTypes.string.isRequired,\n }).isRequired,\n createdBy: PropTypes.shape({\n id: PropTypes.string.isRequired,\n }).isRequired,\n active: PropTypes.bool.isRequired,\n }).isRequired,\n columns: PropTypes.string.isRequired,\n onUpdate: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n};\n\nexport default VoiceMailMessageItem;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport { Button } from '@8base/boost';\nimport MicRecorder from 'mic-recorder-to-mp3';\nimport { formatSeconds } from '../../../phone-calls/phone-calls-utils';\nimport PropTypes from 'prop-types';\n\nconst recorder = new MicRecorder({\n bitRate: 128,\n});\n\n/**\n * Audio Recorded component\n *\n * @param {object} props - The component's prop object\n * @param {Function} props.onRecorded - Call back to be called when recording has finished\n *\n * @returns {React.FC} The component to render\n */\nfunction AudioRecorder({ onRecorded }) {\n const [recording, setRecording] = useState(false);\n const [loading, setLoading] = useState(false);\n const [time, setTime] = useState(0);\n\n useEffect(() => {\n return () => recorder.stop();\n }, []);\n\n const handleClick = useCallback(() => {\n if (recording) {\n setLoading(true);\n setRecording(false);\n recorder.stop();\n\n recorder.getMp3().then(([buffer, blob]) => {\n const file = new File(buffer, 'voicemail-message.mp3', {\n type: blob.type,\n lastModified: Date.now(),\n });\n\n setLoading(false);\n onRecorded(file);\n });\n } else {\n setRecording(true);\n setTime(0);\n\n recorder.start();\n }\n }, [recording, onRecorded]);\n\n useEffect(() => {\n let id = 0;\n\n if (recording) id = setInterval(() => setTime((time) => time + 1), 1000);\n\n return () => clearInterval(id);\n }, [recording]);\n\n const text = recording ? `STOP ${formatSeconds(time)}` : `Record`;\n\n return (\n \n {text}\n \n );\n}\n\nAudioRecorder.propTypes = {\n onRecorded: PropTypes.func.isRequired,\n};\n\nexport default AudioRecorder;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport { Form, Select, InputField, Column, Row, Divider, Button } from '@8base/boost';\nimport { ADMIN, MANAGER } from '../../../../shared/constants';\nimport { Padding } from '../../../../shared/components';\nimport { PrimaryBtn as ActionButton } from '../../../../shared/components/ui/buttons/PrimaryBtn';\nimport AudioRecorder from '../../phone-calls/components/AudioRecorder';\nimport AudioPlayer from 'react-h5-audio-player';\nimport 'react-h5-audio-player/lib/styles.css';\nimport styled from 'styled-components';\nimport { useUser } from '../../../../shared/hooks/useUser';\nimport {\n PRIVATE,\n PUBLIC,\n VOICE_MESSAGE_TYPE_OPTIONS,\n} from '../../../phone-calls/voice-mail-message/voice-mail-message-model';\nimport PropTypes from 'prop-types';\n\nconst Div = styled(Divider)`\n margin-top: 5px !important;\n`;\n\n/**\n * Voicemail message form component\n *\n * @param {object} props - The component's prop object\n * @param {object} props.message - The message object about to update (null if the form is going to create a new message)\n * @param {string} props.message.id - The Id of the voice mail message object\n * @param {string} props.message.name - The name of the voice mail message\n * @param {object} props.message.audio - The data of the audio file related to the message\n * @param {boolean} props.loading - The loading state of the component\n * @param {Function} props.onSubmit - Function called on submit with form values\n * @param {Function} props.onCancel - Function called on cancel button clicked\n *\n * @returns {React.FC} The component to render\n */\nfunction VoiceMailMessageForm({ message, loading, onSubmit, onCancel }) {\n const [, , roles] = useUser();\n const [name, setName] = useState(message ? message.name : '');\n const [file, setFile] = useState(message ? message.audio : null);\n const [type, setType] = useState(message ? message.type : PRIVATE);\n const [objectURL, setObjectURL] = useState(null);\n\n useEffect(() => {\n if (message) {\n setName(message.name);\n setFile(message.audio);\n setType(message.type);\n }\n }, [message]);\n\n const handleRecorded = useCallback((file) => {\n setFile(file);\n setObjectURL(URL.createObjectURL(file));\n }, []);\n\n const handleSubmit = useCallback(\n (e) => {\n e.preventDefault();\n\n const canPublish = roles.some((role) => role === MANAGER || role === ADMIN);\n\n const data = {\n name,\n file,\n type: canPublish ? type : PRIVATE,\n };\n\n if (message) {\n data.id = message.id;\n }\n\n onSubmit(data);\n },\n [message, name, file, roles, type, onSubmit],\n );\n\n const source = file !== null ? (file.downloadUrl ? file.downloadUrl : objectURL) : '';\n const canPublish = roles.some((role) => role === MANAGER || role === ADMIN);\n\n return (\n \n \n \n \n \n \n \n \n {canPublish && (\n \n )}\n \n \n \n \n \n \n \n Cancel\n \n \n {message ? 'Update Message' : 'Add Message'}\n \n \n \n \n \n );\n}\n\nVoiceMailMessageForm.propTypes = {\n message: PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n audio: PropTypes.object.isRequired,\n type: PropTypes.oneOf([PRIVATE, PUBLIC]).isRequired,\n }),\n loading: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n};\n\nVoiceMailMessageForm.defaultProps = {\n message: null,\n};\n\nexport default VoiceMailMessageForm;\n","import React, { useState, useEffect } from 'react';\nimport { Dialog } from '@8base/boost';\nimport VoiceMailMessageForm from './VoiceMailMessageForm';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport {\n createVoiceMailMessage,\n updateVoiceMailMessage,\n} from '../../../phone-calls/voice-mail-message/voice-mail-message-actions';\nimport {\n OnCreateVoiceMailMessageError,\n OnCreateVoiceMailMessageEvent,\n OnUpdateVoiceMailMessageError,\n OnUpdateVoiceMailMessageEvent,\n} from 'modules/phone-calls/voice-mail-message/voice-mail-message-events';\n\nexport const VoiceMailMessageDialog = ({ isOpen, handleOnClose, agencyId, initialMessage }) => {\n const [loading, setLoading] = useState(false);\n const [message, setMessage] = useState(initialMessage);\n\n const close = () => {\n handleOnClose();\n setLoading(false);\n setMessage(null);\n };\n\n const handleSubmit = (voiceMail) => {\n setLoading(true);\n\n if (voiceMail.id) {\n updateVoiceMailMessage(voiceMail);\n } else {\n createVoiceMailMessage(voiceMail, agencyId);\n }\n };\n\n useEffect(() => {\n setMessage(initialMessage);\n }, [initialMessage]);\n\n useEventSubscription(OnCreateVoiceMailMessageEvent, () => {\n close();\n });\n\n useEventSubscription(OnCreateVoiceMailMessageError, () => {\n setLoading(false);\n });\n\n useEventSubscription(OnUpdateVoiceMailMessageEvent, () => {\n close();\n });\n\n useEventSubscription(OnUpdateVoiceMailMessageError, () => {\n setLoading(false);\n });\n\n return (\n \n \n \n \n \n \n );\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Table, Row, Pagination } from '@8base/boost';\nimport VoiceMailMessageItem from './VoiceMailMessageItem';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport {\n fetchVoiceMailMessages,\n deleteVoiceMailMessage,\n} from '../../../phone-calls/voice-mail-message/voice-mail-message-actions';\nimport * as Toast from '../../../../shared/components/toast/Toast';\nimport { YesNoDialog } from '../../../../shared/components';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport PropTypes from 'prop-types';\nimport { VoiceMailMessageDialog } from './VoiceMailMessageDialog';\nimport { useUser } from '../../../../shared/hooks/useUser';\nimport styled from 'styled-components';\nimport {\n OnCreateVoiceMailMessageEvent,\n OnDeleteVoiceMailMessageError,\n OnDeleteVoiceMailMessageEvent,\n OnFetchVoiceMailMessagesError,\n OnFetchVoiceMailMessagesEvent,\n OnUpdateVoiceMailMessageError,\n OnUpdateVoiceMailMessageEvent,\n} from 'modules/phone-calls/voice-mail-message/voice-mail-message-events';\n\nconst Body = styled(Table.Body)`\n min-height: 400px;\n`;\n\nconst columns = 'minmax(200px, 1fr) minmax(350px, 1fr) 100px 100px';\n\n/**\n * Table of voice mail messages of a specific agency\n *\n * @param {object} props - The component's prop object\n * @param {string} props.agencyId - The agency related to the voice messages\n *\n * @returns {React.FC} The component to render\n */\nfunction VoiceMailMessagesTable({ agencyId }) {\n const [loading, setLoading] = useState(true);\n const [page, setPage] = useState(1);\n const [messages, setMessages] = useState([]);\n const [count, setCount] = useState(0);\n const [del, setDelete] = useState({ open: false, selected: null, loading: false });\n const [user, userLoading] = useUser();\n const [isOpen, setIsOpen] = useState(false);\n const [messageToUpdate, setMessageToUpdate] = useState(null);\n\n const handleOpen = () => setIsOpen(true);\n\n const handleOnClose = () => {\n setIsOpen(false);\n setMessageToUpdate(null);\n };\n\n const handleDelete = useCallback(\n (message) => {\n setDelete({ ...del, open: true, selected: message });\n },\n [del],\n );\n\n const onConfirmDelete = useCallback(() => {\n deleteVoiceMailMessage(del.selected.id);\n setDelete({ ...del, loading: true });\n }, [del]);\n\n const handleUpdate = (message) => {\n setMessageToUpdate(message);\n handleOpen();\n };\n\n const refresh = useCallback(() => {\n setLoading(true);\n\n fetchVoiceMailMessages(\n {\n agency: agencyId,\n user: [user.id, 'equals'],\n },\n page,\n );\n }, [user, page, agencyId, setLoading]);\n\n useEffect(() => {\n refresh();\n }, [refresh]);\n\n useEventSubscription(OnFetchVoiceMailMessagesEvent, ({ voiceMailMessagesList }) => {\n setLoading(false);\n setMessages(voiceMailMessagesList.items);\n setCount(voiceMailMessagesList.count);\n });\n\n useEventSubscription(OnCreateVoiceMailMessageEvent, () => {\n if (page === 1) {\n refresh();\n } else {\n setPage(1);\n }\n });\n\n useEventSubscription(OnUpdateVoiceMailMessageEvent, () => {\n Toast.success('Success', 'Voicemail message updated successfully!');\n\n if (page === 1) {\n refresh();\n } else {\n setPage(1);\n }\n });\n\n useEventSubscription(OnDeleteVoiceMailMessageEvent, () => {\n Toast.success('Success', 'Voicemail message deleted successfully!');\n\n setDelete({ ...del, selected: null, open: false, loading: false });\n\n if (page === 1) {\n refresh();\n } else {\n setPage(1);\n }\n });\n\n useEventSubscription(OnFetchVoiceMailMessagesError, onErrorMixinFC);\n\n useEventSubscription(OnUpdateVoiceMailMessageError, onErrorMixinFC);\n\n useEventSubscription(OnDeleteVoiceMailMessageError, (e) => {\n onErrorMixinFC(e);\n\n setDelete({ ...del, loading: false });\n });\n\n return (\n <>\n \n \n Name\n Play\n Active\n Action\n \n \n {(message) => (\n \n )}\n \n \n \n \n \n \n \n setDelete({ ...del, open: false, loading: false, selected: null })}\n onClose={() => setDelete({ ...del, open: false, loading: false, selected: null })}\n />\n \n >\n );\n}\n\nVoiceMailMessagesTable.propTypes = {\n agencyId: PropTypes.string.isRequired,\n};\n\nexport default VoiceMailMessagesTable;\n","import React, { useState } from 'react';\nimport { Card, Row } from '@8base/boost';\nimport VoiceMailMessagesTable from './components/VoiceMailMessagesTable';\nimport { VoiceMailMessageDialog } from './components/VoiceMailMessageDialog';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { CreateButton } from 'shared/components';\nimport { Box } from '../../../shared/components/Box';\n\n/**\n * Voice mail messages component for the settings page\n *\n * @returns {React.FC} The component to render\n */\nfunction VoiceMailMessages() {\n const agency = useAgency();\n const [isOpen, setIsOpen] = useState(false);\n const handleOpen = () => setIsOpen(true);\n\n const handleOnClose = () => setIsOpen(false);\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default VoiceMailMessages;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n padding: 2em;\n height: 100%;\n`;\n","import { Card } from '@8base/boost';\nimport styled from 'styled-components';\nimport { customScrollBar } from 'shared/css/mixins';\n\nexport const CardBody = styled(Card.Body)`\n ${customScrollBar};\n`;\n","import styled from 'styled-components';\nimport { FaRegClock, FaRegCheckCircle, FaRegTimesCircle } from 'react-icons/fa';\n\nexport const Approved = styled(FaRegCheckCircle)`\n color: #3db4aa;\n font-size: 25px;\n`;\n\nexport const Rejected = styled(FaRegTimesCircle)`\n color: var(--color-red);\n font-size: 25px;\n`;\n\nexport const Review = styled(FaRegClock)`\n color: var(--color-yellow);\n font-size: 25px;\n`;\n","export const TWILIO_TRUST_PRODUCT_STATUSES = {\n DRAFT: 'draft',\n PENDING_REVIEW: 'pending-review',\n IN_REVIEW: 'in-review',\n REJECTED: 'twilio-rejected',\n APPROVED: 'twilio-approved',\n};\n\nexport const TWILIO_MESSAGING_PRODUCT_STATUSES = {\n APPROVED: 'APPROVED',\n VERIFIED: 'VERIFIED',\n\n FAILED: 'FAILED',\n DELETION_FAILED: 'DELETION_FAILED',\n\n IN_PROGRESS: 'IN_PROGRESS',\n PENDING: 'PENDING',\n IN_REVIEW: 'IN_REVIEW',\n DELETION_PENDING: 'DELETION_PENDING',\n SUSPENDED: 'SUSPENDED',\n};\n\nexport type TwilioMessagingProductStatuses = keyof typeof TWILIO_MESSAGING_PRODUCT_STATUSES;\n","import React from 'react';\nimport { ColorRing } from 'react-loader-spinner';\nimport { Approved, Rejected, Review } from './Icons';\nimport { TWILIO_TRUST_PRODUCT_STATUSES } from '../constants';\n\n/**\n * @typedef {'draft' | 'pending-review' | 'in-review' | 'twilio-rejected' | 'twilio-approved'} TrustProductStatus\n */\n\n/**\n * @param {object} props - Component props.\n * @param {boolean} props.isLoading - Tells whether the request is loading or not.\n * @param {TrustProductStatus | boolean} [props.status] - Tells whether the product is approved or not.\n * @returns {React.ReactNode} Product status component\n */\nexport function TrustProductStatus({ isLoading, status }) {\n if (isLoading)\n return (\n \n );\n\n if (status === TWILIO_TRUST_PRODUCT_STATUSES.APPROVED || status === true) return ;\n\n if (\n status === TWILIO_TRUST_PRODUCT_STATUSES.DRAFT ||\n status === TWILIO_TRUST_PRODUCT_STATUSES.IN_REVIEW ||\n status === TWILIO_TRUST_PRODUCT_STATUSES.PENDING_REVIEW\n )\n return ;\n\n return ;\n}\n","import React from 'react';\nimport { Table, Text } from '@8base/boost';\nimport { TrustProductStatus } from './TrustProductStatus';\nimport styled from 'styled-components';\n\n/**\n * @typedef {'draft' | 'pending-review' | 'in-review' | 'twilio-rejected' | 'twilio-approved'} TrustProductStatus\n */\n\n/**\n * @typedef {object} EvaluationResultField\n * @property {string} failure_reason\n */\n\n/**\n * @typedef {object} EvaluationResult\n * @property {EvaluationResultField[]} fields\n */\n\n/**\n * @param {object} props - Component props.\n * @param {string} props.cols - Css declaration of columns number.\n * @param {string} props.title - Name of the trust product.\n * @param {TrustProductStatus} [props.status] - Trust product twilio status.\n * @param {EvaluationResult[] | string | null} props.failedEvaluationsResults - Trust product failed evaluation results.\n * @param {boolean} props.isLoading - Tells wheter the data is loaind or not.\n * @returns {React.ReactNode} props - Component props.\n */\nexport function TrustProductRegistrationRow({\n cols,\n title,\n status,\n failedEvaluationsResults,\n isLoading,\n}) {\n return (\n \n Trust\n {title}\n \n \n \n \n \n \n \n );\n}\n\nconst StyledUl = styled.ul`\n display: flex;\n flex-direction: column;\n gap: 1em;\n`;\n\n/**\n * @param {object} props - Component props.\n * @param {EvaluationResult[] | string | null} props.failedEvaluationsResults - Trust product failed evaluation results.\n * @param {TrustProductStatus} [props.status] - Trust product twilio status.\n * @returns {React.ReactNode} props - Component props.\n */\nfunction TrustProductRejectionReasons({ failedEvaluationsResults, status }) {\n if (!failedEvaluationsResults && !status) return Unexptected rejection;\n\n if (failedEvaluationsResults && Array.isArray(failedEvaluationsResults))\n return (\n \n {failedEvaluationsResults.map((evalResult) =>\n evalResult.fields.map((field) => (\n \n {field.failure_reason}\n \n )),\n )}\n \n );\n\n if (failedEvaluationsResults && typeof failedEvaluationsResults === 'string')\n return {failedEvaluationsResults};\n\n return ;\n}\n","import React from 'react';\nimport { ColorRing } from 'react-loader-spinner';\nimport { Approved, Rejected, Review } from './Icons';\nimport { TWILIO_MESSAGING_PRODUCT_STATUSES, TwilioMessagingProductStatuses } from '../constants';\n\ntype MessagingProductStatusProps = {\n isLoading: boolean;\n status?: TwilioMessagingProductStatuses | boolean;\n};\n\nexport function MessagingProductStatus({ isLoading, status }: MessagingProductStatusProps) {\n if (isLoading)\n return (\n \n );\n\n if (\n status === TWILIO_MESSAGING_PRODUCT_STATUSES.APPROVED ||\n status === TWILIO_MESSAGING_PRODUCT_STATUSES.VERIFIED ||\n status === true\n )\n return ;\n\n if (\n status === TWILIO_MESSAGING_PRODUCT_STATUSES.PENDING ||\n status === TWILIO_MESSAGING_PRODUCT_STATUSES.IN_REVIEW ||\n status === TWILIO_MESSAGING_PRODUCT_STATUSES.DELETION_PENDING ||\n status === TWILIO_MESSAGING_PRODUCT_STATUSES.IN_PROGRESS ||\n status === TWILIO_MESSAGING_PRODUCT_STATUSES.SUSPENDED\n )\n return ;\n\n return ;\n}\n","import React from 'react';\nimport { Table, Text } from '@8base/boost';\nimport { MessagingProductStatus } from './MessagingProductStatus';\nimport { TwilioMessagingProductStatuses } from '../constants';\n\ntype MessagingProductRegistrationRowProps = {\n cols: string;\n title: string;\n status?: TwilioMessagingProductStatuses | boolean;\n rejectionReason?: string;\n isLoading: boolean;\n};\n\nexport function MessagingProductRegistrationRow({\n cols,\n title,\n isLoading,\n status,\n rejectionReason,\n}: MessagingProductRegistrationRowProps): React.ReactNode {\n return (\n \n Messaging\n {title}\n \n \n \n \n \n \n \n );\n}\n\ntype RejectionReasonProps = {\n status?: TwilioMessagingProductStatuses | boolean;\n rejectionReason?: string;\n};\n\nfunction RejectionReason({ status, rejectionReason }: RejectionReasonProps) {\n if (rejectionReason) return {rejectionReason};\n\n if (!rejectionReason && !status) return Unexptected rejection;\n\n return ;\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { Table, Card } from '@8base/boost';\nimport { error as toastError, errors as toastErrors } from 'shared/components/toast/Toast';\nimport { Container } from './components/Container';\nimport { CardBody } from './components/Card';\n\nimport { getUserToken } from 'shared/helpers';\nimport { useAgency } from 'shared/hooks/useAgency';\nimport { useFetch } from 'shared/hooks/useFetch';\nimport { TrustProductRegistrationRow } from './components/TrustProductRegistrationRow';\nimport { MessagingProductRegistrationRow } from './components/MessagingProductRegistrationRow';\nimport { TableHeader } from 'shared/components';\n\nconst REACT_APP_WORKSPACE_ENDPOINT = process.env.REACT_APP_WORKSPACE_ENDPOINT;\n\n/**\n * @description Component to monitor statuses of registration for messaging and phone services\n * @returns {React.ReactNode} RegistrationStatus component.\n */\nexport default function RegistrationStatus() {\n const [token] = useState(getUserToken());\n const selectedAgency = useAgency();\n\n const cols = useMemo(() => '1fr 2fr 3fr 1fr', []);\n\n /**@type {RequestInit}*/\n const requestOptions = useMemo(\n () => ({\n method: 'GET',\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }),\n [token],\n );\n\n const telephonyProductsEndpoint = useMemo(\n () =>\n `${REACT_APP_WORKSPACE_ENDPOINT}/webhook/agencies/${selectedAgency.id}/telephony-products-status`,\n [selectedAgency.id],\n );\n\n const { data: productsData, isLoading: isLoadingProductsData, error: productsError } = useFetch(\n telephonyProductsEndpoint,\n requestOptions,\n );\n\n useEffect(() => {\n if (productsError)\n toastError(`Error fetching trust products registration data: ${productsError?.message}`);\n }, [productsError]);\n\n useEffect(() => {\n if (productsData?.errors) {\n toastErrors(productsData.errors.map((err) => err.message));\n }\n }, [productsData]);\n\n return (\n \n \n \n \n \n \n \n \n Type\n Name\n Rejection reason\n Status\n \n \n {(product) => {\n if (product.type === 'trust')\n return (\n \n );\n\n if (product.type === 'messaging')\n return (\n \n );\n }}\n \n \n \n \n \n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\ntype FetchState = {\n data: T | null;\n isLoading: boolean;\n error: Error | null;\n};\n\ntype UseFetch = FetchState & { reFetch: () => void };\n\nexport function useFetch(url: string, options?: RequestInit): UseFetch {\n const [state, setState] = useState>({\n data: null,\n isLoading: true,\n error: null,\n });\n\n const optsRef = useRef(options);\n const abortControllerRef = useRef(null);\n\n const reFetch = useCallback(() => {\n abortControllerRef.current = new AbortController();\n setState((prevState) => ({ ...prevState, error: null, isLoading: true }));\n\n fetch(url, { ...optsRef.current, signal: abortControllerRef.current.signal })\n .then((response) => response.json())\n .then((resData) => setState((prevState) => ({ ...prevState, data: resData })))\n .catch((error) => {\n if (error.name !== 'AbortError') {\n console.error(`[Error] useFetch: `, error);\n setState((prevState) => ({ ...prevState, error: error }));\n }\n })\n .finally(() => setState((prevState) => ({ ...prevState, isLoading: false })));\n }, [url]);\n\n useEffect(() => {\n reFetch();\n return () => {\n if (!abortControllerRef.current) return;\n\n abortControllerRef.current.abort();\n };\n }, [reFetch]);\n\n return { ...state, reFetch };\n}\n","export const TIMEZONE_OPTIONS = [\n {\n label: '(UTC-12:00) International Date Line West',\n value: '(UTC-12:00) International Date Line West',\n },\n {\n label: '(UTC-11:00) Coordinated Universal Time-11',\n value: '(UTC-11:00) Coordinated Universal Time-11',\n },\n { label: '(UTC-11:00) Samoa', value: '(UTC-11:00) Samoa' },\n { label: '(UTC-10:00) Hawaii', value: '(UTC-10:00) Hawaii' },\n { label: '(UTC-09:00) Alaska', value: '(UTC-09:00) Alaska' },\n { label: '(UTC-08:00) Baja California', value: '(UTC-08:00) Baja California' },\n {\n label: '(UTC-08:00) Pacific Time (US & Canada)',\n value: '(UTC-08:00) Pacific Time (US & Canada)',\n },\n { label: '(UTC-07:00) Arizona', value: '(UTC-07:00) Arizona' },\n {\n label: '(UTC-07:00) Chihuahua, La Paz, Mazatlan',\n value: '(UTC-07:00) Chihuahua, La Paz, Mazatlan',\n },\n {\n label: '(UTC-07:00) Mountain Time (US & Canada)',\n value: '(UTC-07:00) Mountain Time (US & Canada)',\n },\n { label: '(UTC-06:00) Central America', value: '(UTC-06:00) Central America' },\n {\n label: '(UTC-06:00) Central Time (US & Canada)',\n value: '(UTC-06:00) Central Time (US & Canada)',\n },\n {\n label: '(UTC-06:00) Guadalajara, Mexico City, Monterrey',\n value: '(UTC-06:00) Guadalajara, Mexico City, Monterrey',\n },\n { label: '(UTC-06:00) Saskatchewan', value: '(UTC-06:00) Saskatchewan' },\n { label: '(UTC-05:00) Bogota, Lima, Quito', value: '(UTC-05:00) Bogota, Lima, Quito' },\n {\n label: '(UTC-05:00) Eastern Time (US & Canada)',\n value: '(UTC-05:00) Eastern Time (US & Canada)',\n },\n { label: '(UTC-05:00) Indiana (East)', value: '(UTC-05:00) Indiana (East)' },\n { label: '(UTC-04:30) Caracas', value: '(UTC-04:30) Caracas' },\n { label: '(UTC-04:00) Asuncion', value: '(UTC-04:00) Asuncion' },\n { label: '(UTC-04:00) Atlantic Time (Canada)', value: '(UTC-04:00) Atlantic Time (Canada)' },\n { label: '(UTC-04:00) Cuiaba', value: '(UTC-04:00) Cuiaba' },\n {\n label: '(UTC-04:00) Georgetown, La Paz, Manaus, San Juan',\n value: '(UTC-04:00) Georgetown, La Paz, Manaus, San Juan',\n },\n { label: '(UTC-04:00) Santiago', value: '(UTC-04:00) Santiago' },\n { label: '(UTC-03:30) Newfoundland', value: '(UTC-03:30) Newfoundland' },\n { label: '(UTC-03:00) Brasilia', value: '(UTC-03:00) Brasilia' },\n { label: '(UTC-03:00) Buenos Aires', value: '(UTC-03:00) Buenos Aires' },\n { label: '(UTC-03:00) Cayenne, Fortaleza', value: '(UTC-03:00) Cayenne, Fortaleza' },\n { label: '(UTC-03:00) Greenland', value: '(UTC-03:00) Greenland' },\n { label: '(UTC-03:00) Montevideo', value: '(UTC-03:00) Montevideo' },\n {\n label: '(UTC-02:00) Coordinated Universal Time-02',\n value: '(UTC-02:00) Coordinated Universal Time-02',\n },\n { label: '(UTC-02:00) Mid-Atlantic', value: '(UTC-02:00) Mid-Atlantic' },\n { label: '(UTC-01:00) Azores', value: '(UTC-01:00) Azores' },\n { label: '(UTC-01:00) Cape Verde Is.', value: '(UTC-01:00) Cape Verde Is.' },\n { label: '(UTC) Casablanca', value: '(UTC) Casablanca' },\n { label: '(UTC) Coordinated Universal Time', value: '(UTC) Coordinated Universal Time' },\n {\n label: '(UTC) Dublin, Edinburgh, Lisbon, London',\n value: '(UTC) Dublin, Edinburgh, Lisbon, London',\n },\n { label: '(UTC) Monrovia, Reykjavik', value: '(UTC) Monrovia, Reykjavik' },\n {\n label: '(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna',\n value: '(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna',\n },\n {\n label: '(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague',\n value: '(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague',\n },\n {\n label: '(UTC+01:00) Brussels, Copenhagen, Madrid, Paris',\n value: '(UTC+01:00) Brussels, Copenhagen, Madrid, Paris',\n },\n {\n label: '(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb',\n value: '(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb',\n },\n { label: '(UTC+01:00) West Central Africa', value: '(UTC+01:00) West Central Africa' },\n { label: '(UTC+02:00) Amman', value: '(UTC+02:00) Amman' },\n {\n label: '(UTC+02:00) Athens, Bucharest, Istanbul',\n value: '(UTC+02:00) Athens, Bucharest, Istanbul',\n },\n { label: '(UTC+02:00) Beirut', value: '(UTC+02:00) Beirut' },\n { label: '(UTC+02:00) Cairo', value: '(UTC+02:00) Cairo' },\n { label: '(UTC+02:00) Damascus', value: '(UTC+02:00) Damascus' },\n { label: '(UTC+02:00) Harare, Pretoria', value: '(UTC+02:00) Harare, Pretoria' },\n {\n label: '(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius',\n value: '(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius',\n },\n { label: '(UTC+02:00) Jerusalem', value: '(UTC+02:00) Jerusalem' },\n { label: '(UTC+02:00) Minsk', value: '(UTC+02:00) Minsk' },\n { label: '(UTC+02:00) Windhoek', value: '(UTC+02:00) Windhoek' },\n { label: '(UTC+03:00) Baghdad', value: '(UTC+03:00) Baghdad' },\n { label: '(UTC+03:00) Kuwait, Riyadh', value: '(UTC+03:00) Kuwait, Riyadh' },\n {\n label: '(UTC+03:00) Moscow, St. Petersburg, Volgograd',\n value: '(UTC+03:00) Moscow, St. Petersburg, Volgograd',\n },\n { label: '(UTC+03:00) Nairobi', value: '(UTC+03:00) Nairobi' },\n { label: '(UTC+03:30) Tehran', value: '(UTC+03:30) Tehran' },\n { label: '(UTC+04:00) Abu Dhabi, Muscat', value: '(UTC+04:00) Abu Dhabi, Muscat' },\n { label: '(UTC+04:00) Baku', value: '(UTC+04:00) Baku' },\n { label: '(UTC+04:00) Port Louis', value: '(UTC+04:00) Port Louis' },\n { label: '(UTC+04:00) Tbilisi', value: '(UTC+04:00) Tbilisi' },\n { label: '(UTC+04:00) Yerevan', value: '(UTC+04:00) Yerevan' },\n { label: '(UTC+04:30) Kabul', value: '(UTC+04:30) Kabul' },\n { label: '(UTC+05:00) Ekaterinburg', value: '(UTC+05:00) Ekaterinburg' },\n { label: '(UTC+05:00) Islamabad, Karachi', value: '(UTC+05:00) Islamabad, Karachi' },\n { label: '(UTC+05:00) Tashkent', value: '(UTC+05:00) Tashkent' },\n {\n label: '(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi',\n value: '(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi',\n },\n { label: '(UTC+05:30) Sri Jayawardenepura', value: '(UTC+05:30) Sri Jayawardenepura' },\n { label: '(UTC+05:45) Kathmandu', value: '(UTC+05:45) Kathmandu' },\n { label: '(UTC+06:00) Astana', value: '(UTC+06:00) Astana' },\n { label: '(UTC+06:00) Dhaka', value: '(UTC+06:00) Dhaka' },\n { label: '(UTC+06:00) Novosibirsk', value: '(UTC+06:00) Novosibirsk' },\n { label: '(UTC+06:30) Yangon (Rangoon)', value: '(UTC+06:30) Yangon (Rangoon)' },\n { label: '(UTC+07:00) Bangkok, Hanoi, Jakarta', value: '(UTC+07:00) Bangkok, Hanoi, Jakarta' },\n { label: '(UTC+07:00) Krasnoyarsk', value: '(UTC+07:00) Krasnoyarsk' },\n {\n label: '(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi',\n value: '(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi',\n },\n { label: '(UTC+08:00) Irkutsk', value: '(UTC+08:00) Irkutsk' },\n { label: '(UTC+08:00) Kuala Lumpur, Singapore', value: '(UTC+08:00) Kuala Lumpur, Singapore' },\n { label: '(UTC+08:00) Perth', value: '(UTC+08:00) Perth' },\n { label: '(UTC+08:00) Taipei', value: '(UTC+08:00) Taipei' },\n { label: '(UTC+08:00) Ulaanbaatar', value: '(UTC+08:00) Ulaanbaatar' },\n { label: '(UTC+09:00) Osaka, Sapporo, Tokyo', value: '(UTC+09:00) Osaka, Sapporo, Tokyo' },\n { label: '(UTC+09:00) Seoul', value: '(UTC+09:00) Seoul' },\n { label: '(UTC+09:00) Yakutsk', value: '(UTC+09:00) Yakutsk' },\n { label: '(UTC+09:30) Adelaide', value: '(UTC+09:30) Adelaide' },\n { label: '(UTC+09:30) Darwin', value: '(UTC+09:30) Darwin' },\n { label: '(UTC+10:00) Brisbane', value: '(UTC+10:00) Brisbane' },\n {\n label: '(UTC+10:00) Canberra, Melbourne, Sydney',\n value: '(UTC+10:00) Canberra, Melbourne, Sydney',\n },\n { label: '(UTC+10:00) Guam, Port Moresby', value: '(UTC+10:00) Guam, Port Moresby' },\n { label: '(UTC+10:00) Hobart', value: '(UTC+10:00) Hobart' },\n { label: '(UTC+10:00) Vladivostok', value: '(UTC+10:00) Vladivostok' },\n {\n label: '(UTC+11:00) Magadan, Solomon Is., New Caledonia',\n value: '(UTC+11:00) Magadan, Solomon Is., New Caledonia',\n },\n { label: '(UTC+12:00) Auckland, Wellington', value: '(UTC+12:00) Auckland, Wellington' },\n {\n label: '(UTC+12:00) Coordinated Universal Time+12',\n value: '(UTC+12:00) Coordinated Universal Time+12',\n },\n { label: '(UTC+12:00) Fiji', value: '(UTC+12:00) Fiji' },\n {\n label: '(UTC+12:00) Petropavlovsk-Kamchatsky – Old',\n value: '(UTC+12:00) Petropavlovsk-Kamchatsky – Old',\n },\n { label: '(UTC+13:00) Nuku’alofa', value: '(UTC+13:00) Nuku’alofa' },\n];\n","import React from 'react';\nimport { Paper, Table } from '@8base/boost';\nimport PropTypes from 'prop-types';\n\nconst columns = '60% 40%';\n\ninterface IAgencyRolesTable {\n userAgencyRelation: any[];\n}\n\n/**\n * Table with every role of the user in agencies related to him\n *\n * @param props - The React component's prop object\n *\n * @returns Component\n */\nconst AgencyRolesTable: React.FC = ({ userAgencyRelation }) => {\n return (\n \n \n \n Agency\n Roles\n \n \n {(userAgency: any) => (\n \n {userAgency.agency.name}\n {userAgency.roles.join(', ')}\n \n )}\n \n \n \n );\n};\n\nAgencyRolesTable.propTypes = {\n userAgencyRelation: PropTypes.array.isRequired,\n};\n\nexport default AgencyRolesTable;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid, Paper, Table } from '@8base/boost';\n\ninterface IRoleTableProps {\n roleRelationArray: any[];\n titleHeader: string;\n userRole: string;\n}\n\n/**\n * Show user roles.\n *\n * @param props - The react component's prop object\n * @param roleRelationArray - User relationships with roles.\n * @param titleHeader - Check if it is company or agency.\n * @param userRole - Role of the user.\n *\n * @returns Table - The component to render\n */\nconst RoleTable: React.FC = ({ roleRelationArray, titleHeader, userRole }) => {\n return (\n <>\n {roleRelationArray.length > 0 ? (\n \n \n \n \n \n {titleHeader}\n Role\n \n \n {roleRelationArray.map((data) => {\n return (\n \n \n {`${titleHeader === 'Company' ? data.company.name : data.agency.name}`}\n \n {userRole}\n \n );\n })}\n \n \n \n \n \n ) : null}\n >\n );\n};\n\nRoleTable.propTypes = {\n roleRelationArray: PropTypes.array.isRequired,\n titleHeader: PropTypes.string.isRequired,\n userRole: PropTypes.string.isRequired,\n};\n\nexport { RoleTable };\n","import React, { useState, useEffect, FC, CSSProperties } from 'react';\nimport { updateUser, fetchSession } from '../../auth/auth.actions';\nimport {\n OnUserUpdateError,\n OnSessionFetch,\n OnUserUpdate,\n} from '../../../shared/session/session-events';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport styled from 'styled-components';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport {\n Card,\n Grid,\n Avatar,\n Form,\n InputField,\n SelectField,\n Dialog,\n Paragraph,\n Button,\n Row,\n Loader,\n} from '@8base/boost';\nimport { Box } from '../../../shared/components/Box';\nimport { FileInput } from '@8base-react/file-input';\nimport { TIMEZONE_OPTIONS } from './general-model';\nimport AgencyRolesTable from './components/AgencyRolesTable';\nimport { RoleTable } from './components/RoleTable';\nimport { PrimaryBtn } from '../../../shared/components/ui/buttons/PrimaryBtn';\nimport * as toast from 'shared/components/toast/Toast';\n\nconst AvatarGridBox = styled(Grid.Box)`\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n\nconst AvatarText = styled.button`\n margin-top: 20px;\n height: 20px;\n width: 100%;\n color: #3db4aa;\n font-size: 13px;\n line-height: 18px;\n text-align: center;\n background: transparent;\n outline: none;\n cursor: pointer;\n`;\n\nconst AvatarStyle: CSSProperties = {\n width: 200,\n height: 200,\n border: '3px solid #3db4aa',\n};\nconst defaultAvatar = {\n downloadUrl: '',\n fileId: '',\n filename: '',\n public: false,\n mimetype: '',\n};\n\nexport const GeneralView: FC = () => {\n const [loading, setLoading] = useState(true);\n const [id, setId] = useState('');\n const [firstName, setFirstName] = useState('');\n const [lastName, setLastName] = useState('');\n const [email, setEmail] = useState('');\n const [timezone, setTimezone] = useState('');\n const [cellPhone, setCellPhone] = useState('');\n const [workPhone, setWorkPhone] = useState('');\n const [workPhoneExt, setWorkPhoneExt] = useState('');\n const [avatar, setAvatar] = useState(null);\n\n const [downloadUrl, setDownloadUrl] = useState('');\n\n const [adminRelation, setAdminRelation] = useState([]);\n const [userAgencyRelation, setUserAgencyRelation] = useState([]);\n\n const [isOpenUpdate, setIsOpenUpdate] = useState(false);\n const [loaderUpdate, setLoaderUpdate] = useState(false);\n\n const handleChangeFirstName = (e: any) => setFirstName(e.target.value);\n const handleChangeLastName = (e: any) => setLastName(e.target.value);\n const handleChangeEmail = (e: any) => setEmail(e.target.value);\n const handleChangeCellPhone = (e: any) => setCellPhone(e.target.value);\n const handleChangeWorkPhone = (e: any) => setWorkPhone(e.target.value);\n const handleChangeWorkPhoneExtra = (e: any) => setWorkPhoneExt(e.target.value);\n\n const handleOpenUpdate = () => setIsOpenUpdate(true);\n const handleCloseUpdate = () => setIsOpenUpdate(false);\n\n useEffect(() => {\n fetchSession();\n }, []);\n\n useSimpleSubscription(\n OnSessionFetch,\n (props) => {\n const { user } = props!;\n const { cellPhone, workPhone, workPhoneExt, timezone } = user;\n\n setId(user.id);\n setFirstName(user.firstName);\n setLastName(user.lastName);\n setEmail(user.email);\n setTimezone(timezone ? timezone : '');\n setCellPhone(cellPhone ? cellPhone : '');\n setWorkPhone(workPhone ? workPhone : '');\n setWorkPhoneExt(workPhoneExt ? workPhoneExt : '');\n setAdminRelation(user.userAdminRelation.items);\n setUserAgencyRelation(user.userAgencyUserRelation.items);\n setDownloadUrl(user.avatar !== null ? user.avatar.downloadUrl : null);\n setLoading(false);\n },\n [],\n );\n\n useSimpleSubscription(\n OnUserUpdate,\n () => {\n setLoaderUpdate(false);\n handleCloseUpdate();\n toast.success('Profile', 'Updated Successfully!');\n setLoading(true);\n fetchSession();\n },\n [handleCloseUpdate],\n );\n\n useSimpleSubscription(\n OnUserUpdateError,\n (error) => {\n setLoaderUpdate(false);\n handleCloseUpdate();\n onErrorMixinFC(error);\n },\n [handleCloseUpdate],\n );\n\n const handleSubmit = () => {\n setLoaderUpdate(true);\n\n const _Avatar = {\n fileId: avatar ? avatar.fileId : defaultAvatar.fileId,\n filename: avatar ? avatar.filename : defaultAvatar.filename,\n };\n\n const userData = {\n id,\n firstName,\n lastName,\n email,\n timezone,\n cellPhone,\n workPhone,\n workPhoneExt,\n avatar: avatar && _Avatar,\n };\n\n updateUser(userData);\n };\n\n if (loading) return ;\n\n return (\n \n \n \n \n \n \n \n {\n setDownloadUrl(picture.downloadUrl);\n setAvatar(picture);\n }}\n // value={input.field}\n maxFiles={1}>\n {({ pick }) => (\n pick({})}>Change Profile Image\n )}\n \n \n \n \n \n Personal Information\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setTimezone(value),\n }}\n options={TIMEZONE_OPTIONS}\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 Save Changes\n \n \n \n \n \n Are you sure update the changes?\n \n \n \n Cancel\n \n \n Update\n \n \n \n \n \n );\n};\n\nconst LoaderSpinner: FC = () => (\n \n \n \n);\n","import React, { useState, useEffect } from 'react';\nimport styled from 'styled-components';\nimport * as toast from 'shared/components/toast/Toast';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { updateUserSignature } from './email-actions';\nimport { Card, Loader, Row } from '@8base/boost';\nimport { RadioInputField } from 'shared/components';\nimport { PrimaryBtn } from '../../../shared/components/ui/buttons/PrimaryBtn';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { Editor } from '@tinymce/tinymce-react';\nimport { Box } from '../../../shared/components/Box';\nimport { OnUserSignatureUpdateError, OnUserSignatureUpdateEvent } from './email-events';\nimport { OnUserSignatureError, OnUserSignatureEvent } from 'modules/email/email-events';\nimport { fetchUserSignature } from 'modules/email/email-actions';\n\nconst CardBodyHeight = styled(Card.Body)`\n display: flex;\n flex-direction: column;\n min-height: 335px;\n`;\n\nconst CardFooterFlexEnd = styled(Card.Footer)`\n display: flex;\n justify-content: flex-end;\n`;\n\nconst FullHeightContainer = styled.div`\n display: grid;\n grid-template-columns: 250px 1fr;\n`;\n\nconst TitleCardBody = styled.p`\n font-size: 13px;\n font-weight: bold;\n`;\n\nconst EmailView = () => {\n const [isEnableSignature, setIsEnableSignature] = useState(false);\n const [editorState, setEditorState] = useState(/* EditorState.createEmpty() */);\n\n const [loaderComponent, setLoaderComponent] = useState(true);\n const [loaderUpdate, setLoaderUpdate] = useState(false);\n\n useEffect(() => {\n fetchUserSignature();\n }, []);\n\n const handleChangeEnableSignature = () => {\n setIsEnableSignature(!isEnableSignature);\n };\n\n useEventSubscription(OnUserSignatureUpdateEvent, () => {\n setLoaderUpdate(false);\n toast.success('Signature Successfully Updated');\n });\n\n useEventSubscription(OnUserSignatureUpdateError, (err) => {\n setLoaderUpdate(false);\n onErrorMixinFC(err);\n });\n\n useEventSubscription(OnUserSignatureEvent, (data) => {\n setIsEnableSignature(data.user.isEnableSignature ? true : false);\n if (data.user.signature !== null) {\n setEditorState(data.user.signature);\n }\n setLoaderComponent(false);\n });\n\n useEventSubscription(OnUserSignatureError, (err) => {\n console.log(err);\n onErrorMixinFC(err);\n });\n\n const handleUpdateSignature = () => {\n setLoaderUpdate(true);\n\n const data = {\n signature: editorState || '',\n isEnableSignature,\n };\n updateUserSignature(data);\n };\n\n if (loaderComponent) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n \n Email Signature\n \n \n \n \n \n setEditorState(newContent)}\n />\n \n \n \n \n \n Save Changes\n \n \n \n \n );\n};\n\nexport { EmailView };\n","import React, { useCallback } from 'react';\nimport { Table, Dropdown, Menu, Icon, Tag as BoostTag } from '@8base/boost';\nimport { DropdownBodyOnTable } from '../../../../shared/components';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst MenuItem = styled(Menu.Item)`\n color: ${({ danger }) => (danger ? '#FF0000' : 'rgb(50, 60, 71)')}!important;\n &:hover {\n ${({ danger }) => (danger ? '' : 'color: #3db4aa !important;')}\n }\n`;\n\nconst Roles = styled(Table.BodyCell)`\n word-break: break-word !important;\n`;\n\nconst Tag = styled(BoostTag)`\n ${(props) => {\n switch (props.status) {\n case 'active':\n return `\n color: #3DB4AA !important;\n background-color: rgba(61, 180, 170, .1) !important;\n border-color: rgba(61, 180, 170, .4) !important;\n `;\n case 'invited':\n return `\n color: #62ABFE !important;\n background-color: rgba(98, 171, 254, .1) !important;\n border-color: rgba(98, 171, 254, .4) !important;\n `;\n case 'inactive':\n return `\n color: #FF0606 !important;\n background-color: rgba(255, 6, 6, .1) !important;\n border-color: rgba(255, 6, 6, .4) !important;\n `;\n default:\n return `\n color: #3DB4AA !important;\n background-color: rgba(61, 180, 170, .1) !important;\n border-color: rgba(61, 180, 170, .4) !important;\n `;\n }\n }}\n`;\n\n/**\n * User table row compnent\n *\n * @param {object} props - The component's prop object\n * @param {number} props.index - The number of the row in the table\n * @param {object} props.user - The user object to display the data from\n * @param {Function} props.onUpdate - Callback that is triggered when the update button is clicked\n * @param {Function} props.onDelete - Callback that is triggered when the delete button is clicked\n *\n * @returns {React.FC} The component to render\n */\nfunction UsersTableRow({ index, user, onUpdate, onDelete }) {\n const {\n 0: { roles },\n } = user.userAgencyUserRelation.items;\n const [admin] = user.userAdminRelation.items;\n\n const handleUpdate = useCallback(\n (callback) => {\n onUpdate(user);\n callback();\n },\n [user, onUpdate],\n );\n\n const handleDelete = useCallback(\n (callback) => {\n onDelete(user);\n callback();\n },\n [user, onDelete],\n );\n\n return (\n <>\n {index}\n \n {user.firstName} {user.lastName}\n \n {user.email}\n \n {roles.join(', ')} {admin ? ', ADMIN' : ''}\n \n \n {user.status}\n \n \n \n \n \n \n \n \n {({ closeDropdown }) => (\n \n handleUpdate(closeDropdown)}>Edit Details\n handleDelete(closeDropdown)}>\n Delete\n \n \n )}\n \n \n \n >\n );\n}\n\nUsersTableRow.propTypes = {\n index: PropTypes.number.isRequired,\n user: PropTypes.shape({\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n email: PropTypes.string.isRequired,\n roles: PropTypes.array.isRequired,\n status: PropTypes.array.isRequired,\n userAgencyUserRelation: PropTypes.shape({\n items: PropTypes.array.isRequired,\n }).isRequired,\n userAdminRelation: PropTypes.shape({\n items: PropTypes.array.isRequired,\n }).isRequired,\n }).isRequired,\n onUpdate: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n};\n\nexport default UsersTableRow;\n","import gql from 'graphql-tag';\n\nexport const AGENCY_USERS_LIST = gql`\n query FetchAgencyUsers($id: ID, $first: Int, $skip: Int) {\n usersList(\n filter: { userAgencyUserRelation: { some: { agency: { id: { equals: $id } } } } }\n first: $first\n skip: $skip\n orderBy: createdAt_DESC\n ) {\n count\n items {\n id\n firstName\n lastName\n email\n status\n userAgencyUserRelation(filter: { agency: { id: { equals: $id } } }) {\n items {\n id\n roles\n }\n }\n userAdminRelation(\n filter: { company: { agencyCompanyRelation: { some: { id: { equals: $id } } } } }\n ) {\n items {\n company {\n id\n name\n }\n }\n }\n }\n }\n }\n`;\n\nexport const UPDATE_USER_AGENCY_ROLES = gql`\n mutation UpdateUserAgencyRole($data: AgencyUserUpdateInput!) {\n agencyUserUpdate(data: $data) {\n id\n roles\n }\n }\n`;\n\nexport const REMOVE_USER_FROM_AGENCY = gql`\n mutation DeleteUserAgency($data: AgencyUserDeleteInput) {\n agencyUserDelete(data: $data) {\n success\n }\n }\n`;\nexport const DELETE_AGENT = gql`\n mutation deleteAgent($agent: AgentDeleteInput) {\n agentDelete(data: $agent) {\n success\n }\n }\n`;\n\nexport const DELETE_MANAGER = gql`\n mutation deleteManager($manager: ManagerDeleteInput) {\n managerDelete(data: $manager) {\n success\n }\n }\n`;\n\nexport const UPDATE_AGENT = gql`\n mutation editAgentToManager($userId: ID, $agencyId: ID, $agentId: AgentDeleteInput) {\n agentDelete(data: $agentId) {\n success\n }\n\n managerCreate(\n data: { user: { connect: { id: $userId } }, agency: { connect: { id: $agencyId } } }\n ) {\n id\n }\n }\n`;\n\nexport const UPDATE_MANAGER = gql`\n mutation editManagerToAgent($userId: ID, $agencyId: ID, $managerId: ManagerDeleteInput) {\n managerDelete(data: $managerId) {\n success\n }\n\n agentCreate(\n data: { user: { connect: { id: $userId } }, agency: { connect: { id: $agencyId } } }\n ) {\n id\n }\n }\n`;\n","import { ValidationError } from '../../../shared/errors';\nimport { AGENCY_ROLES } from '../../../shared/constants';\nimport { isValidString } from '../../../shared/validators';\n\n/**\n * Validator on the User Role update operation\n *\n * @param {object} data - The data to validate\n *\n * @returns {void}\n */\nexport const updateUserRolesValidator = (data) => {\n const errors = [];\n\n if (!isValidString(data.id)) errors.push('This request is not valid');\n\n if (data.roles.length === 0) errors.push('The user must have at least one role in the agency');\n\n const validRoles = data.roles.every(\n (role) => role === AGENCY_ROLES.MANAGER || role === AGENCY_ROLES.AGENT,\n );\n\n if (!validRoles) errors.push('The roles assigned to the user are not valid');\n\n if (errors.length > 0) {\n throw new ValidationError(errors);\n }\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnUsersListEvent = createEvent();\n\nexport const OnUsersListError = createEvent();\n\nexport const OnUpdateUserAgencyRolesEvent = createEvent();\n\nexport const OnUpdateUserAgencyRolesError = createEvent();\n\nexport const OnRemoveUserFromAgencyEvent = createEvent();\n\nexport const OnRemoveUserFromAgencyError = createEvent();\n\nexport const OnDeleteAgentEvent = createEvent();\n\nexport const OnDeleteAgentError = createEvent();\n\nexport const OnUpdateAgentEvent = createEvent();\n\nexport const OnUpdateAgentError = createEvent();\n\nexport const OnDeleteManagerEvent = createEvent();\n\nexport const OnDeleteManagerError = createEvent();\n\nexport const OnUpdateManagerEvent = createEvent();\n\nexport const OnUpdateManagerError = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport {\n AGENCY_USERS_LIST,\n DELETE_AGENT,\n DELETE_MANAGER,\n UPDATE_AGENT,\n UPDATE_MANAGER,\n UPDATE_USER_AGENCY_ROLES,\n REMOVE_USER_FROM_AGENCY,\n} from './team-queries';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport { updateUserRolesValidator } from './team-validators';\nimport {\n OnDeleteAgentError,\n OnDeleteAgentEvent,\n OnDeleteManagerError,\n OnDeleteManagerEvent,\n OnRemoveUserFromAgencyError,\n OnRemoveUserFromAgencyEvent,\n OnUpdateAgentError,\n OnUpdateAgentEvent,\n OnUpdateManagerError,\n OnUpdateManagerEvent,\n OnUpdateUserAgencyRolesError,\n OnUpdateUserAgencyRolesEvent,\n OnUsersListError,\n OnUsersListEvent,\n} from './team-events';\n\n/**\n * Fetch user list\n *\n * @param {string} agencyId - The agency id\n * @param {number} page - The page to search the users from\n *\n * @returns {Promise} The request result\n */\nexport const fetchUsersList = async (agencyId, page = 1) => {\n const client = OnApolloClient.get();\n const first = 10;\n const skip = first * (page - 1);\n let response = null;\n\n try {\n response = await client.query({\n query: AGENCY_USERS_LIST,\n fetchPolicy: 'network-only',\n variables: { id: agencyId, first, skip },\n });\n } catch (e) {\n error('fetchUsersList', e);\n\n return OnUsersListError.dispatch(e.message);\n }\n\n log('fetchUsersList', response.data);\n\n OnUsersListEvent.dispatch(response.data);\n return response.data;\n};\n\n/**\n * Updates the roles of a user in a specific agency\n *\n * @param {string} id - The AgencyUser id\n * @param {Array} roles - The roles assigned to the user\n *\n * @returns {Promise} The request response\n */\nexport const updateUserRolesInAgency = async (id, roles) => {\n const client = OnApolloClient.get();\n let response = null;\n const data = {\n id,\n roles,\n };\n\n try {\n updateUserRolesValidator(data);\n } catch (e) {\n error('updateUserRolesInAgency');\n\n return OnUpdateUserAgencyRolesError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: UPDATE_USER_AGENCY_ROLES,\n variables: { data },\n });\n } catch (e) {\n error('updateUserRoles', e);\n\n return OnUpdateUserAgencyRolesError.dispatch(e);\n }\n\n log('updateUserRoles', response.data);\n\n OnUpdateUserAgencyRolesEvent.dispatch(response.data);\n};\n\n/**\n * Removes the user from the agency\n *\n * @param {string} id - Id of the AgencyUser record\n *\n * @returns {Promise} The request result\n */\nexport const removeUserFromAgency = async (id) => {\n const client = OnApolloClient.get();\n let response = null;\n const data = {\n id,\n };\n\n try {\n response = await client.mutate({\n mutation: REMOVE_USER_FROM_AGENCY,\n variables: { data },\n });\n } catch (e) {\n error('removeUserFromAgency', e);\n\n return OnRemoveUserFromAgencyError.dispatch(e);\n }\n\n log('removeUserFromAgency', response.data);\n OnRemoveUserFromAgencyEvent.dispatch(response.data);\n};\n\n/**\n * Function to delete Agent\n *\n * @param {string} id - id from the agent to delete\n * @param {boolean} force\n */\n\nexport const deleteAgent = async (id, force) => {\n const client = OnApolloClient.get();\n\n let response;\n\n try {\n response = await client.mutate({\n mutation: DELETE_AGENT,\n fetchPolicy: 'no-cache',\n variables: {\n agent: {\n id,\n force,\n },\n },\n });\n } catch (e) {\n error('deleteAgent', e);\n OnDeleteAgentError.dispatch(e);\n }\n\n OnDeleteAgentEvent.dispatch(response.data);\n fetchUsersList();\n return response;\n};\n\n/**\n * Function to delete manager\n *\n * @param {string} id - id from the manager to delete\n * @param {boolean} force\n */\n\nexport const deleteManager = async (id, force) => {\n const client = OnApolloClient.get();\n\n let response;\n\n try {\n response = await client.mutate({\n mutation: DELETE_MANAGER,\n fetchPolicy: 'no-cache',\n variables: {\n manager: {\n id,\n force,\n },\n },\n });\n } catch (e) {\n error('delete Manager', e);\n OnDeleteManagerError.dispatch(e);\n }\n\n OnDeleteManagerEvent.dispatch(response.data);\n fetchUsersList();\n return response;\n};\n\n/**\n * Function to update Agent\n *\n * @param {string} agentId - id from the agent to edit\n * @param {string} userId - id from the user to create a manager\n * @param {string} agencyId - id from the agency to create an manager there\n *\n */\n\nexport const updateAgent = async (agentId, userId, agencyId) => {\n const client = OnApolloClient.get();\n\n const agent = {\n id: agentId,\n force: true,\n };\n\n let response;\n\n try {\n response = await client.mutate({\n mutation: UPDATE_AGENT,\n fetchPolicy: 'no-cache',\n variables: { agentId: agent, userId, agencyId },\n });\n } catch (e) {\n error('updateAgent', e);\n OnUpdateAgentError.dispatch(e);\n }\n\n OnUpdateAgentEvent.dispatch(response.data);\n fetchUsersList(agencyId);\n return response;\n};\n\n/**\n * Function to update manager\n *\n * @param {string} managerId - id from the manager to update\n * @param {string} userId - id from the user to create a manager\n * @param {string} agencyId - id from the agency to create an agent there\n *\n */\n\nexport const updateManager = async (managerId, userId, agencyId) => {\n const client = OnApolloClient.get();\n\n const manager = {\n id: managerId,\n force: true,\n };\n\n let response;\n\n try {\n response = await client.mutate({\n mutation: UPDATE_MANAGER,\n fetchPolicy: 'no-cache',\n variables: { managerId: manager, userId, agencyId },\n });\n } catch (e) {\n error('updateManager', e);\n OnUpdateManagerError.dispatch(e);\n }\n\n OnUpdateManagerEvent.dispatch(response.data);\n fetchUsersList(agencyId);\n return response;\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { SelectField } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { onErrorMixinFC } from '../../../../../shared/mixins';\nimport { DialogForm } from '../../../../../shared/components';\nimport { updateUserRolesInAgency } from '../../team-actions';\nimport PropTypes from 'prop-types';\nimport { OnUpdateUserAgencyRolesError, OnUpdateUserAgencyRolesEvent } from '../../team-events';\n\nconst ROLES_OPTIONS = [\n { label: 'Manager', value: 'MANAGER' },\n { label: 'Agent', value: 'AGENT' },\n];\n\n/**\n * Function to update role\n *\n * @param {Function} onClose - function to close modal\n * @param {Function} isOpen - function to open modal\n * @param {object} user - user to update\n */\n\nconst UpdateDetailsForm = ({ onClose, isOpen, user }) => {\n const [roles, setRoles] = useState([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n const {\n 0: { roles },\n } = user.userAgencyUserRelation.items;\n setRoles(roles);\n }\n }, [user, isOpen]);\n\n useEventSubscription(OnUpdateUserAgencyRolesEvent, () => setLoading(false));\n\n useEventSubscription(OnUpdateUserAgencyRolesError, (e) => {\n setLoading(false);\n onErrorMixinFC(e);\n });\n\n const handleUpdate = useCallback(() => {\n setLoading(true);\n\n const {\n 0: { id },\n } = user.userAgencyUserRelation.items;\n\n updateUserRolesInAgency(id, roles);\n }, [user, roles]);\n\n return (\n \n \n \n );\n};\n\nUpdateDetailsForm.propTypes = {\n onClose: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n user: PropTypes.object,\n};\n\nUpdateDetailsForm.defaultProps = {\n user: {},\n};\n\nexport default UpdateDetailsForm;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Table } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport UsersTableRow from './UsersTableRow';\nimport UpdateDetailsForm from './team-actions/UpdateDetailsForm';\nimport * as Toast from '../../../../shared/components/toast/Toast';\nimport YesNoDialog from '../../../../shared/components/YesNoDialog';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport { fetchUsersList, removeUserFromAgency } from '../team-actions';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport {\n OnRemoveUserFromAgencyError,\n OnRemoveUserFromAgencyEvent,\n OnUpdateUserAgencyRolesEvent,\n OnUsersListError,\n OnUsersListEvent,\n} from '../team-events';\n\nconst Body = styled(Table.Body)`\n min-height: 335px;\n`;\n\nconst columns = '68px repeat(5 , 1fr) 105px';\n\n/**\n * The users table component\n *\n * @param {object} props - The react component props object\n * @param {string} props.agencyId - The agency to fetch the users from\n * @param {number} props.page - The page to reduce the results of users\n * @param {Function} props.onUsersCount - Callback that triggers when the final count of users in this agency is available\n *\n * @returns {React.FC} The component to render\n */\nfunction UsersTable({ agencyId, page, onUsersCount }) {\n const [users, setUsers] = useState([]);\n const [loading, setLoading] = useState(true);\n const [updateModal, setUpdateModal] = useState({ open: false, selected: {} });\n const [deleteModal, setDeleteModal] = useState({ open: false, selected: {}, loading: false });\n\n useEffect(() => {\n setLoading(true);\n\n fetchUsersList(agencyId, page);\n }, [agencyId, page]);\n\n useEventSubscription(OnUsersListEvent, ({ usersList }) => {\n setLoading(false);\n\n onUsersCount(usersList.count);\n setUsers(usersList.items);\n });\n\n useEventSubscription(OnUpdateUserAgencyRolesEvent, () => {\n setUpdateModal({ open: false, selected: {} });\n\n Toast.success('Success', 'User roles in agency updated');\n\n if (page === 1) {\n setLoading(true);\n fetchUsersList(agencyId, page);\n }\n });\n\n useEventSubscription(OnRemoveUserFromAgencyEvent, () => {\n setDeleteModal({ open: false, selected: {}, loading: false });\n\n Toast.success('Success', 'User successfully removed from agency');\n\n if (page === 1) {\n setLoading(true);\n fetchUsersList(agencyId, page);\n }\n });\n\n useEventSubscription(OnUsersListError, onErrorMixinFC);\n\n useEventSubscription(OnRemoveUserFromAgencyError, (e) => {\n setDeleteModal((state) => ({ ...state, loading: false }));\n\n onErrorMixinFC(e);\n });\n\n const handleEdit = useCallback((user) => {\n setUpdateModal({\n open: true,\n selected: user,\n });\n }, []);\n\n const handleDeleteClick = useCallback(\n (user) =>\n setDeleteModal({\n open: true,\n selected: user,\n }),\n [],\n );\n\n const handleDelete = useCallback(() => {\n const {\n 0: { id },\n } = deleteModal.selected.userAgencyUserRelation.items;\n\n setDeleteModal((state) => ({ ...state, loading: true }));\n\n removeUserFromAgency(id);\n }, [deleteModal]);\n\n return (\n \n \n #\n NAME\n EMAIL\n ROLES\n STATUS\n LAST SIGN IN\n ACTIONS\n \n \n {(user, i) => (\n \n \n \n )}\n \n setUpdateModal({ open: false, selected: {} })}\n />\n setDeleteModal((state) => ({ ...state, open: false }))}\n onYes={handleDelete}\n onNo={() => setDeleteModal((state) => ({ ...state, open: false }))}\n isLoading={deleteModal.loading}\n />\n \n );\n}\n\nUsersTable.propTypes = {\n agencyId: PropTypes.string.isRequired,\n page: PropTypes.number.isRequired,\n onUsersCount: PropTypes.func.isRequired,\n};\n\nexport default UsersTable;\n","import React, { useState, useCallback } from 'react';\nimport * as toast from 'shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../../../shared/mixins';\nimport PropTypes from 'prop-types';\nimport { Button, Form, SelectField, InputField, Dialog } from '@8base/boost';\nimport { hasError } from 'apollo-client/core/ObservableQuery';\nimport { createInvitation } from './../../../invitations/invitations-actions';\nimport { USER_INVITATION_TYPES } from './../../../invitations/invitations-model';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport {\n OnCreateInvitationError,\n OnCreateInvitationEvent,\n} from 'modules/my-account/invitations/invitation-events';\n\nexport const Invitation = ({ onClose, isOpen, agencyId, agencyName }) => {\n const formDefault = {\n type: '',\n email: '',\n };\n const [form, setForm] = useState(formDefault);\n const [formErrors, setFormErrors] = useState({\n type: {},\n email: {},\n });\n const [loading, setLoading] = useState(false);\n const handleChange = useCallback(({ target }) => {\n const { value, name } = target;\n setFormErrors((state) => ({ ...state, [name]: {} }));\n setForm((state) => ({ ...state, [name]: value }));\n }, []);\n\n const handleSelectChange = useCallback((type) => {\n setFormErrors((state) => ({ ...state, type: {} }));\n setForm((state) => ({ ...state, type }));\n }, []);\n\n useEventSubscription(OnCreateInvitationEvent, () => {\n setForm(formDefault);\n onClose();\n toast.success('Success', 'Invitation send successfully');\n setLoading(false);\n });\n\n useEventSubscription(OnCreateInvitationError, (error) => {\n onErrorMixinFC(error);\n setLoading(false);\n });\n\n const saveInvitation = useCallback(() => {\n const data = {\n ...form,\n agency: {\n connect: {\n id: agencyId,\n },\n },\n };\n setLoading(true);\n createInvitation(data);\n }, [form, agencyId]);\n\n const disabledSubmit = hasError(formErrors);\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n Cancel\n \n \n Send\n \n \n \n >\n );\n};\nInvitation.propTypes = {\n onClose: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n agencyId: PropTypes.string.isRequired,\n agencyName: PropTypes.string.isRequired,\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { OnSessionFetch } from '../../../shared/session/session-events';\nimport { Card, Pagination, Row } from '@8base/boost';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport UsersTable from './components/UsersTable';\nimport { Invitation } from './components/invite-team-member/Invitation';\nimport { useHistory } from 'react-router-dom';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { Box } from '../../../shared/components/Box';\nimport { CreateButton } from 'shared/components';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { OnRemoveUserFromAgencyEvent, OnUpdateUserAgencyRolesEvent } from './team-events';\n\nconst CardHeader = styled(Card.Header)`\n display: flex;\n justify-content: flex-end;\n`;\n\nconst StatusTeam = ({ color1, color2, dato }) => (\n \n {dato}\n \n);\n\nconst TeamView = (props) => {\n const [pagination, setPagination] = useState({ page: 1, total: 0 });\n const [isInviteModalOpen, setisInviteModalOpen] = useState(false);\n const agency = useAgency();\n const history = useHistory();\n\n useEffect(() => {\n const user = OnSessionFetch.get().user;\n const validUser = user?.userAdminRelation.count > 0;\n if (!validUser) {\n history.goBack();\n }\n }, [history]);\n\n useEventSubscription(OnUpdateUserAgencyRolesEvent, () => {\n if (pagination.page !== 1) {\n setPagination((state) => ({ ...state, page: 1 }));\n }\n });\n\n useEventSubscription(OnRemoveUserFromAgencyEvent, () => {\n if (pagination.page !== 1) {\n setPagination((state) => ({ ...state, page: 1 }));\n }\n });\n\n const handlePageChange = useCallback(\n (page) => setPagination((state) => ({ ...state, page })),\n [],\n );\n\n const handleTotalChange = useCallback(\n (total) => setPagination((state) => ({ ...state, total })),\n [],\n );\n\n return (\n \n \n \n setisInviteModalOpen(true)}\n text=\"Create Team Member\"\n />\n \n \n \n \n \n \n \n \n \n setisInviteModalOpen(false)}\n agencyId={agency.id}\n agencyName={agency.name}\n />\n \n \n );\n};\n\nStatusTeam.propTypes = {\n dato: PropTypes.string.isRequired,\n color1: PropTypes.string.isRequired,\n color2: PropTypes.string.isRequired,\n};\n\nexport { TeamView };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport SettingsMenu from '../../settings/SettingsView';\nimport { Loader, Row } from '@8base/boost';\nimport { Margin } from '../../../shared/components';\n/**\n * Component that renders it's children with the layout of the settings\n *\n * @param {object} props Props\n * @param {object} props.children React element\n * @returns {object} React element\n */\nexport default function SettingsLayout({ children, loading }) {\n return (\n <>\n \n {loading ? (\n \n \n \n ) : (\n \n {children}\n \n )}\n >\n );\n}\nSettingsLayout.defaultProps = {\n loading: false,\n};\nSettingsLayout.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n loading: PropTypes.bool,\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnUpdateCompanySubscription = createEvent();\n\nexport const OnUpdateCompanySubscriptionError = createEvent();\n\nexport const OnConfirmSubscriptionChange = createEvent();\n\nexport const OnConfirmSubscriptionChangeError = createEvent();\n\nexport const OnCancelSubscriptionChange = createEvent();\n\nexport const OnCancelSubscriptionChangeError = createEvent();\n\nexport const OnFetchCompanySubscriptionPlanEvent = createEvent();\n\nexport const OnFetchCompanySubscriptionPlanError = createEvent();\n\nexport const OnFetchAvailableSubscriptionPlansEvent = createEvent();\n\nexport const OnFetchAvailableSubscriptionPlansError = createEvent();\n","import { isValidString, isValidInteger } from '@cobuildlab/validation-utils';\nimport { ValidationError } from '../../../../shared/errors';\n\n/**\n * Create payment method validator\n *\n * @param {object} data - The data to create the payment method\n *\n * @returns {void}\n */\nexport function updateCompanySubscriptionValidator(data) {\n const errors = [];\n\n if (!isValidString(data.companySubscriptionId)) {\n errors.push('The company should have a valid subscription plan already');\n }\n\n if (!isValidString(data.subscriptionPlanId)) {\n errors.push('The selected company should be a valid one');\n }\n\n if (!isValidInteger(data.numberOfSeats)) {\n errors.push('The number of seats should be a valid integer');\n }\n\n if (errors.length > 0) throw new ValidationError(errors);\n}\n","import { OnApolloClient } from '../../../../shared/session/session-events';\nimport { INVOICE_STATUS } from '@cobuildlab/lead-volt-share';\nimport { fetchPaymentIntentFromInvoice } from '../billing-actions';\nimport { voidInvoice } from '../billing-actions';\nimport { log, error } from '@cobuildlab/pure-logger';\nimport {\n FETCH_COMPANY_SUBSCRIPTION_PLAN,\n FETCH_COMPANY_SUBSCRIPTION_PLANS,\n FETCH_SUBSCRIPTION_PLANS,\n} from './subscription-plan-queries';\nimport {\n OnUpdateCompanySubscription,\n OnUpdateCompanySubscriptionError,\n OnConfirmSubscriptionChange,\n OnConfirmSubscriptionChangeError,\n OnCancelSubscriptionChange,\n OnCancelSubscriptionChangeError,\n OnFetchCompanySubscriptionPlanEvent,\n OnFetchCompanySubscriptionPlanError,\n OnFetchAvailableSubscriptionPlansEvent,\n OnFetchAvailableSubscriptionPlansError,\n} from './subscription-plan-events';\nimport { updateCompanySubscriptionValidator } from './subscription-plan-validators';\n\n/**\n * Fetches a subscription plan\n *\n * @param {string} id - The subscription plan id\n *\n * @returns {Promise} The request result\n */\nexport const fetchSubscriptionPlan = async (id) => {\n const client = OnApolloClient.get();\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_COMPANY_SUBSCRIPTION_PLAN,\n variables: { id },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchSubscriptionPlan', e);\n\n return OnFetchCompanySubscriptionPlanError.dispatch(e);\n }\n\n log('fetchSubscriptionPlan', response.data);\n\n return OnFetchCompanySubscriptionPlanEvent.dispatch(response.data);\n};\n\n/**\n * Fetches the current company subscription plan\n *\n * @param {string} id - The company id\n *\n * @returns {Promise} The request result\n */\nexport const fetchCompanyCurrentSubscription = async (id) => {\n const client = OnApolloClient.get();\n const first = 1;\n const skip = 0;\n const orderBy = 'createdAt_DESC';\n const filter = { company: { id: { equals: id } } };\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_COMPANY_SUBSCRIPTION_PLANS,\n variables: { filter, first, skip, orderBy },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchCompanyCurrentSubscription', e);\n\n return OnFetchCompanySubscriptionPlanError.dispatch(e);\n }\n\n log('fetchCompanyCurrentSubscription', response.data);\n\n return OnFetchCompanySubscriptionPlanEvent.dispatch(response.data);\n};\n\n/**\n * Updates a company subscription\n *\n * @param {object} data - The data object\n *\n * @returns {Promise} The request result\n */\nexport const updateCompanySubscription = async (data) => {\n let response = null;\n\n try {\n updateCompanySubscriptionValidator(data);\n } catch (e) {\n error('updateCompanySubscription', e);\n\n return OnUpdateCompanySubscriptionError.dispatch(e);\n }\n\n try {\n response = await fetch(\n `${process.env.REACT_APP_WORKSPACE_ENDPOINT}/webhook/change-subscription`,\n {\n method: 'post',\n body: JSON.stringify({\n ...data,\n }),\n },\n );\n } catch (e) {\n error('updateCompanySubscription', e);\n\n return OnUpdateCompanySubscriptionError.dispatch(e);\n }\n\n const result = await response.json();\n\n if (!response.ok) {\n const message = result.message ? result.message : 'Something happened, please try again';\n\n error('updateCompanySubscription', message);\n\n return OnUpdateCompanySubscriptionError.dispatch(new Error(message));\n }\n\n log('updateCompanySubscription', result);\n\n return OnUpdateCompanySubscription.dispatch(result);\n};\n\n/**\n * Confirms the subscription change in case it requires a payment method\n * or the card was declined\n *\n * @param {object} data - The data needed to confirm subscription payment\n * @param {object} stripe - The stripe object\n *\n * @returns {Promise} The request result\n */\nexport const confirmSubscriptionChange = async (data, stripe) => {\n const { invoice, paymentMethodId } = data;\n\n if (invoice.status === INVOICE_STATUS.OPEN) {\n let paymentIntent = null;\n\n try {\n paymentIntent = await fetchPaymentIntentFromInvoice(invoice.invoiceId);\n } catch (e) {\n error('confirmSubscriptionChange', e);\n\n return OnConfirmSubscriptionChangeError.dispatch(e);\n }\n\n if (\n paymentIntent.status === 'requires_action' ||\n paymentIntent.status === 'requires_payment_method'\n ) {\n let result = null;\n\n try {\n result = await stripe.confirmCardPayment(paymentIntent.client_secret, {\n payment_method: paymentMethodId,\n });\n } catch (e) {\n error('confirmSubscriptionChange', e);\n\n return OnConfirmSubscriptionChangeError.dispatch(e);\n }\n\n if (result.error) {\n return OnConfirmSubscriptionChangeError.dispatch(new Error(result.error.message));\n }\n\n return OnConfirmSubscriptionChange.dispatch(result);\n }\n\n if (paymentIntent.status === 'requires_payment_method') {\n return OnConfirmSubscriptionChangeError.dispatch(\n new Error(paymentIntent.last_payment_error.message),\n );\n }\n }\n};\n\n/**\n * Cancels the specified invoice that belongs to a\n * pending update in a subscription\n *\n * @param {string} stripeInvoiceId - The stripe invoice id\n *\n * @returns {Promise} The request result\n */\nexport const cancelSubscriptionChange = async (stripeInvoiceId) => {\n let invoice = null;\n\n try {\n invoice = await voidInvoice(stripeInvoiceId);\n } catch (e) {\n error('cancelSubscriptionChange', e);\n\n return OnCancelSubscriptionChangeError.dispatch(e);\n }\n\n log('cancelSubscriptionChange', invoice);\n\n return OnCancelSubscriptionChange.dispatch(invoice);\n};\n\n/**\n * Fetches the available plans\n *\n * @param {string} currentPlanId - The current plan id\n *\n * @returns {Promise} The request result\n */\nexport const fetchAvailablePlans = async (currentPlanId) => {\n const client = OnApolloClient.get();\n const orderBy = 'order_ASC';\n let response = null;\n const filter = {\n OR: [{ isFreeTrial: { equals: false } }, { id: { equals: currentPlanId } }],\n };\n\n try {\n response = await client.query({\n query: FETCH_SUBSCRIPTION_PLANS,\n variables: { filter, orderBy },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchAvailablePlans', e);\n\n return OnFetchAvailableSubscriptionPlansError.dispatch(e);\n }\n\n log('fetchAvailablePlans', response.data);\n\n return OnFetchAvailableSubscriptionPlansEvent.dispatch(response.data);\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport {\n Heading as BoostHeading,\n Dialog,\n Row,\n Column,\n Loader,\n Button,\n useModal,\n} from '@8base/boost';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { useSubscriptionPlans } from '../../../../onboarding/onboarding-hooks';\nimport { PlanCard } from '../../../../company/components/PlanCard';\nimport { PrimaryBtn as PrimaryButton } from '../../../../../shared/components/ui/buttons/PrimaryBtn';\nimport { updateCompanySubscription } from '../subscription-plan-actions';\nimport {\n OnUpdateCompanySubscription,\n OnUpdateCompanySubscriptionError,\n} from '../subscription-plan-events';\nimport { onErrorMixinFC } from '../../../../../shared/mixins';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\n\nconst Heading = styled(BoostHeading)`\n letter-spacing: 0.5px !important;\n ${(props) => {\n switch (props.color) {\n case 'primary':\n return 'color: #3DB4AA';\n default:\n return 'color: #7D828C';\n }\n }}\n`;\n\nexport const modalId = 'change-subscription-plan-dialog';\n\n/**\n * Change plan dialog component\n *\n * @param {object} props - The component props object\n * @param {string} props.id - The id of the modal\n * @param {string} props.currentPlanId - The id of the currently used plan\n *\n * @returns {React.FC} The component to render\n */\nfunction ChangePlanDialog({ companySubscription, companyUsersCount }) {\n const { isOpen, closeModal } = useModal(modalId);\n const { items, loading, fetch } = useSubscriptionPlans({ isFreeTrial: false });\n const [dialogLoading, setDialogLoading] = useState(false);\n const [selected, setSelected] = useState('');\n const [seats, setSeats] = useState(0);\n\n useEffect(() => {\n if (isOpen) {\n fetch();\n }\n }, [fetch, isOpen]);\n\n useEffect(() => {\n if (companySubscription) {\n setSeats(companySubscription.numberOfSeats);\n setSelected(companySubscription.subscriptionPlan.id);\n }\n }, [companySubscription]);\n\n useSubscription(\n OnUpdateCompanySubscription,\n () => {\n setDialogLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnUpdateCompanySubscriptionError,\n (e) => {\n setDialogLoading(false);\n onErrorMixinFC(e);\n },\n [],\n );\n\n const handleChange = useCallback((plan) => {\n setSelected(plan.id);\n }, []);\n\n const handleSubmit = useCallback(() => {\n setDialogLoading(true);\n\n updateCompanySubscription({\n companySubscriptionId: companySubscription.id,\n subscriptionPlanId: selected,\n numberOfSeats: seats,\n });\n }, [seats, selected, companySubscription]);\n\n const plans = loading ? (\n \n ) : (\n items.map((subscription) => (\n \n ))\n );\n\n return (\n \n closeModal(modalId)} />\n \n \n \n Subscription Plan\n \n {plans}\n \n \n \n \n closeModal(modalId)}>\n Cancel\n \n \n Save\n \n \n \n \n );\n}\n\nChangePlanDialog.propTypes = {\n companySubscription: PropTypes.object,\n companyUsersCount: PropTypes.number.isRequired,\n};\n\nChangePlanDialog.defaultProps = {\n companySubscription: null,\n};\n\nexport default ChangePlanDialog;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { Loader, Row as BoostRow, Paragraph, Text } from '@8base/boost';\nimport { retrieveUpcomingInvoice } from '../../billing-actions';\nimport { OnUpcomingInvoiceFetch, OnUpcomingInvoiceFetchError } from '../../billing-events';\nimport PropTypes from 'prop-types';\nimport * as Toast from '../../../../../shared/components/toast/Toast';\nimport * as moment from 'moment';\nimport styled from 'styled-components';\n\nconst Row = styled(BoostRow)`\n width: 150px;\n`;\n\n/**\n * Next invoice information component\n *\n * @param {object} props - The component's prop object\n * @param {string} props.companyId - The company id\n *\n * @returns {React.FC} The component to render\n */\nfunction NextInvoiceInformation({ companyId }) {\n const [invoice, setInvoice] = useState(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n\n useEffect(() => {\n setLoading(true);\n retrieveUpcomingInvoice(companyId);\n }, [companyId]);\n\n const retryFetch = useCallback(() => {\n setLoading(true);\n retrieveUpcomingInvoice(companyId);\n }, [companyId]);\n\n useSubscription(\n OnUpcomingInvoiceFetch,\n ({ invoice: nextInvoice }) => {\n setInvoice(nextInvoice);\n\n setLoading(false);\n setError(null);\n },\n [],\n );\n\n useSubscription(\n OnUpcomingInvoiceFetchError,\n (e) => {\n setError(e);\n setLoading(false);\n\n Toast.error('Could not show next invoice information, please try again.');\n },\n [],\n );\n\n if (loading) {\n return (\n \n \n \n );\n }\n\n if (error) {\n return (\n \n Retry\n \n );\n }\n\n return (\n \n You will be charged ${invoice.amount_due / 100} on{' '}\n {moment.unix(invoice.period_end).format('MM/DD/YYYY')}\n \n );\n}\n\nNextInvoiceInformation.propTypes = {\n companyId: PropTypes.string.isRequired,\n};\n\nexport default NextInvoiceInformation;\n","import React, { useEffect, useState, useCallback } from 'react';\nimport { Card, Loader, Button, Row, Paragraph, Column, Icon, Paper, withModal } from '@8base/boost';\nimport { useStripe } from '@stripe/react-stripe-js';\nimport { PrimaryBtn as PrimaryButton } from '../../../../../shared/components/ui/buttons/PrimaryBtn';\nimport ChangePlanDialog, { modalId } from './ChangePlanDialog';\nimport NextInvoiceInformation from './NextInvoiceInformation';\nimport { PlanCard } from '../../../../company/components/PlanCard';\nimport styled from 'styled-components';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { confirmSubscriptionChange, cancelSubscriptionChange } from '../subscription-plan-actions';\nimport {\n OnUpdateCompanySubscription,\n OnConfirmSubscriptionChange,\n OnConfirmSubscriptionChangeError,\n OnCancelSubscriptionChange,\n OnCancelSubscriptionChangeError,\n} from '../subscription-plan-events';\nimport { onErrorMixinFC } from '../../../../../shared/mixins';\nimport * as Toast from '../../../../../shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\n\nconst Title = styled.h3`\n font-size: 16px;\n font-weight: bold;\n line-height: 28px;\n`;\n\nconst Alert = styled(Paper)`\n box-shadow: none !important;\n border: 1px solid #d0d7dd;\n`;\n\n/**\n * Subscription plan changed component\n *\n * @returns {React.FC} The component to render\n */\nfunction SubscriptionPlanChanger({ company, companyUsersCount, openModal, closeModal }) {\n const stripe = useStripe();\n const [subscription, setSubscription] = useState(null);\n const [loading, setLoading] = useState(true);\n const [confirming, setConfirming] = useState(false);\n const [canceling, setCanceling] = useState(false);\n\n useEffect(() => {\n const sub = company?.subscriptions?.items[0];\n\n if (sub) {\n setSubscription(sub ? sub : null);\n setLoading(false);\n }\n }, [company]);\n\n useSubscription(\n OnUpdateCompanySubscription,\n ({ subscription: sub }) => {\n closeModal(modalId);\n\n if (!sub.pending_update) {\n return Toast.success('Success', 'Subscription plan changed successfully');\n }\n\n Toast.info('Info', 'Processing payment...');\n const [{ paymentMethodId }] = company.companyPaymentMethods.items;\n\n setConfirming(true);\n\n confirmSubscriptionChange(\n {\n invoice: {\n invoiceId: sub.latest_invoice.id,\n status: sub.latest_invoice.status,\n },\n paymentMethodId,\n },\n stripe,\n );\n },\n [company, stripe, closeModal],\n );\n\n useSubscription(\n OnConfirmSubscriptionChange,\n () => {\n setConfirming(false);\n\n Toast.success('Success', 'Subscription plan changed successfully');\n },\n [],\n );\n\n useSubscription(\n OnCancelSubscriptionChange,\n () => {\n setCanceling(false);\n\n Toast.success('Success', 'Subscription plan change canceled successfully');\n },\n [],\n );\n\n useSubscription(\n OnConfirmSubscriptionChangeError,\n (e) => {\n setConfirming(false);\n onErrorMixinFC(e);\n },\n [],\n );\n\n useSubscription(\n OnCancelSubscriptionChangeError,\n (e) => {\n setCanceling(false);\n onErrorMixinFC(e);\n },\n [],\n );\n\n const handleChange = useCallback(() => {\n if (!company) return Toast.warn('Wait until the form loads');\n\n const [paymentMethod] = company.companyPaymentMethods.items;\n\n if (!paymentMethod) return Toast.error('You need to register a payment method first');\n\n openModal(modalId);\n }, [company, openModal]);\n\n const handlePaySubscription = useCallback(() => {\n setConfirming(true);\n\n const [invoice] = company.companyInvoices.items;\n const [{ paymentMethodId }] = company.companyPaymentMethods.items;\n\n confirmSubscriptionChange(\n {\n invoice,\n paymentMethodId,\n },\n stripe,\n );\n }, [company, stripe]);\n\n const handleCancelChange = useCallback(() => {\n setCanceling(true);\n const [{ invoiceId }] = company.companyInvoices.items;\n\n cancelSubscriptionChange(invoiceId);\n }, [company]);\n\n return (\n \n \n Subscription Plan\n \n \n {loading ? (\n \n \n \n ) : (\n \n {subscription?.pendingUpdate && (\n \n \n \n \n You have a pending subscription change to another plan, please confirm or cancel\n this chage to continue let us know what are your preferences\n \n \n \n )}\n \n \n )}\n \n \n {subscription?.pendingUpdate ? (\n \n \n Confirm Payment\n \n \n Cancel Payment\n \n \n ) : (\n \n \n Change Plan\n \n \n \n )}\n \n \n \n );\n}\n\nSubscriptionPlanChanger.propTypes = {\n company: PropTypes.shape({\n id: PropTypes.string.isRequired,\n companyInvoices: PropTypes.shape({\n items: PropTypes.arrayOf(\n PropTypes.shape({\n invoiceId: PropTypes.string,\n }),\n ).isRequired,\n }).isRequired,\n companyPaymentMethods: PropTypes.shape({\n items: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n nameOnCard: PropTypes.string,\n addressLine1: PropTypes.string,\n addressLine2: PropTypes.string,\n city: PropTypes.string,\n state: PropTypes.string,\n last4: PropTypes.string,\n expireDate: PropTypes.string,\n paymentMethodId: PropTypes.string,\n }),\n ).isRequired,\n }).isRequired,\n subscriptions: PropTypes.shape({\n items: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n status: PropTypes.string,\n numberOfSeatsh: PropTypes.number,\n subscriptionPlan: PropTypes.object,\n stripeCustomerId: PropTypes.string,\n }),\n ).isRequired,\n }).isRequired,\n }).isRequired,\n companyUsersCount: PropTypes.number.isRequired,\n openModal: PropTypes.func.isRequired,\n closeModal: PropTypes.func.isRequired,\n};\n\nexport default withModal(SubscriptionPlanChanger);\n","import gql from 'graphql-tag';\n\nexport const FETCH_COMPANY_PAYMENT_METHOD = gql`\n query FetchCompanyPaymentMethod($id: ID) {\n companyPaymentMethod(id: $id) {\n id\n nameOnCard\n expireDate\n last4\n addressLine1\n addressLine2\n city\n state\n country\n paymentMethodId\n company {\n id\n name\n }\n }\n }\n`;\n\nexport const FETCH_PAYMENT_METHODS = gql`\n query FetchPaymentMethods(\n $filter: CompanyPaymentMethodFilter\n $skip: Int\n $first: Int\n $last: Int\n $orderBy: [CompanyPaymentMethodOrderBy]\n ) {\n companyPaymentMethodsList(\n filter: $filter\n skip: $skip\n first: $first\n last: $last\n orderBy: $orderBy\n ) {\n count\n items {\n id\n nameOnCard\n expireDate\n last4\n addressLine1\n addressLine2\n city\n state\n country\n paymentMethodId\n company {\n id\n name\n }\n }\n }\n }\n`;\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnPaymentMethodUpdate = createEvent();\n\nexport const OnPaymentMethodUpdateError = createEvent();\n\nexport const OnFetchPaymentMethod = createEvent();\n\nexport const OnFetchPaymentMethodError = createEvent();\n\nexport const OnFetchCurrentPaymentMethodEvent = createEvent();\n\nexport const OnFetchCurrentPaymentMethodError = createEvent();\n","import { isValidString } from '@cobuildlab/validation-utils';\nimport { ValidationError } from '../../../../shared/errors';\n\n/**\n * Create payment method validator\n *\n * @param {object} data - The data to create the payment method\n *\n * @returns {void}\n */\nexport function updatePaymentMethodValidator(data) {\n const errors = [];\n\n if (!isValidString(data.cardHolderName)) {\n errors.push('The name on the card should be a valid string');\n }\n\n if (!isValidString(data.addressLine1)) {\n errors.push('The address line 1 should be a valid string');\n }\n\n if (!isValidString(data.city)) {\n errors.push('The city should be a valid string');\n }\n\n if (!isValidString(data.state)) {\n errors.push('The state should be a valid string');\n }\n\n if (errors.length > 0) throw new ValidationError(errors);\n}\n","import { FETCH_PAYMENT_METHODS, FETCH_COMPANY_PAYMENT_METHOD } from './payment-method-queries';\nimport { OnApolloClient, OnSessionFetch } from '../../../../shared/session/session-events';\nimport { createPaymentMethod } from '../billing-actions';\nimport {\n OnFetchCurrentPaymentMethodError,\n OnFetchCurrentPaymentMethodEvent,\n OnFetchPaymentMethod,\n OnFetchPaymentMethodError,\n OnPaymentMethodUpdate,\n OnPaymentMethodUpdateError,\n} from './payment-method-events';\nimport { error, log } from '@cobuildlab/pure-logger';\nimport { updatePaymentMethodValidator } from './payment-method-validators';\n\n/**\n * Updates the customer payment method\n *\n * @param {object} method - The data to create the payment method\n * @param {object} stripe - The stripe object\n * @param {object} elements - The elements object\n * @returns {Promise} The request result\n */\nexport const updatePaymentMethod = async (method, stripe, elements) => {\n const { user } = OnSessionFetch.get();\n const { addressLine1, addressLine2, city, state, cardHolderName, customerId, companyId } = method;\n let paymentMethod = null;\n\n try {\n updatePaymentMethodValidator(method);\n } catch (e) {\n error('updatePaymentMethod', e);\n\n return OnPaymentMethodUpdateError.dispatch(e);\n }\n\n const data = {\n billing_details: {\n address: {\n line1: addressLine1,\n line2: addressLine2,\n city: city,\n state: state,\n country: 'US',\n },\n email: user.email,\n name: cardHolderName,\n },\n metadata: { company_id: companyId },\n };\n\n try {\n paymentMethod = await createPaymentMethod(data, customerId, stripe, elements);\n } catch (e) {\n error('updatePaymentMethod', e);\n\n return OnPaymentMethodUpdateError.dispatch(e);\n }\n\n log('updatePaymentMethod', paymentMethod);\n\n return OnPaymentMethodUpdate.dispatch(paymentMethod);\n};\n\n/**\n * Fetches the specified company payment method\n *\n * @param {string} id - The payment method id\n *\n * @returns {Promise} The request result\n */\nexport const fetchCompanyPaymentMethod = async (id) => {\n const client = OnApolloClient.get();\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_COMPANY_PAYMENT_METHOD,\n variables: { id },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchCompanyPaymentMethod', e);\n\n return OnFetchPaymentMethodError.dispatch(e);\n }\n\n log('fetchCompanyPaymentMethod', response.data);\n\n return OnFetchPaymentMethod.dispatch(response.data);\n};\n\n/**\n * Fetches the current payment method used\n *\n * @param {string} id - The company id\n *\n * @returns {Promise} The request result\n */\nexport const fetchCurrentPaymentMethod = async (id) => {\n const client = OnApolloClient.get();\n let response = null;\n const first = 1;\n const orderBy = 'createdAt_DESC';\n const filter = { company: { id: { equals: id } } };\n\n try {\n response = await client.query({\n query: FETCH_PAYMENT_METHODS,\n variables: { filter, first, orderBy },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchCurrentPaymentMethod', e);\n\n return OnFetchCurrentPaymentMethodError.dispatch(e);\n }\n\n log('fetchCurrentPaymentMethod', response.data);\n\n return OnFetchCurrentPaymentMethodEvent.dispatch(response.data);\n};\n","import React, { useCallback, useState, useEffect } from 'react';\nimport { PropTypes } from 'prop-types';\nimport DialogForm from '../../../../../shared/components/dialog/DialogForm';\nimport { PaymentForm } from './PaymentForm';\nimport { updatePaymentMethod } from '../payment-method-actions';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { OnPaymentMethodUpdate, OnPaymentMethodUpdateError } from '../payment-method-events';\nimport * as Toast from '../../../../../shared/components/toast/Toast';\nimport { useModal } from '@8base/boost';\nimport { onErrorMixinFC } from '../../../../../shared/mixins';\nimport { useElements, useStripe } from '@stripe/react-stripe-js';\n\n/**\n * This component is a Dialog/Modal with a form to update the Payment.\n *\n * @param {object} props - The component props object\n * @param {string} props.id - The id of the dialog\n *\n * @returns {React.FC} - The View in a Dialog/Modal\n */\nconst PaymentDialogForm = ({ id }) => {\n const elements = useElements();\n const stripe = useStripe();\n const { isOpen, args, closeModal } = useModal(id);\n const [ready, setReady] = useState(false);\n const [loading, setLoading] = useState(true);\n const [form, setForm] = useState(args.data ? args.data : {});\n\n useEffect(() => {\n if (!isOpen) {\n setReady(false);\n setLoading(true);\n }\n }, [isOpen]);\n\n useEffect(() => {\n setForm(\n args.data\n ? {\n customerId: args.data.customerId,\n companyId: args.data.companyId,\n cardHolderName: args.data.nameOnCard,\n addressLine1: args.data.addressLine1,\n addressLine2: args.data.addressLine2,\n city: args.data.city,\n state: args.data.state,\n card: {},\n }\n : { card: {} },\n );\n }, [args.data]);\n\n useEffect(() => {\n if (elements && stripe && ready) {\n setLoading(false);\n }\n }, [elements, stripe, ready]);\n\n useSubscription(\n OnPaymentMethodUpdate,\n () => {\n setLoading(false);\n\n Toast.success('Success', 'Payment method updated successfully');\n\n closeModal(id);\n },\n [],\n );\n\n useSubscription(\n OnPaymentMethodUpdateError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const handleSubmit = useCallback(() => {\n if (!stripe || !elements) {\n return Toast.warn('Wait a few seconds and try again...');\n }\n\n setLoading(true);\n\n updatePaymentMethod(form, stripe, elements);\n }, [stripe, elements, form]);\n\n const handleChange = useCallback((name, value) => {\n setForm((state) => ({\n ...state,\n [name]: value,\n }));\n }, []);\n\n const handleReady = useCallback(() => {\n setReady(true);\n }, []);\n\n return (\n closeModal(id)}\n onClickCreate={handleSubmit}\n isOpen={isOpen}\n isLoading={loading}>\n \n \n );\n};\n\nPaymentDialogForm.propTypes = {\n id: PropTypes.string.isRequired,\n};\n\nexport { PaymentDialogForm };\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Row, Card, Button, Loader, NoData, Grid, useModal, styled } from '@8base/boost';\nimport { PaymentDialogForm } from './PaymentDialogForm';\nimport { fetchCompanyPaymentMethod } from '../payment-method-actions';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { useAgency } from '../../../../../shared/hooks/useAgency';\nimport {\n OnFetchPaymentMethod,\n OnFetchPaymentMethodError,\n OnPaymentMethodUpdate,\n} from '../payment-method-events';\nimport { onErrorMixinFC } from '../../../../../shared/mixins';\nimport PropTypes from 'prop-types';\n\nconst Section = styled(Card.Section)`\n padding: 12px 24px !important;\n`;\n\nconst id = 'change-payment-dialog';\n\n/**\n * Payment method changed component\n *\n * @returns {React.FC} The component to render\n */\nfunction PaymentMethodChanger({ customerId, paymentMethodId }) {\n const agency = useAgency();\n const [companyId, setCompanyId] = useState(agency.company.id);\n const [method, setPaymentMethod] = useState(null);\n const [loading, setLoading] = useState(paymentMethodId ? true : false);\n const { openModal } = useModal(id);\n\n const fetch = useCallback(() => {\n if (paymentMethodId) {\n setLoading(true);\n fetchCompanyPaymentMethod(paymentMethodId);\n }\n }, [paymentMethodId]);\n\n useEffect(() => {\n if (agency.company.id !== companyId) {\n setCompanyId(agency.company.id);\n }\n }, [agency, companyId]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n const handleClick = useCallback(() => {\n openModal(id, {\n data: {\n ...method,\n companyId,\n customerId,\n },\n });\n }, [openModal, customerId, companyId, method]);\n\n useSubscription(\n OnFetchPaymentMethod,\n ({ companyPaymentMethod }) => {\n setPaymentMethod(companyPaymentMethod);\n setLoading(false);\n },\n [],\n );\n\n useSubscription(\n OnPaymentMethodUpdate,\n () => {\n fetch();\n },\n [fetch],\n );\n\n useSubscription(\n OnFetchPaymentMethodError,\n (e) => {\n onErrorMixinFC(e);\n },\n [],\n );\n\n let content = null;\n\n /**\n * If component is loading, then render a loader\n */\n if (loading)\n content = (\n \n \n \n \n \n );\n\n /**\n * If component finished loading and payment method exists,\n * render card information\n */\n if (!loading && method && method.last4)\n content = (\n <>\n \n \n Credit Card\n {`**** **** **** ${method.last4}`}\n \n \n \n \n Expiration Date\n {method.expireDate}\n \n \n >\n );\n\n /**\n * If component finished loading and there is no payment method,\n * then render the no data component\n */\n if (!loading && (!method || !method.last4))\n content = (\n \n \n \n );\n\n return (\n \n \n \n \n Update Payment Method\n \n \n \n {content}\n \n \n );\n}\n\nPaymentMethodChanger.propTypes = {\n paymentMethodId: PropTypes.string,\n customerId: PropTypes.string,\n};\n\nPaymentMethodChanger.defaultProps = {\n paymentMethodId: null,\n customerId: null,\n};\n\nexport default PaymentMethodChanger;\n","import React from 'react';\r\nimport { INVOICE_STATUS } from '@cobuildlab/lead-volt-share';\r\nimport { Tag as BoostTag } from '@8base/boost';\r\nimport PropTypes from 'prop-types';\r\nimport styled from 'styled-components';\r\n\r\nconst Tag = styled(BoostTag)`\r\n ${(props) => {\r\n switch (props.type) {\r\n case INVOICE_STATUS.DRAFT:\r\n return `\r\n color: #1E87F6 !important;\r\n border-color: #1E87F6 !important;\r\n background-color: rgba(30, 195, 246, 0.15) !important;\r\n `;\r\n case INVOICE_STATUS.OPEN:\r\n return `\r\n color: #F6C01E !important;\r\n border-color: #F6C01E !important;\r\n background-color: rgba(246,192,30,0.15) !important;\r\n `;\r\n case INVOICE_STATUS.PAID:\r\n return `\r\n color: #3DB4AA !important;\r\n border-color: #3DB4AA !important;\r\n background-color: rgba(61,180,170,0.1) !important;\r\n `;\r\n case INVOICE_STATUS.VOID:\r\n return `\r\n color: rgb(125, 130, 140) !important;\r\n border-color: rgb(125, 130, 140) !important;\r\n background-color: rgba(125, 130, 140, 0.1) !important;\r\n `;\r\n case INVOICE_STATUS.UNCOLLECTIBLE:\r\n return `\r\n color: #FF0000 !important;\r\n border-color: #FF0000 !important;\r\n background-color: rgba(255,0,0,0.08) !important;\r\n `;\r\n default:\r\n return `\r\n color: #3DB4AA !important;\r\n border-color: #3DB4AA !important;\r\n background-color: rgba(61,180,170,0.1) !important;\r\n `;\r\n }\r\n }}\r\n`;\r\n\r\n/**\r\n * This component show a text with a pre-format text\r\n *\r\n * @param {string} status - refer to the status text/string for the History Table\r\n * @returns {string} return a Pre-format Text\r\n */\r\n\r\nconst StatusCell = ({ status }) => {\r\n return {status.split('_').join(' ')};\r\n};\r\n\r\nStatusCell.propTypes = {\r\n status: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default StatusCell;\r\n","import React, { useState, useEffect } from 'react';\nimport { Card, Grid, Table, Row, Pagination, styled } from '@8base/boost';\nimport StatusCell from './StatusCell';\nimport { DateBox } from '../../../../shared/components';\nimport { useCompanyInvoices } from '../billing-hooks';\nimport PropTypes from 'prop-types';\n\nconst TableContainer = styled(Table)`\n & div[role='loader'] > div[role='loader'] div {\n border-color: #3db4aa !important;\n }\n`;\n\nconst Body = styled(Table.Body)`\n height: 275px;\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\n/**\n * Billing history component\n *\n * @param {object} props - The components prop object\n * @param {string} props.companyId - The company id\n * @param {string} props.invoice - The latest invoice\n *\n * @returns {React.FC} The component to render\n */\nfunction BillingHistory({ companyId, latestInvoice }) {\n const [page, setPage] = useState(1);\n const { items, count, loading, refetch } = useCompanyInvoices(companyId, page);\n\n useEffect(() => {\n if (latestInvoice.id || latestInvoice.status) {\n refetch();\n }\n }, [latestInvoice.id, latestInvoice.status, refetch]);\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n Date\n Item Name\n Status\n Amount\n \n \n {(invoice) => (\n \n \n \n \n Subscription\n \n \n \n ${invoice.total}\n \n )}\n \n \n \n \n \n \n \n \n \n );\n}\n\nBillingHistory.propTypes = {\n companyId: PropTypes.string.isRequired,\n latestInvoice: PropTypes.object,\n};\n\nBillingHistory.defaultProps = {\n latestInvoice: {},\n};\n\nexport default BillingHistory;\n","import { useState, useEffect, useCallback } from 'react';\nimport { fetchCompanyInvoices } from './billing-actions';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { LIST_INITIAL_STATE } from '../../../shared/constants';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { OnFetchCompanyInvoicesError, OnFetchCompanyInvoicesEvent } from './billing-events';\n\n/**\n * Hook to use company invoices as a list of items\n *\n * @param {string} companyId - The company id\n * @param {number} page - The page to fetch\n *\n * @returns {Promise} The request result\n */\nexport function useCompanyInvoices(companyId, page = 1) {\n const [state, setState] = useState(LIST_INITIAL_STATE);\n\n const fetch = useCallback(() => {\n setState((state) => ({\n ...state,\n loading: true,\n }));\n fetchCompanyInvoices(companyId, page);\n }, [companyId, page]);\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n useEventSubscription(OnFetchCompanyInvoicesEvent, ({ companyInvoicesList }) => {\n setState((state) => ({\n ...state,\n items: companyInvoicesList.items,\n count: companyInvoicesList.count,\n loading: false,\n }));\n });\n\n useEventSubscription(OnFetchCompanyInvoicesError, (e) => {\n onErrorMixinFC(e);\n\n setState((state) => ({\n ...state,\n items: [],\n count: 0,\n loading: true,\n }));\n });\n\n return {\n ...state,\n refetch: fetch,\n };\n}\n","import React, { useCallback, useState, useEffect } from 'react';\r\nimport { Dialog, Paragraph, Row, Button, Column, Text as BoostText, useModal } from '@8base/boost';\r\nimport { useSubscription } from '@cobuildlab/react-simple-state';\r\nimport { OnSubscriptionCanceled, OnSubscriptionCanceledError } from '../billing-events';\r\nimport { cancelSubscription } from '../billing-actions';\r\nimport { PlanCard } from '../../../company/components/PlanCard';\r\nimport { onErrorMixinFC } from '../../../../shared/mixins';\r\nimport PropTypes from 'prop-types';\r\nimport moment from 'moment';\r\nimport styled from '@emotion/styled';\r\n\r\nconst Note = styled(Paragraph)`\r\n color: #a5afb6;\r\n margin-top: 5px;\r\n`;\r\n\r\nconst Text = styled(BoostText)`\r\n font-size: 1.3rem !important;\r\n`;\r\n\r\nexport const modalId = 'cancel-subscription-dialog';\r\n\r\n/**\r\n * This Component show the Name and description of the Plan to Cancel\r\n *\r\n * @returns {React.FC} - The component to render\r\n */\r\nfunction CancelSubscriptionDialog() {\r\n const [loading, setLoading] = useState(false);\r\n const { isOpen, args, closeModal } = useModal(modalId);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n setLoading(false);\r\n }\r\n }, [isOpen]);\r\n\r\n const handleClose = useCallback(() => {\r\n closeModal(modalId);\r\n }, [closeModal]);\r\n\r\n const handleConfirm = useCallback(() => {\r\n setLoading(true);\r\n\r\n cancelSubscription(args.companySubscription.id);\r\n }, [args.companySubscription]);\r\n\r\n useSubscription(\r\n OnSubscriptionCanceled,\r\n () => {\r\n closeModal(modalId);\r\n },\r\n [],\r\n );\r\n\r\n useSubscription(\r\n OnSubscriptionCanceledError,\r\n (e) => {\r\n setLoading(false);\r\n\r\n onErrorMixinFC(e);\r\n },\r\n [],\r\n );\r\n\r\n const companySubscription = args.companySubscription || {};\r\n const expireDate = companySubscription.expireDate\r\n ? moment(companySubscription.expireDate).format('MM/DD/YYYY')\r\n : null;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n Are you sure you want to cancel? Your subscription will be cancelled for the following\r\n plan:\r\n \r\n \r\n \r\n You will still have full access to your workspace until{' '}\r\n {expireDate}\r\n \r\n \r\n \r\n \r\n \r\n \r\n No, Do Not Cancel\r\n \r\n \r\n Yes, Cancel\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nCancelSubscriptionDialog.propTypes = {\r\n companySubscription: PropTypes.shape({\r\n expireDate: PropTypes.string.isRequired,\r\n subscriptionPlan: PropTypes.object.isRequired,\r\n }).isRequired,\r\n};\r\n\r\nexport default CancelSubscriptionDialog;\r\n","import React, { useCallback } from 'react';\nimport { Card, Row, Text, Button, useModal } from '@8base/boost';\nimport { PropTypes } from 'prop-types';\nimport CancelSubscriptionDialog, { modalId } from './CancelSubscriptionDialog';\nimport styled from 'styled-components';\n\nconst Title = styled.h3`\n font-size: 16px;\n font-weight: bold;\n line-height: 28px;\n`;\n\n/**\n * Cancel plan card component\n *\n * @param {object} props - The component's prop object\n * @param {object} props.companySubscription - The current company subscription\n *\n * @returns {React.FC} The component to render\n */\nfunction CancelPlanCard({ companySubscription }) {\n const { openModal } = useModal(modalId);\n\n const handleCancel = useCallback(() => {\n openModal(modalId, {\n companySubscription,\n });\n }, [openModal, companySubscription]);\n\n return (\n \n \n Cancel Subscription\n \n \n \n \n Cancel Subscription\n \n You can cancel at anytime\n \n \n \n \n );\n}\n\nCancelPlanCard.propTypes = {\n companySubscription: PropTypes.object.isRequired,\n};\n\nexport default CancelPlanCard;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport { Card, Column, Row, Loader, Scrollable } from '@8base/boost';\nimport { useStripe, useElements } from '@stripe/react-stripe-js';\nimport { useSubscription } from '@cobuildlab/react-simple-state';\nimport { PlanCard } from '../../../company/components/PlanCard';\nimport { PrimaryBtn as Button } from '../../../../shared/components/ui/buttons/PrimaryBtn';\nimport { SUBSCRIPTION_STATUS } from '@cobuildlab/lead-volt-share';\nimport { renewCompanySubscription } from '../billing-actions';\nimport { OnSubscriptionRenew, OnSubscriptionRenewError } from '../billing-events';\nimport { useSubscriptionPlans } from '../../../onboarding/onboarding-hooks';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport * as Toast from '../../../../shared/components/toast/Toast';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\n\nconst Title = styled.h3`\n font-size: 16px;\n font-weight: bold;\n line-height: 28px;\n`;\n\nconst PlanList = styled.div`\n max-height: 200px;\n`;\n\nconst { CANCELED } = SUBSCRIPTION_STATUS;\n\n/**\n * The renovate subscription component\n *\n * @param {object} props - The component props\n * @param {object} props.company - The company to renew the subscription from\n *\n * @returns {React.FC} The component to render\n */\nfunction RenovateSubscription({ company }) {\n const { items, loading: fetchLoading } = useSubscriptionPlans({ isFreeTrial: false });\n const [loading, setLoading] = useState(false);\n const [form, setForm] = useState({});\n const [subscription] = company.subscriptions.items;\n const stripe = useStripe();\n const elements = useElements();\n\n useEffect(() => {\n const [paymentMethod] = company.companyPaymentMethods.items;\n const [sub] = company.subscriptions.items;\n const [invoice] = company.companyInvoices.items;\n\n setForm({\n companyId: company.id,\n subscriptionPlan: sub.status !== CANCELED ? sub.subscriptionPlan : null,\n numberOfSeats: sub.numberOfSeats,\n status: sub.status,\n stripeCustomerId: sub.stripeCustomerId,\n stripeInvoiceId: invoice.invoiceId,\n paymentMethodId: paymentMethod?.paymentMethodId,\n });\n }, [company]);\n\n const handleChange = useCallback((name, value) => {\n setForm((state) => ({\n ...state,\n [name]: value,\n }));\n }, []);\n\n const handleSeatsChange = useCallback((change) => {\n setForm((state) => ({\n ...state,\n numberOfSeats: typeof change === 'number' ? change : change(state.numberOfSeats),\n }));\n }, []);\n\n const handleSubmit = useCallback(() => {\n const [subscription] = company.subscriptions.items;\n setLoading(true);\n\n if (!stripe || !elements) return Toast.warn('Try again in a few seconds...');\n\n renewCompanySubscription(form, subscription, stripe, elements);\n }, [company, form, stripe, elements]);\n\n useSubscription(\n OnSubscriptionRenew,\n () => {\n setLoading(false);\n\n Toast.success('Success', 'Subscription renewed, recovering information...');\n },\n [],\n );\n\n useSubscription(\n OnSubscriptionRenewError,\n (e) => {\n setLoading(false);\n\n onErrorMixinFC(e);\n },\n [],\n );\n\n const plans = items.map((plan) => (\n handleChange('subscriptionPlan', plan)}\n numberOfSeats={form.numberOfSeats}\n min={subscription.numberOfSeats}\n onQuantityChange={handleSeatsChange}\n readOnly={subscription.status !== CANCELED}\n />\n ));\n\n return (\n \n \n Renew Subscription\n \n \n {fetchLoading ? (\n \n \n \n ) : (\n \n \n {plans}\n \n \n )}\n \n \n \n \n Renew Subscription\n \n \n \n \n );\n}\n\nRenovateSubscription.propTypes = {\n company: PropTypes.shape({\n id: PropTypes.string.isRequired,\n companyInvoices: PropTypes.shape({\n items: PropTypes.arrayOf(\n PropTypes.shape({\n invoiceId: PropTypes.string,\n }),\n ).isRequired,\n }).isRequired,\n companyPaymentMethods: PropTypes.shape({\n items: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n nameOnCard: PropTypes.string,\n addressLine1: PropTypes.string,\n addressLine2: PropTypes.string,\n city: PropTypes.string,\n state: PropTypes.string,\n last4: PropTypes.string,\n expireDate: PropTypes.string,\n paymentMethodId: PropTypes.string,\n }),\n ).isRequired,\n }).isRequired,\n subscriptions: PropTypes.shape({\n items: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n status: PropTypes.string,\n numberOfSeats: PropTypes.number,\n subscriptionPlan: PropTypes.object,\n stripeCustomerId: PropTypes.string,\n }),\n ).isRequired,\n }).isRequired,\n }).isRequired,\n};\n\nexport default RenovateSubscription;\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { Row, Loader } from '@8base/boost';\r\nimport { Box } from '../../../shared/components/Box';\r\nimport Layout from '../components/Layout';\r\nimport { Column, NoData } from '@8base/boost';\r\nimport { SUBSCRIPTION_STATUS } from '@cobuildlab/lead-volt-share';\r\nimport SubscriptionPlanChanger from './subscription-plan/components/SubscriptionPlanChanger';\r\nimport PaymentMethodChanger from './payment-method/components/PaymentMethodChanger';\r\nimport BillingHistory from './components/BillingHistory';\r\nimport CancelPlanCard from './components/CancelPlanCard';\r\nimport RenovateSubscription from './components/RenovateSubscription';\r\nimport { useCompany } from '../../company/company-hooks';\r\nimport { useAgency } from '../../../shared/hooks/useAgency';\r\nimport { useUser } from '../../../shared/hooks/useUser';\r\nimport { onErrorMixinFC } from '../../../shared/mixins';\r\nimport withSession from '../../../shared/hoc/withSession';\r\nimport { fetchSession } from '../../auth/auth.actions';\r\n\r\nconst { CANCELED, INCOMPLETE } = SUBSCRIPTION_STATUS;\r\n\r\n/**\r\n * A Component to show information about the billing info and the Subcription Plan of a Company\r\n *\r\n * @returns {React.FC} The component to render\r\n */\r\nfunction BillingView() {\r\n const [user, loadingUser] = useUser();\r\n const agency = useAgency();\r\n const [companyId, setCompanyId] = useState(agency.company.id);\r\n const { data, loading, error, setCompany } = useCompany(companyId);\r\n const prevSubStatus = useRef('');\r\n\r\n useEffect(() => {\r\n if (agency.company.id !== companyId) {\r\n setCompanyId(agency.company.id);\r\n setCompany(agency.company.id);\r\n }\r\n }, [agency, companyId, setCompany]);\r\n\r\n useEffect(() => {\r\n if (data) {\r\n const [subscription] = data.company.subscriptions.items;\r\n\r\n if (prevSubStatus.current !== '' && subscription.status !== prevSubStatus.current) {\r\n fetchSession();\r\n }\r\n\r\n prevSubStatus.current = subscription.status;\r\n }\r\n }, [data]);\r\n\r\n useEffect(() => {\r\n if (error) {\r\n onErrorMixinFC(error);\r\n }\r\n }, [error]);\r\n\r\n if (loading) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * If user is loading, render a loading component\r\n */\r\n if (loadingUser) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n const { company, usersList } = data;\r\n const admins = user.userAdminRelation.items;\r\n const isAdminInCurrentAgency = admins.some(({ company: c }) => c.id === company.id);\r\n\r\n if (!isAdminInCurrentAgency) {\r\n return ;\r\n }\r\n\r\n const [subscription] = company.subscriptions.items;\r\n const [paymentMethod] = company.companyPaymentMethods.items;\r\n const [invoice] = company.companyInvoices.items;\r\n\r\n /**\r\n * If subscription is canceled, show renew subscription component\r\n */\r\n const renewal =\r\n subscription.status === CANCELED || subscription.status === INCOMPLETE ? (\r\n \r\n ) : null;\r\n\r\n /**\r\n * If subscription is canceled, hide the cancel plan card component\r\n */\r\n const cancel =\r\n subscription.status !== CANCELED && subscription.status !== INCOMPLETE ? (\r\n \r\n ) : null;\r\n\r\n if (loading) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n {renewal}\r\n {subscription.status !== CANCELED && subscription.status !== INCOMPLETE && (\r\n \r\n )}\r\n \r\n \r\n {cancel}\r\n \r\n \r\n );\r\n}\r\n\r\n/** export the Component with User Session Data */\r\nexport default withSession(BillingView);\r\n","import gql from 'graphql-tag';\n\nexport const agencyFragment = gql`\n fragment agencyFragment on Agency {\n id\n name\n createdAt\n quoteOfDay {\n title\n }\n company {\n id\n name\n }\n phoneCallSettings {\n id\n automaticCalls\n recordCalls\n campignAssineeFilter\n agency {\n id\n name\n }\n callCadenceConfig\n }\n ifsScore\n voicemailUrl\n }\n`;\n\nexport const QUERY_AGENCY_LIST = gql`\n query FetchAgenciesList($filter: AgencyFilter, $sort: [AgencySort!], $first: Int, $skip: Int) {\n agenciesList(filter: $filter, first: $first, skip: $skip, sort: $sort) {\n count\n items {\n ...agencyFragment\n }\n }\n }\n ${agencyFragment}\n`;\n\nexport const MUTATION_CREATE_AGENCY = gql`\n mutation CreateAgency($data: AgencyCreateInput!) {\n agencyCreate(data: $data) {\n ...agencyFragment\n }\n }\n ${agencyFragment}\n`;\n\nexport const MUTATION_UPDATE_AGENCY = gql`\n mutation UpdateAgency($data: AgencyUpdateInput!, $filter: AgencyKeyFilter) {\n agencyUpdate(data: $data, filter: $filter) {\n id\n name\n }\n }\n`;\n\nexport const MUTATION_DELETE_AGENCY = gql`\n mutation DeleteAgency($filter: AgencyKeyFilter) {\n agencyDelete(filter: $filter, force: true) {\n success\n }\n }\n`;\n","import { ValidationError } from '../../shared/errors';\nimport { isValidEmail, isValidString } from '../../shared/validators';\n\nconst agencyMessage = 'The agency must have a ';\nconst agencyMessageValid = `${agencyMessage} valid`;\nconst messages = {\n name: `${agencyMessageValid} name`,\n company: `${agencyMessageValid} company`,\n agents: `The agents emails must be valid`,\n};\n\nexport const agencyCreateUpdateValidator = (agency) => {\n let errors = [];\n\n if (!isValidString(agency.name)) errors.push(messages.name);\n\n if (!isValidString(agency.companyId)) errors.push(messages.company);\n\n if (agency.agents) {\n let email = agency.agents.find((agentMail) => !isValidEmail(agentMail));\n\n if (email) {\n errors.push(`${messages.agents}, \"${email}\" was given`);\n }\n }\n\n if (errors.length > 0) throw new ValidationError(errors);\n};\n","import { createEvent } from '@cobuildlab/react-simple-state';\n\nexport const OnAgencyError = createEvent();\n\nexport const OnAgencyListFetched = createEvent();\n\nexport const OnAgenyCreateEvent = createEvent();\n\nexport const OnAgencyPhoneCreateError = createEvent();\n\nexport const OnAgencyUpdateEvent = createEvent();\n\nexport const OnAgencyDeleteEvent = createEvent();\n","import { error, log } from '@cobuildlab/pure-logger';\nimport { OnApolloClient, OnSessionFetch } from '../../shared/session/session-events';\nimport { getRolesOnSelectedAgency } from '../../shared/utils/agency-utils';\nimport {\n QUERY_AGENCY_LIST,\n MUTATION_CREATE_AGENCY,\n MUTATION_UPDATE_AGENCY,\n MUTATION_DELETE_AGENCY,\n} from './agency-queries';\nimport { agencyCreateUpdateValidator } from './agency-validators';\nimport { ADMIN } from '../../shared/constants';\nimport {\n OnAgencyDeleteEvent,\n OnAgencyError,\n OnAgencyListFetched,\n OnAgencyUpdateEvent,\n OnAgenyCreateEvent,\n} from './agency-events';\n\n/**\n * Creates a filter object\n *\n * @param {object} filter - the data used to filter the search\n * @param {string} search - Search term used for also filter the search\n *\n * @returns {object} the filter object\n */\nconst createFilter = (filter, search) => {\n const byCompany = filter.company\n ? {\n company: { id: { equals: filter.company } },\n }\n : {\n company: { adminCompanyRelation: { some: { user: { id: { equals: filter.user } } } } },\n };\n\n const byStartDate = filter.startDate\n ? { createdAt: { gte: `${filter.startDate}T00:00:00Z` } }\n : {};\n\n const byEndDate = filter.endDate ? { createdAt: { lte: `${filter.endDate}T00:00:00Z` } } : {};\n\n const bySearch = search ? { OR: [{ name: { contains: search } }] } : {};\n\n return {\n ...byCompany,\n ...bySearch,\n AND: [byStartDate, byEndDate],\n };\n};\n\n/**\n * Generates a sort object\n *\n * @param {string} sort - Sort value\n *\n * @returns {object} The sort object\n */\nconst createSort = (sort) => {\n return {\n ...(sort === 'newest' && { sort: [{ createdAt: 'DESC' }] }),\n ...(sort === 'oldest' && { sort: [{ createdAt: 'ASC' }] }),\n };\n};\n\n/**\n * Fetches the agencies given the filter data\n *\n * @param {number} page - The page to fetch\n * @param {object} data - Object that contains filter data\n * @param {string} search - The search string to filter results\n *\n * @returns {void}\n */\nexport const fetchAgencies = async (page, data, search) => {\n const client = OnApolloClient.get();\n const filter = createFilter(data, search);\n const sort = createSort(data.sort);\n const skip = (page - 1) * 10;\n\n try {\n const response = await client.query({\n query: QUERY_AGENCY_LIST,\n fetchPolicy: 'no-cache',\n variables: { first: 10, skip, filter, ...sort },\n });\n\n log('fetchAgencies', response.data);\n\n return OnAgencyListFetched.dispatch(response.data);\n } catch (e) {\n error('fetchAgencies', e);\n return OnAgencyError.dispatch(e);\n }\n};\n\n/**\n * Stores agency in the database\n *\n * @param {object} agency - The agency object\n *\n * @returns {void}\n */\nexport const createAgency = async (agency) => {\n const client = OnApolloClient.get();\n const { user } = OnSessionFetch.get();\n let response = null;\n\n const data = {\n name: agency.name,\n company: {\n connect: { id: agency.companyId },\n },\n agencyInvitationAgencyRelation: {\n create: agency.invitations,\n },\n ifsScore: agency.ifsScores,\n voicemailUrl: agency.voicemailUrl\n };\n\n try {\n agencyCreateUpdateValidator(agency);\n } catch (e) {\n error('createAgency', e);\n return OnAgencyError.dispatch(e);\n }\n\n try {\n response = await client.mutate({\n mutation: MUTATION_CREATE_AGENCY,\n variables: { data },\n });\n } catch (e) {\n error('createAgency', e);\n return OnAgencyError.dispatch(e);\n }\n\n const { agencyCreate } = response.data;\n\n log('createAgency', response.data);\n\n return OnAgenyCreateEvent.dispatch({ agencyCreate });\n};\n\n/**\n * Updates the agency in db\n *\n * @param {object} agency - The agency object\n *\n * @returns {void}\n */\nexport const updateAgency = async (agency) => {\n const client = OnApolloClient.get();\n const { user } = OnSessionFetch.get();\n console.log('update', agency);\n const variables = {\n data: {\n name: agency.name,\n ifsScore: agency.ifsScores,\n voicemailUrl: agency.voicemailUrl\n },\n filter: {\n id: agency.id,\n },\n };\n\n const roles = getRolesOnSelectedAgency(user, { ...agency, company: { id: agency.id } });\n\n if (roles.includes(ADMIN)) {\n variables.data.company = {\n connect: { id: agency.companyId },\n };\n }\n\n try {\n agencyCreateUpdateValidator(agency);\n\n const response = await client.mutate({\n mutation: MUTATION_UPDATE_AGENCY,\n variables,\n });\n\n log('updateAgency', response.data);\n\n return OnAgencyUpdateEvent.dispatch(response.data);\n } catch (e) {\n error('updateAgency', e);\n return OnAgencyError.dispatch(e);\n }\n};\n\n/**\n * Deletes the given agency from the db\n *\n * @param {number} id - The agency id\n *\n * @returns {void}\n */\nexport const deleteAgency = async (id) => {\n const client = OnApolloClient.get();\n\n try {\n const response = await client.mutate({\n mutation: MUTATION_DELETE_AGENCY,\n variables: { filter: { id } },\n });\n\n log('deleteAgency', response.data);\n\n return OnAgencyDeleteEvent.dispatch(response.data);\n } catch (e) {\n error('deleteAgency', e);\n return OnAgencyError.dispatch(e);\n }\n};\n","import React, { useState } from 'react';\nimport { Dropdown, Icon, Menu } from '@8base/boost';\nimport { DropdownBodyOnTable } from 'shared/components';\nimport { YesNoDialog } from '../../../shared/components';\nimport { deleteAgency } from '../agency-actions';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport { OnAgencyDeleteEvent } from '../agency-events';\n\nconst MenuItem = styled(Menu.Item)`\n color: ${({ danger }) => (danger ? '#FF0000' : 'rgb(50, 60, 71)')}!important;\n &:hover {\n ${({ danger }) => (danger ? '' : 'color: #3db4aa !important;')}\n }\n`;\n\nconst BoldText = styled.span`\n font-weight: bold;\n`;\n\nconst AgencyActions = ({ agency, onUpdateClick }) => {\n const [isDeleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n\n const handleDelete = () => {\n setIsDeleting(true);\n deleteAgency(agency.id);\n };\n\n useEventSubscription(OnAgencyDeleteEvent, () => {\n setIsDeleting(false);\n setDeleteDialogOpen(false);\n });\n\n return (\n <>\n \n \n \n \n \n {({ closeDropdown }) => (\n \n {\n onUpdateClick(agency);\n closeDropdown();\n }}>\n Update Agency\n \n \n )}\n \n setDeleteDialogOpen(false)}\n onClose={() => setDeleteDialogOpen(false)}\n isLoading={isDeleting}\n yesText=\"Yes, Delete\"\n noText=\"Cancel\"\n title=\"Delete Agency\"\n text={\n \n {`Are you sure you want to delete this Agency ?`}\n \n This action can’t be undone.\n \n }\n />\n \n >\n );\n};\n\nAgencyActions.propTypes = {\n agency: PropTypes.shape({\n id: PropTypes.string.isRequired,\n }).isRequired,\n onUpdateClick: PropTypes.func.isRequired,\n};\n\nexport default AgencyActions;\n","export const SORT_OPTIONS = [\n { label: 'Date: Newest First', value: 'newest', field: 'createdAt', orderWay: 'DESC' },\n { label: 'Date: Oldest First', value: 'oldest', field: 'createdAt', orderWay: 'ASC' },\n];\n\nexport const FILTER_CATEGORIES = {\n startDate: {\n title: 'Date Start',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'startDate',\n },\n endDate: {\n title: 'Date End',\n placeholher: 'Select Date',\n date: {},\n type: 'date',\n identifier: 'endDate',\n },\n companyId: {\n title: 'Company',\n identifier: 'companyId',\n },\n};\n\nexport const FORM_TOOLTIP_STRINGS = {\n agents: {\n tooltipPlacement: 'top',\n tooltipText:\n 'Invite agents using their email address. This will send them an invite to join this agency.',\n },\n managers: {\n tooltipPlacement: 'top',\n tooltipText:\n 'Invite managers using their email address. This will send them an invite to join this agency.',\n },\n};\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { Dropdown } from '@8base/boost';\nimport { DropdownBodyOnTable, FilterFooter, FilterCategory } from 'shared/components';\nimport { FILTER_CATEGORIES } from '../agency-model';\nimport filterIconGrey from 'shared/assets/images/filter-grey.svg';\nimport filterIconGreen from 'shared/assets/images/filter-green.svg';\nimport PropTypes from 'prop-types';\n\nconst FilterDropdown = styled(Dropdown)`\n display: inline-block;\n`;\n\nconst DropdownBody = styled.div`\n background-color: #fff;\n position: relative;\n z-index: 2000;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n`;\n\nconst FilterBody = styled.div`\n display: grid;\n grid-template-rows: repeat(3, min-content);\n grid-template-columns: repeat(2, [col-start] 1fr [col-end]);\n gap: 12px;\n padding: 12px;\n`;\n\nconst FilterBtn = styled.div`\n display: flex;\n border-radius: 5px;\n border: solid 1px ${({ active }) => (active ? '#3db4aa' : '#d0d7dd')};\n padding: 0px 16px;\n height: 36px;\n box-sizing: border-box;\n align-items: center;\n`;\n\nconst FilterIconLabel = styled.span`\n margin-left: 4px;\n font-size: 13px;\n opacity: 0.9;\n ${(props) => (props.active ? 'color: #3db4aa;' : '')}\n`;\n\nconst FilterIcon = styled.img`\n width: 2rem;\n height: 2rem;\n`;\n\nconst AgencyFilter = ({ onConfirm, companies }) => {\n const [filterValues, setFilterValues] = useState({\n startDate: '',\n endDate: '',\n companyId: '',\n });\n const [isOpen, setIsOpen] = useState(false);\n\n const filters = {\n ...FILTER_CATEGORIES,\n companyId: {\n title: 'Company',\n placeholder: 'Select',\n identifier: 'companyId',\n options: [{ label: 'None', value: '' }, ...companies],\n },\n };\n\n const handleFilter = (key, value) => {\n const newState = { ...filterValues };\n newState[key] = value;\n\n if (key === 'startDate') {\n if (newState.startDate > newState.endDate) newState.endDate = '';\n }\n\n setFilterValues(newState);\n };\n\n const categories = Object.entries(filters).map(([key, value]) => (\n \n ));\n\n const icon = isOpen ? : ;\n\n return (\n \n \n setIsOpen(!isOpen)}>\n {icon}\n Filters\n \n \n \n {({ closeDropdown }) => (\n \n {categories}\n onConfirm(filterValues)}\n onCancel={() => null}\n closeDropdown={() => {\n setIsOpen(false);\n closeDropdown();\n }}\n />\n \n )}\n \n \n );\n};\n\nAgencyFilter.propTypes = {\n onConfirm: PropTypes.func.isRequired,\n companies: PropTypes.array.isRequired,\n};\n\nexport default AgencyFilter;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid, styled } from '@8base/boost';\nimport Field from './Field';\n\nconst BtnAddItem = styled.button`\n margin-top: 10px;\n display: flex;\n align-items: center;\n background: transparent;\n outline: none;\n cursor: pointer;\n`;\n\nconst BtnDeleteItem = styled.button`\n margin-top: 28px;\n height: 20px;\n width: 20px;\n border: 1px solid #eb4235;\n border-radius: 100px;\n background: transparent;\n outline: none;\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst BtnLess = styled.p`\n margin-left: 2px;\n height: 20px;\n width: 20px;\n color: #eb4235;\n font-size: 18px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst BtnPlus = styled.p`\n box-sizing: border-box;\n height: 16px;\n width: 16px;\n border: 0.67px solid #3db4aa;\n border-radius: 100px;\n color: #3db4aa;\n font-size: 16px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst BtnText = styled.p`\n color: #3db4aa;\n font-family: Poppins;\n font-size: 12px;\n letter-spacing: 0.18px;\n line-height: 20px;\n margin-left: 16px;\n`;\n\n/**\n * Render a list with inputs and its can add or remove new inputs.\n *\n * @param {object} props component props\n * @param {Array} props.data list data\n * @param {string} props.inputPlaceholder placeholder for each input\n * @param {string} props.inputLabel label for each input\n * @param {Function} props.onBlurInput handle on blur\n * @param {Function} props.onDeleteItem handle for deletes an item\n * @param {Function} props.onAddItem handle for creates an item\n * @returns {React.ReactElement} component\n */\nconst ListInputsEditable = ({\n data,\n inputPlaceholder,\n inputLabel,\n btnAddText,\n onBlurInput,\n onDeleteItem,\n onAddItem,\n}) => {\n return (\n <>\n {data.map((item, index) => {\n const label = `${inputLabel} #${index + 1}`;\n\n return (\n \n \n \n \n \n \n -\n \n \n \n );\n })}\n \n \n \n +\n {btnAddText}\n \n \n \n >\n );\n};\n\nListInputsEditable.propTypes = {\n data: PropTypes.array.isRequired,\n inputPlaceholder: PropTypes.string.isRequired,\n inputLabel: PropTypes.string.isRequired,\n btnAddText: PropTypes.string.isRequired,\n onBlurInput: PropTypes.func.isRequired,\n onDeleteItem: PropTypes.func.isRequired,\n onAddItem: PropTypes.func.isRequired,\n};\n\nexport default ListInputsEditable;\n","import React, { useState, useEffect } from 'react';\nimport { Form, InputField, SelectField } from '@8base/boost';\nimport { TagsInput } from '../../../../shared/components';\nimport { OnSessionFetch } from '../../../../shared/session/session-events';\nimport ListInputsEditable from '../../../../shared/components/ListInputsEditable';\nimport { IFS_SCORES_DEFAULT } from '@cobuildlab/lead-volt-share';\nimport { ADMIN } from '../../../../shared/constants';\nimport { getRolesOnSelectedAgency } from '../../../../shared/utils/agency-utils';\nimport { fetchVoiceMailMessagesForCalls } from 'modules/phone-calls/voice-mail-message/voice-mail-message-actions';\nimport { FORM_TOOLTIP_STRINGS } from '../../agency-model';\nimport PropTypes from 'prop-types';\n\nexport const AgencyForm = ({ agency, setFormData }) => {\n let initialCompanyId = '';\n const { user } = OnSessionFetch.get();\n\n if (agency) {\n initialCompanyId = agency.company.id;\n } else if (user.userAdminRelation.items.length === 1) {\n initialCompanyId = user.userAdminRelation.items[0].company.id;\n }\n const [name, setName] = useState(agency ? agency.name : '');\n const [companyId, setCompanyId] = useState(initialCompanyId);\n const [voicemailUrl, setVoicemailUrl] = useState(agency ? agency.voicemailUrl : '');\n const [agents, setAgents] = useState([]);\n const [managers, setManagers] = useState([]);\n const [voicemails, setVoicemails] = useState([]);\n const [ifsScores, setIfsScores] = useState([]);\n\n const handleOnBlurIfsScore = (index, event) => {\n const newIfsScores = [...ifsScores];\n newIfsScores[index].value = event.target.value;\n setIfsScores(newIfsScores);\n };\n\n const handleOnAddIfsScore = () => {\n setIfsScores([...ifsScores, { value: '' }]);\n };\n\n const handleOnDeleteIfsScore = (index) => {\n const value = ifsScores[index].value;\n const newIfsScores = [...ifsScores.filter((score) => score.value !== value)];\n setIfsScores(newIfsScores);\n };\n\n const roles = getRolesOnSelectedAgency(user, agency);\n\n useEffect(() => {\n console.log({\n agency,\n name,\n managers,\n agents,\n ifsScores,\n companyId,\n voicemailUrl,\n });\n setFormData({\n agency,\n name,\n managers,\n agents,\n ifsScores,\n companyId,\n voicemailUrl,\n });\n }, [agency, name, agents, managers, ifsScores, companyId, setFormData, voicemailUrl]);\n\n useEffect(() => {\n if (agency?.id) {\n fetchVoicemailList();\n }\n }, [agency, user]);\n\n const fetchVoicemailList = async () => {\n const { voiceMailMessagesList } = await fetchVoiceMailMessagesForCalls({\n agency: agency.id,\n user: [user.id, 'equals'],\n active: [true, 'equals'],\n });\n setVoicemails(voiceMailMessagesList.items);\n };\n\n useEffect(() => {\n const ifsScores = agency\n ? agency.ifsScore.length === 1 && agency.ifsScore[0] === ''\n ? IFS_SCORES_DEFAULT\n : agency.ifsScore\n : IFS_SCORES_DEFAULT;\n setIfsScores(ifsScores.map((score) => ({ value: score })));\n }, [agency]);\n\n return (\n event.preventDefault()}>\n \n \n setName(value),\n }}\n />\n {(!agency || roles.includes(ADMIN)) && (\n ({\n label: company.name,\n value: company.id,\n }))}\n stretch={true}\n input={{\n name: 'companyId',\n value: companyId,\n onChange: (value) => setCompanyId(value),\n }}\n />\n )}\n ({\n label: v.name,\n value: v.audio.downloadUrl,\n }))}\n stretch={true}\n input={{\n name: 'voicemailUrl',\n value: voicemailUrl,\n onChange: (value) => setVoicemailUrl(value),\n }}\n />\n \n \n {agency === null && (\n <>\n \n Invite agents\n \n setAgents(value)}\n tags={agents}\n tooltipPlacement={FORM_TOOLTIP_STRINGS.agents.tooltipPlacement}\n tooltipText={FORM_TOOLTIP_STRINGS.agents.tooltipText}\n />\n \n \n \n Invite managers\n \n setManagers(value)}\n tags={managers}\n tooltipPlacement={FORM_TOOLTIP_STRINGS.managers.tooltipPlacement}\n tooltipText={FORM_TOOLTIP_STRINGS.managers.tooltipText}\n />\n \n \n >\n )}\n \n IFS Scores\n \n \n \n \n \n );\n};\nAgencyForm.propTypes = {\n agency: PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n company: PropTypes.shape({\n id: PropTypes.string.isRequired,\n }),\n ifsScore: PropTypes.array.isRequired,\n }),\n};\nAgencyForm.defaultProps = {\n agency: null,\n};\n","import React, { useState } from 'react';\nimport { DialogForm } from '../../../shared/components';\nimport { AgencyForm } from './forms/AgencyForm';\nimport PropTypes from 'prop-types';\nconst AgencyFormDialog = ({ agency, isOpen, isLoading, isUpdate, onClose, onSubmit }) => {\n const [formData, setFormData] = useState({ agency });\n const handleSubmit = () => {\n const form = {\n operation: formData.agency ? 'Update' : 'create',\n id: formData.agency ? formData.agency.id : undefined,\n name: formData.name,\n companyId: formData.companyId,\n agents: formData.agents,\n managers: formData.managers,\n ifsScores: formData.ifsScores.map((score) => score.value),\n voicemailUrl: formData.voicemailUrl\n };\n onSubmit(form);\n };\n return (\n \n \n \n );\n};\n\nAgencyFormDialog.propTypes = {\n agency: PropTypes.object,\n isOpen: PropTypes.bool.isRequired,\n isLoading: PropTypes.bool.isRequired,\n isUpdate: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onSubmit: PropTypes.bool.isRequired,\n};\n\nAgencyFormDialog.defaultProps = {\n agency: null,\n};\n\nexport default AgencyFormDialog;\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport styled from 'styled-components';\nimport { Card, Table, Pagination } from '@8base/boost';\nimport AgencyActions from '../../agency/components/AgencyActions';\nimport AgencyFilter from '../../agency/components/AgencyFilter';\nimport { ListCardBody as ListCard, ItemFilter, SearchInput } from '../../../shared/components';\nimport { DateBox } from 'shared/components';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { useSubscription as useEventSubscription } from '@cobuildlab/react-simple-state';\nimport { fetchAgencies, createAgency, updateAgency } from '../../agency/agency-actions';\nimport { SORT_OPTIONS } from '../../agency/agency-model';\nimport { OnSessionFetch } from '../../../shared/session/session-events';\nimport AgencyFormDialog from '../../agency/components/AgencyFormDialog';\nimport { fetchSession } from '../../auth/auth.actions';\nimport { CreateButton } from 'shared/components';\nimport { Box } from '../../../shared/components/Box';\nimport * as Toast from '../../../shared/components/toast/Toast';\nimport {\n OnAgencyDeleteEvent,\n OnAgencyError,\n OnAgencyListFetched,\n OnAgencyPhoneCreateError,\n OnAgencyUpdateEvent,\n OnAgenyCreateEvent,\n} from 'modules/agency/agency-events';\n\nconst ListCardBody = styled(ListCard)`\n padding: 0 !important;\n`;\n\nconst TableRow = styled(Table.BodyRow)`\n ${(props) => (props.active ? `background-color: #fcfcfc !important` : '')};\n`;\n\nconst StyledHeaderCell = styled(Table.HeaderCell)`\n padding-left: 24px !important;\n`;\n\nconst StyledTableHeader = styled(Table.Header)`\n height: 36px !important;\n`;\n\nconst TableBody = styled(Table.Body)`\n max-height: 50vh;\n height: 50vh;\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst SearchBar = styled(SearchInput)`\n width: 100% !important;\n`;\n\nconst PaginationContainer = styled.div`\n display: flex;\n justify-content: center;\n font-size: 1.2rem;\n padding: 0 1rem;\n\n & > div > div > *::before {\n background-color: var(--color-primary);\n transition: all 0.2s;\n }\n\n & > div > span {\n display: inline-block;\n padding: 0.5rem 1.5rem;\n border: solid 1px #d0d7dd;\n border-radius: 5px;\n }\n`;\n\nconst CustomGrid = styled.div`\n display: grid;\n width: ${(props) => props.width};\n grid-template-columns: ${(props) => props.columns};\n column-gap: ${(props) => props.columnGap};\n grid-template-areas: ${(props) => props.areas};\n ${(props) => (props.alignItems ? `align-items:${props.alignItems} ` : '')};\n`;\n\nconst CustomGridCell = styled.div`\n grid-area: ${(props) => props.area};\n ${(props) => (props.justifySelf ? `justify-self:${props.justifySelf} ` : '')};\n`;\n\nconst TABLE_COLUMUNS = '70px repeat(3,1fr) 100px';\n\nconst AgencyView = () => {\n const [data, setData] = useState({\n agency: null,\n isLoading: true,\n agencies: [],\n count: 0,\n page: 1,\n search: '',\n });\n const [dialog, setDialog] = useState({\n isOpen: false,\n isLoading: false,\n });\n const [deleteDialog, setDeleteDialog] = useState({\n isOpen: false,\n isLoading: false,\n });\n const [filters, setFilters] = useState({\n sort: 'newest',\n startDate: '',\n endDate: '',\n companyId: '',\n });\n\n const paginationRef = useRef(null);\n const searchRef = useRef(null);\n const { user } = OnSessionFetch.get();\n\n /**\n * Function to fetch agencies when component mounts\n *\n * @param {string} search -Search term\n *\n * @returns {void}\n */\n const refreshAgencies = (search = '') => {\n setData((state) => ({\n ...state,\n isLoading: true,\n agencies: [],\n }));\n\n setDialog((state) => ({\n ...state,\n isOpen: false,\n isLoading: false,\n }));\n\n const { companyId } = filters;\n\n fetchAgencies(\n data.page,\n {\n ...filters,\n company: companyId !== '' ? companyId : null,\n user: user.id,\n },\n search,\n );\n\n paginationRef.current.children[0].children[3].childNodes[5].textContent = ' agencies';\n };\n\n useEffect(refreshAgencies, [user.id, data.page, data.search, filters]);\n\n /**\n * Handle submit of the create/update dialog form\n *\n * @param {object} form - The agency attributes to create/edit\n *\n * @returns {void}\n */\n const handleSubmit = (form) => {\n setDialog((state) => ({ ...state, isLoading: true }));\n setDeleteDialog((state) => ({ ...state, isLoading: true }));\n\n if (form.operation === 'create') {\n const invitations = [\n ...form.agents.map((email) => ({\n email,\n type: 'AGENT',\n })),\n ...form.managers.map((email) => ({\n email,\n type: 'MANAGER',\n })),\n ];\n\n createAgency({ ...form, invitations });\n } else if (form.operation === 'Update') {\n updateAgency(form);\n }\n };\n\n const handleFilter = useCallback((newFilters) => {\n setData((state) => ({\n ...state,\n page: 1,\n }));\n setFilters((state) => ({\n ...state,\n startDate: newFilters.startDate,\n endDate: newFilters.endDate,\n companyId: newFilters.companyId,\n }));\n }, []);\n\n // Suscriptions for handling request results\n useEventSubscription(OnAgencyListFetched, ({ agenciesList }) =>\n setData((state) => ({\n ...state,\n agencies: agenciesList.items,\n count: agenciesList.count,\n isLoading: false,\n })),\n );\n\n useEventSubscription(OnAgenyCreateEvent, () => {\n setData((state) => ({\n ...state,\n agency: null,\n }));\n setDialog((state) => ({\n ...state,\n isLoading: false,\n isOpen: false,\n }));\n setDeleteDialog({\n ...deleteDialog,\n isLoading: false,\n isOpen: false,\n });\n\n refreshAgencies();\n });\n\n useEventSubscription(OnAgencyPhoneCreateError, () => {\n Toast.warn(\n 'Could not create phone number automatically on the agency, please create it manually',\n );\n });\n\n useEventSubscription(OnAgencyUpdateEvent, () => {\n setData({\n ...data,\n agency: null,\n });\n setDialog({\n ...dialog,\n isLoading: false,\n isOpen: false,\n });\n setDeleteDialog({\n ...deleteDialog,\n isLoading: false,\n isOpen: false,\n });\n\n refreshAgencies();\n\n fetchSession();\n });\n\n useEventSubscription(OnAgencyError, (err) => {\n setDialog({\n ...dialog,\n isLoading: false,\n });\n setDeleteDialog({\n ...deleteDialog,\n isLoading: false,\n });\n\n onErrorMixinFC(err);\n });\n\n useEventSubscription(OnAgencyDeleteEvent, () => {\n setData({\n ...data,\n agency: null,\n });\n setDialog({\n ...dialog,\n isLoading: false,\n isOpen: false,\n });\n setDeleteDialog({\n ...deleteDialog,\n isLoading: false,\n isOpen: false,\n });\n\n refreshAgencies();\n });\n\n const pageOffset = (data.page - 1) * 10;\n\n return (\n \n \n \n \n \n refreshAgencies(searchRef.current.value)}\n />\n \n \n ({\n label: company.name,\n value: company.id,\n }))}\n onConfirm={handleFilter}\n />\n \n \n \n {\n setFilters({ ...filters, sort: value });\n setData({ ...data, page: 1 });\n }}\n value={filters.sort}\n options={SORT_OPTIONS}\n placeholder=\"Sort agencies by\"\n />\n \n \n {\n setData({\n ...data,\n agency: !dialog.isOpen ? null : data.agency,\n });\n setDialog({\n ...dialog,\n isOpen: !dialog.isOpen,\n });\n }}\n text=\"Create Agency\"\n />\n \n \n \n \n \n \n \n Name\n Company\n Created At\n Action\n \n \n {(agency, i) => (\n \n {i + 1 + pageOffset}\n {agency.name}\n {agency.company.name}\n {/**/}\n {/* {agency.quoteOfDay ? agency.quoteOfDay.title : '-'}*/}\n {/**/}\n \n \n \n \n {\n setData({ ...data, agency });\n setDialog({ ...dialog, isOpen: true });\n }}\n />\n \n \n )}\n \n \n \n setData({ ...data, page })}\n defaultPage={1}\n total={data.count}\n page={data.page}\n />\n \n \n \n \n {\n setData({\n ...data,\n agency: !dialog.isOpen ? null : data.agency,\n });\n setDialog({\n ...dialog,\n isOpen: !dialog.isOpen,\n });\n }}\n onSubmit={handleSubmit}\n isUpdate={data.agency === null ? false : true}\n />\n \n \n );\n};\n\nexport { AgencyView };\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Heading } from '@8base/boost';\nimport PropTypes from 'prop-types';\nimport { Link, Route, Switch, Redirect, withRouter } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { OnSessionFetch } from '../../shared/session/session-events';\nimport { ADMIN, MANAGER, AGENT } from '../../shared/constants/index';\nimport { useAgency } from '../../shared/hooks/useAgency';\nimport { userHasAnyRoleInAgency } from '../../shared/utils/agency-utils';\nimport { isCompanyAvailable } from '../../shared/utils/company-utils';\nimport { Box } from '../../shared/components/Box';\nimport { InvitationsView } from '../my-account/invitations/InvitationsView';\nimport CompanyView from '../my-account/company/CompanyView';\nimport CompanyInvitationsView from '../my-account/company-invitations/CompanyInvitationsView';\nimport VendorsView from '../vendors/VendorsView';\nimport PhoneNumberView from '../my-account/phone-numbers/PhoneNumberView';\nimport InboundService from './inbound/InboundService';\nimport OutboundService from './outbound/OutboundService';\nimport PhoneCallSettings from './phone-calls/PhoneCallSettings';\nimport VoiceMailMessages from './voice-mail-messages/VoiceMailMessages';\nimport RegistrationStatus from './registration-status/RegistrationStatus';\nimport { GeneralView } from '../my-account/general/GeneralView';\nimport { EmailView } from '../my-account/email/EmailView';\nimport { TeamView } from '../my-account/team/TeamView';\nimport BillingView from '../my-account/billing/BillingView';\nimport { AgencyView } from '../my-account/agency/AgencyView';\n\nexport const routes = [\n {\n name: 'Profile',\n path: '/settings/general',\n auth: [ADMIN, MANAGER, AGENT],\n },\n {\n name: 'Email',\n path: '/settings/email',\n auth: [ADMIN, MANAGER, AGENT],\n },\n {\n name: 'Agencies',\n path: '/settings/agency',\n auth: [ADMIN, MANAGER],\n },\n {\n name: 'Agency Invitations',\n path: '/settings/invitations',\n auth: [ADMIN, MANAGER],\n },\n {\n name: 'Company',\n path: '/settings/company',\n auth: [ADMIN],\n },\n {\n name: 'Company Invitations',\n path: '/settings/company-invitations',\n auth: [ADMIN],\n },\n // {\n // name: 'Status Mapping',\n // path: '/settings/status-mapping',\n // },\n {\n name: 'Billing',\n path: '/settings/billing',\n auth: [ADMIN],\n allow: true,\n },\n {\n name: 'Team',\n path: '/settings/team',\n auth: [ADMIN, MANAGER],\n },\n {\n name: 'Phone numbers',\n path: '/settings/phone-numbers',\n auth: [ADMIN, MANAGER],\n },\n {\n name: 'Outbound Email Services',\n path: '/settings/services/email/outbound',\n auth: [ADMIN, MANAGER, AGENT],\n },\n {\n name: 'Inbound Email Services',\n path: '/settings/services/email/inbound',\n auth: [ADMIN, MANAGER, AGENT],\n },\n {\n name: 'Vendors',\n path: '/settings/vendors',\n auth: [ADMIN, MANAGER],\n },\n {\n name: 'Phone Call Settings',\n path: '/settings/phone-call',\n auth: [ADMIN, MANAGER],\n },\n {\n name: 'Voice Mail Messages',\n path: '/settings/voice-mail-messages',\n auth: [ADMIN, MANAGER, AGENT],\n },\n {\n name: 'Telephony Registration',\n path: '/settings/telephony-registration',\n auth: [ADMIN, MANAGER],\n },\n];\n\nconst Container = styled.div`\n height: calc(100vh - 91px);\n width: 100%;\n background-color: #f4f5f6;\n display: flex;\n flex-direction: row;\n`;\n\nconst Sidebar = styled.div`\n height: calc(100vh - 91px);\n width: 250px;\n display: flex;\n flex-direction: column;\n padding: 24px 0px;\n box-shadow: 2px 0px 5px 0 rgb(50, 50, 93, 0.14);\n`;\n\nconst Content = styled.div`\n width: 100%;\n height: calc(100vh - 91px);\n max-height: calc(100vh - 91px);\n overflow: auto;\n`;\n\nconst List = styled.ul`\n width: 100%;\n list-style: none;\n`;\n\nconst Li = styled.li`\n width: 99%;\n height: 32px;\n ${(props) =>\n props.active &&\n `\n background-color: #fff;\n border-left: 2.5px solid #3db4aa;\n a {\n color: #3db4aa;\n }\n `}\n\n &:hover {\n background-color: #fff;\n border-left: 2.5px solid #3db4aa;\n }\n`;\n\nconst StyledLink = styled(Link)`\n color: #323c47;\n text-decoration: none;\n height: 100%;\n padding-left: 24px;\n display: flex;\n align-items: center;\n ${(props) => (props.active ? 'color: #3db4aa;' : '')}\n &:hover {\n color: #3db4aa;\n }\n`;\n\nconst SettingsView = ({ history }) => {\n const [pathnameActive, setPathnameActive] = useState(window.location.pathname);\n const { user } = OnSessionFetch.get();\n const agency = useAgency();\n\n useEffect(() => {\n const unlisten = history.listen((location) => setPathnameActive(location.pathname));\n\n return () => unlisten();\n }, [history]);\n\n const isCompanyPaid = isCompanyAvailable(agency);\n const items = useMemo(\n () =>\n routes\n .filter(\n (route) =>\n !route.auth ||\n (userHasAnyRoleInAgency(user, agency, route.auth) &&\n (!isCompanyPaid ? route.allow : true)),\n )\n .map((route) => {\n const isActive = pathnameActive === route.path;\n\n return (\n \n \n {route.name}\n \n \n );\n }),\n [user, agency, pathnameActive, isCompanyPaid],\n );\n\n // if (!isCompanyPaid) {\n // return null;\n // }\n\n return (\n \n \n \n Settings\n \n {items}\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\nSettingsView.propTypes = {\n history: PropTypes.object.isRequired,\n};\n\nexport default withRouter(SettingsView);\n","import { error, log } from '@cobuildlab/pure-logger';\nimport {\n FETCH_PHONE_CALL_RECORDINGS,\n DELETE_PHONE_CALL_RECORDING,\n} from './phone-call-recordings-queries';\nimport { OnApolloClient } from '../../../shared/session/session-events';\nimport {\n OnDeletePhoneCallRecordingError,\n OnDeletePhoneCallRecordingEvent,\n OnFetchPhoneCallRecordingsError,\n OnFetchPhoneCallRecordingsEvent,\n} from '../phone-calls-events';\n\n/**\n * Fetches the Phone Call Recordings by filter and page\n *\n * @param {object} filter - The parameters to filter the results\n * @param {number} page - The page to fetch results from\n *\n * @returns {Promise} Request result\n */\nexport const fetchPhoneCallRecordings = async (filter, page = 1) => {\n const client = OnApolloClient.get();\n const first = 10;\n const skip = first * (page - 1);\n const orderBy = 'createdAt_DESC';\n let response = null;\n\n try {\n response = await client.query({\n query: FETCH_PHONE_CALL_RECORDINGS,\n variables: { filter, first, skip, orderBy },\n fetchPolicy: 'network-only',\n });\n } catch (e) {\n error('fetchPhoneCallRecordings', e);\n OnFetchPhoneCallRecordingsError.dispatch(e);\n\n return;\n }\n\n log('fetchPhoneCallRecordings', response.data);\n OnFetchPhoneCallRecordingsEvent.dispatch(response.data);\n};\n\n/**\n * Deletes the specified phone call recording\n *\n * @param {string} id - Phone call recording id\n *\n * @returns {Promise} The request result\n */\nexport const deletePhoneCallRecording = async (id) => {\n const client = OnApolloClient.get();\n let response = null;\n\n try {\n response = await client.mutate({\n mutation: DELETE_PHONE_CALL_RECORDING,\n variables: { data: { id } },\n });\n } catch (e) {\n error('deletePhoneCallRecording', e);\n OnDeletePhoneCallRecordingError.dispatch(e);\n\n return;\n }\n\n log('deletePhoneCallRecording', response.data);\n OnDeletePhoneCallRecordingEvent.dispatch(response.data);\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Card, Paper, Row, Table, Column, Pagination, Icon, Dropdown, Menu } from '@8base/boost';\nimport {\n fetchPhoneCallRecordings,\n deletePhoneCallRecording,\n} from '../../phone-calls/phone-call-recordings/phone-call-recordings-actions';\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\nimport * as Toast from '../../../shared/components/toast/Toast';\nimport { onErrorMixinFC } from '../../../shared/mixins';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { formatPhoneNumber, formatDuration } from '../../phone-calls/phone-calls-utils';\nimport { CALL_TYPES } from '../../phone-calls/phone-calls-model';\nimport { DateBox, YesNoDialog } from '../../../shared/components';\nimport AudioPlayer from 'react-h5-audio-player';\nimport styled from 'styled-components';\nimport 'react-h5-audio-player/lib/styles.css';\nimport {\n OnDeletePhoneCallRecordingError,\n OnDeletePhoneCallRecordingEvent,\n OnFetchPhoneCallRecordingsError,\n OnFetchPhoneCallRecordingsEvent,\n} from 'modules/phone-calls/phone-calls-events';\n\nconst PlayerCell = styled(Table.BodyCell)`\n padding-left: 0px !important;\n`;\n\nconst TableBody = styled(Table.Body)`\n min-height: 250px;\n`;\n\nconst MenuItem = styled(Menu.Item)`\n color: ${({ danger }) => (danger ? '#FF0000' : 'rgb(50, 60, 71)')}!important;\n &:hover {\n ${({ danger }) => (danger ? '' : 'color: #3db4aa !important;')}\n }\n`;\n\n/**\n * Renders the record calls configuration view\n *\n * @param {object} props - Props object passed to this component\n *\n * @returns {React.FC} The component to render\n */\nfunction PhoneCallRecordings(props) {\n const [loading, setLoading] = useState(true);\n const [page, setPage] = useState(1);\n const [recordings, setRecordings] = useState([]);\n const [count, setCount] = useState(0);\n const agency = useAgency();\n const [del, setDelete] = useState({ open: false, loading: false, selected: null });\n\n const refresh = useCallback(() => {\n // const filter = { call: { agency: { id: { equals: agency.id } } } };\n const filter = {\n OR: [\n { call: { agency: { id: { equals: agency.id } } } },\n {\n inboundCall: { agency: { id: { equals: agency.id } } },\n },\n ],\n };\n\n setLoading(true);\n\n fetchPhoneCallRecordings(filter, page);\n }, [agency.id, page]);\n\n const handleDelete = useCallback(\n (recording) => {\n setDelete({ ...del, open: true, selected: recording });\n },\n [del],\n );\n\n const handleConfirmDelete = useCallback(() => {\n deletePhoneCallRecording(del.selected.id);\n\n setDelete({ ...del, loading: true });\n }, [del]);\n\n useEffect(() => {\n refresh();\n }, [refresh]);\n\n useSimpleSubscription(OnFetchPhoneCallRecordingsEvent, ({ phoneCallRecordingsList }) => {\n setLoading(false);\n\n setRecordings(phoneCallRecordingsList.items);\n setCount(phoneCallRecordingsList.count);\n });\n\n useSimpleSubscription(OnDeletePhoneCallRecordingEvent, () => {\n Toast.success('Success', 'Recording deleted successfully!');\n\n setDelete({ ...del, open: false, loading: false, selected: null });\n\n if (page === 1) {\n refresh();\n } else {\n setPage(1);\n }\n });\n\n useSimpleSubscription(OnFetchPhoneCallRecordingsError, (err) => {\n onErrorMixinFC(err);\n });\n\n useSimpleSubscription(OnDeletePhoneCallRecordingError, (err) => {\n onErrorMixinFC(err);\n\n setDelete({ ...del, loading: false });\n });\n\n console.log('recordings', recordings);\n\n return (\n \n \n \n \n \n \n Date\n From\n To\n Duration\n Play\n Actions\n \n \n {(recording) => {\n const call = recording.call || recording.inboundCall;\n const recordingType = recording.call ? CALL_TYPES.OUTBOUND : CALL_TYPES.INBOUND;\n\n const from =\n recordingType === CALL_TYPES.OUTBOUND\n ? `${call.user.firstName} ${call.user.lastName} ${formatPhoneNumber(\n `+${call.from.number.code}${call.from.number.number}`,\n )}`\n : formatPhoneNumber(call.from);\n\n const to =\n recordingType === CALL_TYPES.OUTBOUND\n ? call.lead\n ? `${call.lead.firstName} ${call.lead.lastName} ${formatPhoneNumber(call.to)}`\n : formatPhoneNumber(call.to)\n : `+${call.to.number.code}${call.to.number.number}`;\n\n return (\n \n \n \n \n {from}\n {to}\n {formatDuration(recording.duration * 1000)}\n \n \n \n \n \n \n \n \n \n \n handleDelete(recording)}>\n Delete\n \n \n \n \n \n \n );\n }}\n \n \n \n \n \n \n \n \n \n setDelete({ open: false, loading: false, selected: null })}\n onClose={() => setDelete({ open: false, loading: false, selected: null })}\n title=\"Delete Phone Call Recording\"\n text=\"Are you sure you want to delete this phone call recording ?\"\n />\n \n );\n}\n\nexport default PhoneCallRecordings;\n","import React from 'react';\r\nimport { Dropdown } from '@8base/boost';\r\nimport styled from 'styled-components';\r\nimport { PropTypes } from 'prop-types';\r\nimport { DropdownBodyOnTable, FilterFooter, FilterCategory } from 'shared/components';\r\nimport filterIconGrey from 'shared/assets/images/filter-grey.svg';\r\nimport filterIconGreen from 'shared/assets/images/filter-green.svg';\r\n\r\nconst FilterDropdown = styled(Dropdown)`\r\n display: inline-block;\r\n`;\r\n\r\nconst DropdownBody = styled.div`\r\n background-color: #fff;\r\n position: relative;\r\n z-index: 2000;\r\n border: solid 1px #d0d7dd;\r\n border-radius: 5px;\r\n`;\r\n\r\nconst FilterBody = styled.div`\r\n display: grid;\r\n grid-template-rows: repeat(3, min-content);\r\n grid-template-columns: repeat(${(props) => props.columnsNumber}, [col-start] 1fr [col-end]);\r\n gap: 12px;\r\n padding: 12px;\r\n`;\r\n\r\nconst FilterBtn = styled.div`\r\n display: flex;\r\n border-radius: 5px;\r\n border: solid 1px ${({ active }) => (active ? '#3db4aa' : '#d0d7dd')};\r\n padding: 0px 16px;\r\n height: 36px;\r\n box-sizing: border-box;\r\n align-items: center;\r\n`;\r\n\r\nconst FilterIconLabel = styled.span`\r\n margin-left: 4px;\r\n font-size: 13px;\r\n opacity: 0.9;\r\n ${(props) => (props.active ? 'color: #3db4aa;' : '')}\r\n`;\r\n\r\nconst FilterIcon = styled.img`\r\n width: 2rem;\r\n height: 2rem;\r\n`;\r\n\r\nconst LogFilter = (props) => {\r\n const categories = Object.entries(props.categories).map(([identifier, category]) => (\r\n \r\n ));\r\n const icon = props.active ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n props.onFilterClick()}>\r\n {icon}\r\n Filters\r\n \r\n \r\n \r\n {({ closeDropdown }) => (\r\n \r\n {categories}\r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nLogFilter.propTypes = {\r\n onConfirm: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n onFilterClick: PropTypes.func.isRequired,\r\n active: PropTypes.bool.isRequired,\r\n categories: PropTypes.object.isRequired,\r\n values: PropTypes.object.isRequired,\r\n onFilter: PropTypes.func.isRequired,\r\n};\r\nLogFilter.defaultProps = {\r\n columnsNumber: 2,\r\n};\r\n\r\nexport default LogFilter;\r\n","import { useSubscription } from '@cobuildlab/react-simple-state';\nimport { useCallback, useEffect, useState } from 'react';\nimport { fetchAgencyEmails } from '../../../email/email-actions';\nimport { OnFetchEmails, OnFetchEmailsError } from '../../../email/email-store';\n\nconst initialState = {\n items: [],\n count: 0,\n loading: true,\n error: null,\n};\n\n/**\n * Hook that fetches agency emails\n *\n * @param {string} agency - The agency id\n * @param {object} filters - Data to filter the results\n * @param {string} sort - Order to return the results\n *\n * @returns {object} The hook state\n */\nexport function useAgencyEmails(agency, filters = {}, sort = '') {\n const [state, setState] = useState(initialState);\n const [page, setPage] = useState(1);\n\n const fetch = useCallback(() => {\n setState((prevState) => ({ ...prevState, items: [], loading: true }));\n\n fetchAgencyEmails(agency, page, sort, filters);\n }, [agency, filters, sort, page]);\n\n useSubscription(\n OnFetchEmails,\n ({ mailList }) => {\n setState((prevState) => ({\n ...prevState,\n items: mailList.items,\n count: mailList.count,\n loading: false,\n error: null,\n }));\n },\n [],\n );\n\n useSubscription(\n OnFetchEmailsError,\n (e) => {\n setState((prevState) => ({\n ...prevState,\n error: e,\n loading: false,\n }));\n },\n [],\n );\n\n useEffect(() => {\n fetch();\n }, [fetch]);\n\n return {\n ...state,\n page,\n setPage,\n refresh: fetch,\n };\n}\n","import React, { useMemo } from 'react';\nimport { Table, Tag, Text, Link, Column } from '@8base/boost';\nimport { EMAIL_TYPES } from '@cobuildlab/lead-volt-share';\nimport { DateBox } from '../../../../shared/components';\nimport PropTypes from 'prop-types';\n\nexport const EmailLogRow = ({ email, columns }) => {\n const { lead } = email;\n let type = null;\n\n if (email.type === EMAIL_TYPES.INBOX) {\n type = Incoming;\n } else {\n type = Outgoing;\n }\n\n const to = useMemo(() => {\n return email?.to?.split(',').map((address, i) => {address});\n }, [email.to]);\n\n const cc = useMemo(\n () => email.ccopy.split(',').map((address, i) => {address}),\n [email.ccopy],\n );\n\n return (\n \n {type}\n \n \n {`${lead.firstName} ${lead.lastName}`}\n \n \n \n {email.from}\n \n \n \n {to}\n \n \n \n \n {cc}\n \n \n \n \n \n \n );\n};\n\nEmailLogRow.propTypes = {\n columns: PropTypes.string.isRequired,\n email: PropTypes.shape({\n from: PropTypes.string.isRequired,\n to: PropTypes.string.isRequired,\n ccopy: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n lead: PropTypes.shape({\n id: PropTypes.string.isRequired,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }).isRequired,\n createdAt: PropTypes.string.isRequired,\n }).isRequired,\n};\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { Card, Table, Pagination, Row } from '@8base/boost';\r\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\r\nimport { fetchManagerAndAgents } from '../../users/user-actions';\r\nimport { ItemFilter as SortFilter } from 'shared/components';\r\nimport { SORT_OPTIONS, FILTER_CATEGORIES } from '../../email/email-model';\r\nimport { onErrorMixinFC } from 'shared/mixins';\r\nimport { useAgency } from 'shared/hooks/useAgency';\r\nimport LogFilter from './components/LogFilter';\r\nimport * as R from 'ramda';\r\nimport styled from 'styled-components';\r\nimport { useAgencyEmails } from './hooks/useAgencyEmails';\r\nimport { EmailLogRow } from './components/EmailLogRow';\r\nimport { Box } from '../../../shared/components/Box';\r\nimport {\r\n OnFetchManagerAndAgentUsersError,\r\n OnFetchManagerAndAgentUsersEvent,\r\n} from 'modules/users/user-events';\r\n\r\nconst TableBody = styled(Table.Body)`\r\n min-height: 400px;\r\n`;\r\n\r\nconst columns =\r\n '150px minmax(150px, 1fr) minmax(150px, 1fr) minmax(150px, 1fr) minmax(150px, 1fr) 150px';\r\n\r\nconst EmailLogs = () => {\r\n const agency = useAgency();\r\n const [filter, setFilter] = useState({});\r\n const [filters, setFilters] = useState({});\r\n const [sort, setSort] = useState('');\r\n const { items, count, loading, error, page, setPage } = useAgencyEmails(agency.id, filters, sort);\r\n const [open, setOpen] = useState(false);\r\n const [categories, setCategories] = useState(FILTER_CATEGORIES);\r\n\r\n useEffect(() => {\r\n fetchManagerAndAgents(agency.id);\r\n }, [agency.id]);\r\n\r\n useEffect(() => {\r\n if (error) {\r\n onErrorMixinFC(error);\r\n }\r\n }, [error]);\r\n\r\n useSimpleSubscription(OnFetchManagerAndAgentUsersEvent, ({ usersList }) => {\r\n const options = R.clone(categories);\r\n\r\n options.assignedTo.options = [\r\n { label: 'None', value: '' },\r\n ...usersList.items.map((user) => ({\r\n label: `${user.firstName} ${user.lastName}`,\r\n value: user.id,\r\n })),\r\n ];\r\n\r\n setCategories(options);\r\n });\r\n\r\n useSimpleSubscription(OnFetchManagerAndAgentUsersError, (e) => {\r\n onErrorMixinFC(e);\r\n });\r\n\r\n const onConfirm = useCallback(() => {\r\n setOpen(false);\r\n\r\n setFilters(filter);\r\n }, [filter]);\r\n\r\n const onFilter = useCallback((name, value) => {\r\n setFilter((prevState) => ({\r\n ...prevState,\r\n [name]: value,\r\n ...(name === 'dateStart' && value > prevState.dateEnd\r\n ? {\r\n dateEnd: '',\r\n }\r\n : {}),\r\n }));\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n setOpen(true)}\r\n active={open}\r\n onFilter={onFilter}\r\n values={filter}\r\n categories={categories}\r\n onConfirm={onConfirm}\r\n onCancel={() => setOpen(false)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Type\r\n Lead\r\n From\r\n To\r\n Cc\r\n Date\r\n \r\n \r\n {(email) => }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default EmailLogs;\r\n","import React, { useMemo } from 'react';\nimport { Table, Link, Tag, Text, Paragraph } from '@8base/boost';\nimport { DateBox } from 'shared/components';\nimport PropTypes from 'prop-types';\n\nexport const SmsRow = ({ message, columns }) => {\n let fromComponent = null;\n let toComponent = null;\n let typeComponent = null;\n\n const fromNumber = useMemo(() => {\n return message.from\n ? `+${message.from.number.code} ${message.from.number.number}`\n : message.receivedFrom\n ? `+1 ${message.receivedFrom}`\n : 'No information';\n }, [message]);\n\n const toNumber = useMemo(() => {\n return message.to ? `+1 ${message.to}` : 'No information';\n }, [message]);\n\n if (message.type === 'INCOMING') {\n fromComponent = message.lead ? (\n \n {message.lead.firstName} {message.lead.lastName}\n \n ) : (\n fromNumber\n );\n\n toComponent = toNumber;\n\n typeComponent = {message.type.toLowerCase()};\n } else {\n fromComponent = message.user ? (\n \n {`${message.user.firstName} ${message.user.lastName}`} \n {fromNumber}\n \n ) : (\n `${fromNumber}`\n );\n\n toComponent = message.lead ? (\n \n {message.lead.firstName} {message.lead.lastName}\n \n ) : (\n toNumber\n );\n\n typeComponent = {message.type.toLowerCase()};\n }\n\n return (\n \n {fromComponent}\n {toComponent}\n {typeComponent}\n \n {message.text}\n \n \n \n \n \n );\n};\n\nSmsRow.propTypes = {\n message: PropTypes.shape({\n id: PropTypes.string.isRequired,\n type: PropTypes.oneOf(['INCOMING', 'OUTGOING']),\n lead: PropTypes.shape({\n id: PropTypes.string.isRequired,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }),\n receivedFrom: PropTypes.string,\n from: PropTypes.shape({\n number: PropTypes.shape({\n code: PropTypes.string,\n number: PropTypes.string,\n }),\n }),\n user: PropTypes.shape({\n id: PropTypes.string.isRequired,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }),\n to: PropTypes.string,\n text: PropTypes.string.isRequired,\n createdAt: PropTypes.string.isRequired,\n }).isRequired,\n columns: PropTypes.string.isRequired,\n};\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { Table, Paper, Pagination } from '@8base/boost';\r\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\r\nimport { fetchSMSMessages } from '../../leads/leads-actions';\r\nimport { SMS_FILTER_DATA, SMS_FILTER_CATEGORIES, SMS_SORT_OPTIONS } from '../../leads/leads-model';\r\nimport { fetchManagerAndAgents } from '../../users/user-actions';\r\nimport { ItemFilter } from 'shared/components';\r\nimport styled from 'styled-components';\r\nimport { onErrorMixinFC } from 'shared/mixins';\r\nimport { useAgency } from 'shared/hooks/useAgency';\r\nimport LogFilter from '../email-logs/components/LogFilter';\r\nimport * as toast from 'shared/components/toast/Toast';\r\nimport * as R from 'ramda';\r\nimport { SmsRow } from './SmsRow';\r\nimport { OnFetchSmsListEvent, OnLeadsError } from 'modules/leads/leads-events';\r\nimport {\r\n OnFetchManagerAndAgentUsersError,\r\n OnFetchManagerAndAgentUsersEvent,\r\n} from 'modules/users/user-events';\r\n\r\nconst TableHeader = styled(Table.Header)``;\r\n\r\nconst TableBody = styled(Table.Body)``;\r\n\r\nconst CardHeader = styled.div`\r\n display: grid;\r\n grid-template-columns: repeat(2, 1fr);\r\n height: 64px;\r\n border-bottom: 1px solid #e8eff5;\r\n padding: 0 24px;\r\n position: relative;\r\n`;\r\n\r\nconst HeaderLeftSide = styled.div`\r\n display: flex;\r\n justify-content: flex-start;\r\n align-items: center;\r\n`;\r\n\r\nconst HeaderRightSide = styled.div`\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n > div {\r\n margin-left: 15px;\r\n max-width: 200px;\r\n }\r\n`;\r\n\r\nconst CardBody = styled.div`\r\n overflow: auto;\r\n padding: 0;\r\n`;\r\n\r\nconst PaginationContainer = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n font-size: 1.2rem;\r\n padding: 0 1rem;\r\n\r\n & > div > div > *::before {\r\n background-color: var(--color-primary);\r\n transition: all 0.2s;\r\n }\r\n\r\n & > div > span {\r\n display: inline-block;\r\n padding: 0.5rem 1.5rem;\r\n border: solid 1px #d0d7dd;\r\n border-radius: 5px;\r\n }\r\n`;\r\n\r\n/**\r\n * Component to fetch the Logs of the Lead SMS Messages\r\n *\r\n * @returns {React.Component} Return the Component.\r\n */\r\n\r\nconst SmsLogs = () => {\r\n const agency = useAgency();\r\n\r\n const [smsMessages, setSmsMessages] = useState([]);\r\n const [page, setPage] = useState(1);\r\n const [filter, setFilter] = useState(R.clone(SMS_FILTER_DATA));\r\n const [currentFilter, setCurrentFilter] = useState(R.clone(SMS_FILTER_DATA));\r\n const [showFilter, setShowFilter] = useState(false);\r\n const [filterCategories, setFilterCategories] = useState(R.clone(SMS_FILTER_CATEGORIES));\r\n const [loading, setLoading] = useState(true);\r\n\r\n useSimpleSubscription(OnFetchSmsListEvent, ({ sMSMessagesList }) => {\r\n setSmsMessages(sMSMessagesList);\r\n setLoading(false);\r\n });\r\n\r\n useSimpleSubscription(OnLeadsError, (err) => {\r\n console.log(err);\r\n onErrorMixinFC(err);\r\n });\r\n\r\n useSimpleSubscription(OnFetchManagerAndAgentUsersEvent, ({ usersList }) => {\r\n const categoriesClone = R.clone(filterCategories);\r\n\r\n categoriesClone.assignedTo.options = usersList.items.map((user) => ({\r\n label: `${user.firstName} ${user.lastName}`,\r\n value: user.id,\r\n }));\r\n\r\n setFilterCategories(categoriesClone);\r\n });\r\n\r\n useSimpleSubscription(OnFetchManagerAndAgentUsersError, () => {\r\n toast.error('Users Managment', 'There was an error fetching the users, please try again.');\r\n });\r\n\r\n const filterHandler = useCallback(\r\n (identifier, value) => {\r\n //console.log('filterHandlre called');\r\n const newFilter = { ...filter };\r\n newFilter[identifier] = value;\r\n if (identifier === 'dateStart') {\r\n if (newFilter.dateStart > newFilter.dateEnd) {\r\n newFilter.dateEnd = '';\r\n }\r\n }\r\n //console.log('newFilter', newFilter);\r\n setFilter(newFilter);\r\n },\r\n [filter],\r\n );\r\n\r\n const confirmFilterHandler = useCallback(() => {\r\n setShowFilter(false);\r\n setCurrentFilter(filter);\r\n setLoading(true);\r\n }, [filter]);\r\n\r\n const sortHandler = (value) => {\r\n const newState = R.clone(currentFilter);\r\n newState.sort = value;\r\n setCurrentFilter(newState);\r\n setLoading(true);\r\n };\r\n\r\n const filterClickHandler = () => {\r\n setShowFilter(true);\r\n };\r\n\r\n const handlePageChanger = (page) => {\r\n console.log(page);\r\n setPage(page);\r\n setLoading(true);\r\n };\r\n\r\n const getSmsMessages = () => {\r\n fetchSMSMessages(page, { ...currentFilter, agency: agency.id });\r\n };\r\n\r\n const getAgents = () => {\r\n fetchManagerAndAgents(agency.id);\r\n };\r\n\r\n useEffect(() => {\r\n if (loading) {\r\n getSmsMessages();\r\n getAgents();\r\n }\r\n // eslint-disable-next-line\r\n }, [loading]);\r\n\r\n const columnsSize = 'minmax(150px, 250px) minmax(150px, 250px) 150px minmax(150px, 1fr) 150px';\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n setFilter(currentFilter);\r\n }}\r\n />\r\n {\r\n sortHandler(value);\r\n }}\r\n value={currentFilter.sort}\r\n options={SMS_SORT_OPTIONS}\r\n placeholder=\"Sort SMS Logs by Date (Newest/Oldest)\"\r\n />\r\n \r\n \r\n \r\n \r\n \r\n From\r\n To\r\n Type\r\n Text\r\n Date\r\n \r\n \r\n {(smsMessage) => }\r\n \r\n \r\n \r\n {\r\n handlePageChanger(page);\r\n }}\r\n defaultPage={1}\r\n total={smsMessages.count}\r\n page={page}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default SmsLogs;\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { Table, Paper, Dialog, Pagination } from '@8base/boost';\r\nimport { useSubscription as useSimpleSubscription } from '@cobuildlab/react-simple-state';\r\nimport { fetchPhoneCalls } from '../../phone-calls/phone-calls-actions';\r\nimport {\r\n FILTER_DATA,\r\n FILTER_CATEGORIES_OUTBOUND,\r\n SORT_OPTIONS,\r\n} from '../../phone-calls/phone-calls-model';\r\nimport { fetchManagerAndAgents } from '../../users/user-actions';\r\nimport { ItemFilter } from 'shared/components';\r\nimport FormValues from '../../../shared/components/forms/FormValues';\r\nimport { onErrorMixinFC } from 'shared/mixins';\r\nimport { DateBox } from 'shared/components';\r\nimport { useAgency } from 'shared/hooks/useAgency';\r\nimport LogFilter from '../email-logs/components/LogFilter';\r\nimport styled from 'styled-components';\r\nimport * as toast from 'shared/components/toast/Toast';\r\nimport * as R from 'ramda';\r\nimport { IconInfo } from '../../../shared/components/ui/Icons';\r\nimport { getPhoneNumberStr } from '../../my-account/phone-numbers/phone-numbers-utils';\r\nimport { formatPhoneNumber } from '../../phone-calls/phone-calls-utils';\r\nimport moment from 'moment';\r\nimport {\r\n OnFetchOutboundCallsError,\r\n OnFetchOutboundCallsEvent,\r\n} from 'modules/phone-calls/phone-calls-events';\r\nimport {\r\n OnFetchManagerAndAgentUsersError,\r\n OnFetchManagerAndAgentUsersEvent,\r\n} from 'modules/users/user-events';\r\n\r\nconst TableHeader = styled(Table.Header)``;\r\n\r\nconst TableBody = styled(Table.Body)``;\r\n\r\nconst TableBodyRow = styled(Table.BodyRow)``;\r\n\r\nconst CardHeader = styled.div`\r\n display: grid;\r\n grid-template-columns: repeat(2, 1fr);\r\n height: 64px;\r\n border-bottom: 1px solid #e8eff5;\r\n padding: 0 24px;\r\n position: relative;\r\n`;\r\n\r\nconst HeaderLeftSide = styled.div`\r\n display: flex;\r\n justify-content: flex-start;\r\n align-items: center;\r\n`;\r\n\r\nconst HeaderRightSide = styled.div`\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n > div {\r\n margin-left: 15px;\r\n max-width: 200px;\r\n }\r\n`;\r\n\r\nconst CardBody = styled.div`\r\n overflow: auto;\r\n padding: 0;\r\n`;\r\n\r\nconst PaginationContainer = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n font-size: 1.2rem;\r\n padding: 0 1rem;\r\n\r\n & > div > div > *::before {\r\n background-color: var(--color-primary);\r\n transition: all 0.2s;\r\n }\r\n\r\n & > div > span {\r\n display: inline-block;\r\n padding: 0.5rem 1.5rem;\r\n border: solid 1px #d0d7dd;\r\n border-radius: 5px;\r\n }\r\n`;\r\n\r\nconst columnsSize =\r\n 'minmax(150px, 1fr) minmax(150px, 1fr) minmax(150px, 1fr) minmax(150px, 1fr) minmax(150px, 1fr) 150px';\r\n\r\n/**\r\n * Component to fetch the Logs of the Lead SMS Messages\r\n *\r\n * @returns {React.Component} Return the Component.\r\n */\r\n\r\nconst PhoneCallsLogs = () => {\r\n const agency = useAgency();\r\n\r\n const [phoneCalls, setPhoneCalls] = useState([]);\r\n const [page, setPage] = useState(1);\r\n const [filter, setFilter] = useState(R.clone(FILTER_DATA));\r\n const [currentFilter, setCurrentFilter] = useState(R.clone(FILTER_DATA));\r\n const [showFilter, setShowFilter] = useState(false);\r\n const [filterCategories, setFilterCategories] = useState(R.clone(FILTER_CATEGORIES_OUTBOUND));\r\n const [loading, setLoading] = useState(true);\r\n const [disposition, setDisposition] = useState({ open: false, data: {} });\r\n\r\n useSimpleSubscription(OnFetchOutboundCallsEvent, ({ phoneCallsList }) => {\r\n setPhoneCalls(phoneCallsList);\r\n setLoading(false);\r\n });\r\n\r\n useSimpleSubscription(OnFetchOutboundCallsError, (err) => {\r\n onErrorMixinFC(err);\r\n });\r\n\r\n useSimpleSubscription(OnFetchManagerAndAgentUsersEvent, ({ usersList }) => {\r\n const categoriesClone = R.clone(filterCategories);\r\n const defaultOption = {\r\n label: `None`,\r\n value: '',\r\n };\r\n categoriesClone.assignedTo.options = usersList.items.map((user) => ({\r\n label: `${user.firstName} ${user.lastName}`,\r\n value: user.id,\r\n }));\r\n categoriesClone.assignedTo.options.unshift(defaultOption);\r\n setFilterCategories(categoriesClone);\r\n });\r\n\r\n useSimpleSubscription(OnFetchManagerAndAgentUsersError, () => {\r\n toast.error('Users Managment', 'There was an error fetching the users, please try again.');\r\n });\r\n\r\n const filterHandler = useCallback(\r\n (identifier, value) => {\r\n const newFilter = { ...filter };\r\n newFilter[identifier] = value;\r\n if (identifier === 'dateStart') {\r\n if (newFilter.dateStart > newFilter.dateEnd) {\r\n newFilter.dateEnd = '';\r\n }\r\n }\r\n setFilter(newFilter);\r\n },\r\n [filter],\r\n );\r\n\r\n const onDispositionClick = useCallback((data) => {\r\n setDisposition((state) => ({\r\n ...state,\r\n data: {\r\n carrier: data.carrier,\r\n currentPremium: data.currentPremium,\r\n quotedPremium: data.quotedPremium,\r\n status: data?.status?.name,\r\n expirationDate: data?.expirationDate\r\n ? moment(data?.expirationDate).format('MM/DD/YYYY')\r\n : '',\r\n insurance: data?.insurance,\r\n notes: data.notes,\r\n ifsScore: '',\r\n createdAt: moment(data.createdAt).format('MM/DD/YYYY'),\r\n createdBy: `${data.createdBy.firstName} ${data.createdBy.lastName} (${data.createdBy.email})`,\r\n },\r\n open: true,\r\n }));\r\n }, []);\r\n\r\n const confirmFilterHandler = useCallback(() => {\r\n setShowFilter(false);\r\n setCurrentFilter(filter);\r\n setLoading(true);\r\n }, [filter]);\r\n\r\n const sortHandler = (value) => {\r\n const newState = R.clone(currentFilter);\r\n newState.sort = value;\r\n setCurrentFilter(newState);\r\n setLoading(true);\r\n };\r\n\r\n const filterClickHandler = () => {\r\n setShowFilter(true);\r\n };\r\n\r\n const handlePageChanger = (page) => {\r\n setPage(page);\r\n setLoading(true);\r\n };\r\n\r\n const getSmsMessages = () => {\r\n fetchPhoneCalls(page, { ...currentFilter, agency: agency.id });\r\n };\r\n\r\n const getAgents = () => {\r\n fetchManagerAndAgents(agency.id);\r\n };\r\n\r\n useEffect(() => {\r\n if (loading) {\r\n getSmsMessages();\r\n getAgents();\r\n }\r\n // eslint-disable-next-line\r\n }, [loading]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n setFilter(currentFilter);\r\n }}\r\n />\r\n {\r\n sortHandler(value);\r\n }}\r\n value={currentFilter.sort}\r\n options={SORT_OPTIONS}\r\n placeholder=\"Sort Call Logs by Date (Newest/Oldest)\"\r\n />\r\n \r\n \r\n \r\n \r\n \r\n Leads\r\n From\r\n To\r\n Agents\r\n Dates\r\n Disposition\r\n \r\n \r\n {(phoneCall) => (\r\n \r\n \r\n {phoneCall.lead\r\n ? `${phoneCall.lead.firstName} ${phoneCall.lead.lastName}`\r\n : 'Without Lead'}\r\n \r\n \r\n {phoneCall.from && formatPhoneNumber(getPhoneNumberStr(phoneCall.from))}\r\n \r\n {phoneCall.to}\r\n \r\n {phoneCall.createdBy.firstName} {phoneCall.createdBy.lastName}\r\n \r\n \r\n \r\n \r\n \r\n {phoneCall.phoneCallDispositionRelation && (\r\n onDispositionClick(phoneCall.phoneCallDispositionRelation)}\r\n />\r\n )}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n {\r\n handlePageChanger(page);\r\n }}\r\n defaultPage={1}\r\n total={phoneCalls.count}\r\n page={page}\r\n />\r\n \r\n \r\n \r\n \r\n {disposition.open && (\r\n \r\n setDisposition((state) => ({ ...state, open: false, data: {} }))}\r\n />\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst rows = [\r\n [\r\n {\r\n key: 'carrier',\r\n label: 'Carrier',\r\n type: 'text',\r\n },\r\n {\r\n key: 'currentPremium',\r\n label: 'Current Premium',\r\n type: 'text',\r\n },\r\n {\r\n key: 'quotedPremium',\r\n label: 'Quoted Premium',\r\n type: 'text',\r\n },\r\n {\r\n key: 'status',\r\n label: 'Status',\r\n type: 'text',\r\n },\r\n ],\r\n [\r\n {\r\n key: 'insurance',\r\n label: 'Insurance',\r\n type: 'text',\r\n },\r\n {\r\n key: 'expirationDate',\r\n label: 'Expiration Date',\r\n type: 'text',\r\n },\r\n ],\r\n [\r\n {\r\n key: 'score',\r\n label: 'Score',\r\n type: 'text',\r\n },\r\n {\r\n key: 'createdAt',\r\n label: 'Dispositon created at',\r\n type: 'text',\r\n },\r\n ],\r\n [\r\n {\r\n key: 'createdBy',\r\n label: 'Created By',\r\n type: 'text',\r\n },\r\n ],\r\n];\r\n\r\nexport default PhoneCallsLogs;\r\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Row, Dropdown, Text, Grid, DateInputField } from '@8base/boost';\nimport { FilterButtonWithFocus as Button, Padding } from '../../../../shared/components';\nimport * as Toast from '../../../../shared/components/toast/Toast';\nimport * as moment from 'moment';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst Container = styled(Padding)`\n border-bottom: solid 1px #d0d7dd;\n`;\n\n/**\n * Agents info filter component\n *\n * @param {object} props - The component's prop object\n * @param {Function} props.onFilter - The function to submit changes\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentsInfoFilter({ onFilter }) {\n const [isOpen, setOpen] = useState(false);\n const [form, setForm] = useState({});\n\n useEffect(() => {\n setForm((state) => ({\n ...state,\n from: moment()\n .startOf('month')\n .format('YYYY-MM-DD'),\n to: moment()\n .endOf('month')\n .format('YYYY-MM-DD'),\n }));\n }, []);\n\n const handleToggle = useCallback(() => {\n setOpen((state) => !state);\n }, []);\n\n const handleDropdownClose = useCallback(() => {\n setOpen(false);\n }, []);\n\n const handleChange = useCallback((name, value) => {\n setForm((state) => ({\n ...state,\n [name]: value,\n }));\n }, []);\n\n const handleApply = useCallback(() => {\n if (!form.from || !form.to) return Toast.error('Both dates are needed');\n\n onFilter(form);\n\n setOpen(false);\n }, [form, onFilter]);\n\n const handleCancel = useCallback(() => {\n setOpen(false);\n }, []);\n\n return (\n \n \n \n \n \n \n \n \n handleChange('from', value),\n }}\n />\n \n \n handleChange('to', value),\n }}\n />\n \n \n \n \n \n \n Apply Filters\n \n \n Cancel\n \n \n \n \n \n );\n}\n\nAgentsInfoFilter.propTypes = {\n onFilter: PropTypes.func.isRequired,\n};\n\nexport default AgentsInfoFilter;\n","import React, { useCallback, useState } from 'react';\nimport { Row, Grid } from '@8base/boost';\nimport AgentsInfoFilter from './AgentsInfoFilter';\nimport { SearchInput } from '../../../../shared/components';\nimport PropTypes from 'prop-types';\n\n/**\n * Agents info header component\n *\n * @param {object} props - The props object\n * @param {Function} props.onFilter - The set filter function\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentsInfoHeader({ onFilter }) {\n const [search, setSearch] = useState('');\n\n const handleFilter = useCallback(\n (filter) => {\n const from = `${filter.from}T00:00:00Z`;\n const to = `${filter.to}T23:59:59Z`;\n\n onFilter((state) => ({\n ...state,\n from,\n to,\n }));\n },\n [onFilter],\n );\n\n const handleSearch = useCallback(() => {\n onFilter((state) => ({\n ...state,\n search,\n }));\n }, [search, onFilter]);\n\n return (\n \n \n \n \n \n \n \n \n \n \n );\n}\n\nAgentsInfoHeader.propTypes = {\n onFilter: PropTypes.func.isRequired,\n};\n\nexport default AgentsInfoHeader;\n","import React, { useEffect } from 'react';\nimport { Table, Loader, Row } from '@8base/boost';\nimport { usePromise } from '@cobuildlab/hooks-utils';\nimport { fetchUserInfoInAgency } from '../../../users/user-actions';\nimport { onErrorMixinFC } from '../../../../shared/mixins';\nimport PropTypes from 'prop-types';\n\n/**\n * Agents info row component\n *\n * @param {object} props - The component's prop object\n * @param {object} props.agent - The user object\n * @param {string} props.columns - The columns layout\n * @param {object} props.filters - The filters object\n * @param {string} props.agencyId - The agency id\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentsInfoRow({ agent, columns, filters, agencyId }) {\n const [data, loading, { error }] = usePromise(\n () => fetchUserInfoInAgency(agent.id, agencyId, filters.from, filters.to),\n { initialState: null },\n [agent.id, agencyId, filters],\n );\n\n useEffect(() => {\n if (error) {\n onErrorMixinFC(error);\n }\n }, [error]);\n\n const sold = loading\n ? null\n : data && !error\n ? new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n }).format(data.leadsList.groups[0].amount)\n : 0;\n\n const time = loading ? null : data && !error ? data.phoneCallsList.groups[0].duration : 0;\n const sms = loading ? null : data && !error ? data.sMSMessagesList.count : 0;\n const createdTask = loading ? null : data && !error ? data.leadTasksList.count : 0;\n const updatedTask = loading ? null : data && !error ? data.leadHistoriesList.groups[0].count : 0;\n\n return (\n \n \n {agent.firstName} {agent.lastName}\n \n {!loading && `${sold !== null ? sold : 0}`}\n {!loading && `${time !== null ? time : 0} seg`}\n \n {loading ? (\n \n \n \n ) : (\n sms\n )}\n \n {!loading && `${createdTask}`}\n {!loading && `${updatedTask !== null ? updatedTask : 0}`}\n \n );\n}\n\nAgentsInfoRow.propTypes = {\n agent: PropTypes.shape({\n id: PropTypes.string.isRequired,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n }).isRequired,\n columns: PropTypes.string.isRequired,\n filters: PropTypes.shape({\n from: PropTypes.string.isRequired,\n to: PropTypes.string.isRequired,\n }).isRequired,\n agencyId: PropTypes.string.isRequired,\n};\n\nexport default AgentsInfoRow;\n","import React, { useState } from 'react';\nimport { Card, Table as BoostTable, Row, Pagination } from '@8base/boost';\nimport AgentsInfoHeader from './components/AgentsInfoHeader';\nimport AgentsInfoRow from './components/AgentsInfoRow';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport { useUsersInAgency } from '../../users/users-hooks';\nimport styled from 'styled-components';\nimport * as moment from 'moment';\n\nconst Table = styled(BoostTable)`\n & div[role='loader'] > div[role='loader'] div {\n border-color: #3db4aa !important;\n }\n`;\n\nconst Body = styled(BoostTable.Body)`\n min-height: 400px;\n`;\n\nconst columns = 'minmax(200px, 1fr) 150px 150px 150px 150px 150px';\n\n/**\n * Agency Info Component\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentInfo() {\n const [page, setPage] = useState(1);\n const [filters, setFilters] = useState({\n from: moment()\n .startOf('month')\n .toISOString(),\n to: moment()\n .endOf('month')\n .toISOString(),\n search: '',\n });\n const agency = useAgency();\n const { items: users, loading, count } = useUsersInAgency(agency.id, page, filters.search);\n\n return (\n \n \n \n \n \n \n \n Agent\n Sold Amount\n Time on Calls\n SMS Sent\n Task Created\n Task Completed\n \n \n {(agent) => (\n \n )}\n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default AgentInfo;\n","import moment from 'moment';\n\n/**\n * @param {('now'|'day-start'|'morning'|'afternoon')} key - Key\n * @returns {string} Date string.\n */\nexport function getDates(key) {\n const dateNow = moment();\n if (key === 'now') {\n return dateNow.toISOString();\n } else if (key === 'day-start') {\n const dateLimit = moment()\n .startOf('day')\n .toISOString();\n\n return dateLimit;\n } else if (key === 'morning') {\n const dateLimit = moment('11:00 am', 'HH:mm a').toISOString();\n\n return dateLimit;\n } else if (key === 'afternoon') {\n const dateLimit = moment('6:00 pm', 'HH:mm a').toISOString();\n\n return dateLimit;\n }\n}\n","import React, { useState, useCallback } from 'react';\nimport {\n Row,\n Dropdown,\n Button as BoostButton,\n Text,\n Grid,\n DateInputField,\n Radio,\n} from '@8base/boost';\nimport { IconFilterGreen, IconFilterGrey } from '../../../../shared/components/ui/Icons';\nimport { Padding } from '../../../../shared/components';\nimport * as Toast from '../../../../shared/components/toast/Toast';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { getDates } from '../agent-calls-utils';\n\nconst Button = styled(BoostButton)`\n padding: 0 10px !important;\n ${(props) => props.isOpen && 'border-color: #3db4aa !important;'}\n\n & > *:not(:last-child) {\n margin-right: 4px !important;\n }\n`;\n\nconst Container = styled(Padding)`\n border-bottom: solid 1px #d0d7dd;\n`;\n\n/**\n * Agents info filter component\n *\n * @param {object} props - The component's prop object\n * @param {Function} props.onFilter - The function to submit changes\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentsInfoFilter({ onFilter }) {\n const [isOpen, setOpen] = useState(false);\n const [categories, setCategories] = useState(1);\n const [form, setForm] = useState(() => ({\n from: getDates('day-start'),\n to: getDates('now'),\n }));\n\n const onHandleCategoryChange = (value) => {\n const form = {\n to: getDates('now'),\n from: getDates('day-start'),\n };\n\n if (value === 1) {\n form.to = getDates('morning');\n } else if (value === 2) {\n form.to = getDates('afternoon');\n }\n setForm((state) => ({\n ...state,\n ...form,\n }));\n setCategories(value);\n };\n const handleToggle = useCallback(() => {\n setOpen((state) => !state);\n }, []);\n\n const handleDropdownClose = useCallback(() => {\n setOpen(false);\n }, []);\n\n const handleChange = useCallback((name, value) => {\n setForm((state) => ({\n ...state,\n [name]: value,\n }));\n }, []);\n\n const handleApply = useCallback(() => {\n if (!form.from || !form.to) return Toast.error('Both dates are needed');\n\n onFilter(form);\n\n setOpen(false);\n }, [form, onFilter]);\n\n const handleCancel = useCallback(() => {\n setOpen(false);\n }, []);\n\n const icon = isOpen ? : ;\n\n return (\n \n \n \n {icon} Filters\n \n \n \n \n \n \n \n \n \n \n \n \n {categories === 3 && (\n <>\n \n handleChange('from', value),\n }}\n />\n \n \n handleChange('to', value),\n }}\n />\n \n >\n )}\n \n \n \n \n \n Apply Filters\n \n \n Cancel\n \n \n \n \n \n );\n}\n\nAgentsInfoFilter.propTypes = {\n onFilter: PropTypes.func.isRequired,\n};\n\nexport default AgentsInfoFilter;\n","import React, { useCallback, useState } from 'react';\nimport { Row, Grid } from '@8base/boost';\nimport AgentsInfoFilter from './AgentsCallsFilter';\nimport { SearchInput } from '../../../../shared/components';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\n\n/**\n * Agents info header component\n *\n * @param {object} props - The props object\n * @param {Function} props.onFilter - The set filter function\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentsCallsHeader({ onFilter }) {\n const [search, setSearch] = useState('');\n\n const handleFilter = useCallback(\n (filter) => {\n const from = moment(filter.from).toISOString();\n const to = moment(filter.to).toISOString();\n\n onFilter((state) => ({\n ...state,\n from,\n to,\n }));\n },\n [onFilter],\n );\n\n const handleSearch = useCallback(() => {\n onFilter((state) => ({\n ...state,\n search,\n }));\n }, [search, onFilter]);\n\n return (\n \n \n \n \n \n \n \n \n \n \n );\n}\n\nAgentsCallsHeader.propTypes = {\n onFilter: PropTypes.func.isRequired,\n};\n\nexport default AgentsCallsHeader;\n","import moment from 'moment';\n/**\n * @param {number|string}time - Time to add cero.\n * @returns {string} - string with left cero.\n */\nexport function addLeftCero(time) {\n return `0${parseInt(time)}`.slice(-2);\n}\n/**\n * @param {number} duration - Duaration as seconds by default\n * @param {string} unit - To define the unit in which the duration has to be calculated.\n * @returns {string} - Formated duration string\n */\nexport function formatDuration(duration, unit = 'seconds') {\n const momentDuration = moment.duration(duration, unit);\n\n const hours = addLeftCero(momentDuration.hours());\n const minutes = addLeftCero(momentDuration.minutes());\n const seconds = addLeftCero(momentDuration.seconds());\n\n return `${hours}:${minutes}:${seconds}`;\n}\n","import React from 'react';\nimport { Table } from '@8base/boost';\nimport PropTypes from 'prop-types';\nimport StyledBadge from '../../../../shared/components/ui/StyledBadge';\nimport { AGENTS_CALL_PERFORMANCE_STATUSES as STATUSES } from '@cobuildlab/lead-volt-share';\nimport { formatDuration } from '../../../../shared/utils/moment-utils';\n\n/**\n * Agents info row component\n *\n * @param {object} props - The component's prop object\n * @param {object} props.agent - The user object\n * @param {string} props.columns - The columns layout\n * @param {object} props.filters - The filters object\n * @param {string} props.agencyId - The agency id\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentsInfoRow({ agent, columns }) {\n let priority = 1;\n if (agent.status === STATUSES.BAD) {\n priority = 4;\n } else if (agent.status === STATUSES.REGULAR) {\n priority = 2;\n }\n const totalTalkTime = formatDuration(Number(agent.totalTalkTime));\n const talkTimeAverage = `${formatDuration(Number(agent.talkTimeAverage))}/h`;\n const callsPerHours = Number(agent.callsPerHours).toFixed(2);\n\n return (\n \n \n \n {agent.firstName} {agent.lastName}\n \n \n {callsPerHours}\n {agent.outboundDialsCount}\n {agent.totalDialsCount}\n {agent.contacts}\n {agent.dialPerContact}\n {totalTalkTime}\n {talkTimeAverage}\n {agent.quotesPerClose}\n \n );\n}\n\nAgentsInfoRow.propTypes = {\n agent: PropTypes.shape({\n id: PropTypes.string.isRequired,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n status: PropTypes.string.isRequired,\n totalTalkTime: PropTypes.number,\n talkTimeAverage: PropTypes.number,\n outboundDialsCount: PropTypes.number,\n totalDialsCount: PropTypes.number,\n contacts: PropTypes.number,\n dialPerContact: PropTypes.number,\n callsPerHours: PropTypes.number,\n quotesPerClose: PropTypes.number,\n }).isRequired,\n columns: PropTypes.string.isRequired,\n filters: PropTypes.shape({\n from: PropTypes.string.isRequired,\n to: PropTypes.string.isRequired,\n }).isRequired,\n // agencyId: PropTypes.string.isRequired,\n};\n\nexport default AgentsInfoRow;\n","import gql from 'graphql-tag';\n\nexport const FETCH_AGENT_CALL_REPORT_QUERY = gql`\n query FetchAgentCalls(\n $agency: ID!\n $search: String\n $startDate: DateTime!\n $endDate: DateTime!\n $first: Int\n $skip: Int\n ) {\n agentsCalls(\n agency: $agency\n search: $search\n startDate: $startDate\n endDate: $endDate\n first: $first\n skip: $skip\n ) {\n items {\n firstName\n lastName\n outboundDialsCount\n totalDialsCount\n contacts\n callsPerHours\n status\n totalTalkTime\n dialPerContact\n talkTimePerHour\n talkTimeAverage\n quotesPerClose\n }\n count\n }\n }\n`;\n","import { OnApolloClient } from '../../../shared/session/session-events';\nimport { FETCH_AGENT_CALL_REPORT_QUERY } from './agent-calls-querys';\nimport { log } from '@cobuildlab/pure-logger';\n\n/**\n * @param {string} agency - Agency id\n * @param {string} search - The search param\n * @param {string} startDate - Bottom date\n * @param {string} endDate - Top date\n * @param {number} page - page number\n *\n * @returns {{items:[],count:number}} - Data\n */\nexport async function fetchAgentCallsReport(agency, search, startDate, endDate, page = 1) {\n const client = OnApolloClient.get();\n\n const first = 10;\n const skip = (page - 1) * first;\n const variables = {\n agency,\n search,\n startDate,\n endDate,\n first,\n skip,\n };\n\n const response = await client.query({\n query: FETCH_AGENT_CALL_REPORT_QUERY,\n fetchPolicy: 'network-only',\n variables,\n });\n\n log('fetchAgentCallsReport', response.data);\n\n return response.data.agentsCalls;\n}\n","import React, { useState } from 'react';\nimport { Card, Table as BoostTable, Row, Pagination } from '@8base/boost';\nimport AgentsCallsHeader from './components/AgentsCallsHeader';\nimport AgentsInfoRow from './components/AgentsCallsRow';\nimport { useAgency } from '../../../shared/hooks/useAgency';\nimport styled from 'styled-components';\nimport { useAgentCallsReport } from './agent-calls-hooks';\nimport { getDates } from './agent-calls-utils';\n\nconst Table = styled(BoostTable)`\n & div[role='loader'] > div[role='loader'] div {\n border-color: #3db4aa !important;\n }\n`;\n\nconst Body = styled(BoostTable.Body)`\n min-height: 400px;\n`;\n\nconst columns = 'minmax(200px, 1fr) 140px 140px 140px 140px 140px 140px 140px 140px';\n\n/**\n * Agency Info Component\n *\n * @returns {React.FC} The component to render\n */\nfunction AgentCalls() {\n const [page, setPage] = useState(1);\n const [filters, setFilters] = useState(() => ({\n from: getDates('day-start'),\n to: getDates('now'),\n search: '',\n }));\n const agency = useAgency();\n\n const [users, count, loading] = useAgentCallsReport(agency.id, page, filters);\n\n return (\n \n \n \n \n \n \n \n Agent\n Dials/hours\n Outboud dials\n Total dials\n Contacts\n Dials/contacts\n TalkTime\n TalkTime(%)\n Quotes/Close\n \n \n {(agent) => (\n \n )}\n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default AgentCalls;\n","import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';\nexport type Maybe = T;\nexport type Exact = { [K in keyof T]: T[K] };\nexport type MakeOptional = Omit & { [SubKey in K]?: Maybe };\nexport type MakeMaybe = Omit & { [SubKey in K]: Maybe };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n /** A date-time string at UTC, such as `2007-12-25T16:15:30Z`, compliant with the `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */\n DateTime: any;\n /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */\n JSON: any;\n /** The `BigInt` scalar type represents whole numeric values. */\n BigInt: any;\n /** A date string, such as `2007-12-25`, compliant with the `full-date` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */\n Date: any;\n /** A time string at UTC, such as `16:15:30Z`, compliant with the `full-time` format outlined in section 5.6 of the RFC 3339profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */\n Time: any;\n};\nexport type Admin = {\n __typename?: 'Admin';\n id: Maybe;\n createdAt: Maybe;\n updatedAt: Maybe;\n deletedAt: Maybe;\n createdBy: Maybe;\n user: Maybe;\n company: Maybe;\n _description: Maybe;\n};\n\nexport type Admin_PermissionFilter = {\n id?: Maybe;\n createdAt?: Maybe;\n updatedAt?: Maybe;\n deletedAt?: Maybe;\n _fullText?: Maybe;\n createdBy?: Maybe;\n user?: Maybe;\n company?: Maybe;\n AND?: Maybe>;\n OR?: Maybe>;\n};\n\nexport type Admin_PermissionRelationFilter = {\n some?: Maybe;\n every?: Maybe;\n none?: Maybe;\n};\n\n/** Admin relation input */\nexport type AdminCompanyManyRelationInput = {\n connect?: Maybe;\n};\n\n/** Company create input from adminCompanyRelation */\nexport type AdminCompanyRelation_CompanyCreateInput = {\n name: Scalars['String'];\n taxId?: Maybe;\n adminCompanyRelation?: Maybe;\n agencyCompanyRelation?: Maybe;\n companyInvitationCompanyRelation?: Maybe;\n paymentMethodCompanyRelation?: Maybe;\n subscriptions?: Maybe;\n /** DEPRECATED */\n cardExpireDate?: Maybe;\n /** DEPRECATED */\n last4?: Maybe;\n /** DEPRECATED */\n addressLine1?: Maybe;\n /** DEPRECATED */\n addressLine2?: Maybe;\n /** DEPRECATED */\n city?: Maybe;\n /** DEPRECATED */\n state?: Maybe;\n /** DEPRECATED */\n country?: Maybe;\n companyInvoices?: Maybe;\n companyPaymentMethods?: Maybe;\n status?: Maybe;\n};\n\n/** Company update input from adminCompanyRelation */\nexport type AdminCompanyRelation_CompanyUpdateInput = {\n name?: Maybe;\n taxId?: Maybe;\n adminCompanyRelation?: Maybe;\n agencyCompanyRelation?: Maybe;\n companyInvitationCompanyRelation?: Maybe<\n CompanyCompanyInvitationCompanyRelationUpdateRelationInput\n >;\n paymentMethodCompanyRelation?: Maybe;\n subscriptions?: Maybe;\n /** DEPRECATED */\n cardExpireDate?: Maybe;\n /** DEPRECATED */\n last4?: Maybe;\n /** DEPRECATED */\n addressLine1?: Maybe;\n /** DEPRECATED */\n addressLine2?: Maybe;\n /** DEPRECATED */\n city?: Maybe;\n /** DEPRECATED */\n state?: Maybe;\n /** DEPRECATED */\n country?: Maybe;\n companyInvoices?: Maybe;\n companyPaymentMethods?: Maybe;\n status?: Maybe;\n};\n\n/** Admin relation input */\nexport type AdminCompanyRelationInput = {\n connect?: Maybe;\n create?: Maybe;\n};\n\n/** Admin relation input */\nexport type AdminCompanyUpdateRelationInput = {\n connect?: Maybe;\n disconnect?: Maybe;\n reconnect?: Maybe;\n create?: Maybe;\n update?: Maybe;\n};\n\n/** Admin create input */\nexport type AdminCreateInput = {\n user: AdminUserRelationInput;\n company: AdminCompanyRelationInput;\n};\n\n/** Admin create many input */\nexport type AdminCreateManyInput = {\n user: AdminUserManyRelationInput;\n company: AdminCompanyManyRelationInput;\n};\n\n/** Admin delete input */\nexport type AdminDeleteInput = {\n id?: Maybe;\n force?: Maybe;\n};\n\n/** AdminFieldsPermissions create input */\nexport type AdminFieldsPermissions = {\n createdAt?: Maybe;\n updatedAt?: Maybe;\n};\n\nexport type AdminFilter = {\n id?: Maybe;\n createdAt?: Maybe;\n updatedAt?: Maybe;\n deletedAt?: Maybe;\n _fullText?: Maybe;\n createdBy?: Maybe;\n user?: Maybe;\n company?: Maybe;\n AND?: Maybe>;\n OR?: Maybe>;\n};\n\nexport type AdminGroupBy = {\n query: AdminGroupByQuery;\n sort?: Maybe>;\n having?: Maybe;\n first?: Maybe;\n last?: Maybe;\n skip?: Maybe;\n};\n\nexport type AdminGroupByQuery = {\n id?: Maybe>;\n createdAt?: Maybe>;\n updatedAt?: Maybe>;\n createdBy?: Maybe;\n user?: Maybe
{file.filename}
ID
{lead.ifsScore}
{lead.campaign ? lead.campaign.name : ''}
default
\n {dato}\n